diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index be75de8..028d870 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,6 +7,25 @@ on: - main jobs: + reject-promptless-linux-drop-sudo: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Run promptless drop-sudo invocation + id: promptless + continue-on-error: true + uses: ./ + with: + safety-strategy: drop-sudo + + - name: Verify invocation was rejected + if: ${{ always() }} + env: + PROMPTLESS_OUTCOME: ${{ steps.promptless.outcome }} + run: test "$PROMPTLESS_OUTCOME" = failure + verify: runs-on: ubuntu-latest steps: @@ -33,6 +52,9 @@ jobs: - name: Test run: pnpm test + - name: Test privileged Linux identity transition + run: pnpm run test:privileged + - name: Build bundles run: pnpm run build diff --git a/CHANGELOG.md b/CHANGELOG.md index b26254b..1bc4216 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # codex-action Changelog +## Unreleased + +- Harden Linux `drop-sudo` by launching Codex behind a trusted gate under a distinct, locked system account with scoped filesystem ACLs, no supplementary groups or capabilities, and `no_new_privs` enabled. +- **Breaking (Linux):** `drop-sudo` now requires a prompt and supports one protected invocation per fresh job; setup-only use and later direct `codex` invocations cannot preserve the clean execution identity. + ## [v1.11](https://github.com/openai/codex-action/tree/v1.11) (2026-07-04) - [#116](https://github.com/openai/codex-action/pull/116) keep the permission profile helper backward compatible diff --git a/README.md b/README.md index 8f7c6c2..ec960ca 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ The `safety-strategy` input determines how much access Codex receives on the run See [Protecting your `OPENAI_API_KEY`](./docs/security.md#protecting-your-openai_api_key) on the Security page for important details on this topic. -- **`drop-sudo` (default)** — On Linux and macOS runners, the action revokes the default user’s `sudo` membership before invoking Codex. Codex then runs as that user without superuser privileges. This change lasts for the rest of the job, so subsequent steps cannot rely on `sudo`. This is usually the safest choice on GitHub-hosted runners. +- **`drop-sudo` (default)** — On Linux and macOS runners, the action revokes the default user’s `sudo` authorization before releasing the prompt to Codex. On Linux, it first creates a unique locked system account, grants that account ACL access to the checkout, Codex home, schema, and output, and launches Codex with that distinct UID, one primary group, no process capabilities, and `no_new_privs`. A trusted gate prevents Codex or MCP startup from running until runner sudo has been revoked. The distinct UID also prevents Codex from signaling or attaching to runner-owned processes that retain groups such as `docker`. On macOS, Codex still runs as the default user; sudo revocation does not clear that live process's other supplementary groups. The sudo change is a host-level mutation, so subsequent steps and later jobs on the same persistent host cannot rely on that account's sudo authorization. Use this strategy on disposable runners; the distinct-identity hardening described here is currently Linux-only. - **`unprivileged-user`** — Runs Codex as the user provided via `codex-user`. Use this if you manage your own runner with a pre-created unprivileged account. Ensure the user can read the repository checkout and any files Codex needs. See [`unprivileged-user.yml`](./examples/unprivileged-user.yml) for an example of how to configure such an account on `ubuntu-latest`. - **`read-only`** — Executes Codex in a read-only sandbox. Codex can view files but cannot mutate the filesystem or access the network directly. The OpenAI API key still flows through the proxy, so Codex could read it if it can reach process memory. - **`unsafe`** — No privilege reduction. Codex runs as the default `runner` user (which typically has `sudo`). Only use this when you fully trust the prompt. On Windows runners this is the only supported choice and the action will fail if another option is provided. @@ -168,8 +168,8 @@ See [Protecting your `OPENAI_API_KEY`](./docs/security.md#protecting-your-openai ### Operating system support - **Windows**: GitHub-hosted Windows runners lack a supported sandbox. Set `safety-strategy: unsafe`. The action validates this and exits early otherwise. -- **Linux/macOS**: All options for `safety-strategy` are supported. Again, if you pick `drop-sudo`, remember that later steps in your `job` that rely on `sudo` will fail. If you do need to run code that requires `sudo` after `openai/codex-action` has run, one option is to pipe the output of `openai/codex-action` to a fresh `job` on a new host and to continue your workflow from there. -- **GitHub-hosted Linux runners**: The action enables unprivileged user namespaces during setup and clears Ubuntu's AppArmor gate when present. This avoids the `bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted` failure seen on newer hosted images, including workflows that use the action once to bootstrap Codex and then call `codex` in later steps. Self-hosted Linux runners still need equivalent kernel support configured ahead of time. +- **Linux/macOS**: All options for `safety-strategy` are supported on a non-root, sudo-capable runner account. Linux container jobs that start the action as UID 0 cannot use `drop-sudo`. If you pick `drop-sudo`, later steps that rely on `sudo` will fail. Continue privileged work only in a fresh job on a new disposable host. +- **GitHub-hosted Linux runners**: The action enables unprivileged user namespaces during setup and clears Ubuntu's AppArmor gate when present. This avoids the `bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted` failure seen on newer hosted images. Linux `drop-sudo` relies on the standard Ubuntu locations for tools such as `/usr/bin/setpriv`, `/usr/bin/setfacl`, `/usr/bin/find`, and `/usr/sbin/useradd`; these are present on GitHub-hosted Ubuntu runners. Checkout and Codex home roots and the output file must be owned by the runner account. A schema outside those roots must either be runner-owned or already world-readable, and non-runner-owned parent directories must already be world-searchable. The action rejects symbolic-link path components and does not transfer ACL access through hard-linked files. The resolved Codex executable must already be a world-readable and executable regular file beneath world-searchable directories; the global installation performed by the action satisfies this on GitHub-hosted runners. Use disposable, Ubuntu-compatible self-hosted runners with that filesystem layout, or preprovision an account and select `unprivileged-user` on another distribution or a persistent host. ## Outputs @@ -193,7 +193,7 @@ jobs: - To use a non-default Responses endpoint (for example Azure OpenAI), set `responses-api-endpoint` to the provider's URL while keeping `openai-api-key` populated; the proxy will still send `Authorization: Bearer ` upstream. - If you want Codex to have access to a narrow set of privileged functionality, consider running a local MCP server that can perform these actions and configure Codex to use it. - If you need more control over the CLI invocation, pass flags through `codex-args` or create a `config.toml` in `codex-home`. Prefer a [permission profile](https://developers.openai.com/codex/permissions), starting with `:workspace` for workspace editing, over legacy sandbox flags for new integrations. -- Once `openai/codex-action` is run once with `openai-api-key`, you can also call `codex` from subsequent scripts in your job. (You can omit `prompt` and `prompt-file` from the action in this case.) +- On Linux, the clean execution identity used by `drop-sudo` applies only to Codex launched by the action. The action rejects omitting both `prompt` and `prompt-file` because a direct `codex` call in a later step would inherit the runner service's original supplementary groups. Because the first protected invocation permanently removes the job user's sudo authorization, run each protected Codex invocation in a fresh job rather than invoking the action twice in one job. ## Azure diff --git a/action.yml b/action.yml index 50e3079..d14f214 100644 --- a/action.yml +++ b/action.yml @@ -73,10 +73,16 @@ inputs: Specify one of the following options (on Windows, the only supported option is `unsafe`): * `drop-sudo` (default, IRREVERSIBLE) Drop sudo privileges (if any) from - the default user before running Codex, and run Codex as that user. This - is only supported on Linux and macOS runners. This option is - irreversible: if the default user has sudo privileges, they will be - removed permanently for the duration of the job. + the default user before releasing the prompt to Codex. On Linux, Codex + runs under a separate, per-invocation system account with access to the + checkout, Codex home, and output files, but without supplementary + groups, capabilities, or permission to gain new privileges. On macOS, + Codex runs as the default user after sudo is revoked. This is only + supported on Linux and macOS runners. This option is irreversible: if + the default user has sudo privileges, its authorization is removed from + the host. Linux requires an Ubuntu-compatible tool layout, a prompt in + the same invocation, and a fresh job for every protected invocation. + Use this strategy only on disposable runners. * `unprivileged-user` Run Codex as the specified user specified by the `codex-user` option (the user must already exist). Note the caller is responsible for ensuring the specified user has the privileges it needs @@ -117,6 +123,15 @@ outputs: runs: using: "composite" steps: + - name: Validate Linux drop-sudo invocation + if: ${{ runner.os == 'Linux' && inputs['safety-strategy'] == 'drop-sudo' && inputs.prompt == '' && inputs['prompt-file'] == '' }} + shell: bash + run: | + echo "Linux drop-sudo requires prompt or prompt-file so Codex can be launched with a clean execution identity." >&2 + echo "Calling codex directly in a later step would inherit the runner's original supplementary groups." >&2 + echo "Move the Codex invocation into this action, use a fresh job for each protected invocation, or explicitly select another safety strategy." >&2 + exit 1 + - name: Validate Windows safety strategy if: ${{ runner.os == 'Windows' }} shell: bash @@ -301,29 +316,19 @@ runs: fi - name: Drop sudo privilege, if appropriate - if: ${{ inputs['safety-strategy'] == 'drop-sudo' && inputs['openai-api-key'] != '' }} + if: ${{ runner.os == 'macOS' && inputs['safety-strategy'] == 'drop-sudo' && (inputs['openai-api-key'] != '' || inputs.prompt != '' || inputs['prompt-file'] != '') }} shell: bash env: ACTION_PATH: ${{ github.action_path }} run: | - case "${RUNNER_OS}" in - Linux) - node "$ACTION_PATH/dist/main.js" drop-sudo --user runner --group sudo - ;; - macOS) - node "$ACTION_PATH/dist/main.js" drop-sudo --user runner --group admin - ;; - *) - echo "Unsupported OS for drop-sudo: ${RUNNER_OS}" >&2 - exit 1 - ;; - esac + runner_user="$(/usr/bin/id -un)" + node "$ACTION_PATH/dist/main.js" drop-sudo --user "$runner_user" --group admin - name: Verify sudo privilege removed - if: ${{ inputs['safety-strategy'] == 'drop-sudo' && inputs['openai-api-key'] != '' }} + if: ${{ runner.os == 'macOS' && inputs['safety-strategy'] == 'drop-sudo' && (inputs['openai-api-key'] != '' || inputs.prompt != '' || inputs['prompt-file'] != '') }} shell: bash run: | - if sudo -n true 2>/dev/null; then + if /usr/bin/sudo -n true 2>/dev/null; then echo "Expected sudo to be disabled, but sudo succeeded." >&2 exit 1 fi diff --git a/dist/main.js b/dist/main.js index 18d4d61..47647b7 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1193,7 +1193,7 @@ var require_command = __commonJS({ "node_modules/.pnpm/commander@14.0.1/node_modules/commander/lib/command.js"(exports2) { var EventEmitter = require("node:events").EventEmitter; var childProcess = require("node:child_process"); - var path5 = require("node:path"); + var path8 = require("node:path"); var fs5 = require("node:fs"); var process2 = require("node:process"); var { Argument: Argument2, humanReadableArgName } = require_argument(); @@ -2206,9 +2206,9 @@ Expecting one of '${allowedValues.join("', '")}'`); let launchWithNode = false; const sourceExt = [".js", ".ts", ".tsx", ".mjs", ".cjs"]; function findFile(baseDir, baseName) { - const localBin = path5.resolve(baseDir, baseName); + const localBin = path8.resolve(baseDir, baseName); if (fs5.existsSync(localBin)) return localBin; - if (sourceExt.includes(path5.extname(baseName))) return void 0; + if (sourceExt.includes(path8.extname(baseName))) return void 0; const foundExt = sourceExt.find( (ext) => fs5.existsSync(`${localBin}${ext}`) ); @@ -2226,17 +2226,17 @@ Expecting one of '${allowedValues.join("', '")}'`); } catch { resolvedScriptPath = this._scriptPath; } - executableDir = path5.resolve( - path5.dirname(resolvedScriptPath), + executableDir = path8.resolve( + path8.dirname(resolvedScriptPath), executableDir ); } if (executableDir) { let localFile = findFile(executableDir, executableFile); if (!localFile && !subcommand._executableFile && this._scriptPath) { - const legacyName = path5.basename( + const legacyName = path8.basename( this._scriptPath, - path5.extname(this._scriptPath) + path8.extname(this._scriptPath) ); if (legacyName !== this._name) { localFile = findFile( @@ -2247,7 +2247,7 @@ Expecting one of '${allowedValues.join("', '")}'`); } executableFile = localFile || executableFile; } - launchWithNode = sourceExt.includes(path5.extname(executableFile)); + launchWithNode = sourceExt.includes(path8.extname(executableFile)); let proc; if (process2.platform !== "win32") { if (launchWithNode) { @@ -3162,7 +3162,7 @@ Expecting one of '${allowedValues.join("', '")}'`); * @return {Command} */ nameFromFilename(filename) { - this._name = path5.basename(filename, path5.extname(filename)); + this._name = path8.basename(filename, path8.extname(filename)); return this; } /** @@ -3176,9 +3176,9 @@ Expecting one of '${allowedValues.join("', '")}'`); * @param {string} [path] * @return {(string|null|Command)} */ - executableDir(path6) { - if (path6 === void 0) return this._executableDir; - this._executableDir = path6; + executableDir(path9) { + if (path9 === void 0) return this._executableDir; + this._executableDir = path9; return this; } /** @@ -4422,14 +4422,14 @@ var require_util = __commonJS({ } const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80; let origin = url.origin != null ? url.origin : `${url.protocol}//${url.hostname}:${port}`; - let path5 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; + let path8 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; if (origin.endsWith("/")) { origin = origin.substring(0, origin.length - 1); } - if (path5 && !path5.startsWith("/")) { - path5 = `/${path5}`; + if (path8 && !path8.startsWith("/")) { + path8 = `/${path8}`; } - url = new URL(origin + path5); + url = new URL(origin + path8); } return url; } @@ -6042,19 +6042,19 @@ var require_parseParams = __commonJS({ var require_basename = __commonJS({ "node_modules/.pnpm/@fastify+busboy@2.1.1/node_modules/@fastify/busboy/lib/utils/basename.js"(exports2, module2) { "use strict"; - module2.exports = function basename(path5) { - if (typeof path5 !== "string") { + module2.exports = function basename(path8) { + if (typeof path8 !== "string") { return ""; } - for (var i = path5.length - 1; i >= 0; --i) { - switch (path5.charCodeAt(i)) { + for (var i = path8.length - 1; i >= 0; --i) { + switch (path8.charCodeAt(i)) { case 47: case 92: - path5 = path5.slice(i + 1); - return path5 === ".." || path5 === "." ? "" : path5; + path8 = path8.slice(i + 1); + return path8 === ".." || path8 === "." ? "" : path8; } } - return path5 === ".." || path5 === "." ? "" : path5; + return path8 === ".." || path8 === "." ? "" : path8; }; } }); @@ -9070,7 +9070,7 @@ var require_request = __commonJS({ } var Request = class _Request { constructor(origin, { - path: path5, + path: path8, method, body, headers, @@ -9084,11 +9084,11 @@ var require_request = __commonJS({ throwOnError, expectContinue }, handler2) { - if (typeof path5 !== "string") { + if (typeof path8 !== "string") { throw new InvalidArgumentError2("path must be a string"); - } else if (path5[0] !== "/" && !(path5.startsWith("http://") || path5.startsWith("https://")) && method !== "CONNECT") { + } else if (path8[0] !== "/" && !(path8.startsWith("http://") || path8.startsWith("https://")) && method !== "CONNECT") { throw new InvalidArgumentError2("path must be an absolute URL or start with a slash"); - } else if (invalidPathRegex.exec(path5) !== null) { + } else if (invalidPathRegex.exec(path8) !== null) { throw new InvalidArgumentError2("invalid request path"); } if (typeof method !== "string") { @@ -9151,7 +9151,7 @@ var require_request = __commonJS({ this.completed = false; this.aborted = false; this.upgrade = upgrade || null; - this.path = query ? util.buildURL(path5, query) : path5; + this.path = query ? util.buildURL(path8, query) : path8; this.origin = origin; this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent; this.blocking = blocking == null ? false : blocking; @@ -10159,9 +10159,9 @@ var require_RedirectHandler = __commonJS({ return this.handler.onHeaders(statusCode, headers, resume, statusText); } const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))); - const path5 = search ? `${pathname}${search}` : pathname; + const path8 = search ? `${pathname}${search}` : pathname; this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); - this.opts.path = path5; + this.opts.path = path8; this.opts.origin = origin; this.opts.maxRedirections = 0; this.opts.query = null; @@ -11401,7 +11401,7 @@ var require_client = __commonJS({ writeH2(client, client[kHTTP2Session], request2); return; } - const { body, method, path: path5, host, upgrade, headers, blocking, reset } = request2; + const { body, method, path: path8, host, upgrade, headers, blocking, reset } = request2; const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; if (body && typeof body.read === "function") { body.read(0); @@ -11451,7 +11451,7 @@ var require_client = __commonJS({ if (blocking) { socket[kBlocking] = true; } - let header = `${method} ${path5} HTTP/1.1\r + let header = `${method} ${path8} HTTP/1.1\r `; if (typeof host === "string") { header += `host: ${host}\r @@ -11514,7 +11514,7 @@ upgrade: ${upgrade}\r return true; } function writeH2(client, session, request2) { - const { body, method, path: path5, host, upgrade, expectContinue, signal, headers: reqHeaders } = request2; + const { body, method, path: path8, host, upgrade, expectContinue, signal, headers: reqHeaders } = request2; let headers; if (typeof reqHeaders === "string") headers = Request[kHTTP2CopyHeaders](reqHeaders.trim()); else headers = reqHeaders; @@ -11557,7 +11557,7 @@ upgrade: ${upgrade}\r }); return true; } - headers[HTTP2_HEADER_PATH] = path5; + headers[HTTP2_HEADER_PATH] = path8; headers[HTTP2_HEADER_SCHEME] = "https"; const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; if (body && typeof body.read === "function") { @@ -13797,20 +13797,20 @@ var require_mock_utils = __commonJS({ } return true; } - function safeUrl(path5) { - if (typeof path5 !== "string") { - return path5; + function safeUrl(path8) { + if (typeof path8 !== "string") { + return path8; } - const pathSegments = path5.split("?"); + const pathSegments = path8.split("?"); if (pathSegments.length !== 2) { - return path5; + return path8; } const qp = new URLSearchParams(pathSegments.pop()); qp.sort(); return [...pathSegments, qp.toString()].join("?"); } - function matchKey(mockDispatch2, { path: path5, method, body, headers }) { - const pathMatch = matchValue(mockDispatch2.path, path5); + function matchKey(mockDispatch2, { path: path8, method, body, headers }) { + const pathMatch = matchValue(mockDispatch2.path, path8); const methodMatch = matchValue(mockDispatch2.method, method); const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; const headersMatch = matchHeaders(mockDispatch2, headers); @@ -13828,7 +13828,7 @@ var require_mock_utils = __commonJS({ function getMockDispatch(mockDispatches, key) { const basePath = key.query ? buildURL(key.path, key.query) : key.path; const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath; - let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path5 }) => matchValue(safeUrl(path5), resolvedPath)); + let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path8 }) => matchValue(safeUrl(path8), resolvedPath)); if (matchedMockDispatches.length === 0) { throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); } @@ -13865,9 +13865,9 @@ var require_mock_utils = __commonJS({ } } function buildKey(opts) { - const { path: path5, method, body, headers, query } = opts; + const { path: path8, method, body, headers, query } = opts; return { - path: path5, + path: path8, method, body, headers, @@ -14316,10 +14316,10 @@ var require_pending_interceptors_formatter = __commonJS({ } format(pendingInterceptors) { const withPrettyHeaders = pendingInterceptors.map( - ({ method, path: path5, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + ({ method, path: path8, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ Method: method, Origin: origin, - Path: path5, + Path: path8, "Status code": statusCode, Persistent: persist ? "\u2705" : "\u274C", Invocations: timesInvoked, @@ -18939,8 +18939,8 @@ var require_util6 = __commonJS({ } } } - function validateCookiePath(path5) { - for (const char of path5) { + function validateCookiePath(path8) { + for (const char of path8) { const code = char.charCodeAt(0); if (code < 33 || char === ";") { throw new Error("Invalid cookie path"); @@ -20620,11 +20620,11 @@ var require_undici = __commonJS({ if (typeof opts.path !== "string") { throw new InvalidArgumentError2("invalid opts.path"); } - let path5 = opts.path; + let path8 = opts.path; if (!opts.path.startsWith("/")) { - path5 = `/${path5}`; + path8 = `/${path8}`; } - url = new URL(util.parseOrigin(url).origin + path5); + url = new URL(util.parseOrigin(url).origin + path8); } else { if (!opts) { opts = typeof url === "object" ? url : {}; @@ -21847,7 +21847,7 @@ var require_path_utils = __commonJS({ }; Object.defineProperty(exports2, "__esModule", { value: true }); exports2.toPlatformPath = exports2.toWin32Path = exports2.toPosixPath = void 0; - var path5 = __importStar(require("path")); + var path8 = __importStar(require("path")); function toPosixPath(pth) { return pth.replace(/[\\]/g, "/"); } @@ -21857,7 +21857,7 @@ var require_path_utils = __commonJS({ } exports2.toWin32Path = toWin32Path; function toPlatformPath(pth) { - return pth.replace(/[/\\]/g, path5.sep); + return pth.replace(/[/\\]/g, path8.sep); } exports2.toPlatformPath = toPlatformPath; } @@ -21921,7 +21921,7 @@ var require_io_util = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.getCmdPath = exports2.tryGetExecutablePath = exports2.isRooted = exports2.isDirectory = exports2.exists = exports2.READONLY = exports2.UV_FS_O_EXLOCK = exports2.IS_WINDOWS = exports2.unlink = exports2.symlink = exports2.stat = exports2.rmdir = exports2.rm = exports2.rename = exports2.readlink = exports2.readdir = exports2.open = exports2.mkdir = exports2.lstat = exports2.copyFile = exports2.chmod = void 0; var fs5 = __importStar(require("fs")); - var path5 = __importStar(require("path")); + var path8 = __importStar(require("path")); _a = fs5.promises, exports2.chmod = _a.chmod, exports2.copyFile = _a.copyFile, exports2.lstat = _a.lstat, exports2.mkdir = _a.mkdir, exports2.open = _a.open, exports2.readdir = _a.readdir, exports2.readlink = _a.readlink, exports2.rename = _a.rename, exports2.rm = _a.rm, exports2.rmdir = _a.rmdir, exports2.stat = _a.stat, exports2.symlink = _a.symlink, exports2.unlink = _a.unlink; exports2.IS_WINDOWS = process.platform === "win32"; exports2.UV_FS_O_EXLOCK = 268435456; @@ -21970,7 +21970,7 @@ var require_io_util = __commonJS({ } if (stats && stats.isFile()) { if (exports2.IS_WINDOWS) { - const upperExt = path5.extname(filePath).toUpperCase(); + const upperExt = path8.extname(filePath).toUpperCase(); if (extensions.some((validExt) => validExt.toUpperCase() === upperExt)) { return filePath; } @@ -21994,11 +21994,11 @@ var require_io_util = __commonJS({ if (stats && stats.isFile()) { if (exports2.IS_WINDOWS) { try { - const directory = path5.dirname(filePath); - const upperName = path5.basename(filePath).toUpperCase(); + const directory = path8.dirname(filePath); + const upperName = path8.basename(filePath).toUpperCase(); for (const actualName of yield exports2.readdir(directory)) { if (upperName === actualName.toUpperCase()) { - filePath = path5.join(directory, actualName); + filePath = path8.join(directory, actualName); break; } } @@ -22093,7 +22093,7 @@ var require_io = __commonJS({ Object.defineProperty(exports2, "__esModule", { value: true }); exports2.findInPath = exports2.which = exports2.mkdirP = exports2.rmRF = exports2.mv = exports2.cp = void 0; var assert_1 = require("assert"); - var path5 = __importStar(require("path")); + var path8 = __importStar(require("path")); var ioUtil = __importStar(require_io_util()); function cp(source, dest, options = {}) { return __awaiter(this, void 0, void 0, function* () { @@ -22102,7 +22102,7 @@ var require_io = __commonJS({ if (destStat && destStat.isFile() && !force) { return; } - const newDest = destStat && destStat.isDirectory() && copySourceDirectory ? path5.join(dest, path5.basename(source)) : dest; + const newDest = destStat && destStat.isDirectory() && copySourceDirectory ? path8.join(dest, path8.basename(source)) : dest; if (!(yield ioUtil.exists(source))) { throw new Error(`no such file or directory: ${source}`); } @@ -22114,7 +22114,7 @@ var require_io = __commonJS({ yield cpDirRecursive(source, newDest, 0, force); } } else { - if (path5.relative(source, newDest) === "") { + if (path8.relative(source, newDest) === "") { throw new Error(`'${newDest}' and '${source}' are the same file`); } yield copyFile(source, newDest, force); @@ -22127,7 +22127,7 @@ var require_io = __commonJS({ if (yield ioUtil.exists(dest)) { let destExists = true; if (yield ioUtil.isDirectory(dest)) { - dest = path5.join(dest, path5.basename(source)); + dest = path8.join(dest, path8.basename(source)); destExists = yield ioUtil.exists(dest); } if (destExists) { @@ -22138,7 +22138,7 @@ var require_io = __commonJS({ } } } - yield mkdirP(path5.dirname(dest)); + yield mkdirP(path8.dirname(dest)); yield ioUtil.rename(source, dest); }); } @@ -22201,7 +22201,7 @@ var require_io = __commonJS({ } const extensions = []; if (ioUtil.IS_WINDOWS && process.env["PATHEXT"]) { - for (const extension of process.env["PATHEXT"].split(path5.delimiter)) { + for (const extension of process.env["PATHEXT"].split(path8.delimiter)) { if (extension) { extensions.push(extension); } @@ -22214,12 +22214,12 @@ var require_io = __commonJS({ } return []; } - if (tool.includes(path5.sep)) { + if (tool.includes(path8.sep)) { return []; } const directories = []; if (process.env.PATH) { - for (const p of process.env.PATH.split(path5.delimiter)) { + for (const p of process.env.PATH.split(path8.delimiter)) { if (p) { directories.push(p); } @@ -22227,7 +22227,7 @@ var require_io = __commonJS({ } const matches = []; for (const directory of directories) { - const filePath = yield ioUtil.tryGetExecutablePath(path5.join(directory, tool), extensions); + const filePath = yield ioUtil.tryGetExecutablePath(path8.join(directory, tool), extensions); if (filePath) { matches.push(filePath); } @@ -22343,7 +22343,7 @@ var require_toolrunner = __commonJS({ var os4 = __importStar(require("os")); var events = __importStar(require("events")); var child = __importStar(require("child_process")); - var path5 = __importStar(require("path")); + var path8 = __importStar(require("path")); var io = __importStar(require_io()); var ioUtil = __importStar(require_io_util()); var timers_1 = require("timers"); @@ -22558,7 +22558,7 @@ var require_toolrunner = __commonJS({ exec() { return __awaiter(this, void 0, void 0, function* () { if (!ioUtil.isRooted(this.toolPath) && (this.toolPath.includes("/") || IS_WINDOWS && this.toolPath.includes("\\"))) { - this.toolPath = path5.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); + this.toolPath = path8.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); } this.toolPath = yield io.which(this.toolPath, true); return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { @@ -23058,7 +23058,7 @@ var require_core = __commonJS({ var file_command_1 = require_file_command(); var utils_1 = require_utils(); var os4 = __importStar(require("os")); - var path5 = __importStar(require("path")); + var path8 = __importStar(require("path")); var oidc_utils_1 = require_oidc_utils(); var ExitCode; (function(ExitCode2) { @@ -23086,7 +23086,7 @@ var require_core = __commonJS({ } else { (0, command_1.issueCommand)("add-path", {}, inputPath); } - process.env["PATH"] = `${inputPath}${path5.delimiter}${process.env["PATH"]}`; + process.env["PATH"] = `${inputPath}${path8.delimiter}${process.env["PATH"]}`; } exports2.addPath = addPath; function getInput(name, options) { @@ -23346,7 +23346,7 @@ var { // src/main.ts var fs4 = __toESM(require("node:fs/promises")); var os3 = __toESM(require("node:os")); -var path4 = __toESM(require("node:path")); +var path7 = __toESM(require("node:path")); // package.json var package_default = { @@ -23357,7 +23357,8 @@ var package_default = { scripts: { build: "esbuild src/main.ts --sourcemap=inline --format=cjs --bundle --platform=node --target=node20 --outdir=dist", check: "tsc --noEmit", - test: "pnpm run build && node --test test/*.test.mjs" + test: "pnpm run build && node --test test/*.test.mjs", + "test:privileged": "pnpm run build && node --test test/privileged/*.test.mjs" }, dependencies: { "@actions/core": "^1.11.1", @@ -23400,7 +23401,7 @@ async function sleep(ms) { // src/runCodexExec.ts var import_child_process2 = require("child_process"); -var import_promises = require("fs/promises"); +var import_promises4 = require("fs/promises"); var import_path = __toESM(require("path")); var import_os = __toESM(require("os")); var import_core = __toESM(require_core()); @@ -23429,275 +23430,13 @@ function checkOutput(command) { }); } -// src/runCodexExec.ts -async function runCodexExec({ - prompt, - codexHome, - cd, - extraArgs, - explicitOutputFile, - outputSchema, - model, - effort, - safetyStrategy, - codexUser, - sandbox, - permissionProfile -}) { - let input; - switch (prompt.type) { - case "inline": - input = prompt.content; - break; - case "file": - input = await (0, import_promises.readFile)(prompt.path, "utf8"); - break; - } - const runAsUser = safetyStrategy === "unprivileged-user" ? codexUser : null; - let outputFile; - if (explicitOutputFile != null) { - outputFile = { type: "explicit", file: explicitOutputFile }; - } else { - outputFile = await createTempOutputFile({ runAsUser }); - } - const resolvedOutputSchema = await resolveOutputSchema( - outputSchema, - runAsUser - ); - const permissionSelection = determinePermissionSelection({ - safetyStrategy, - requestedSandbox: sandbox, - permissionProfile, - extraArgs - }); - const command = []; - let pathToCodex = "codex"; - if (safetyStrategy === "unprivileged-user") { - if (codexUser == null) { - throw new Error( - "codexUser must be specified when using the 'unprivileged-user' safety strategy." - ); - } - if (process.platform === "win32") { - throw new Error( - "the 'unprivileged-user' safety strategy is not supported on Windows." - ); - } - pathToCodex = (await checkOutput(["which", "codex"])).trim(); - if (!pathToCodex) { - throw new Error("could not find 'codex' in PATH"); - } - command.push("sudo", "-u", codexUser, "--"); - } - command.push( - pathToCodex, - "exec", - "--skip-git-repo-check", - "--cd", - cd, - "--output-last-message", - outputFile.file - ); - if (resolvedOutputSchema != null) { - command.push("--output-schema", resolvedOutputSchema.file); - } - if (model != null) { - command.push("--model", model); - } - if (effort != null) { - command.push("--config", `model_reasoning_effort="${effort}"`); - } - command.push(...extraArgs); - switch (permissionSelection.type) { - case "sandbox": - command.push("--sandbox", permissionSelection.mode); - break; - case "profile": - command.push( - "--config", - `default_permissions=${JSON.stringify(permissionSelection.name)}` - ); - break; - } - const env = { ...process.env }; - if (!env.CODEX_INTERNAL_ORIGINATOR_OVERRIDE) { - env.CODEX_INTERNAL_ORIGINATOR_OVERRIDE = "codex_github_action"; - } - let extraEnv = ""; - if (codexHome != null) { - env.CODEX_HOME = codexHome; - extraEnv = `CODEX_HOME=${codexHome} `; - } - const program2 = command.shift(); - console.log( - `Running: ${extraEnv}${program2} ${command.map((a) => JSON.stringify(a)).join(" ")}` - ); - try { - await new Promise((resolve, reject) => { - const child = (0, import_child_process2.spawn)(program2, command, { - env, - stdio: ["pipe", "inherit", "inherit"] - }); - child.stdin.write(input); - child.stdin.end(); - child.on("error", reject); - child.on("close", async (code) => { - if (code !== 0) { - reject(new Error(`${program2} exited with code ${code}`)); - return; - } - try { - await finalizeExecution(outputFile, runAsUser); - resolve(void 0); - } catch (err) { - reject(err); - } - }); - }); - } finally { - await cleanupOutputSchema(resolvedOutputSchema); - } -} -async function finalizeExecution(outputFile, runAsUser) { - try { - let lastMessage; - if (runAsUser == null) { - lastMessage = await (0, import_promises.readFile)(outputFile.file, "utf8"); - } else { - lastMessage = await checkOutput([ - "sudo", - "-u", - runAsUser, - "cat", - outputFile.file - ]); - } - (0, import_core.setOutput)("final-message", lastMessage); - } finally { - await cleanupTempOutput(outputFile, runAsUser); - } -} -async function createTempOutputFile({ - runAsUser -}) { - const dir = await createTempDir("codex-exec-", runAsUser); - return { type: "temp", file: import_path.default.join(dir, "output.md") }; -} -async function cleanupTempOutput(outputFile, runAsUser) { - switch (outputFile.type) { - case "explicit": - return; - case "temp": { - const { file } = outputFile; - if (runAsUser == null) { - const dir = import_path.default.dirname(file); - await (0, import_promises.rm)(dir, { recursive: true, force: true }); - } else { - await checkOutput(["sudo", "rm", "-rf", import_path.default.dirname(file)]); - } - break; - } - } -} -async function resolveOutputSchema(schema, runAsUser) { - if (schema == null) { - return null; - } - switch (schema.type) { - case "file": - return { type: "explicit", file: schema.path }; - case "inline": { - const dir = await createTempDir("codex-output-schema-", runAsUser); - const file = import_path.default.join(dir, "schema.json"); - await (0, import_promises.writeFile)(file, schema.content); - return { type: "temp", file, dir }; - } - } -} -async function cleanupOutputSchema(schema) { - if (schema == null) { - return; - } - switch (schema.type) { - case "explicit": - return; - case "temp": - await (0, import_promises.rm)(schema.dir, { recursive: true, force: true }); - return; - } -} -async function createTempDir(prefix, runAsUser) { - if (runAsUser == null) { - return await (0, import_promises.mkdtemp)(import_path.default.join(import_os.default.tmpdir(), prefix)); - } else { - return (await checkOutput([ - "sudo", - "-u", - runAsUser, - "mktemp", - "-d", - "-t", - `${prefix}.XXXXXX` - ])).trim(); - } -} -function determinePermissionSelection({ - safetyStrategy, - requestedSandbox, - permissionProfile, - extraArgs -}) { - if (permissionProfile != null && requestedSandbox != null) { - throw new Error( - "`permission-profile` and `sandbox` are mutually exclusive. Permission profiles do not compose with legacy sandbox settings." - ); - } - if (permissionProfile != null && safetyStrategy === "read-only") { - throw new Error( - "`permission-profile` cannot be combined with the `read-only` safety strategy because that strategy forces the legacy read-only sandbox." - ); - } - if (permissionProfile != null && extraArgsSelectSandbox(extraArgs)) { - throw new Error( - "`permission-profile` cannot be combined with a sandbox override in `codex-args`." - ); - } - if (safetyStrategy === "read-only") { - return { type: "sandbox", mode: "read-only" }; - } - if (permissionProfile != null) { - return { type: "profile", name: permissionProfile }; - } - return { type: "sandbox", mode: requestedSandbox ?? "workspace-write" }; -} -function extraArgsSelectSandbox(args) { - return args.some((arg, index) => { - if (arg === "--sandbox" || arg.startsWith("--sandbox=") || arg === "-s" || arg.startsWith("-s=")) { - return true; - } - if (arg === "--config" || arg === "-c") { - return configOverrideSelectsSandbox(args[index + 1]); - } - if (arg.startsWith("--config=")) { - return configOverrideSelectsSandbox(arg.slice("--config=".length)); - } - if (arg.startsWith("-c=")) { - return configOverrideSelectsSandbox(arg.slice("-c=".length)); - } - return false; - }); -} -function configOverrideSelectsSandbox(override) { - const key = override?.trimStart().split(/[=.]/, 1)[0]; - return key === "sandbox_mode" || key === "sandbox_workspace_write"; -} - // src/dropSudo.ts var import_node_child_process = require("node:child_process"); var import_node_fs = require("node:fs"); -var path2 = __toESM(require("node:path")); +var path = __toESM(require("node:path")); var LINUX_PLATFORM = "linux"; var MACOS_PLATFORM = "darwin"; +var SUDO_PATH = "/usr/bin/sudo"; async function dropSudo(options) { const platform = process.platform; if (![LINUX_PLATFORM, MACOS_PLATFORM].includes(platform)) { @@ -23711,12 +23450,12 @@ async function dropSudo(options) { return; } await ensurePasswordlessSudo(); - await execCommand("sudo", ["-K"], { ignoreFailure: true }); + await execCommand(SUDO_PATH, ["-K"], { ignoreFailure: true }); const execArgs = [...process.execArgv]; const scriptPath = process.argv[1]; - await execCommand("sudo", [ + await execCommand(SUDO_PATH, [ "-n", - "node", + process.execPath, ...execArgs, scriptPath, "drop-sudo", @@ -23726,7 +23465,17 @@ async function dropSudo(options) { "--group", options.group ]); - await execCommand("sudo", ["-K"], { ignoreFailure: true }); + await execCommand(SUDO_PATH, ["-K"], { ignoreFailure: true }); +} +async function verifySudoUnavailable() { + const result = await execCommand(SUDO_PATH, ["-n", "true"], { + capture: true, + ignoreFailure: true + }); + if (result.code === 0) { + throw new Error("Expected sudo to be disabled, but sudo succeeded."); + } + console.log("Confirmed sudo privilege is disabled."); } async function dropSudoWithPrivileges(options) { if (typeof process.getuid === "function" && process.getuid() !== 0) { @@ -23820,7 +23569,7 @@ async function dropSudoWithPrivileges(options) { } async function ensurePasswordlessSudo() { try { - await execCommand("sudo", ["-n", "true"], { capture: true }); + await execCommand(SUDO_PATH, ["-n", "true"], { capture: true }); } catch (error) { throw new Error("Unexpected: passwordless sudo not available."); } @@ -23848,7 +23597,7 @@ async function removeUserFromSudoersD(user) { let entries = []; try { const dirEntries = await import_node_fs.promises.readdir(sudoersDir, { withFileTypes: true }); - entries = dirEntries.filter((dirent) => dirent.isFile()).map((dirent) => path2.join(sudoersDir, dirent.name)); + entries = dirEntries.filter((dirent) => dirent.isFile()).map((dirent) => path.join(sudoersDir, dirent.name)); } catch (error) { if (error.code === "ENOENT") { return []; @@ -23950,6 +23699,1062 @@ async function execCommand(command, args, options = {}) { }); } +// src/linuxDropSudo.ts +var import_node_crypto = require("node:crypto"); +var import_node_child_process3 = require("node:child_process"); +var import_promises2 = require("node:fs/promises"); +var import_node_path2 = __toESM(require("node:path")); + +// src/linuxGitRepositories.ts +var import_node_child_process2 = require("node:child_process"); +var import_promises = require("node:fs/promises"); +var import_node_path = __toESM(require("node:path")); + +// src/linuxSystemPaths.ts +var SUDO_PATH2 = "/usr/bin/sudo"; +var SETPRIV_PATH = "/usr/bin/setpriv"; +var SETFACL_PATH = "/usr/bin/setfacl"; +var FIND_PATH = "/usr/bin/find"; +var ENV_PATH = "/usr/bin/env"; +var ID_PATH = "/usr/bin/id"; +var GIT_PATH = "/usr/bin/git"; +var USERADD_PATH = "/usr/sbin/useradd"; +var USERDEL_PATH = "/usr/sbin/userdel"; +var NOLOGIN_PATH = "/usr/sbin/nologin"; +var SHELL_PATH = "/bin/sh"; + +// src/linuxGitRepositories.ts +var MAX_GIT_DIRECTORY_OUTPUT_BYTES = 64 * 1024; +async function discoverNestedGitRepositories(root) { + const output = await new Promise((resolve, reject) => { + const child = (0, import_node_child_process2.spawn)(FIND_PATH, [ + "-P", + root, + "-xdev", + "-name", + ".git", + "(", + "-type", + "f", + "-o", + "-type", + "d", + ")", + "-printf", + "%h\\0", + "-prune" + ]); + let stdout = ""; + let stderr = ""; + let exceededLimit = false; + child.stdout.setEncoding("utf8"); + child.stdout.on("data", (chunk) => { + stdout += chunk; + if (!exceededLimit && Buffer.byteLength(stdout) > MAX_GIT_DIRECTORY_OUTPUT_BYTES) { + exceededLimit = true; + child.kill("SIGKILL"); + } + }); + child.stderr.setEncoding("utf8"); + child.stderr.on("data", (chunk) => { + if (stderr.length < 4096) { + stderr += chunk; + } + }); + child.once("error", reject); + child.once("close", (code) => { + if (exceededLimit) { + reject( + new Error( + `Linux drop-sudo found too many nested Git repositories beneath '${root}'.` + ) + ); + } else if (code !== 0) { + reject( + new Error( + `Linux drop-sudo could not discover nested Git repositories beneath '${root}': ${stderr.trim()}` + ) + ); + } else { + resolve(stdout); + } + }); + }); + const repositories = []; + for (const candidate of output.split("\0")) { + if (candidate.length === 0) { + continue; + } + const absoluteCandidate = import_node_path.default.resolve(candidate); + const resolvedCandidate = await (0, import_promises.realpath)(absoluteCandidate); + if (resolvedCandidate === absoluteCandidate && isPathWithin(resolvedCandidate, root)) { + repositories.push(resolvedCandidate); + } + } + return repositories; +} +function isPathWithin(candidate, parent) { + const relative = import_node_path.default.relative(parent, candidate); + return relative === "" || !relative.startsWith("..") && !import_node_path.default.isAbsolute(relative); +} + +// src/linuxDropSudo.ts +var TRUSTED_EXECUTABLES = [ + SUDO_PATH2, + SETPRIV_PATH, + SETFACL_PATH, + FIND_PATH, + ENV_PATH, + ID_PATH, + GIT_PATH, + USERADD_PATH, + USERDEL_PATH, + NOLOGIN_PATH, + SHELL_PATH +]; +async function prepareLinuxCodexIdentity({ + runnerUid, + workingDirectory, + codexHome, + outputFile, + outputSchema, + codexExecutable +}) { + await Promise.all(TRUSTED_EXECUTABLES.map(verifyTrustedExecutable)); + const resolvedWorkingDirectory = await resolveDirectory(workingDirectory); + const resolvedCodexExecutable = await resolveCodexExecutable(codexExecutable); + const workspaceAccess = await discoverWorkspaceRoots( + resolvedWorkingDirectory + ); + const workspaceRoots = [...workspaceAccess.roots]; + if (codexHome != null) { + workspaceRoots.push(await resolveDirectory(codexHome)); + } + const accessRoots = removeNestedPaths(workspaceRoots); + const user = createIdentityName(runnerUid); + const home = `/home/${user}`; + let created = false; + let accessGranted = false; + try { + await runRootCommand(USERADD_PATH, [ + "--system", + "--create-home", + "--user-group", + "--home-dir", + home, + "--shell", + NOLOGIN_PATH, + user + ]); + created = true; + const uid = await readNumericIdentity(user, "-u"); + const gid = await readNumericIdentity(user, "-g"); + if (uid === 0 || uid === runnerUid) { + throw new Error( + `Linux drop-sudo created an invalid Codex UID (${uid}); expected a non-root identity distinct from runner UID ${runnerUid}.` + ); + } + const groups = await readIdentityGroups(user); + if (groups.length !== 1 || groups[0] !== gid) { + throw new Error( + `Linux drop-sudo requires the dedicated Codex account to have only primary GID ${gid}; found ${groups.join(", ")}.` + ); + } + accessGranted = true; + await grantFileAccess(outputFile, uid, "rw-", runnerUid); + if (outputSchema != null) { + await grantFileAccess(outputSchema, uid, "r--", runnerUid); + } + for (const root of accessRoots) { + await grantTreeAccess(root, uid, runnerUid); + } + console.log( + `Prepared dedicated Linux Codex identity ${user} (uid ${uid}, gid ${gid}).` + ); + return { + user, + uid, + gid, + home, + workingDirectory: resolvedWorkingDirectory, + codexExecutable: resolvedCodexExecutable, + gitSafeDirectories: workspaceAccess.gitSafeDirectories + }; + } catch (error) { + if (created && !accessGranted) { + await runRootCommand(USERDEL_PATH, ["--remove", user], true); + } else if (created) { + console.warn( + `Linux drop-sudo setup failed after granting ACLs; leaving locked account '${user}' in place to prevent UID reuse.` + ); + } + throw error; + } +} +async function discoverWorkspaceRoots(workingDirectory) { + const roots = [workingDirectory]; + const gitSafeDirectories = /* @__PURE__ */ new Set(); + const githubWorkspace = process.env.GITHUB_WORKSPACE; + if (githubWorkspace != null && githubWorkspace.length > 0) { + try { + const resolvedWorkspace = await resolveDirectory(githubWorkspace); + if (isPathWithin2(workingDirectory, resolvedWorkspace)) { + roots.push(resolvedWorkspace); + } + } catch { + } + } + const gitRoot = await runCommand( + GIT_PATH, + ["-C", workingDirectory, "rev-parse", "--show-toplevel"], + true + ); + if (gitRoot.code === 0 && gitRoot.stdout.trim().length > 0) { + try { + const resolvedGitRoot = await resolveDirectory(gitRoot.stdout.trim()); + if (isPathWithin2(workingDirectory, resolvedGitRoot)) { + roots.push(resolvedGitRoot); + gitSafeDirectories.add(resolvedGitRoot); + } + } catch { + } + } + const safeDirectoryRoots = removeNestedPaths(roots); + for (const root of safeDirectoryRoots) { + gitSafeDirectories.add(root); + for (const repository of await discoverNestedGitRepositories(root)) { + gitSafeDirectories.add(repository); + } + } + return { + roots, + gitSafeDirectories: [...gitSafeDirectories] + }; +} +async function grantTreeAccess(root, uid, runnerUid) { + assertSafeRecursiveRoot(root); + const rootStats = await (0, import_promises2.stat)(root); + if (rootStats.uid !== runnerUid) { + throw new Error( + `Linux drop-sudo requires access roots to be owned by runner UID ${runnerUid}; '${root}' is owned by UID ${rootStats.uid}.` + ); + } + await grantTraverseAccess(root, uid, runnerUid); + await runRootCommand(FIND_PATH, [ + "-P", + root, + "-xdev", + "(", + "-type", + "d", + "-o", + "(", + "-type", + "f", + "-links", + "1", + ")", + ")", + "-uid", + String(runnerUid), + "-exec", + SETFACL_PATH, + "-m", + `u:${uid}:rwX,u:${runnerUid}:rwX`, + "--", + "{}", + "+" + ]); + await runRootCommand(FIND_PATH, [ + "-P", + root, + "-xdev", + "-type", + "d", + "-uid", + String(runnerUid), + "-exec", + SETFACL_PATH, + "-m", + `u:${uid}:rwx,u:${runnerUid}:rwx,d:u:${runnerUid}:rwx`, + "--", + "{}", + "+" + ]); +} +async function grantFileAccess(file, uid, permissions, runnerUid) { + const absoluteFile = import_node_path2.default.resolve(file); + const linkStats = await (0, import_promises2.lstat)(absoluteFile); + const canonicalFile = await (0, import_promises2.realpath)(absoluteFile); + if (linkStats.isSymbolicLink() || canonicalFile !== absoluteFile) { + throw new Error( + `Linux drop-sudo refuses a file path containing symbolic links: '${absoluteFile}'.` + ); + } + const fileStats = await (0, import_promises2.stat)(canonicalFile); + if (!fileStats.isFile()) { + throw new Error( + `Linux drop-sudo expected a regular file but found '${absoluteFile}'.` + ); + } + if (fileStats.uid !== runnerUid) { + if ((fileStats.mode & 4) === 0) { + throw new Error( + `Linux drop-sudo refuses to transfer group-derived file access for '${absoluteFile}'. The file must be owned by runner UID ${runnerUid} or already be world-readable.` + ); + } + await grantTraverseAccess(absoluteFile, uid, runnerUid); + return; + } + if (fileStats.nlink !== 1) { + throw new Error( + `Linux drop-sudo refuses to grant access to a file with multiple hard links: '${absoluteFile}'.` + ); + } + await grantTraverseAccess(absoluteFile, uid, runnerUid); + await runRootCommand(SETFACL_PATH, [ + "-m", + `u:${uid}:${permissions}`, + "--", + canonicalFile + ]); +} +async function resolveCodexExecutable(file) { + const absoluteFile = import_node_path2.default.resolve(file); + const canonicalFile = await (0, import_promises2.realpath)(absoluteFile); + const fileStats = await (0, import_promises2.stat)(canonicalFile); + if (!fileStats.isFile() || (fileStats.mode & 5) !== 5) { + throw new Error( + `Linux drop-sudo requires the Codex executable to resolve to a regular file that is already world-readable and executable: '${absoluteFile}'.` + ); + } + let current = import_node_path2.default.dirname(canonicalFile); + for (; ; ) { + const directoryStats = await (0, import_promises2.stat)(current); + if (!directoryStats.isDirectory() || (directoryStats.mode & 1) === 0) { + throw new Error( + `Linux drop-sudo requires every Codex executable parent directory to already be world-searchable: '${current}'.` + ); + } + const parent = import_node_path2.default.dirname(current); + if (parent === current) { + break; + } + current = parent; + } + return canonicalFile; +} +async function grantTraverseAccess(target, uid, runnerUid) { + const ancestors = []; + let current = import_node_path2.default.dirname(import_node_path2.default.resolve(target)); + while (current !== import_node_path2.default.parse(current).root) { + const directoryStats = await (0, import_promises2.stat)(current); + if (!directoryStats.isDirectory()) { + throw new Error( + `Linux drop-sudo expected a directory while checking '${current}'.` + ); + } + if (directoryStats.uid === runnerUid) { + ancestors.push(current); + } else if ((directoryStats.mode & 1) === 0) { + throw new Error( + `Linux drop-sudo refuses to transfer group-derived directory access through '${current}'. It must be owned by runner UID ${runnerUid} or already be world-searchable.` + ); + } + current = import_node_path2.default.dirname(current); + } + if (ancestors.length > 0) { + await runRootCommand(SETFACL_PATH, [ + "-m", + `u:${uid}:--x`, + "--", + ...ancestors + ]); + } +} +async function readNumericIdentity(user, flag) { + const result = await runCommand(ID_PATH, [flag, user]); + const value = Number(result.stdout.trim()); + if (!Number.isSafeInteger(value) || value < 0) { + throw new Error(`Could not resolve ${flag} for dedicated user '${user}'.`); + } + return value; +} +async function readIdentityGroups(user) { + const result = await runCommand(ID_PATH, ["-G", user]); + const groups = result.stdout.trim().split(/\s+/).filter((value) => value.length > 0).map(Number); + if (groups.some((group) => !Number.isSafeInteger(group) || group < 0)) { + throw new Error(`Could not resolve groups for dedicated user '${user}'.`); + } + return [...new Set(groups)]; +} +async function verifyTrustedExecutable(file) { + let canonicalFile; + let fileStats; + try { + canonicalFile = await (0, import_promises2.realpath)(file); + fileStats = await (0, import_promises2.stat)(canonicalFile); + } catch { + throw new Error( + `Linux drop-sudo requires trusted executable '${file}'.` + ); + } + if (!fileStats.isFile() || fileStats.uid !== 0 || (fileStats.mode & 73) === 0 || (fileStats.mode & 18) !== 0) { + throw new Error( + `Linux drop-sudo requires '${file}' to resolve to a root-owned executable that is not group- or world-writable.` + ); + } +} +async function resolveDirectory(directory) { + const absoluteDirectory = import_node_path2.default.resolve(directory); + const resolved = await (0, import_promises2.realpath)(absoluteDirectory); + if (resolved !== absoluteDirectory) { + throw new Error( + `Linux drop-sudo refuses a directory path containing symbolic links: '${absoluteDirectory}'.` + ); + } + const directoryStats = await (0, import_promises2.stat)(resolved); + if (!directoryStats.isDirectory()) { + throw new Error( + `Linux drop-sudo expected a directory but found '${resolved}'.` + ); + } + return resolved; +} +function removeNestedPaths(paths) { + const sorted = [...new Set(paths.map((value) => import_node_path2.default.resolve(value)))].sort( + (left, right) => left.length - right.length + ); + return sorted.filter( + (candidate, index) => !sorted.slice(0, index).some((parent) => isPathWithin2(candidate, parent)) + ); +} +function isPathWithin2(candidate, parent) { + const relative = import_node_path2.default.relative(parent, candidate); + return relative === "" || !relative.startsWith("..") && !import_node_path2.default.isAbsolute(relative); +} +function assertSafeRecursiveRoot(root) { + if (root === import_node_path2.default.parse(root).root) { + throw new Error( + "Linux drop-sudo refuses to grant recursive access to the filesystem root." + ); + } +} +function createIdentityName(runnerUid) { + const suffix = (0, import_node_crypto.randomBytes)(4).toString("hex"); + const prefix = `codexaction${runnerUid}`.slice(0, 23); + return `${prefix}x${suffix}`; +} +async function runRootCommand(command, args, ignoreFailure = false) { + return await runCommand( + SUDO_PATH2, + ["-n", "--", command, ...args], + ignoreFailure + ); +} +async function runCommand(command, args, ignoreFailure = false) { + return await new Promise((resolve, reject) => { + const child = (0, import_node_child_process3.spawn)(command, args, { + stdio: ["ignore", "pipe", "pipe"] + }); + let stdout = ""; + let stderr = ""; + child.stdout.setEncoding("utf8"); + child.stdout.on("data", (chunk) => { + stdout += chunk; + }); + child.stderr.setEncoding("utf8"); + child.stderr.on("data", (chunk) => { + stderr += chunk; + }); + child.once("error", reject); + child.once("close", (code) => { + const exitCode = code ?? 1; + if (exitCode !== 0 && !ignoreFailure) { + reject( + new Error( + `Command failed: ${command} ${args.join(" ")} (exit code ${exitCode}): ${stderr.trim()}` + ) + ); + return; + } + resolve({ code: exitCode, stdout, stderr }); + }); + }); +} + +// src/linuxDropSudoGate.ts +var import_node_crypto2 = require("node:crypto"); +var GATE_SCRIPT = [ + `printf '%s\\n' "$1"`, + `IFS= read -r gate || exit 125`, + `[ "$gate" = "$2" ] || exit 125`, + `shift 2`, + `exec "$@"` +].join("; "); +function buildGatedCodexCommand({ + identity, + codexArgs +}) { + const readyToken = `codex-action-ready-${(0, import_node_crypto2.randomBytes)(16).toString("hex")}`; + const goToken = `codex-action-go-${(0, import_node_crypto2.randomBytes)(16).toString("hex")}`; + const args = [ + "-n", + "-E", + "--", + SETPRIV_PATH, + `--reuid=${identity.uid}`, + `--regid=${identity.gid}`, + "--clear-groups", + "--no-new-privs", + "--inh-caps=-all", + "--ambient-caps=-all", + "--bounding-set=-all", + "--", + ENV_PATH, + "-u", + "SUDO_COMMAND", + "-u", + "SUDO_USER", + "-u", + "SUDO_UID", + "-u", + "SUDO_GID", + "-u", + "GITHUB_ENV", + "-u", + "GITHUB_PATH", + "-u", + "GITHUB_OUTPUT", + "-u", + "GITHUB_STEP_SUMMARY", + "-u", + "ENV", + "-u", + "BASH_ENV", + "-u", + "SHELLOPTS", + `HOME=${identity.home}`, + `USER=${identity.user}`, + `LOGNAME=${identity.user}`, + `PATH=${process.env.PATH ?? ""}` + ]; + identity.gitSafeDirectories.forEach((directory, index) => { + args.push( + `GIT_CONFIG_KEY_${index}=safe.directory`, + `GIT_CONFIG_VALUE_${index}=${directory}` + ); + }); + args.push( + `GIT_CONFIG_COUNT=${identity.gitSafeDirectories.length}`, + SHELL_PATH, + "-c", + GATE_SCRIPT, + "codex-action-gate", + readyToken, + goToken, + identity.codexExecutable, + ...codexArgs + ); + return { program: SUDO_PATH2, args, readyToken, goToken }; +} +async function waitForLinuxGate(child, readyToken) { + const stdout = child.stdout; + if (stdout == null) { + throw new Error("Linux drop-sudo gate requires a stdout pipe."); + } + stdout.setEncoding("utf8"); + await new Promise((resolve, reject) => { + let buffered = ""; + const cleanup = () => { + stdout.off("data", onData); + stdout.off("error", onError); + stdout.off("end", onEnd); + child.off("close", onClose); + }; + const fail = (error) => { + cleanup(); + reject(error); + }; + const onData = (chunk) => { + buffered += chunk; + if (buffered.length > 1024) { + fail( + new Error("Linux drop-sudo gate emitted an invalid readiness marker.") + ); + return; + } + const newline = buffered.indexOf("\n"); + if (newline < 0) { + return; + } + const line = buffered.slice(0, newline).replace(/\r$/, ""); + if (line !== readyToken) { + fail( + new Error("Linux drop-sudo gate did not confirm the clean identity.") + ); + return; + } + const remainder = buffered.slice(newline + 1); + cleanup(); + if (remainder.length > 0) { + process.stdout.write(remainder); + } + stdout.pipe(process.stdout, { end: false }); + resolve(); + }; + const onError = (error) => fail(error); + const onEnd = () => fail(new Error("Linux drop-sudo gate exited before becoming ready.")); + const onClose = () => fail(new Error("Linux drop-sudo gate closed before becoming ready.")); + stdout.on("data", onData); + stdout.once("error", onError); + stdout.once("end", onEnd); + child.once("close", onClose); + }); +} +async function endChildInput(child, input) { + const stdin = child.stdin; + if (stdin == null) { + throw new Error("Codex child process does not have a stdin pipe."); + } + await new Promise((resolve, reject) => { + const onError = (error) => { + stdin.off("finish", onFinish); + reject(error); + }; + const onFinish = () => { + stdin.off("error", onError); + resolve(); + }; + stdin.once("error", onError); + stdin.once("finish", onFinish); + stdin.end(input); + }); +} + +// src/linuxOutputFile.ts +var import_node_fs2 = require("node:fs"); +var import_promises3 = require("node:fs/promises"); +var import_node_path3 = __toESM(require("node:path")); +async function prepareLinuxOutputFile(file) { + const absoluteFile = import_node_path3.default.resolve(file); + const absoluteParent = import_node_path3.default.dirname(absoluteFile); + const canonicalParent = await (0, import_promises3.realpath)(absoluteParent); + if (canonicalParent !== absoluteParent) { + throw new Error( + `Linux drop-sudo refuses an output path containing symbolic links: '${absoluteFile}'.` + ); + } + try { + const pathStats = await (0, import_promises3.lstat)(absoluteFile); + if (pathStats.isSymbolicLink()) { + throw new Error( + `Linux drop-sudo refuses an output path containing symbolic links: '${absoluteFile}'.` + ); + } + if (!pathStats.isFile()) { + throw new Error( + `Linux drop-sudo requires a regular output file; found '${absoluteFile}'.` + ); + } + } catch (error) { + if (error.code !== "ENOENT") { + throw error; + } + } + const handle = await (0, import_promises3.open)( + absoluteFile, + import_node_fs2.constants.O_APPEND | import_node_fs2.constants.O_CREAT | import_node_fs2.constants.O_RDWR | import_node_fs2.constants.O_NOFOLLOW, + 384 + ); + try { + const fileStats = await handle.stat(); + if (!fileStats.isFile()) { + throw new Error( + `Linux drop-sudo requires a regular output file; found '${absoluteFile}'.` + ); + } + const runnerUid = process.getuid(); + if (fileStats.uid !== runnerUid) { + throw new Error( + `Linux drop-sudo requires the output file to be owned by runner UID ${runnerUid}; '${absoluteFile}' is owned by UID ${fileStats.uid}.` + ); + } + if (fileStats.nlink !== 1) { + throw new Error( + `Linux drop-sudo refuses an output file with multiple hard links: '${absoluteFile}'.` + ); + } + const canonicalFile = await (0, import_promises3.realpath)(absoluteFile); + if (canonicalFile !== absoluteFile) { + throw new Error( + `Linux drop-sudo refuses an output path containing symbolic links: '${absoluteFile}'.` + ); + } + } catch (error) { + await handle.close(); + throw error; + } + return { file: absoluteFile, handle }; +} + +// src/runCodexExec.ts +async function runCodexExec({ + prompt, + codexHome, + cd, + extraArgs, + explicitOutputFile, + outputSchema, + model, + effort, + safetyStrategy, + codexUser, + sandbox, + permissionProfile +}) { + let input; + switch (prompt.type) { + case "inline": + input = prompt.content; + break; + case "file": + input = await (0, import_promises4.readFile)(prompt.path, "utf8"); + break; + } + const runAsUser = safetyStrategy === "unprivileged-user" ? codexUser : null; + let outputFile; + if (explicitOutputFile != null) { + outputFile = { type: "explicit", file: explicitOutputFile }; + } else { + outputFile = await createTempOutputFile({ runAsUser }); + } + const resolvedOutputSchema = await resolveOutputSchema( + outputSchema, + runAsUser + ); + const permissionSelection = determinePermissionSelection({ + safetyStrategy, + requestedSandbox: sandbox, + permissionProfile, + extraArgs + }); + const commandPrefix = []; + let linuxDropSudoUser = null; + let linuxGate = null; + let linuxIdentity = null; + let linuxOutputHandle = null; + let effectiveCd = cd; + let pathToCodex = "codex"; + if (safetyStrategy === "drop-sudo" && process.platform === "linux") { + if (typeof process.getuid !== "function" || typeof process.getgid !== "function") { + throw new Error("Linux drop-sudo requires POSIX user and group APIs."); + } + const uid = process.getuid(); + if (uid === 0) { + throw new Error( + "Linux drop-sudo cannot run Codex from a runner whose default user is root." + ); + } + pathToCodex = (await checkOutput(["/usr/bin/which", "codex"])).trim(); + if (!pathToCodex) { + throw new Error("could not find 'codex' in PATH"); + } + linuxDropSudoUser = import_os.default.userInfo().username; + if (codexHome != null) { + const absoluteCodexHome = import_path.default.resolve(codexHome); + await (0, import_promises4.mkdir)(absoluteCodexHome, { recursive: true }); + codexHome = await (0, import_promises4.realpath)(absoluteCodexHome); + if (codexHome !== absoluteCodexHome) { + throw new Error( + `Linux drop-sudo refuses a Codex home path containing symbolic links: '${absoluteCodexHome}'.` + ); + } + } + const preparedOutput = await prepareLinuxOutputFile(outputFile.file); + outputFile.file = preparedOutput.file; + linuxOutputHandle = preparedOutput.handle; + try { + linuxIdentity = await prepareLinuxCodexIdentity({ + runnerUid: uid, + workingDirectory: cd, + codexHome, + outputFile: outputFile.file, + outputSchema: resolvedOutputSchema?.file ?? null, + codexExecutable: pathToCodex + }); + } catch (error) { + await linuxOutputHandle.close(); + linuxOutputHandle = null; + await cleanupOutputSchema(resolvedOutputSchema); + await cleanupTempOutput(outputFile, runAsUser); + throw error; + } + pathToCodex = linuxIdentity.codexExecutable; + effectiveCd = linuxIdentity.workingDirectory; + } else if (safetyStrategy === "unprivileged-user") { + if (codexUser == null) { + throw new Error( + "codexUser must be specified when using the 'unprivileged-user' safety strategy." + ); + } + if (process.platform === "win32") { + throw new Error( + "the 'unprivileged-user' safety strategy is not supported on Windows." + ); + } + pathToCodex = (await checkOutput(["which", "codex"])).trim(); + if (!pathToCodex) { + throw new Error("could not find 'codex' in PATH"); + } + commandPrefix.push("sudo", "-u", codexUser, "--"); + } + const codexArgs = [ + "exec", + "--skip-git-repo-check", + "--cd", + effectiveCd, + "--output-last-message", + outputFile.file + ]; + if (resolvedOutputSchema != null) { + codexArgs.push("--output-schema", resolvedOutputSchema.file); + } + if (model != null) { + codexArgs.push("--model", model); + } + if (effort != null) { + codexArgs.push("--config", `model_reasoning_effort="${effort}"`); + } + codexArgs.push(...extraArgs); + switch (permissionSelection.type) { + case "sandbox": + codexArgs.push("--sandbox", permissionSelection.mode); + break; + case "profile": + codexArgs.push( + "--config", + `default_permissions=${JSON.stringify(permissionSelection.name)}` + ); + break; + } + const env = { ...process.env }; + if (!env.CODEX_INTERNAL_ORIGINATOR_OVERRIDE) { + env.CODEX_INTERNAL_ORIGINATOR_OVERRIDE = "codex_github_action"; + } + let extraEnv = ""; + if (codexHome != null) { + env.CODEX_HOME = codexHome; + extraEnv = `CODEX_HOME=${codexHome} `; + } else if (linuxIdentity != null) { + delete env.CODEX_HOME; + } + let program2; + let command; + if (linuxIdentity != null) { + linuxGate = buildGatedCodexCommand({ + identity: linuxIdentity, + codexArgs + }); + program2 = linuxGate.program; + command = linuxGate.args; + console.log( + `Running with Linux drop-sudo protection: ${extraEnv}${pathToCodex} ${codexArgs.map((arg) => JSON.stringify(arg)).join(" ")}` + ); + } else { + const fullCommand = [...commandPrefix, pathToCodex, ...codexArgs]; + program2 = fullCommand.shift(); + command = fullCommand; + console.log( + `Running: ${extraEnv}${program2} ${command.map((arg) => JSON.stringify(arg)).join(" ")}` + ); + } + try { + const child = (0, import_child_process2.spawn)(program2, command, { + env, + stdio: ["pipe", linuxGate == null ? "inherit" : "pipe", "inherit"] + }); + const gateReady = linuxGate == null ? Promise.resolve() : waitForLinuxGate(child, linuxGate.readyToken); + const spawned = new Promise((resolve, reject) => { + child.once("spawn", resolve); + child.once("error", reject); + }); + const completed = new Promise((resolve, reject) => { + child.once("error", reject); + child.once("close", (code2) => resolve(code2 ?? 1)); + }); + try { + await Promise.all([spawned, gateReady]); + if (linuxDropSudoUser != null) { + await dropSudo({ + user: linuxDropSudoUser, + group: "sudo", + rootPhase: false + }); + await verifySudoUnavailable(); + } + if (child.exitCode != null) { + throw new Error( + `${program2} exited before privilege cleanup completed (code ${child.exitCode})` + ); + } + const gatedInput = linuxGate == null ? input : `${linuxGate.goToken} +${input}`; + await endChildInput(child, gatedInput); + } catch (error) { + if (child.stdin != null && !child.stdin.destroyed) { + child.stdin.on("error", () => void 0); + child.stdin.end(); + } + await completed.catch(() => void 0); + throw error; + } + const code = await completed; + if (code !== 0) { + throw new Error(`${program2} exited with code ${code}`); + } + await finalizeExecution(outputFile, runAsUser, linuxOutputHandle); + } finally { + await linuxOutputHandle?.close().catch(() => void 0); + await cleanupOutputSchema(resolvedOutputSchema); + } +} +async function finalizeExecution(outputFile, runAsUser, linuxOutputHandle) { + try { + let lastMessage; + if (linuxOutputHandle != null) { + lastMessage = await linuxOutputHandle.readFile("utf8"); + } else if (runAsUser == null) { + lastMessage = await (0, import_promises4.readFile)(outputFile.file, "utf8"); + } else { + lastMessage = await checkOutput([ + "sudo", + "-u", + runAsUser, + "cat", + outputFile.file + ]); + } + (0, import_core.setOutput)("final-message", lastMessage); + } finally { + await cleanupTempOutput(outputFile, runAsUser); + } +} +async function createTempOutputFile({ + runAsUser +}) { + const dir = await createTempDir("codex-exec-", runAsUser); + return { type: "temp", file: import_path.default.join(dir, "output.md") }; +} +async function cleanupTempOutput(outputFile, runAsUser) { + switch (outputFile.type) { + case "explicit": + return; + case "temp": { + const { file } = outputFile; + if (runAsUser == null) { + const dir = import_path.default.dirname(file); + await (0, import_promises4.rm)(dir, { recursive: true, force: true }); + } else { + await checkOutput(["sudo", "rm", "-rf", import_path.default.dirname(file)]); + } + break; + } + } +} +async function resolveOutputSchema(schema, runAsUser) { + if (schema == null) { + return null; + } + switch (schema.type) { + case "file": + return { type: "explicit", file: schema.path }; + case "inline": { + const dir = await createTempDir("codex-output-schema-", runAsUser); + const file = import_path.default.join(dir, "schema.json"); + await (0, import_promises4.writeFile)(file, schema.content); + return { type: "temp", file, dir }; + } + } +} +async function cleanupOutputSchema(schema) { + if (schema == null) { + return; + } + switch (schema.type) { + case "explicit": + return; + case "temp": + await (0, import_promises4.rm)(schema.dir, { recursive: true, force: true }); + return; + } +} +async function createTempDir(prefix, runAsUser) { + if (runAsUser == null) { + return await (0, import_promises4.mkdtemp)(import_path.default.join(import_os.default.tmpdir(), prefix)); + } else { + return (await checkOutput([ + "sudo", + "-u", + runAsUser, + "mktemp", + "-d", + "-t", + `${prefix}.XXXXXX` + ])).trim(); + } +} +function determinePermissionSelection({ + safetyStrategy, + requestedSandbox, + permissionProfile, + extraArgs +}) { + if (permissionProfile != null && requestedSandbox != null) { + throw new Error( + "`permission-profile` and `sandbox` are mutually exclusive. Permission profiles do not compose with legacy sandbox settings." + ); + } + if (permissionProfile != null && safetyStrategy === "read-only") { + throw new Error( + "`permission-profile` cannot be combined with the `read-only` safety strategy because that strategy forces the legacy read-only sandbox." + ); + } + if (permissionProfile != null && extraArgsSelectSandbox(extraArgs)) { + throw new Error( + "`permission-profile` cannot be combined with a sandbox override in `codex-args`." + ); + } + if (safetyStrategy === "read-only") { + return { type: "sandbox", mode: "read-only" }; + } + if (permissionProfile != null) { + return { type: "profile", name: permissionProfile }; + } + return { type: "sandbox", mode: requestedSandbox ?? "workspace-write" }; +} +function extraArgsSelectSandbox(args) { + return args.some((arg, index) => { + if (arg === "--sandbox" || arg.startsWith("--sandbox=") || arg === "-s" || arg.startsWith("-s=")) { + return true; + } + if (arg === "--config" || arg === "-c") { + return configOverrideSelectsSandbox(args[index + 1]); + } + if (arg.startsWith("--config=")) { + return configOverrideSelectsSandbox(arg.slice("--config=".length)); + } + if (arg.startsWith("-c=")) { + return configOverrideSelectsSandbox(arg.slice("-c=".length)); + } + return false; + }); +} +function configOverrideSelectsSandbox(override) { + const key = override?.trimStart().split(/[=.]/, 1)[0]; + return key === "sandbox_mode" || key === "sandbox_workspace_write"; +} + // src/checkActorPermissions.ts var core2 = __toESM(require_core()); @@ -24897,17 +25702,17 @@ function requestLog(octokit) { octokit.log.debug("request", options); const start = Date.now(); const requestOptions = octokit.request.endpoint.parse(options); - const path5 = requestOptions.url.replace(options.baseUrl, ""); + const path8 = requestOptions.url.replace(options.baseUrl, ""); return request2(options).then((response) => { const requestId = response.headers["x-github-request-id"]; octokit.log.info( - `${requestOptions.method} ${path5} - ${response.status} with id ${requestId} in ${Date.now() - start}ms` + `${requestOptions.method} ${path8} - ${response.status} with id ${requestId} in ${Date.now() - start}ms` ); return response; }).catch((error) => { const requestId = error.response?.headers["x-github-request-id"] || "UNKNOWN"; octokit.log.error( - `${requestOptions.method} ${path5} - ${error.status} with id ${requestId} in ${Date.now() - start}ms` + `${requestOptions.method} ${path8} - ${error.status} with id ${requestId} in ${Date.now() - start}ms` ); throw error; }); @@ -27674,11 +28479,11 @@ function firstString() { // src/writeProxyConfig.ts var fs3 = __toESM(require("node:fs/promises")); -var path3 = __toESM(require("node:path")); +var path6 = __toESM(require("node:path")); var os2 = __toESM(require("node:os")); var MODEL_PROVIDER = "codex-action-responses-proxy"; async function writeProxyConfig(codexHome, port, safetyStrategy) { - const configPath = path3.join(codexHome, "config.toml"); + const configPath = path6.join(codexHome, "config.toml"); let existing = ""; try { existing = await fs3.readFile(configPath, "utf8"); @@ -27700,9 +28505,9 @@ wire_api = "responses" `; let output = `${header}${existing}${table}`; if (safetyStrategy === "unprivileged-user") { - const tempDir = await fs3.mkdtemp(path3.join(os2.tmpdir(), "codex-config")); + const tempDir = await fs3.mkdtemp(path6.join(os2.tmpdir(), "codex-config")); try { - const tempConfigPath = path3.join(tempDir, "config.toml"); + const tempConfigPath = path6.join(tempDir, "config.toml"); await fs3.writeFile(tempConfigPath, output, "utf8"); await checkOutput(["sudo", "mv", tempConfigPath, configPath]); } finally { @@ -27992,7 +28797,7 @@ async function resolveCodexHome(inputCodexHome, safetyStrategy, codexUser, githu githubRunId ); } else { - const codexHome = path4.join(os3.homedir(), ".codex"); + const codexHome = path7.join(os3.homedir(), ".codex"); await fs4.mkdir(codexHome, { recursive: true }); return codexHome; } @@ -28002,10 +28807,10 @@ async function deriveSharedCodexHomeForUnprivilegedUser(user, githubRunId) { if (!home) { throw new Error(`Could not determine home directory for user '${user}'.`); } - const codexHome = path4.join(home, ".codex"); + const codexHome = path7.join(home, ".codex"); try { - const stat2 = await fs4.stat(codexHome); - if (stat2.isDirectory()) { + const stat3 = await fs4.stat(codexHome); + if (stat3.isDirectory()) { return codexHome; } } catch { @@ -28013,7 +28818,7 @@ async function deriveSharedCodexHomeForUnprivilegedUser(user, githubRunId) { await checkOutput(["sudo", "mkdir", codexHome]); await checkOutput(["sudo", "chown", `${user}`, codexHome]); await checkOutput(["sudo", "chmod", "755", codexHome]); - const serverInfoFile = path4.join(codexHome, `${githubRunId}.json`); + const serverInfoFile = path7.join(codexHome, `${githubRunId}.json`); await checkOutput(["sudo", "touch", serverInfoFile]); await checkOutput(["sudo", "chmod", "666", serverInfoFile]); return codexHome; @@ -28023,7 +28828,7 @@ function expandTilde(p) { return os3.homedir(); } if (p.startsWith("~/") || p.startsWith("~\\")) { - return path4.join(os3.homedir(), p.slice(2)); + return path7.join(os3.homedir(), p.slice(2)); } return p; } @@ -28039,4 +28844,4 @@ undici/lib/fetch/body.js: undici/lib/websocket/frame.js: (*! ws. MIT License. Einar Otto Stangvik *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1jb250ZW50LXR5cGUtcGFyc2VAMi4wLjEvbm9kZV9tb2R1bGVzL2Zhc3QtY29udGVudC10eXBlLXBhcnNlL2luZGV4LmpzIiwgIi4uL3NyYy9tYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb21tYW5kZXJAMTQuMC4xL25vZGVfbW9kdWxlcy9jb21tYW5kZXIvZXNtLm1qcyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL3JlYWRTZXJ2ZXJJbmZvLnRzIiwgIi4uL3NyYy9ydW5Db2RleEV4ZWMudHMiLCAiLi4vc3JjL2NoZWNrT3V0cHV0LnRzIiwgIi4uL3NyYy9kcm9wU3Vkby50cyIsICIuLi9zcmMvY2hlY2tBY3RvclBlcm1pc3Npb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bml2ZXJzYWwtdXNlci1hZ2VudEA3LjAuMy9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVnaXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvYWRkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtlbmRwb2ludEAxMC4xLjQvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXF1ZXN0QDkuMi40L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXF1ZXN0LWVycm9yQDYuMS44L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0LWVycm9yL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtncmFwaHFsQDguMi4yL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCthdXRoLXRva2VuQDUuMS4yL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9hdXRoLXRva2VuL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXF1ZXN0LWxvZ0A1LjMuMV9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlcXVlc3QtbG9nQDUuMy4xX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXBhZ2luYXRlLXJlc3RAMTEuNi4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2dlbmVyYXRlZC9lbmRwb2ludHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9lbmRwb2ludHMtdG8tbWV0aG9kcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXN0QDIxLjEuMS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXN0QDIxLjEuMS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nLWFyZ3ZAMC4zLjIvbm9kZV9tb2R1bGVzL3N0cmluZy1hcmd2L2luZGV4LmpzIiwgIi4uL3NyYy93cml0ZVByb3h5Q29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvbW1hbmRlckVycm9yIGNsYXNzXG4gKi9cbmNsYXNzIENvbW1hbmRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgQ29tbWFuZGVyRXJyb3IgY2xhc3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIHN1Z2dlc3RlZCBleGl0IGNvZGUgd2hpY2ggY291bGQgYmUgdXNlZCB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgLy8gcHJvcGVybHkgY2FwdHVyZSBzdGFjayB0cmFjZSBpbiBOb2RlLmpzXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5leGl0Q29kZSA9IGV4aXRDb2RlO1xuICAgIHRoaXMubmVzdGVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBjbGFzc1xuICovXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIENvbW1hbmRlckVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIEludmFsaWRBcmd1bWVudEVycm9yIGNsYXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZXhwbGFuYXRpb24gb2Ygd2h5IGFyZ3VtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcigxLCAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcsIG1lc3NhZ2UpO1xuICAgIC8vIHByb3Blcmx5IGNhcHR1cmUgc3RhY2sgdHJhY2UgaW4gTm9kZS5qc1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxufVxuXG5leHBvcnRzLkNvbW1hbmRlckVycm9yID0gQ29tbWFuZGVyRXJyb3I7XG5leHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7XG4iLCAiY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuXG5jbGFzcyBBcmd1bWVudCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGNvbW1hbmQgYXJndW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgZGVzY3JpcHRpb24uXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIHJlcXVpcmVkLCBhbmQgeW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGluZGljYXRlIHRoaXMgd2l0aCA8PiBhcm91bmQgdGhlIG5hbWUuIFB1dCBbXSBhcm91bmQgdGhlIG5hbWUgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcbiAgICB0aGlzLnZhcmlhZGljID0gZmFsc2U7XG4gICAgdGhpcy5wYXJzZUFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHVuZGVmaW5lZDtcblxuICAgIHN3aXRjaCAobmFtZVswXSkge1xuICAgICAgY2FzZSAnPCc6IC8vIGUuZy4gPHJlcXVpcmVkPlxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1snOiAvLyBlLmcuIFtvcHRpb25hbF1cbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbmFtZS5lbmRzV2l0aCgnLi4uJykpIHtcbiAgICAgIHRoaXMudmFyaWFkaWMgPSB0cnVlO1xuICAgICAgdGhpcy5fbmFtZSA9IHRoaXMuX25hbWUuc2xpY2UoMCwgLTMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYXJndW1lbnQgbmFtZS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9jb2xsZWN0VmFsdWUodmFsdWUsIHByZXZpb3VzKSB7XG4gICAgaWYgKHByZXZpb3VzID09PSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cblxuICAgIHByZXZpb3VzLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBwcmV2aW91cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBkZWZhdWx0KHZhbHVlLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIGNvbW1hbmQgYXJndW1lbnRzIGludG8gYXJndW1lbnQgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBhcmdQYXJzZXIoZm4pIHtcbiAgICB0aGlzLnBhcnNlQXJnID0gZm47XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT25seSBhbGxvdyBhcmd1bWVudCB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBjaG9pY2VzKHZhbHVlcykge1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHRoaXMucGFyc2VBcmcgPSAoYXJnLCBwcmV2aW91cykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZ0Nob2ljZXMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt0aGlzLmFyZ0Nob2ljZXMuam9pbignLCAnKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhcmlhZGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0VmFsdWUoYXJnLCBwcmV2aW91cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhcmd1bWVudCByZXF1aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge0FyZ3VtZW50fVxuICAgKi9cbiAgYXJnUmVxdWlyZWQoKSB7XG4gICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhcmd1bWVudCBvcHRpb25hbC5cbiAgICpcbiAgICogQHJldHVybnMge0FyZ3VtZW50fVxuICAgKi9cbiAgYXJnT3B0aW9uYWwoKSB7XG4gICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaXRzIGh1bWFuIHJlYWRhYmxlIGVxdWl2YWxlbnQgZm9yIGhlbHAgdXNhZ2UuXG4gKlxuICogQHBhcmFtIHtBcmd1bWVudH0gYXJnXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZykge1xuICBjb25zdCBuYW1lT3V0cHV0ID0gYXJnLm5hbWUoKSArIChhcmcudmFyaWFkaWMgPT09IHRydWUgPyAnLi4uJyA6ICcnKTtcblxuICByZXR1cm4gYXJnLnJlcXVpcmVkID8gJzwnICsgbmFtZU91dHB1dCArICc+JyA6ICdbJyArIG5hbWVPdXRwdXQgKyAnXSc7XG59XG5cbmV4cG9ydHMuQXJndW1lbnQgPSBBcmd1bWVudDtcbmV4cG9ydHMuaHVtYW5SZWFkYWJsZUFyZ05hbWUgPSBodW1hblJlYWRhYmxlQXJnTmFtZTtcbiIsICJjb25zdCB7IGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCBpbXBvcnQgdHlwZXMgZm9yIEpTRG9jLCB1c2VkIGJ5IFZpc3VhbCBTdHVkaW8gQ29kZSBJbnRlbGxpU2Vuc2UgYW5kIGBucG0gcnVuIHR5cGVzY3JpcHQtY2hlY2tKU2BcbiAqIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2pzZG9jLXN1cHBvcnRlZC10eXBlcy5odG1sI2ltcG9ydC10eXBlc1xuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL2FyZ3VtZW50LmpzXCIpLkFyZ3VtZW50IH0gQXJndW1lbnRcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9jb21tYW5kLmpzXCIpLkNvbW1hbmQgfSBDb21tYW5kXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vb3B0aW9uLmpzXCIpLk9wdGlvbiB9IE9wdGlvblxuICovXG5cbi8vIEFsdGhvdWdoIHRoaXMgaXMgYSBjbGFzcywgbWV0aG9kcyBhcmUgc3RhdGljIGluIHN0eWxlIHRvIGFsbG93IG92ZXJyaWRlIHVzaW5nIHN1YmNsYXNzIG9yIGp1c3QgZnVuY3Rpb25zLlxuY2xhc3MgSGVscCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVscFdpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWluV2lkdGhUb1dyYXAgPSA0MDtcbiAgICB0aGlzLnNvcnRTdWJjb21tYW5kcyA9IGZhbHNlO1xuICAgIHRoaXMuc29ydE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dHbG9iYWxPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZUNvbnRleHQgaXMgY2FsbGVkIGJ5IENvbW1hbmRlciBhZnRlciBhcHBseWluZyBvdmVycmlkZXMgZnJvbSBgQ29tbWFuZC5jb25maWd1cmVIZWxwKClgXG4gICAqIGFuZCBqdXN0IGJlZm9yZSBjYWxsaW5nIGBmb3JtYXRIZWxwKClgLlxuICAgKlxuICAgKiBDb21tYW5kZXIganVzdCB1c2VzIHRoZSBoZWxwV2lkdGggYW5kIHRoZSByZXN0IGlzIHByb3ZpZGVkIGZvciBvcHRpb25hbCB1c2UgYnkgbW9yZSBjb21wbGV4IHN1YmNsYXNzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcj86IGJvb2xlYW4sIGhlbHBXaWR0aD86IG51bWJlciwgb3V0cHV0SGFzQ29sb3JzPzogYm9vbGVhbiB9fSBjb250ZXh0T3B0aW9uc1xuICAgKi9cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhlbHBXaWR0aCA9IHRoaXMuaGVscFdpZHRoID8/IGNvbnRleHRPcHRpb25zLmhlbHBXaWR0aCA/PyA4MDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgc3ViY29tbWFuZHMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIGNvbW1hbmQsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge0NvbW1hbmRbXX1cbiAgICovXG5cbiAgdmlzaWJsZUNvbW1hbmRzKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVDb21tYW5kcyA9IGNtZC5jb21tYW5kcy5maWx0ZXIoKGNtZCkgPT4gIWNtZC5faGlkZGVuKTtcbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IGNtZC5fZ2V0SGVscENvbW1hbmQoKTtcbiAgICBpZiAoaGVscENvbW1hbmQgJiYgIWhlbHBDb21tYW5kLl9oaWRkZW4pIHtcbiAgICAgIHZpc2libGVDb21tYW5kcy5wdXNoKGhlbHBDb21tYW5kKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydFN1YmNvbW1hbmRzKSB7XG4gICAgICB2aXNpYmxlQ29tbWFuZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICAgICAgcmV0dXJuIGEubmFtZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlQ29tbWFuZHM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBvcHRpb25zIGZvciBzb3J0LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gYVxuICAgKiBAcGFyYW0ge09wdGlvbn0gYlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY29tcGFyZU9wdGlvbnMoYSwgYikge1xuICAgIGNvbnN0IGdldFNvcnRLZXkgPSAob3B0aW9uKSA9PiB7XG4gICAgICAvLyBXWVNJV1lHIGZvciBvcmRlciBkaXNwbGF5ZWQgaW4gaGVscC4gU2hvcnQgdXNlZCBmb3IgY29tcGFyaXNvbiBpZiBwcmVzZW50LiBObyBzcGVjaWFsIGhhbmRsaW5nIGZvciBuZWdhdGVkLlxuICAgICAgcmV0dXJuIG9wdGlvbi5zaG9ydFxuICAgICAgICA/IG9wdGlvbi5zaG9ydC5yZXBsYWNlKC9eLS8sICcnKVxuICAgICAgICA6IG9wdGlvbi5sb25nLnJlcGxhY2UoL14tLS8sICcnKTtcbiAgICB9O1xuICAgIHJldHVybiBnZXRTb3J0S2V5KGEpLmxvY2FsZUNvbXBhcmUoZ2V0U29ydEtleShiKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIG9wdGlvbnMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIG9wdGlvbiwgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7T3B0aW9uW119XG4gICAqL1xuXG4gIHZpc2libGVPcHRpb25zKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gY21kLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuKTtcbiAgICAvLyBCdWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICBjb25zdCBoZWxwT3B0aW9uID0gY21kLl9nZXRIZWxwT3B0aW9uKCk7XG4gICAgaWYgKGhlbHBPcHRpb24gJiYgIWhlbHBPcHRpb24uaGlkZGVuKSB7XG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGhpZGUgY29uZmxpY3RpbmcgZmxhZ3MuIEJpdCBkdWJpb3VzIGJ1dCBhIGhpc3RvcmljYWwgYmVoYXZpb3VyIHRoYXQgaXMgY29udmVuaWVudCBmb3Igc2luZ2xlLWNvbW1hbmQgcHJvZ3JhbXMuXG4gICAgICBjb25zdCByZW1vdmVTaG9ydCA9IGhlbHBPcHRpb24uc2hvcnQgJiYgY21kLl9maW5kT3B0aW9uKGhlbHBPcHRpb24uc2hvcnQpO1xuICAgICAgY29uc3QgcmVtb3ZlTG9uZyA9IGhlbHBPcHRpb24ubG9uZyAmJiBjbWQuX2ZpbmRPcHRpb24oaGVscE9wdGlvbi5sb25nKTtcbiAgICAgIGlmICghcmVtb3ZlU2hvcnQgJiYgIXJlbW92ZUxvbmcpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChoZWxwT3B0aW9uKTsgLy8gbm8gY2hhbmdlcyBuZWVkZWRcbiAgICAgIH0gZWxzZSBpZiAoaGVscE9wdGlvbi5sb25nICYmICFyZW1vdmVMb25nKSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goXG4gICAgICAgICAgY21kLmNyZWF0ZU9wdGlvbihoZWxwT3B0aW9uLmxvbmcsIGhlbHBPcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChoZWxwT3B0aW9uLnNob3J0ICYmICFyZW1vdmVTaG9ydCkge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIGNtZC5jcmVhdGVPcHRpb24oaGVscE9wdGlvbi5zaG9ydCwgaGVscE9wdGlvbi5kZXNjcmlwdGlvbiksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICB2aXNpYmxlT3B0aW9ucy5zb3J0KHRoaXMuY29tcGFyZU9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZU9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIGdsb2JhbCBvcHRpb25zLiAoTm90IGluY2x1ZGluZyBoZWxwLilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge09wdGlvbltdfVxuICAgKi9cblxuICB2aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0dsb2JhbE9wdGlvbnMpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGdsb2JhbE9wdGlvbnMgPSBbXTtcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gYW5jZXN0b3JDbWQub3B0aW9ucy5maWx0ZXIoXG4gICAgICAgIChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuLFxuICAgICAgKTtcbiAgICAgIGdsb2JhbE9wdGlvbnMucHVzaCguLi52aXNpYmxlT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICBnbG9iYWxPcHRpb25zLnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgYXJndW1lbnRzIGlmIGFueSBoYXZlIGEgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudFtdfVxuICAgKi9cblxuICB2aXNpYmxlQXJndW1lbnRzKGNtZCkge1xuICAgIC8vIFNpZGUgZWZmZWN0ISBBcHBseSB0aGUgbGVnYWN5IGRlc2NyaXB0aW9ucyBiZWZvcmUgdGhlIGFyZ3VtZW50cyBhcmUgZGlzcGxheWVkLlxuICAgIGlmIChjbWQuX2FyZ3NEZXNjcmlwdGlvbikge1xuICAgICAgY21kLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQpID0+IHtcbiAgICAgICAgYXJndW1lbnQuZGVzY3JpcHRpb24gPVxuICAgICAgICAgIGFyZ3VtZW50LmRlc2NyaXB0aW9uIHx8IGNtZC5fYXJnc0Rlc2NyaXB0aW9uW2FyZ3VtZW50Lm5hbWUoKV0gfHwgJyc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGFyZ3VtZW50cyB3aXRoIGEgZGVzY3JpcHRpb24gdGhlbiByZXR1cm4gYWxsIHRoZSBhcmd1bWVudHMuXG4gICAgaWYgKGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzLmZpbmQoKGFyZ3VtZW50KSA9PiBhcmd1bWVudC5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbWFuZCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIHN1YmNvbW1hbmRUZXJtKGNtZCkge1xuICAgIC8vIExlZ2FjeS4gSWdub3JlcyBjdXN0b20gdXNhZ2Ugc3RyaW5nLCBhbmQgbmVzdGVkIGNvbW1hbmRzLlxuICAgIGNvbnN0IGFyZ3MgPSBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50c1xuICAgICAgLm1hcCgoYXJnKSA9PiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgICByZXR1cm4gKFxuICAgICAgY21kLl9uYW1lICtcbiAgICAgIChjbWQuX2FsaWFzZXNbMF0gPyAnfCcgKyBjbWQuX2FsaWFzZXNbMF0gOiAnJykgK1xuICAgICAgKGNtZC5vcHRpb25zLmxlbmd0aCA/ICcgW29wdGlvbnNdJyA6ICcnKSArIC8vIHNpbXBsaXN0aWMgY2hlY2sgZm9yIG5vbi1oZWxwIG9wdGlvblxuICAgICAgKGFyZ3MgPyAnICcgKyBhcmdzIDogJycpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbiB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBvcHRpb25UZXJtKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24uZmxhZ3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcmd1bWVudCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBhcmd1bWVudFRlcm0oYXJndW1lbnQpIHtcbiAgICByZXR1cm4gYXJndW1lbnQubmFtZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBjb21tYW5kIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0U3ViY29tbWFuZFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLnJlZHVjZSgobWF4LCBjb21tYW5kKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZFRlcm0oaGVscGVyLnN1YmNvbW1hbmRUZXJtKGNvbW1hbmQpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IG9wdGlvbiB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVPcHRpb25zKGNtZCkucmVkdWNlKChtYXgsIG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSkpLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgZ2xvYmFsIG9wdGlvbiB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdEdsb2JhbE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVHbG9iYWxPcHRpb25zKGNtZCkucmVkdWNlKChtYXgsIG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSkpLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgYXJndW1lbnQgdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RBcmd1bWVudFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVBcmd1bWVudHMoY21kKS5yZWR1Y2UoKG1heCwgYXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudFRlcm0oaGVscGVyLmFyZ3VtZW50VGVybShhcmd1bWVudCkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbW1hbmQgdXNhZ2UgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSB0b3Agb2YgdGhlIGJ1aWx0LWluIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGNvbW1hbmRVc2FnZShjbWQpIHtcbiAgICAvLyBVc2FnZVxuICAgIGxldCBjbWROYW1lID0gY21kLl9uYW1lO1xuICAgIGlmIChjbWQuX2FsaWFzZXNbMF0pIHtcbiAgICAgIGNtZE5hbWUgPSBjbWROYW1lICsgJ3wnICsgY21kLl9hbGlhc2VzWzBdO1xuICAgIH1cbiAgICBsZXQgYW5jZXN0b3JDbWROYW1lcyA9ICcnO1xuICAgIGZvciAoXG4gICAgICBsZXQgYW5jZXN0b3JDbWQgPSBjbWQucGFyZW50O1xuICAgICAgYW5jZXN0b3JDbWQ7XG4gICAgICBhbmNlc3RvckNtZCA9IGFuY2VzdG9yQ21kLnBhcmVudFxuICAgICkge1xuICAgICAgYW5jZXN0b3JDbWROYW1lcyA9IGFuY2VzdG9yQ21kLm5hbWUoKSArICcgJyArIGFuY2VzdG9yQ21kTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvckNtZE5hbWVzICsgY21kTmFtZSArICcgJyArIGNtZC51c2FnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBjb21tYW5kRGVzY3JpcHRpb24oY21kKSB7XG4gICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgcmV0dXJuIGNtZC5kZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3ViY29tbWFuZCBzdW1tYXJ5IHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMuXG4gICAqIChGYWxsYmFjayB0byBkZXNjcmlwdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBzdWJjb21tYW5kRGVzY3JpcHRpb24oY21kKSB7XG4gICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgcmV0dXJuIGNtZC5zdW1tYXJ5KCkgfHwgY21kLmRlc2NyaXB0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcHRpb24gZGVzY3JpcHRpb24gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgb3B0aW9uRGVzY3JpcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgZXh0cmFJbmZvID0gW107XG5cbiAgICBpZiAob3B0aW9uLmFyZ0Nob2ljZXMpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAvLyB1c2Ugc3RyaW5naWZ5IHRvIG1hdGNoIHRoZSBkaXNwbGF5IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGBjaG9pY2VzOiAke29wdGlvbi5hcmdDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBKU09OLnN0cmluZ2lmeShjaG9pY2UpKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkZWZhdWx0IGZvciBib29sZWFuIGFuZCBuZWdhdGVkIG1vcmUgZm9yIHByb2dyYW1tZXIgdGhhbiBlbmQgdXNlcixcbiAgICAgIC8vIGJ1dCBzaG93IHRydWUvZmFsc2UgZm9yIGJvb2xlYW4gb3B0aW9uIGFzIG1heSBiZSBmb3IgaGFuZC1yb2xsZWQgZW52IG9yIGNvbmZpZyBwcm9jZXNzaW5nLlxuICAgICAgY29uc3Qgc2hvd0RlZmF1bHQgPVxuICAgICAgICBvcHRpb24ucmVxdWlyZWQgfHxcbiAgICAgICAgb3B0aW9uLm9wdGlvbmFsIHx8XG4gICAgICAgIChvcHRpb24uaXNCb29sZWFuKCkgJiYgdHlwZW9mIG9wdGlvbi5kZWZhdWx0VmFsdWUgPT09ICdib29sZWFuJyk7XG4gICAgICBpZiAoc2hvd0RlZmF1bHQpIHtcbiAgICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgICAgYGRlZmF1bHQ6ICR7b3B0aW9uLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uIHx8IEpTT04uc3RyaW5naWZ5KG9wdGlvbi5kZWZhdWx0VmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHByZXNldCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBhcmUgbW9yZSBmb3IgcHJvZ3JhbW1lciB0aGFuIGVuZCB1c2VyXG4gICAgaWYgKG9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCAmJiBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKGBwcmVzZXQ6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9uLnByZXNldEFyZyl9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb24uZW52VmFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKGBlbnY6ICR7b3B0aW9uLmVudlZhcn1gKTtcbiAgICB9XG4gICAgaWYgKGV4dHJhSW5mby5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHRyYURlc2NyaXB0aW9uID0gYCgke2V4dHJhSW5mby5qb2luKCcsICcpfSlgO1xuICAgICAgaWYgKG9wdGlvbi5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7b3B0aW9uLmRlc2NyaXB0aW9ufSAke2V4dHJhRGVzY3JpcHRpb259YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYURlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb24uZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbiB0byBzaG93IGluIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBhcmd1bWVudERlc2NyaXB0aW9uKGFyZ3VtZW50KSB7XG4gICAgY29uc3QgZXh0cmFJbmZvID0gW107XG4gICAgaWYgKGFyZ3VtZW50LmFyZ0Nob2ljZXMpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAvLyB1c2Ugc3RyaW5naWZ5IHRvIG1hdGNoIHRoZSBkaXNwbGF5IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGBjaG9pY2VzOiAke2FyZ3VtZW50LmFyZ0Nob2ljZXMubWFwKChjaG9pY2UpID0+IEpTT04uc3RyaW5naWZ5KGNob2ljZSkpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhcmd1bWVudC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIGBkZWZhdWx0OiAke2FyZ3VtZW50LmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uIHx8IEpTT04uc3RyaW5naWZ5KGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChleHRyYUluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXh0cmFEZXNjcmlwdGlvbiA9IGAoJHtleHRyYUluZm8uam9pbignLCAnKX0pYDtcbiAgICAgIGlmIChhcmd1bWVudC5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7YXJndW1lbnQuZGVzY3JpcHRpb259ICR7ZXh0cmFEZXNjcmlwdGlvbn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhRGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiBhcmd1bWVudC5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBsaXN0IG9mIGl0ZW1zLCBnaXZlbiBhIGhlYWRpbmcgYW5kIGFuIGFycmF5IG9mIGZvcm1hdHRlZCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRpbmdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gaXRlbXNcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMgc3RyaW5nW11cbiAgICovXG4gIGZvcm1hdEl0ZW1MaXN0KGhlYWRpbmcsIGl0ZW1zLCBoZWxwZXIpIHtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gW2hlbHBlci5zdHlsZVRpdGxlKGhlYWRpbmcpLCAuLi5pdGVtcywgJyddO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwIGl0ZW1zIGJ5IHRoZWlyIGhlbHAgZ3JvdXAgaGVhZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kW10gfCBPcHRpb25bXX0gdW5zb3J0ZWRJdGVtc1xuICAgKiBAcGFyYW0ge0NvbW1hbmRbXSB8IE9wdGlvbltdfSB2aXNpYmxlSXRlbXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0R3JvdXBcbiAgICogQHJldHVybnMge01hcDxzdHJpbmcsIENvbW1hbmRbXSB8IE9wdGlvbltdPn1cbiAgICovXG4gIGdyb3VwSXRlbXModW5zb3J0ZWRJdGVtcywgdmlzaWJsZUl0ZW1zLCBnZXRHcm91cCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICAvLyBBZGQgZ3JvdXBzIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gdW5zb3J0ZWRJdGVtcy5cbiAgICB1bnNvcnRlZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0R3JvdXAoaXRlbSk7XG4gICAgICBpZiAoIXJlc3VsdC5oYXMoZ3JvdXApKSByZXN1bHQuc2V0KGdyb3VwLCBbXSk7XG4gICAgfSk7XG4gICAgLy8gQWRkIGl0ZW1zIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gdmlzaWJsZUl0ZW1zLlxuICAgIHZpc2libGVJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IGdldEdyb3VwKGl0ZW0pO1xuICAgICAgaWYgKCFyZXN1bHQuaGFzKGdyb3VwKSkge1xuICAgICAgICByZXN1bHQuc2V0KGdyb3VwLCBbXSk7XG4gICAgICB9XG4gICAgICByZXN1bHQuZ2V0KGdyb3VwKS5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIGJ1aWx0LWluIGhlbHAgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgZm9ybWF0SGVscChjbWQsIGhlbHBlcikge1xuICAgIGNvbnN0IHRlcm1XaWR0aCA9IGhlbHBlci5wYWRXaWR0aChjbWQsIGhlbHBlcik7XG4gICAgY29uc3QgaGVscFdpZHRoID0gaGVscGVyLmhlbHBXaWR0aCA/PyA4MDsgLy8gaW4gY2FzZSBwcmVwYXJlQ29udGV4dCgpIHdhcyBub3QgY2FsbGVkXG5cbiAgICBmdW5jdGlvbiBjYWxsRm9ybWF0SXRlbSh0ZXJtLCBkZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGhlbHBlci5mb3JtYXRJdGVtKHRlcm0sIHRlcm1XaWR0aCwgZGVzY3JpcHRpb24sIGhlbHBlcik7XG4gICAgfVxuXG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgb3V0cHV0ID0gW1xuICAgICAgYCR7aGVscGVyLnN0eWxlVGl0bGUoJ1VzYWdlOicpfSAke2hlbHBlci5zdHlsZVVzYWdlKGhlbHBlci5jb21tYW5kVXNhZ2UoY21kKSl9YCxcbiAgICAgICcnLFxuICAgIF07XG5cbiAgICAvLyBEZXNjcmlwdGlvblxuICAgIGNvbnN0IGNvbW1hbmREZXNjcmlwdGlvbiA9IGhlbHBlci5jb21tYW5kRGVzY3JpcHRpb24oY21kKTtcbiAgICBpZiAoY29tbWFuZERlc2NyaXB0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoW1xuICAgICAgICBoZWxwZXIuYm94V3JhcChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVDb21tYW5kRGVzY3JpcHRpb24oY29tbWFuZERlc2NyaXB0aW9uKSxcbiAgICAgICAgICBoZWxwV2lkdGgsXG4gICAgICAgICksXG4gICAgICAgICcnLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQXJndW1lbnRzXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gaGVscGVyLnZpc2libGVBcmd1bWVudHMoY21kKS5tYXAoKGFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50VGVybShoZWxwZXIuYXJndW1lbnRUZXJtKGFyZ3VtZW50KSksXG4gICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50RGVzY3JpcHRpb24oaGVscGVyLmFyZ3VtZW50RGVzY3JpcHRpb24oYXJndW1lbnQpKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgIHRoaXMuZm9ybWF0SXRlbUxpc3QoJ0FyZ3VtZW50czonLCBhcmd1bWVudExpc3QsIGhlbHBlciksXG4gICAgKTtcblxuICAgIC8vIE9wdGlvbnNcbiAgICBjb25zdCBvcHRpb25Hcm91cHMgPSB0aGlzLmdyb3VwSXRlbXMoXG4gICAgICBjbWQub3B0aW9ucyxcbiAgICAgIGhlbHBlci52aXNpYmxlT3B0aW9ucyhjbWQpLFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmhlbHBHcm91cEhlYWRpbmcgPz8gJ09wdGlvbnM6JyxcbiAgICApO1xuICAgIG9wdGlvbkdyb3Vwcy5mb3JFYWNoKChvcHRpb25zLCBncm91cCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSksXG4gICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uRGVzY3JpcHRpb24oaGVscGVyLm9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikpLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KHRoaXMuZm9ybWF0SXRlbUxpc3QoZ3JvdXAsIG9wdGlvbkxpc3QsIGhlbHBlcikpO1xuICAgIH0pO1xuXG4gICAgaWYgKGhlbHBlci5zaG93R2xvYmFsT3B0aW9ucykge1xuICAgICAgY29uc3QgZ2xvYmFsT3B0aW9uTGlzdCA9IGhlbHBlclxuICAgICAgICAudmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKVxuICAgICAgICAubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpLFxuICAgICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uRGVzY3JpcHRpb24oaGVscGVyLm9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgdGhpcy5mb3JtYXRJdGVtTGlzdCgnR2xvYmFsIE9wdGlvbnM6JywgZ2xvYmFsT3B0aW9uTGlzdCwgaGVscGVyKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29tbWFuZHNcbiAgICBjb25zdCBjb21tYW5kR3JvdXBzID0gdGhpcy5ncm91cEl0ZW1zKFxuICAgICAgY21kLmNvbW1hbmRzLFxuICAgICAgaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLFxuICAgICAgKHN1YikgPT4gc3ViLmhlbHBHcm91cCgpIHx8ICdDb21tYW5kczonLFxuICAgICk7XG4gICAgY29tbWFuZEdyb3Vwcy5mb3JFYWNoKChjb21tYW5kcywgZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRMaXN0ID0gY29tbWFuZHMubWFwKChzdWIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmRUZXJtKGhlbHBlci5zdWJjb21tYW5kVGVybShzdWIpKSxcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kRGVzY3JpcHRpb24oaGVscGVyLnN1YmNvbW1hbmREZXNjcmlwdGlvbihzdWIpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdCh0aGlzLmZvcm1hdEl0ZW1MaXN0KGdyb3VwLCBjb21tYW5kTGlzdCwgaGVscGVyKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3V0cHV0LmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBkaXNwbGF5IHdpZHRoIG9mIHN0cmluZywgaWdub3JpbmcgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLiBVc2VkIGluIHBhZGRpbmcgYW5kIHdyYXBwaW5nIGNhbGN1bGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzcGxheVdpZHRoKHN0cikge1xuICAgIHJldHVybiBzdHJpcENvbG9yKHN0cikubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0eWxlIHRoZSB0aXRsZSBmb3IgZGlzcGxheWluZyBpbiB0aGUgaGVscC4gQ2FsbGVkIHdpdGggJ1VzYWdlOicsICdPcHRpb25zOicsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3R5bGVUaXRsZShzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc3R5bGVVc2FnZShzdHIpIHtcbiAgICAvLyBVc2FnZSBoYXMgbG90cyBvZiBwYXJ0cyB0aGUgdXNlciBtaWdodCBsaWtlIHRvIGNvbG9yIHNlcGFyYXRlbHkhIEFzc3VtZSBkZWZhdWx0IHVzYWdlIHN0cmluZyB3aGljaCBpcyBmb3JtZWQgbGlrZTpcbiAgICAvLyAgICBjb21tYW5kIHN1YmNvbW1hbmQgW29wdGlvbnNdIFtjb21tYW5kXSA8Zm9vPiBbYmFyXVxuICAgIHJldHVybiBzdHJcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgIGlmICh3b3JkID09PSAnW29wdGlvbnNdJykgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tjb21tYW5kXScpIHJldHVybiB0aGlzLnN0eWxlU3ViY29tbWFuZFRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkWzBdID09PSAnWycgfHwgd29yZFswXSA9PT0gJzwnKVxuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHdvcmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUNvbW1hbmRUZXh0KHdvcmQpOyAvLyBSZXN0cmljdCB0byBpbml0aWFsIHdvcmRzP1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgc3R5bGVDb21tYW5kRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZU9wdGlvbkRlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZUFyZ3VtZW50RGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlT3B0aW9uVGVybShzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmRUZXJtKHN0cikge1xuICAgIC8vIFRoaXMgaXMgdmVyeSBsaWtlIHVzYWdlIHdpdGggbG90cyBvZiBwYXJ0cyEgQXNzdW1lIGRlZmF1bHQgc3RyaW5nIHdoaWNoIGlzIGZvcm1lZCBsaWtlOlxuICAgIC8vICAgIHN1YmNvbW1hbmQgW29wdGlvbnNdIDxmb28+IFtiYXJdXG4gICAgcmV0dXJuIHN0clxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbb3B0aW9uc10nKSByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkWzBdID09PSAnWycgfHwgd29yZFswXSA9PT0gJzwnKVxuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHdvcmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZVN1YmNvbW1hbmRUZXh0KHdvcmQpOyAvLyBSZXN0cmljdCB0byBpbml0aWFsIHdvcmRzP1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgc3R5bGVBcmd1bWVudFRlcm0oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVBcmd1bWVudFRleHQoc3RyKTtcbiAgfVxuICBzdHlsZU9wdGlvblRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZUFyZ3VtZW50VGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZUNvbW1hbmRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwYWQgd2lkdGggZnJvbSB0aGUgbWF4aW11bSB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgcGFkV2lkdGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICBoZWxwZXIubG9uZ2VzdE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RHbG9iYWxPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0U3ViY29tbWFuZFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RBcmd1bWVudFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IG1hbnVhbGx5IHdyYXBwZWQgYW5kIGluZGVudGVkIHN0cmluZ3MgYnkgY2hlY2tpbmcgZm9yIGxpbmUgYnJlYWsgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHByZWZvcm1hdHRlZChzdHIpIHtcbiAgICByZXR1cm4gL1xcblteXFxTXFxyXFxuXS8udGVzdChzdHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgXCJpdGVtXCIsIHdoaWNoIGNvbnNpc3RzIG9mIGEgdGVybSBhbmQgZGVzY3JpcHRpb24uIFBhZCB0aGUgdGVybSBhbmQgd3JhcCB0aGUgZGVzY3JpcHRpb24sIGluZGVudGluZyB0aGUgZm9sbG93aW5nIGxpbmVzLlxuICAgKlxuICAgKiBTbyBcIlRUVFwiLCA1LCBcIkRERCBEREREIEREIERERFwiIG1pZ2h0IGJlIGZvcm1hdHRlZCBmb3IgdGhpcy5oZWxwV2lkdGg9MTcgbGlrZSBzbzpcbiAgICogICBUVFQgIERERCBEREREXG4gICAqICAgICAgICBERCBERERcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlcm1cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRlcm1XaWR0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb25cbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZvcm1hdEl0ZW0odGVybSwgdGVybVdpZHRoLCBkZXNjcmlwdGlvbiwgaGVscGVyKSB7XG4gICAgY29uc3QgaXRlbUluZGVudCA9IDI7XG4gICAgY29uc3QgaXRlbUluZGVudFN0ciA9ICcgJy5yZXBlYXQoaXRlbUluZGVudCk7XG4gICAgaWYgKCFkZXNjcmlwdGlvbikgcmV0dXJuIGl0ZW1JbmRlbnRTdHIgKyB0ZXJtO1xuXG4gICAgLy8gUGFkIHRoZSB0ZXJtIG91dCB0byBhIGNvbnNpc3RlbnQgd2lkdGgsIHNvIGRlc2NyaXB0aW9ucyBhcmUgYWxpZ25lZC5cbiAgICBjb25zdCBwYWRkZWRUZXJtID0gdGVybS5wYWRFbmQoXG4gICAgICB0ZXJtV2lkdGggKyB0ZXJtLmxlbmd0aCAtIGhlbHBlci5kaXNwbGF5V2lkdGgodGVybSksXG4gICAgKTtcblxuICAgIC8vIEZvcm1hdCB0aGUgZGVzY3JpcHRpb24uXG4gICAgY29uc3Qgc3BhY2VyV2lkdGggPSAyOyAvLyBiZXR3ZWVuIHRlcm0gYW5kIGRlc2NyaXB0aW9uXG4gICAgY29uc3QgaGVscFdpZHRoID0gdGhpcy5oZWxwV2lkdGggPz8gODA7IC8vIGluIGNhc2UgcHJlcGFyZUNvbnRleHQoKSB3YXMgbm90IGNhbGxlZFxuICAgIGNvbnN0IHJlbWFpbmluZ1dpZHRoID0gaGVscFdpZHRoIC0gdGVybVdpZHRoIC0gc3BhY2VyV2lkdGggLSBpdGVtSW5kZW50O1xuICAgIGxldCBmb3JtYXR0ZWREZXNjcmlwdGlvbjtcbiAgICBpZiAoXG4gICAgICByZW1haW5pbmdXaWR0aCA8IHRoaXMubWluV2lkdGhUb1dyYXAgfHxcbiAgICAgIGhlbHBlci5wcmVmb3JtYXR0ZWQoZGVzY3JpcHRpb24pXG4gICAgKSB7XG4gICAgICBmb3JtYXR0ZWREZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB3cmFwcGVkRGVzY3JpcHRpb24gPSBoZWxwZXIuYm94V3JhcChkZXNjcmlwdGlvbiwgcmVtYWluaW5nV2lkdGgpO1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24gPSB3cmFwcGVkRGVzY3JpcHRpb24ucmVwbGFjZShcbiAgICAgICAgL1xcbi9nLFxuICAgICAgICAnXFxuJyArICcgJy5yZXBlYXQodGVybVdpZHRoICsgc3BhY2VyV2lkdGgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgYW5kIG92ZXJhbGwgaW5kZW50LlxuICAgIHJldHVybiAoXG4gICAgICBpdGVtSW5kZW50U3RyICtcbiAgICAgIHBhZGRlZFRlcm0gK1xuICAgICAgJyAnLnJlcGVhdChzcGFjZXJXaWR0aCkgK1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24ucmVwbGFjZSgvXFxuL2csIGBcXG4ke2l0ZW1JbmRlbnRTdHJ9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgYSBzdHJpbmcgYXQgd2hpdGVzcGFjZSwgcHJlc2VydmluZyBleGlzdGluZyBsaW5lIGJyZWFrcy5cbiAgICogV3JhcHBpbmcgaXMgc2tpcHBlZCBpZiB0aGUgd2lkdGggaXMgbGVzcyB0aGFuIGBtaW5XaWR0aFRvV3JhcGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBib3hXcmFwKHN0ciwgd2lkdGgpIHtcbiAgICBpZiAod2lkdGggPCB0aGlzLm1pbldpZHRoVG9XcmFwKSByZXR1cm4gc3RyO1xuXG4gICAgY29uc3QgcmF3TGluZXMgPSBzdHIuc3BsaXQoL1xcclxcbnxcXG4vKTtcbiAgICAvLyBzcGxpdCB1cCB0ZXh0IGJ5IHdoaXRlc3BhY2VcbiAgICBjb25zdCBjaHVua1BhdHRlcm4gPSAvW1xcc10qW15cXHNdKy9nO1xuICAgIGNvbnN0IHdyYXBwZWRMaW5lcyA9IFtdO1xuICAgIHJhd0xpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IGxpbmUubWF0Y2goY2h1bmtQYXR0ZXJuKTtcbiAgICAgIGlmIChjaHVua3MgPT09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlZExpbmVzLnB1c2goJycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBzdW1DaHVua3MgPSBbY2h1bmtzLnNoaWZ0KCldO1xuICAgICAgbGV0IHN1bVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgoc3VtQ2h1bmtzWzBdKTtcbiAgICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChjaHVuayk7XG4gICAgICAgIC8vIEFjY3VtdWxhdGUgY2h1bmtzIHdoaWxlIHRoZXkgZml0IGludG8gd2lkdGguXG4gICAgICAgIGlmIChzdW1XaWR0aCArIHZpc2libGVXaWR0aCA8PSB3aWR0aCkge1xuICAgICAgICAgIHN1bUNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICBzdW1XaWR0aCArPSB2aXNpYmxlV2lkdGg7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1bUNodW5rcy5qb2luKCcnKSk7XG5cbiAgICAgICAgY29uc3QgbmV4dENodW5rID0gY2h1bmsudHJpbVN0YXJ0KCk7IC8vIHRyaW0gc3BhY2UgYXQgbGluZSBicmVha1xuICAgICAgICBzdW1DaHVua3MgPSBbbmV4dENodW5rXTtcbiAgICAgICAgc3VtV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChuZXh0Q2h1bmspO1xuICAgICAgfSk7XG4gICAgICB3cmFwcGVkTGluZXMucHVzaChzdW1DaHVua3Muam9pbignJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdyYXBwZWRMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmlwIHN0eWxlIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBmcm9tIHRoZSBzdHJpbmcuIEluIHBhcnRpY3VsYXIsIFNHUiAoU2VsZWN0IEdyYXBoaWMgUmVuZGl0aW9uKSBjb2Rlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogQHBhY2thZ2VcbiAqL1xuXG5mdW5jdGlvbiBzdHJpcENvbG9yKHN0cikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICBjb25zdCBzZ3JQYXR0ZXJuID0gL1xceDFiXFxbXFxkKig7XFxkKikqbS9nO1xuICByZXR1cm4gc3RyLnJlcGxhY2Uoc2dyUGF0dGVybiwgJycpO1xufVxuXG5leHBvcnRzLkhlbHAgPSBIZWxwO1xuZXhwb3J0cy5zdHJpcENvbG9yID0gc3RyaXBDb2xvcjtcbiIsICJjb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5cbmNsYXNzIE9wdGlvbiB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGBPcHRpb25gIHdpdGggdGhlIGdpdmVuIGBmbGFnc2AgYW5kIGBkZXNjcmlwdGlvbmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICcnO1xuXG4gICAgdGhpcy5yZXF1aXJlZCA9IGZsYWdzLmluY2x1ZGVzKCc8Jyk7IC8vIEEgdmFsdWUgbXVzdCBiZSBzdXBwbGllZCB3aGVuIHRoZSBvcHRpb24gaXMgc3BlY2lmaWVkLlxuICAgIHRoaXMub3B0aW9uYWwgPSBmbGFncy5pbmNsdWRlcygnWycpOyAvLyBBIHZhbHVlIGlzIG9wdGlvbmFsIHdoZW4gdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQuXG4gICAgLy8gdmFyaWFkaWMgdGVzdCBpZ25vcmVzIDx2YWx1ZSwuLi4+IGV0IGFsIHdoaWNoIG1pZ2h0IGJlIHVzZWQgdG8gZGVzY3JpYmUgY3VzdG9tIHNwbGl0dGluZyBvZiBzaW5nbGUgYXJndW1lbnRcbiAgICB0aGlzLnZhcmlhZGljID0gL1xcd1xcLlxcLlxcLls+XFxdXSQvLnRlc3QoZmxhZ3MpOyAvLyBUaGUgb3B0aW9uIGNhbiB0YWtlIG11bHRpcGxlIHZhbHVlcy5cbiAgICB0aGlzLm1hbmRhdG9yeSA9IGZhbHNlOyAvLyBUaGUgb3B0aW9uIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgbXVzdCBiZSBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLlxuICAgIGNvbnN0IG9wdGlvbkZsYWdzID0gc3BsaXRPcHRpb25GbGFncyhmbGFncyk7XG4gICAgdGhpcy5zaG9ydCA9IG9wdGlvbkZsYWdzLnNob3J0RmxhZzsgLy8gTWF5IGJlIGEgc2hvcnQgZmxhZywgdW5kZWZpbmVkLCBvciBldmVuIGEgbG9uZyBmbGFnIChpZiBvcHRpb24gaGFzIHR3byBsb25nIGZsYWdzKS5cbiAgICB0aGlzLmxvbmcgPSBvcHRpb25GbGFncy5sb25nRmxhZztcbiAgICB0aGlzLm5lZ2F0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmxvbmcpIHtcbiAgICAgIHRoaXMubmVnYXRlID0gdGhpcy5sb25nLnN0YXJ0c1dpdGgoJy0tbm8tJyk7XG4gICAgfVxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcmVzZXRBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnZWYXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXJzZUFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbmZsaWN0c1dpdGggPSBbXTtcbiAgICB0aGlzLmltcGxpZWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oZWxwR3JvdXBIZWFkaW5nID0gdW5kZWZpbmVkOyAvLyBzb2Z0IGluaXRpYWxpc2VkIHdoZW4gb3B0aW9uIGFkZGVkIHRvIGNvbW1hbmRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgZGVmYXVsdCh2YWx1ZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVzZXQgdG8gdXNlIHdoZW4gb3B0aW9uIHVzZWQgd2l0aG91dCBvcHRpb24tYXJndW1lbnQsIGVzcGVjaWFsbHkgb3B0aW9uYWwgYnV0IGFsc28gYm9vbGVhbiBhbmQgbmVnYXRlZC5cbiAgICogVGhlIGN1c3RvbSBwcm9jZXNzaW5nIChwYXJzZUFyZykgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBuZXcgT3B0aW9uKCctLWNvbG9yJykuZGVmYXVsdCgnR1JFWVNDQUxFJykucHJlc2V0KCdSR0InKTtcbiAgICogbmV3IE9wdGlvbignLS1kb25hdGUgW2Ftb3VudF0nKS5wcmVzZXQoJzIwJykuYXJnUGFyc2VyKHBhcnNlRmxvYXQpO1xuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIHByZXNldChhcmcpIHtcbiAgICB0aGlzLnByZXNldEFyZyA9IGFyZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgb3B0aW9uIG5hbWUocykgdGhhdCBjb25mbGljdCB3aXRoIHRoaXMgb3B0aW9uLlxuICAgKiBBbiBlcnJvciB3aWxsIGJlIGRpc3BsYXllZCBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSBmb3VuZCBkdXJpbmcgcGFyc2luZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IE9wdGlvbignLS1yZ2InKS5jb25mbGljdHMoJ2NteWsnKTtcbiAgICogbmV3IE9wdGlvbignLS1qcycpLmNvbmZsaWN0cyhbJ3RzJywgJ2pzeCddKTtcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgc3RyaW5nW10pfSBuYW1lc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGNvbmZsaWN0cyhuYW1lcykge1xuICAgIHRoaXMuY29uZmxpY3RzV2l0aCA9IHRoaXMuY29uZmxpY3RzV2l0aC5jb25jYXQobmFtZXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgaW1wbGllZCBvcHRpb24gdmFsdWVzIGZvciB3aGVuIHRoaXMgb3B0aW9uIGlzIHNldCBhbmQgdGhlIGltcGxpZWQgb3B0aW9ucyBhcmUgbm90LlxuICAgKlxuICAgKiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgKHBhcnNlQXJnKSBpcyBub3QgY2FsbGVkIG9uIHRoZSBpbXBsaWVkIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2cnLCAnd3JpdGUgbG9nZ2luZyBpbmZvcm1hdGlvbiB0byBmaWxlJykpXG4gICAqICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRyYWNlJywgJ2xvZyBleHRyYSBkZXRhaWxzJykuaW1wbGllcyh7IGxvZzogJ3RyYWNlLnR4dCcgfSkpO1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW1wbGllZE9wdGlvblZhbHVlc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuICBpbXBsaWVzKGltcGxpZWRPcHRpb25WYWx1ZXMpIHtcbiAgICBsZXQgbmV3SW1wbGllZCA9IGltcGxpZWRPcHRpb25WYWx1ZXM7XG4gICAgaWYgKHR5cGVvZiBpbXBsaWVkT3B0aW9uVmFsdWVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gc3RyaW5nIGlzIG5vdCBkb2N1bWVudGVkLCBidXQgZWFzeSBtaXN0YWtlIGFuZCB3ZSBjYW4gZG8gd2hhdCB1c2VyIHByb2JhYmx5IGludGVuZGVkLlxuICAgICAgbmV3SW1wbGllZCA9IHsgW2ltcGxpZWRPcHRpb25WYWx1ZXNdOiB0cnVlIH07XG4gICAgfVxuICAgIHRoaXMuaW1wbGllZCA9IE9iamVjdC5hc3NpZ24odGhpcy5pbXBsaWVkIHx8IHt9LCBuZXdJbXBsaWVkKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY2hlY2sgZm9yIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgb25seSB1c2VkIGlmIHdoZW4gcHJvY2Vzc2VkIHRoZSBjdXJyZW50IG9wdGlvbiB2YWx1ZSBpc1xuICAgKiB1bmRlZmluZWQsIG9yIHRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdmFsdWUgaXMgJ2RlZmF1bHQnIG9yICdjb25maWcnIG9yICdlbnYnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGVudihuYW1lKSB7XG4gICAgdGhpcy5lbnZWYXIgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIG9wdGlvbiBhcmd1bWVudHMgaW50byBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgYXJnUGFyc2VyKGZuKSB7XG4gICAgdGhpcy5wYXJzZUFyZyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBtYW5kYXRvcnkgYW5kIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21hbmRhdG9yeT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIG1ha2VPcHRpb25NYW5kYXRvcnkobWFuZGF0b3J5ID0gdHJ1ZSkge1xuICAgIHRoaXMubWFuZGF0b3J5ID0gISFtYW5kYXRvcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBvcHRpb24gaW4gaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGhpZGVIZWxwKGhpZGUgPSB0cnVlKSB7XG4gICAgdGhpcy5oaWRkZW4gPSAhIWhpZGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2NvbGxlY3RWYWx1ZSh2YWx1ZSwgcHJldmlvdXMpIHtcbiAgICBpZiAocHJldmlvdXMgPT09IHRoaXMuZGVmYXVsdFZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHByZXZpb3VzKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuXG4gICAgcHJldmlvdXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIHByZXZpb3VzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgYWxsb3cgb3B0aW9uIHZhbHVlIHRvIGJlIG9uZSBvZiBjaG9pY2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBjaG9pY2VzKHZhbHVlcykge1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHRoaXMucGFyc2VBcmcgPSAoYXJnLCBwcmV2aW91cykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZ0Nob2ljZXMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt0aGlzLmFyZ0Nob2ljZXMuam9pbignLCAnKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhcmlhZGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0VmFsdWUoYXJnLCBwcmV2aW91cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG9wdGlvbiBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG5hbWUoKSB7XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgcmV0dXJuIHRoaXMubG9uZy5yZXBsYWNlKC9eLS0vLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3J0LnJlcGxhY2UoL14tLywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvcHRpb24gbmFtZSwgaW4gYSBjYW1lbGNhc2UgZm9ybWF0IHRoYXQgY2FuIGJlIHVzZWRcbiAgICogYXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSBrZXkuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgYXR0cmlidXRlTmFtZSgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGUpIHtcbiAgICAgIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkucmVwbGFjZSgvXm5vLS8sICcnKSk7XG4gICAgfVxuICAgIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaGVscCBncm91cCBoZWFkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVhZGluZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuICBoZWxwR3JvdXAoaGVhZGluZykge1xuICAgIHRoaXMuaGVscEdyb3VwSGVhZGluZyA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYGFyZ2AgbWF0Y2hlcyB0aGUgc2hvcnQgb3IgbG9uZyBmbGFnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJnXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIGlzKGFyZykge1xuICAgIHJldHVybiB0aGlzLnNob3J0ID09PSBhcmcgfHwgdGhpcy5sb25nID09PSBhcmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgYSBib29sZWFuIG9wdGlvbi5cbiAgICpcbiAgICogT3B0aW9ucyBhcmUgb25lIG9mIGJvb2xlYW4sIG5lZ2F0ZWQsIHJlcXVpcmVkIGFyZ3VtZW50LCBvciBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgaXNCb29sZWFuKCkge1xuICAgIHJldHVybiAhdGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5vcHRpb25hbCAmJiAhdGhpcy5uZWdhdGU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBkdWFsIG9wdGlvbnMsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGV4aXN0aW5nXG4gKiBpbXBsZW1lbnRhdGlvbi4gV2Ugc3VwcG9ydCBzZXBhcmF0ZSBkdWFsIG9wdGlvbnMgZm9yIHNlcGFyYXRlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBvcHRpb25zLFxuICogbGlrZSBgLS1idWlsZGAgYW5kIGAtLW5vLWJ1aWxkYCwgd2hpY2ggc2hhcmUgYSBzaW5nbGUgb3B0aW9uIHZhbHVlLiBUaGlzIHdvcmtzIG5pY2VseSBmb3Igc29tZVxuICogdXNlIGNhc2VzLCBidXQgaXMgdHJpY2t5IGZvciBvdGhlcnMgd2hlcmUgd2Ugd2FudCBzZXBhcmF0ZSBiZWhhdmlvdXJzIGRlc3BpdGVcbiAqIHRoZSBzaW5nbGUgc2hhcmVkIG9wdGlvbiB2YWx1ZS5cbiAqL1xuY2xhc3MgRHVhbE9wdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb25bXX0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMucG9zaXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubmVnYXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZHVhbE9wdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAgIHRoaXMubmVnYXRpdmVPcHRpb25zLnNldChvcHRpb24uYXR0cmlidXRlTmFtZSgpLCBvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3NpdGl2ZU9wdGlvbnMuc2V0KG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCksIG9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXMucG9zaXRpdmVPcHRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuZHVhbE9wdGlvbnMuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlkIHRoZSB2YWx1ZSBjb21lIGZyb20gdGhlIG9wdGlvbiwgYW5kIG5vdCBmcm9tIHBvc3NpYmxlIG1hdGNoaW5nIGR1YWwgb3B0aW9uP1xuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICB2YWx1ZUZyb21PcHRpb24odmFsdWUsIG9wdGlvbikge1xuICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgaWYgKCF0aGlzLmR1YWxPcHRpb25zLmhhcyhvcHRpb25LZXkpKSByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIFVzZSB0aGUgdmFsdWUgdG8gZGVkdWNlIGlmIChwcm9iYWJseSkgY2FtZSBmcm9tIHRoZSBvcHRpb24uXG4gICAgY29uc3QgcHJlc2V0ID0gdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZ2V0KG9wdGlvbktleSkucHJlc2V0QXJnO1xuICAgIGNvbnN0IG5lZ2F0aXZlVmFsdWUgPSBwcmVzZXQgIT09IHVuZGVmaW5lZCA/IHByZXNldCA6IGZhbHNlO1xuICAgIHJldHVybiBvcHRpb24ubmVnYXRlID09PSAobmVnYXRpdmVWYWx1ZSA9PT0gdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgZnJvbSBrZWJhYi1jYXNlIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNhbWVsY2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgnLScpLnJlZHVjZSgoc3RyLCB3b3JkKSA9PiB7XG4gICAgcmV0dXJuIHN0ciArIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSBzaG9ydCBhbmQgbG9uZyBmbGFnIG91dCBvZiBzb21ldGhpbmcgbGlrZSAnLW0sLS1taXhlZCA8dmFsdWU+J1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BsaXRPcHRpb25GbGFncyhmbGFncykge1xuICBsZXQgc2hvcnRGbGFnO1xuICBsZXQgbG9uZ0ZsYWc7XG4gIC8vIHNob3J0IGZsYWcsIHNpbmdsZSBkYXNoIGFuZCBzaW5nbGUgY2hhcmFjdGVyXG4gIGNvbnN0IHNob3J0RmxhZ0V4cCA9IC9eLVteLV0kLztcbiAgLy8gbG9uZyBmbGFnLCBkb3VibGUgZGFzaCBhbmQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlclxuICBjb25zdCBsb25nRmxhZ0V4cCA9IC9eLS1bXi1dLztcblxuICBjb25zdCBmbGFnUGFydHMgPSBmbGFncy5zcGxpdCgvWyB8LF0rLykuY29uY2F0KCdndWFyZCcpO1xuICAvLyBOb3JtYWwgaXMgc2hvcnQgYW5kL29yIGxvbmcuXG4gIGlmIChzaG9ydEZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSBzaG9ydEZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgaWYgKGxvbmdGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkgbG9uZ0ZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgLy8gTG9uZyB0aGVuIHNob3J0LiBSYXJlbHkgdXNlZCBidXQgZmluZS5cbiAgaWYgKCFzaG9ydEZsYWcgJiYgc2hvcnRGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSlcbiAgICBzaG9ydEZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgLy8gQWxsb3cgdHdvIGxvbmcgZmxhZ3MsIGxpa2UgJy0td3MsIC0td29ya3NwYWNlJ1xuICAvLyBUaGlzIGlzIHRoZSBzdXBwb3J0ZWQgd2F5IHRvIGhhdmUgYSBzaG9ydGlzaCBvcHRpb24gZmxhZy5cbiAgaWYgKCFzaG9ydEZsYWcgJiYgbG9uZ0ZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSB7XG4gICAgc2hvcnRGbGFnID0gbG9uZ0ZsYWc7XG4gICAgbG9uZ0ZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB1bnByb2Nlc3NlZCBmbGFnLiBGYWlsIG5vaXNpbHkgcmF0aGVyIHRoYW4gc2lsZW50bHkgaWdub3JlLlxuICBpZiAoZmxhZ1BhcnRzWzBdLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkRmxhZyA9IGZsYWdQYXJ0c1swXTtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgb3B0aW9uIGNyZWF0aW9uIGZhaWxlZCBkdWUgdG8gJyR7dW5zdXBwb3J0ZWRGbGFnfScgaW4gb3B0aW9uIGZsYWdzICcke2ZsYWdzfSdgO1xuICAgIGlmICgvXi1bXi1dW14tXS8udGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtiYXNlRXJyb3J9XG4tIGEgc2hvcnQgZmxhZyBpcyBhIHNpbmdsZSBkYXNoIGFuZCBhIHNpbmdsZSBjaGFyYWN0ZXJcbiAgLSBlaXRoZXIgdXNlIGEgc2luZ2xlIGRhc2ggYW5kIGEgc2luZ2xlIGNoYXJhY3RlciAoZm9yIGEgc2hvcnQgZmxhZylcbiAgLSBvciB1c2UgYSBkb3VibGUgZGFzaCBmb3IgYSBsb25nIG9wdGlvbiAoYW5kIGNhbiBoYXZlIHR3bywgbGlrZSAnLS13cywgLS13b3Jrc3BhY2UnKWAsXG4gICAgICApO1xuICAgIGlmIChzaG9ydEZsYWdFeHAudGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdG9vIG1hbnkgc2hvcnQgZmxhZ3NgKTtcbiAgICBpZiAobG9uZ0ZsYWdFeHAudGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdG9vIG1hbnkgbG9uZyBmbGFnc2ApO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdW5yZWNvZ25pc2VkIGZsYWcgZm9ybWF0YCk7XG4gIH1cbiAgaWYgKHNob3J0RmxhZyA9PT0gdW5kZWZpbmVkICYmIGxvbmdGbGFnID09PSB1bmRlZmluZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYG9wdGlvbiBjcmVhdGlvbiBmYWlsZWQgZHVlIHRvIG5vIGZsYWdzIGZvdW5kIGluICcke2ZsYWdzfScuYCxcbiAgICApO1xuXG4gIHJldHVybiB7IHNob3J0RmxhZywgbG9uZ0ZsYWcgfTtcbn1cblxuZXhwb3J0cy5PcHRpb24gPSBPcHRpb247XG5leHBvcnRzLkR1YWxPcHRpb25zID0gRHVhbE9wdGlvbnM7XG4iLCAiY29uc3QgbWF4RGlzdGFuY2UgPSAzO1xuXG5mdW5jdGlvbiBlZGl0RGlzdGFuY2UoYSwgYikge1xuICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYW1lcmF1XHUyMDEzTGV2ZW5zaHRlaW5fZGlzdGFuY2VcbiAgLy8gQ2FsY3VsYXRpbmcgb3B0aW1hbCBzdHJpbmcgYWxpZ25tZW50IGRpc3RhbmNlLCBubyBzdWJzdHJpbmcgaXMgZWRpdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAvLyAoU2ltcGxlIGltcGxlbWVudGF0aW9uLilcblxuICAvLyBRdWljayBlYXJseSBleGl0LCByZXR1cm4gd29yc3QgY2FzZS5cbiAgaWYgKE1hdGguYWJzKGEubGVuZ3RoIC0gYi5sZW5ndGgpID4gbWF4RGlzdGFuY2UpXG4gICAgcmV0dXJuIE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7XG5cbiAgLy8gZGlzdGFuY2UgYmV0d2VlbiBwcmVmaXggc3Vic3RyaW5ncyBvZiBhIGFuZCBiXG4gIGNvbnN0IGQgPSBbXTtcblxuICAvLyBwdXJlIGRlbGV0aW9ucyB0dXJuIGEgaW50byBlbXB0eSBzdHJpbmdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIGRbaV0gPSBbaV07XG4gIH1cbiAgLy8gcHVyZSBpbnNlcnRpb25zIHR1cm4gZW1wdHkgc3RyaW5nIGludG8gYlxuICBmb3IgKGxldCBqID0gMDsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZFswXVtqXSA9IGo7XG4gIH1cblxuICAvLyBmaWxsIG1hdHJpeFxuICBmb3IgKGxldCBqID0gMTsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNvc3QgPSAxO1xuICAgICAgaWYgKGFbaSAtIDFdID09PSBiW2ogLSAxXSkge1xuICAgICAgICBjb3N0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvc3QgPSAxO1xuICAgICAgfVxuICAgICAgZFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBkW2kgLSAxXVtqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGRbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgKTtcbiAgICAgIC8vIHRyYW5zcG9zaXRpb25cbiAgICAgIGlmIChpID4gMSAmJiBqID4gMSAmJiBhW2kgLSAxXSA9PT0gYltqIC0gMl0gJiYgYVtpIC0gMl0gPT09IGJbaiAtIDFdKSB7XG4gICAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihkW2ldW2pdLCBkW2kgLSAyXVtqIC0gMl0gKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZFthLmxlbmd0aF1bYi5sZW5ndGhdO1xufVxuXG4vKipcbiAqIEZpbmQgY2xvc2UgbWF0Y2hlcywgcmVzdHJpY3RlZCB0byBzYW1lIG51bWJlciBvZiBlZGl0cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2FuZGlkYXRlc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBzdWdnZXN0U2ltaWxhcih3b3JkLCBjYW5kaWRhdGVzKSB7XG4gIGlmICghY2FuZGlkYXRlcyB8fCBjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAvLyByZW1vdmUgcG9zc2libGUgZHVwbGljYXRlc1xuICBjYW5kaWRhdGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGNhbmRpZGF0ZXMpKTtcblxuICBjb25zdCBzZWFyY2hpbmdPcHRpb25zID0gd29yZC5zdGFydHNXaXRoKCctLScpO1xuICBpZiAoc2VhcmNoaW5nT3B0aW9ucykge1xuICAgIHdvcmQgPSB3b3JkLnNsaWNlKDIpO1xuICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLm1hcCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuc2xpY2UoMikpO1xuICB9XG5cbiAgbGV0IHNpbWlsYXIgPSBbXTtcbiAgbGV0IGJlc3REaXN0YW5jZSA9IG1heERpc3RhbmNlO1xuICBjb25zdCBtaW5TaW1pbGFyaXR5ID0gMC40O1xuICBjYW5kaWRhdGVzLmZvckVhY2goKGNhbmRpZGF0ZSkgPT4ge1xuICAgIGlmIChjYW5kaWRhdGUubGVuZ3RoIDw9IDEpIHJldHVybjsgLy8gbm8gb25lIGNoYXJhY3RlciBndWVzc2VzXG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IGVkaXREaXN0YW5jZSh3b3JkLCBjYW5kaWRhdGUpO1xuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHdvcmQubGVuZ3RoLCBjYW5kaWRhdGUubGVuZ3RoKTtcbiAgICBjb25zdCBzaW1pbGFyaXR5ID0gKGxlbmd0aCAtIGRpc3RhbmNlKSAvIGxlbmd0aDtcbiAgICBpZiAoc2ltaWxhcml0eSA+IG1pblNpbWlsYXJpdHkpIHtcbiAgICAgIGlmIChkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAvLyBiZXR0ZXIgZWRpdCBkaXN0YW5jZSwgdGhyb3cgYXdheSBwcmV2aW91cyB3b3JzZSBtYXRjaGVzXG4gICAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBzaW1pbGFyID0gW2NhbmRpZGF0ZV07XG4gICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgc2ltaWxhci5wdXNoKGNhbmRpZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBzaW1pbGFyLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGlmIChzZWFyY2hpbmdPcHRpb25zKSB7XG4gICAgc2ltaWxhciA9IHNpbWlsYXIubWFwKChjYW5kaWRhdGUpID0+IGAtLSR7Y2FuZGlkYXRlfWApO1xuICB9XG5cbiAgaWYgKHNpbWlsYXIubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiBvbmUgb2YgJHtzaW1pbGFyLmpvaW4oJywgJyl9PylgO1xuICB9XG4gIGlmIChzaW1pbGFyLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiAke3NpbWlsYXJbMF19PylgO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0cy5zdWdnZXN0U2ltaWxhciA9IHN1Z2dlc3RTaW1pbGFyO1xuIiwgImNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuY29uc3QgY2hpbGRQcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgnbm9kZTpwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ25vZGU6ZnMnKTtcbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdub2RlOnByb2Nlc3MnKTtcblxuY29uc3QgeyBBcmd1bWVudCwgaHVtYW5SZWFkYWJsZUFyZ05hbWUgfSA9IHJlcXVpcmUoJy4vYXJndW1lbnQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZGVyRXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcbmNvbnN0IHsgSGVscCwgc3RyaXBDb2xvciB9ID0gcmVxdWlyZSgnLi9oZWxwLmpzJyk7XG5jb25zdCB7IE9wdGlvbiwgRHVhbE9wdGlvbnMgfSA9IHJlcXVpcmUoJy4vb3B0aW9uLmpzJyk7XG5jb25zdCB7IHN1Z2dlc3RTaW1pbGFyIH0gPSByZXF1aXJlKCcuL3N1Z2dlc3RTaW1pbGFyJyk7XG5cbmNsYXNzIENvbW1hbmQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBgQ29tbWFuZGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV1cbiAgICovXG5cbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEB0eXBlIHtDb21tYW5kW119ICovXG4gICAgdGhpcy5jb21tYW5kcyA9IFtdO1xuICAgIC8qKiBAdHlwZSB7T3B0aW9uW119ICovXG4gICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gZmFsc2U7XG4gICAgLyoqIEB0eXBlIHtBcmd1bWVudFtdfSAqL1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cyA9IFtdO1xuICAgIHRoaXMuX2FyZ3MgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHM7IC8vIGRlcHJlY2F0ZWQgb2xkIG5hbWVcbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMuYXJncyA9IFtdOyAvLyBjbGkgYXJncyB3aXRoIG9wdGlvbnMgcmVtb3ZlZFxuICAgIHRoaXMucmF3QXJncyA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IFtdOyAvLyBsaWtlIC5hcmdzIGJ1dCBhZnRlciBjdXN0b20gcHJvY2Vzc2luZyBhbmQgY29sbGVjdGluZyB2YXJpYWRpY1xuICAgIHRoaXMuX3NjcmlwdFBhdGggPSBudWxsO1xuICAgIHRoaXMuX25hbWUgPSBuYW1lIHx8ICcnO1xuICAgIHRoaXMuX29wdGlvblZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlcyA9IHt9OyAvLyBkZWZhdWx0LCBlbnYsIGNsaSBldGNcbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSBmYWxzZTtcbiAgICB0aGlzLl9hY3Rpb25IYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLl9leGVjdXRhYmxlSGFuZGxlciA9IGZhbHNlO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVGaWxlID0gbnVsbDsgLy8gY3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGVcbiAgICB0aGlzLl9leGVjdXRhYmxlRGlyID0gbnVsbDsgLy8gY3VzdG9tIHNlYXJjaCBkaXJlY3RvcnkgZm9yIHN1YmNvbW1hbmRzXG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gbnVsbDtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX2FsaWFzZXMgPSBbXTtcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gJyc7XG4gICAgdGhpcy5fc3VtbWFyeSA9ICcnO1xuICAgIHRoaXMuX2FyZ3NEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgLy8gbGVnYWN5XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9saWZlQ3ljbGVIb29rcyA9IHt9OyAvLyBhIGhhc2ggb2YgYXJyYXlzXG4gICAgLyoqIEB0eXBlIHsoYm9vbGVhbiB8IHN0cmluZyl9ICovXG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gdHJ1ZTtcbiAgICB0aGlzLl9zYXZlZFN0YXRlID0gbnVsbDsgLy8gdXNlZCBpbiBzYXZlL3Jlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlXG5cbiAgICAvLyBzZWUgY29uZmlndXJlT3V0cHV0KCkgZm9yIGRvY3NcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0ge1xuICAgICAgd3JpdGVPdXQ6IChzdHIpID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKHN0ciksXG4gICAgICB3cml0ZUVycjogKHN0cikgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUoc3RyKSxcbiAgICAgIG91dHB1dEVycm9yOiAoc3RyLCB3cml0ZSkgPT4gd3JpdGUoc3RyKSxcbiAgICAgIGdldE91dEhlbHBXaWR0aDogKCkgPT5cbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQuaXNUVFkgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0RXJySGVscFdpZHRoOiAoKSA9PlxuICAgICAgICBwcm9jZXNzLnN0ZGVyci5pc1RUWSA/IHByb2Nlc3Muc3RkZXJyLmNvbHVtbnMgOiB1bmRlZmluZWQsXG4gICAgICBnZXRPdXRIYXNDb2xvcnM6ICgpID0+XG4gICAgICAgIHVzZUNvbG9yKCkgPz8gKHByb2Nlc3Muc3Rkb3V0LmlzVFRZICYmIHByb2Nlc3Muc3Rkb3V0Lmhhc0NvbG9ycz8uKCkpLFxuICAgICAgZ2V0RXJySGFzQ29sb3JzOiAoKSA9PlxuICAgICAgICB1c2VDb2xvcigpID8/IChwcm9jZXNzLnN0ZGVyci5pc1RUWSAmJiBwcm9jZXNzLnN0ZGVyci5oYXNDb2xvcnM/LigpKSxcbiAgICAgIHN0cmlwQ29sb3I6IChzdHIpID0+IHN0cmlwQ29sb3Ioc3RyKSxcbiAgICB9O1xuXG4gICAgdGhpcy5faGlkZGVuID0gZmFsc2U7XG4gICAgLyoqIEB0eXBlIHsoT3B0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCl9ICovXG4gICAgdGhpcy5faGVscE9wdGlvbiA9IHVuZGVmaW5lZDsgLy8gTGF6eSBjcmVhdGVkIG9uIGRlbWFuZC4gTWF5IGJlIG51bGwgaWYgaGVscCBvcHRpb24gaXMgZGlzYWJsZWQuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHVuZGVmaW5lZDsgLy8gdW5kZWNpZGVkIHdoZXRoZXIgdHJ1ZSBvciBmYWxzZSB5ZXQsIG5vdCBpbmhlcml0ZWRcbiAgICAvKiogQHR5cGUge0NvbW1hbmR9ICovXG4gICAgdGhpcy5faGVscENvbW1hbmQgPSB1bmRlZmluZWQ7IC8vIGxhenkgaW5pdGlhbGlzZWQsIGluaGVyaXRlZFxuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0ge307XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5faGVscEdyb3VwSGVhZGluZyA9IHVuZGVmaW5lZDsgLy8gc29mdCBpbml0aWFsaXNlZCB3aGVuIGFkZGVkIHRvIHBhcmVudFxuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgc2V0dGluZ3MgdGhhdCBhcmUgdXNlZnVsIHRvIGhhdmUgaW4gY29tbW9uIGFjcm9zcyByb290IGNvbW1hbmQgYW5kIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiAoVXNlZCBpbnRlcm5hbGx5IHdoZW4gYWRkaW5nIGEgY29tbWFuZCB1c2luZyBgLmNvbW1hbmQoKWAgc28gc3ViY29tbWFuZHMgaW5oZXJpdCBwYXJlbnQgc2V0dGluZ3MuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IHNvdXJjZUNvbW1hbmRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBjb3B5SW5oZXJpdGVkU2V0dGluZ3Moc291cmNlQ29tbWFuZCkge1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9vdXRwdXRDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwT3B0aW9uO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gc291cmNlQ29tbWFuZC5faGVscENvbW1hbmQ7XG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBzb3VyY2VDb21tYW5kLl9leGl0Q2FsbGJhY2s7XG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gc291cmNlQ29tbWFuZC5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzO1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9XG4gICAgICBzb3VyY2VDb21tYW5kLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWU7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSBzb3VyY2VDb21tYW5kLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cztcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9IHNvdXJjZUNvbW1hbmQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IHNvdXJjZUNvbW1hbmQuX3Nob3dIZWxwQWZ0ZXJFcnJvcjtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSBzb3VyY2VDb21tYW5kLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3I7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Q29tbWFuZFtdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBmb3IgKGxldCBjb21tYW5kID0gdGhpczsgY29tbWFuZDsgY29tbWFuZCA9IGNvbW1hbmQucGFyZW50KSB7XG4gICAgICByZXN1bHQucHVzaChjb21tYW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBjb21tYW5kLlxuICAgKlxuICAgKiBUaGVyZSBhcmUgdHdvIHN0eWxlcyBvZiBjb21tYW5kOiBwYXkgYXR0ZW50aW9uIHRvIHdoZXJlIHRvIHB1dCB0aGUgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENvbW1hbmQgaW1wbGVtZW50ZWQgdXNpbmcgYWN0aW9uIGhhbmRsZXIgKGRlc2NyaXB0aW9uIGlzIHN1cHBsaWVkIHNlcGFyYXRlbHkgdG8gYC5jb21tYW5kYClcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdjbG9uZSA8c291cmNlPiBbZGVzdGluYXRpb25dJylcbiAgICogICAuZGVzY3JpcHRpb24oJ2Nsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnknKVxuICAgKiAgIC5hY3Rpb24oKHNvdXJjZSwgZGVzdGluYXRpb24pID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdjbG9uZSBjb21tYW5kIGNhbGxlZCcpO1xuICAgKiAgIH0pO1xuICAgKlxuICAgKiAvLyBDb21tYW5kIGltcGxlbWVudGVkIHVzaW5nIHNlcGFyYXRlIGV4ZWN1dGFibGUgZmlsZSAoZGVzY3JpcHRpb24gaXMgc2Vjb25kIHBhcmFtZXRlciB0byBgLmNvbW1hbmRgKVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3N0YXJ0IDxzZXJ2aWNlPicsICdzdGFydCBuYW1lZCBzZXJ2aWNlJylcbiAgICogICAuY29tbWFuZCgnc3RvcCBbc2VydmljZV0nLCAnc3RvcCBuYW1lZCBzZXJ2aWNlLCBvciBhbGwgaWYgbm8gbmFtZSBzdXBwbGllZCcpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZUFuZEFyZ3MgLSBjb21tYW5kIG5hbWUgYW5kIGFyZ3VtZW50cywgYXJncyBhcmUgYDxyZXF1aXJlZD5gIG9yIGBbb3B0aW9uYWxdYCBhbmQgbGFzdCBtYXkgYWxzbyBiZSBgdmFyaWFkaWMuLi5gXG4gICAqIEBwYXJhbSB7KG9iamVjdCB8IHN0cmluZyl9IFthY3Rpb25PcHRzT3JFeGVjRGVzY10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGZvciBhY3Rpb24pLCBvciBkZXNjcmlwdGlvbiAoZm9yIGV4ZWN1dGFibGUpXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXhlY09wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIChmb3IgZXhlY3V0YWJsZSlcbiAgICogQHJldHVybiB7Q29tbWFuZH0gcmV0dXJucyBuZXcgY29tbWFuZCBmb3IgYWN0aW9uIGhhbmRsZXIsIG9yIGB0aGlzYCBmb3IgZXhlY3V0YWJsZSBjb21tYW5kXG4gICAqL1xuXG4gIGNvbW1hbmQobmFtZUFuZEFyZ3MsIGFjdGlvbk9wdHNPckV4ZWNEZXNjLCBleGVjT3B0cykge1xuICAgIGxldCBkZXNjID0gYWN0aW9uT3B0c09yRXhlY0Rlc2M7XG4gICAgbGV0IG9wdHMgPSBleGVjT3B0cztcbiAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdvYmplY3QnICYmIGRlc2MgIT09IG51bGwpIHtcbiAgICAgIG9wdHMgPSBkZXNjO1xuICAgICAgZGVzYyA9IG51bGw7XG4gICAgfVxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGNvbnN0IFssIG5hbWUsIGFyZ3NdID0gbmFtZUFuZEFyZ3MubWF0Y2goLyhbXiBdKykgKiguKikvKTtcblxuICAgIGNvbnN0IGNtZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChuYW1lKTtcbiAgICBpZiAoZGVzYykge1xuICAgICAgY21kLmRlc2NyaXB0aW9uKGRlc2MpO1xuICAgICAgY21kLl9leGVjdXRhYmxlSGFuZGxlciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGNtZC5faGlkZGVuID0gISEob3B0cy5ub0hlbHAgfHwgb3B0cy5oaWRkZW4pOyAvLyBub0hlbHAgaXMgZGVwcmVjYXRlZCBvbGQgbmFtZSBmb3IgaGlkZGVuXG4gICAgY21kLl9leGVjdXRhYmxlRmlsZSA9IG9wdHMuZXhlY3V0YWJsZUZpbGUgfHwgbnVsbDsgLy8gQ3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGUgZmlsZSwgc2V0IG1pc3NpbmcgdG8gbnVsbCB0byBtYXRjaCBjb25zdHJ1Y3RvclxuICAgIGlmIChhcmdzKSBjbWQuYXJndW1lbnRzKGFyZ3MpO1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29tbWFuZChjbWQpO1xuICAgIGNtZC5wYXJlbnQgPSB0aGlzO1xuICAgIGNtZC5jb3B5SW5oZXJpdGVkU2V0dGluZ3ModGhpcyk7XG5cbiAgICBpZiAoZGVzYykgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIGNtZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgY29tbWFuZC5cbiAgICpcbiAgICogU2VlIC5jb21tYW5kKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIHN1YmNvbW1hbmQsIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgY29tbWFuZC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVDb21tYW5kIHRvIGN1c3RvbWlzZSBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBuZXcgY29tbWFuZFxuICAgKi9cblxuICBjcmVhdGVDb21tYW5kKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IENvbW1hbmQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjdXN0b21pc2UgdGhlIGhlbHAgd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwLFxuICAgKiBvciBieSBvdmVycmlkaW5nIEhlbHAgcHJvcGVydGllcyB1c2luZyBjb25maWd1cmVIZWxwKCkuXG4gICAqXG4gICAqIEByZXR1cm4ge0hlbHB9XG4gICAqL1xuXG4gIGNyZWF0ZUhlbHAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEhlbHAoKSwgdGhpcy5jb25maWd1cmVIZWxwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBoZWxwIGJ5IG92ZXJyaWRpbmcgSGVscCBwcm9wZXJ0aWVzIHVzaW5nIGNvbmZpZ3VyZUhlbHAoKSxcbiAgICogb3Igd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwKCkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl0gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7KENvbW1hbmQgfCBvYmplY3QpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHN0b3JlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuXG4gIGNvbmZpZ3VyZUhlbHAoY29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbjtcblxuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvdXRwdXQgZ29lcyB0byBzdGRvdXQgYW5kIHN0ZGVyci4gWW91IGNhbiBjdXN0b21pc2UgdGhpcyBmb3Igc3BlY2lhbFxuICAgKiBhcHBsaWNhdGlvbnMuIFlvdSBjYW4gYWxzbyBjdXN0b21pc2UgdGhlIGRpc3BsYXkgb2YgZXJyb3JzIGJ5IG92ZXJyaWRpbmcgb3V0cHV0RXJyb3IuXG4gICAqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXJlIGFsbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqICAgICAvLyBjaGFuZ2UgaG93IG91dHB1dCBiZWluZyB3cml0dGVuLCBkZWZhdWx0cyB0byBzdGRvdXQgYW5kIHN0ZGVyclxuICAgKiAgICAgd3JpdGVPdXQoc3RyKVxuICAgKiAgICAgd3JpdGVFcnIoc3RyKVxuICAgKiAgICAgLy8gY2hhbmdlIGhvdyBvdXRwdXQgYmVpbmcgd3JpdHRlbiBmb3IgZXJyb3JzLCBkZWZhdWx0cyB0byB3cml0ZUVyclxuICAgKiAgICAgb3V0cHV0RXJyb3Ioc3RyLCB3cml0ZSkgLy8gdXNlZCBmb3IgZGlzcGxheWluZyBlcnJvcnMgYW5kIG5vdCB1c2VkIGZvciBkaXNwbGF5aW5nIGhlbHBcbiAgICogICAgIC8vIHNwZWNpZnkgd2lkdGggZm9yIHdyYXBwaW5nIGhlbHBcbiAgICogICAgIGdldE91dEhlbHBXaWR0aCgpXG4gICAqICAgICBnZXRFcnJIZWxwV2lkdGgoKVxuICAgKiAgICAgLy8gY29sb3Igc3VwcG9ydCwgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIEhlbHBcbiAgICogICAgIGdldE91dEhhc0NvbG9ycygpXG4gICAqICAgICBnZXRFcnJIYXNDb2xvcnMoKVxuICAgKiAgICAgc3RyaXBDb2xvcigpIC8vIHVzZWQgdG8gcmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGlmIG91dHB1dCBkb2VzIG5vdCBoYXZlIGNvbG9yc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbmZpZ3VyYXRpb25dIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4geyhDb21tYW5kIHwgb2JqZWN0KX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciBzdG9yZWQgY29uZmlndXJhdGlvblxuICAgKi9cblxuICBjb25maWd1cmVPdXRwdXQoY29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uO1xuXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLnRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24sXG4gICAgICAuLi5jb25maWd1cmF0aW9uLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgaGVscCBvciBhIGN1c3RvbSBtZXNzYWdlIGFmdGVyIGFuIGVycm9yIG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIHsoYm9vbGVhbnxzdHJpbmcpfSBbZGlzcGxheUhlbHBdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc2hvd0hlbHBBZnRlckVycm9yKGRpc3BsYXlIZWxwID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2YgZGlzcGxheUhlbHAgIT09ICdzdHJpbmcnKSBkaXNwbGF5SGVscCA9ICEhZGlzcGxheUhlbHA7XG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gZGlzcGxheUhlbHA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBzdWdnZXN0aW9uIG9mIHNpbWlsYXIgY29tbWFuZHMgZm9yIHVua25vd24gY29tbWFuZHMsIG9yIG9wdGlvbnMgZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcGxheVN1Z2dlc3Rpb25dXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKGRpc3BsYXlTdWdnZXN0aW9uID0gdHJ1ZSkge1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9ICEhZGlzcGxheVN1Z2dlc3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcHJlcGFyZWQgc3ViY29tbWFuZC5cbiAgICpcbiAgICogU2VlIC5jb21tYW5kKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIHN1YmNvbW1hbmQgd2hpY2ggaW5oZXJpdHMgc2V0dGluZ3MgZnJvbSBpdHMgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZCAtIG5ldyBzdWJjb21tYW5kXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0c10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFkZENvbW1hbmQoY21kLCBvcHRzKSB7XG4gICAgaWYgKCFjbWQuX25hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBwYXNzZWQgdG8gLmFkZENvbW1hbmQoKSBtdXN0IGhhdmUgYSBuYW1lXG4tIHNwZWNpZnkgdGhlIG5hbWUgaW4gQ29tbWFuZCBjb25zdHJ1Y3RvciBvciB1c2luZyAubmFtZSgpYCk7XG4gICAgfVxuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgaWYgKG9wdHMuaXNEZWZhdWx0KSB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUgPSBjbWQuX25hbWU7XG4gICAgaWYgKG9wdHMubm9IZWxwIHx8IG9wdHMuaGlkZGVuKSBjbWQuX2hpZGRlbiA9IHRydWU7IC8vIG1vZGlmeWluZyBwYXNzZWQgY29tbWFuZCBkdWUgdG8gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25cblxuICAgIHRoaXMuX3JlZ2lzdGVyQ29tbWFuZChjbWQpO1xuICAgIGNtZC5wYXJlbnQgPSB0aGlzO1xuICAgIGNtZC5fY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIGFyZ3VtZW50LlxuICAgKlxuICAgKiBTZWUgLmFyZ3VtZW50KCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIGFyZ3VtZW50LCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIGFyZ3VtZW50LiBZb3UgY2FuIG92ZXJyaWRlIGNyZWF0ZUFyZ3VtZW50IHRvIHJldHVybiBhIGN1c3RvbSBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7QXJndW1lbnR9IG5ldyBhcmd1bWVudFxuICAgKi9cblxuICBjcmVhdGVBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBuZXcgQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIHJlcXVpcmVkLCBhbmQgeW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGluZGljYXRlIHRoaXMgd2l0aCA8PiBhcm91bmQgdGhlIG5hbWUuIFB1dCBbXSBhcm91bmQgdGhlIG5hbWUgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmFyZ3VtZW50KCc8aW5wdXQtZmlsZT4nKTtcbiAgICogcHJvZ3JhbS5hcmd1bWVudCgnW291dHB1dC1maWxlXScpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBhcmd1bWVudCBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgYXJndW1lbnQgPSB0aGlzLmNyZWF0ZUFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICBpZiAodHlwZW9mIHBhcnNlQXJnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcmd1bWVudC5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKHBhcnNlQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJndW1lbnQuZGVmYXVsdChwYXJzZUFyZyk7XG4gICAgfVxuICAgIHRoaXMuYWRkQXJndW1lbnQoYXJndW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQsIGFkZGluZyBtdWx0aXBsZSBhdCBvbmNlICh3aXRob3V0IGRlc2NyaXB0aW9ucykuXG4gICAqXG4gICAqIFNlZSBhbHNvIC5hcmd1bWVudCgpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmFyZ3VtZW50cygnPGNtZD4gW2Vudl0nKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhcmd1bWVudHMobmFtZXMpIHtcbiAgICBuYW1lc1xuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KC8gKy8pXG4gICAgICAuZm9yRWFjaCgoZGV0YWlsKSA9PiB7XG4gICAgICAgIHRoaXMuYXJndW1lbnQoZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQsIGFkZGluZyBhIHByZXBhcmVkIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEFyZ3VtZW50KGFyZ3VtZW50KSB7XG4gICAgY29uc3QgcHJldmlvdXNBcmd1bWVudCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5zbGljZSgtMSlbMF07XG4gICAgaWYgKHByZXZpb3VzQXJndW1lbnQ/LnZhcmlhZGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBvbmx5IHRoZSBsYXN0IGFyZ3VtZW50IGNhbiBiZSB2YXJpYWRpYyAnJHtwcmV2aW91c0FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFyZ3VtZW50LnJlcXVpcmVkICYmXG4gICAgICBhcmd1bWVudC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYXJndW1lbnQucGFyc2VBcmcgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgYSBkZWZhdWx0IHZhbHVlIGZvciBhIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5ldmVyIHVzZWQ6ICcke2FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5wdXNoKGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b21pc2Ugb3Igb3ZlcnJpZGUgZGVmYXVsdCBoZWxwIGNvbW1hbmQuIEJ5IGRlZmF1bHQgYSBoZWxwIGNvbW1hbmQgaXMgYXV0b21hdGljYWxseSBhZGRlZCBpZiB5b3VyIGNvbW1hbmQgaGFzIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKCdoZWxwIFtjbWRdJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoJ2hlbHAgW2NtZF0nLCAnc2hvdyBoZWxwJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoZmFsc2UpOyAvLyBzdXBwcmVzcyBkZWZhdWx0IGhlbHAgY29tbWFuZFxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKHRydWUpOyAvLyBhZGQgaGVscCBjb21tYW5kIGV2ZW4gaWYgbm8gc3ViY29tbWFuZHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gZW5hYmxlT3JOYW1lQW5kQXJncyAtIGVuYWJsZSB3aXRoIGN1c3RvbSBuYW1lIGFuZC9vciBhcmd1bWVudHMsIG9yIGJvb2xlYW4gdG8gb3ZlcnJpZGUgd2hldGhlciBhZGRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXSAtIGN1c3RvbSBkZXNjcmlwdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaGVscENvbW1hbmQoZW5hYmxlT3JOYW1lQW5kQXJncywgZGVzY3JpcHRpb24pIHtcbiAgICBpZiAodHlwZW9mIGVuYWJsZU9yTmFtZUFuZEFyZ3MgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IGVuYWJsZU9yTmFtZUFuZEFyZ3M7XG4gICAgICBpZiAoZW5hYmxlT3JOYW1lQW5kQXJncyAmJiB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwKSB7XG4gICAgICAgIC8vIG1ha2UgdGhlIGNvbW1hbmQgdG8gc3RvcmUgdGhlIGdyb3VwXG4gICAgICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAodGhpcy5fZ2V0SGVscENvbW1hbmQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lQW5kQXJncyA9IGVuYWJsZU9yTmFtZUFuZEFyZ3MgPz8gJ2hlbHAgW2NvbW1hbmRdJztcbiAgICBjb25zdCBbLCBoZWxwTmFtZSwgaGVscEFyZ3NdID0gbmFtZUFuZEFyZ3MubWF0Y2goLyhbXiBdKykgKiguKikvKTtcbiAgICBjb25zdCBoZWxwRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA/PyAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJztcblxuICAgIGNvbnN0IGhlbHBDb21tYW5kID0gdGhpcy5jcmVhdGVDb21tYW5kKGhlbHBOYW1lKTtcbiAgICBoZWxwQ29tbWFuZC5oZWxwT3B0aW9uKGZhbHNlKTtcbiAgICBpZiAoaGVscEFyZ3MpIGhlbHBDb21tYW5kLmFyZ3VtZW50cyhoZWxwQXJncyk7XG4gICAgaWYgKGhlbHBEZXNjcmlwdGlvbikgaGVscENvbW1hbmQuZGVzY3JpcHRpb24oaGVscERlc2NyaXB0aW9uKTtcblxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB0cnVlO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gaGVscENvbW1hbmQ7XG4gICAgLy8gaW5pdCBncm91cCB1bmxlc3MgbGF6eSBjcmVhdGVcbiAgICBpZiAoZW5hYmxlT3JOYW1lQW5kQXJncyB8fCBkZXNjcmlwdGlvbikgdGhpcy5faW5pdENvbW1hbmRHcm91cChoZWxwQ29tbWFuZCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcHJlcGFyZWQgY3VzdG9tIGhlbHAgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHsoQ29tbWFuZHxzdHJpbmd8Ym9vbGVhbil9IGhlbHBDb21tYW5kIC0gY3VzdG9tIGhlbHAgY29tbWFuZCwgb3IgZGVwcmVjYXRlZCBlbmFibGVPck5hbWVBbmRBcmdzIGFzIGZvciBgLmhlbHBDb21tYW5kKClgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVwcmVjYXRlZERlc2NyaXB0aW9uXSAtIGRlcHJlY2F0ZWQgY3VzdG9tIGRlc2NyaXB0aW9uIHVzZWQgd2l0aCBjdXN0b20gbmFtZSBvbmx5XG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkSGVscENvbW1hbmQoaGVscENvbW1hbmQsIGRlcHJlY2F0ZWREZXNjcmlwdGlvbikge1xuICAgIC8vIElmIG5vdCBwYXNzZWQgYW4gb2JqZWN0LCBjYWxsIHRocm91Z2ggdG8gaGVscENvbW1hbmQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LFxuICAgIC8vIGFzIGFkZEhlbHBDb21tYW5kIHdhcyBvcmlnaW5hbGx5IHVzZWQgbGlrZSBoZWxwQ29tbWFuZCBpcyBub3cuXG4gICAgaWYgKHR5cGVvZiBoZWxwQ29tbWFuZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuaGVscENvbW1hbmQoaGVscENvbW1hbmQsIGRlcHJlY2F0ZWREZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdHJ1ZTtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IGhlbHBDb21tYW5kO1xuICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoaGVscENvbW1hbmQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgY3JlYXRlIGhlbHAgY29tbWFuZC5cbiAgICpcbiAgICogQHJldHVybiB7KENvbW1hbmR8bnVsbCl9XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuICBfZ2V0SGVscENvbW1hbmQoKSB7XG4gICAgY29uc3QgaGFzSW1wbGljaXRIZWxwQ29tbWFuZCA9XG4gICAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID8/XG4gICAgICAodGhpcy5jb21tYW5kcy5sZW5ndGggJiZcbiAgICAgICAgIXRoaXMuX2FjdGlvbkhhbmRsZXIgJiZcbiAgICAgICAgIXRoaXMuX2ZpbmRDb21tYW5kKCdoZWxwJykpO1xuXG4gICAgaWYgKGhhc0ltcGxpY2l0SGVscENvbW1hbmQpIHtcbiAgICAgIGlmICh0aGlzLl9oZWxwQ29tbWFuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGVscENvbW1hbmQodW5kZWZpbmVkLCB1bmRlZmluZWQpOyAvLyB1c2UgZGVmYXVsdCBuYW1lIGFuZCBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2hlbHBDb21tYW5kO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaG9vayBmb3IgbGlmZSBjeWNsZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBob29rKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGFsbG93ZWRWYWx1ZXMgPSBbJ3ByZVN1YmNvbW1hbmQnLCAncHJlQWN0aW9uJywgJ3Bvc3RBY3Rpb24nXTtcbiAgICBpZiAoIWFsbG93ZWRWYWx1ZXMuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIGV2ZW50IHBhc3NlZCB0byBob29rIDogJyR7ZXZlbnR9Jy5cbkV4cGVjdGluZyBvbmUgb2YgJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0pIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBjYWxsaW5nIHByb2Nlc3MuZXhpdC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXSBvcHRpb25hbCBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHBhc3NlZCBhIENvbW1hbmRlckVycm9yLCBkZWZhdWx0cyB0byB0aHJvd2luZ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgZXhpdE92ZXJyaWRlKGZuKSB7XG4gICAgaWYgKGZuKSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBmbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrID0gKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXN5bmMgY2FsbGJhY2sgZnJvbSBzcGF3biBldmVudHMsIG5vdCB1c2VmdWwgdG8gdGhyb3cuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgcHJvY2Vzcy5leGl0LCBhbmQgX2V4aXRDYWxsYmFjayBpZiBkZWZpbmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZXhpdENvZGUgZXhpdCBjb2RlIGZvciB1c2luZyB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3JcbiAgICogQHJldHVybiBuZXZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhpdChleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkge1xuICAgIGlmICh0aGlzLl9leGl0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayhuZXcgQ29tbWFuZGVyRXJyb3IoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgIC8vIEV4cGVjdGluZyB0aGlzIGxpbmUgaXMgbm90IHJlYWNoZWQuXG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdChleGl0Q29kZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgYGZuYCBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnc2VydmUnKVxuICAgKiAgIC5kZXNjcmlwdGlvbignc3RhcnQgc2VydmljZScpXG4gICAqICAgLmFjdGlvbihmdW5jdGlvbigpIHtcbiAgICogICAgICAvLyBkbyB3b3JrIGhlcmVcbiAgICogICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFjdGlvbihmbikge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKGFyZ3MpID0+IHtcbiAgICAgIC8vIFRoZSAuYWN0aW9uIGNhbGxiYWNrIHRha2VzIGFuIGV4dHJhIHBhcmFtZXRlciB3aGljaCBpcyB0aGUgY29tbWFuZCBvciBvcHRpb25zLlxuICAgICAgY29uc3QgZXhwZWN0ZWRBcmdzQ291bnQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoO1xuICAgICAgY29uc3QgYWN0aW9uQXJncyA9IGFyZ3Muc2xpY2UoMCwgZXhwZWN0ZWRBcmdzQ291bnQpO1xuICAgICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgICBhY3Rpb25BcmdzW2V4cGVjdGVkQXJnc0NvdW50XSA9IHRoaXM7IC8vIGJhY2t3YXJkcyBjb21wYXRpYmxlIFwib3B0aW9uc1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25BcmdzW2V4cGVjdGVkQXJnc0NvdW50XSA9IHRoaXMub3B0cygpO1xuICAgICAgfVxuICAgICAgYWN0aW9uQXJncy5wdXNoKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYWN0aW9uQXJncyk7XG4gICAgfTtcbiAgICB0aGlzLl9hY3Rpb25IYW5kbGVyID0gbGlzdGVuZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIG9wdGlvbi5cbiAgICpcbiAgICogU2VlIC5vcHRpb24oKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgb3B0aW9uLCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIG9wdGlvbi4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVPcHRpb24gdG8gcmV0dXJuIGEgY3VzdG9tIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge09wdGlvbn0gbmV3IG9wdGlvblxuICAgKi9cblxuICBjcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIHBhcnNlQXJncyB0byBjYXRjaCAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcuXG4gICAqXG4gICAqIEBwYXJhbSB7KE9wdGlvbiB8IEFyZ3VtZW50KX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IHByZXZpb3VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnZhbGlkQXJndW1lbnRNZXNzYWdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jYWxsUGFyc2VBcmcodGFyZ2V0LCB2YWx1ZSwgcHJldmlvdXMsIGludmFsaWRBcmd1bWVudE1lc3NhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRhcmdldC5wYXJzZUFyZyh2YWx1ZSwgcHJldmlvdXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2ludmFsaWRBcmd1bWVudE1lc3NhZ2V9ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGV4aXRDb2RlOiBlcnIuZXhpdENvZGUsIGNvZGU6IGVyci5jb2RlIH0pO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3Igb3B0aW9uIGZsYWcgY29uZmxpY3RzLlxuICAgKiBSZWdpc3RlciBvcHRpb24gaWYgbm8gY29uZmxpY3RzIGZvdW5kLCBvciB0aHJvdyBvbiBjb25mbGljdC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcmVnaXN0ZXJPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPVxuICAgICAgKG9wdGlvbi5zaG9ydCAmJiB0aGlzLl9maW5kT3B0aW9uKG9wdGlvbi5zaG9ydCkpIHx8XG4gICAgICAob3B0aW9uLmxvbmcgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24ubG9uZykpO1xuICAgIGlmIChtYXRjaGluZ09wdGlvbikge1xuICAgICAgY29uc3QgbWF0Y2hpbmdGbGFnID1cbiAgICAgICAgb3B0aW9uLmxvbmcgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24ubG9uZylcbiAgICAgICAgICA/IG9wdGlvbi5sb25nXG4gICAgICAgICAgOiBvcHRpb24uc2hvcnQ7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhZGQgb3B0aW9uICcke29wdGlvbi5mbGFnc30nJHt0aGlzLl9uYW1lICYmIGAgdG8gY29tbWFuZCAnJHt0aGlzLl9uYW1lfSdgfSBkdWUgdG8gY29uZmxpY3RpbmcgZmxhZyAnJHttYXRjaGluZ0ZsYWd9J1xuLSAgYWxyZWFkeSB1c2VkIGJ5IG9wdGlvbiAnJHttYXRjaGluZ09wdGlvbi5mbGFnc30nYCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKG9wdGlvbik7XG4gICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3IgY29tbWFuZCBuYW1lIGFuZCBhbGlhcyBjb25mbGljdHMgd2l0aCBleGlzdGluZyBjb21tYW5kcy5cbiAgICogUmVnaXN0ZXIgY29tbWFuZCBpZiBubyBjb25mbGljdHMgZm91bmQsIG9yIHRocm93IG9uIGNvbmZsaWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNvbW1hbmRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3JlZ2lzdGVyQ29tbWFuZChjb21tYW5kKSB7XG4gICAgY29uc3Qga25vd25CeSA9IChjbWQpID0+IHtcbiAgICAgIHJldHVybiBbY21kLm5hbWUoKV0uY29uY2F0KGNtZC5hbGlhc2VzKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBhbHJlYWR5VXNlZCA9IGtub3duQnkoY29tbWFuZCkuZmluZCgobmFtZSkgPT5cbiAgICAgIHRoaXMuX2ZpbmRDb21tYW5kKG5hbWUpLFxuICAgICk7XG4gICAgaWYgKGFscmVhZHlVc2VkKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0NtZCA9IGtub3duQnkodGhpcy5fZmluZENvbW1hbmQoYWxyZWFkeVVzZWQpKS5qb2luKCd8Jyk7XG4gICAgICBjb25zdCBuZXdDbWQgPSBrbm93bkJ5KGNvbW1hbmQpLmpvaW4oJ3wnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhbm5vdCBhZGQgY29tbWFuZCAnJHtuZXdDbWR9JyBhcyBhbHJlYWR5IGhhdmUgY29tbWFuZCAnJHtleGlzdGluZ0NtZH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENvbW1hbmRHcm91cChjb21tYW5kKTtcbiAgICB0aGlzLmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZE9wdGlvbihvcHRpb24pIHtcbiAgICB0aGlzLl9yZWdpc3Rlck9wdGlvbihvcHRpb24pO1xuXG4gICAgY29uc3Qgb25hbWUgPSBvcHRpb24ubmFtZSgpO1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuXG4gICAgLy8gc3RvcmUgZGVmYXVsdCB2YWx1ZVxuICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAvLyAtLW5vLWZvbyBpcyBzcGVjaWFsIGFuZCBkZWZhdWx0cyBmb28gdG8gdHJ1ZSwgdW5sZXNzIGEgLS1mb28gb3B0aW9uIGlzIGFscmVhZHkgZGVmaW5lZFxuICAgICAgY29uc3QgcG9zaXRpdmVMb25nRmxhZyA9IG9wdGlvbi5sb25nLnJlcGxhY2UoL14tLW5vLS8sICctLScpO1xuICAgICAgaWYgKCF0aGlzLl9maW5kT3B0aW9uKHBvc2l0aXZlTG9uZ0ZsYWcpKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgb3B0aW9uLmRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbi5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShuYW1lLCBvcHRpb24uZGVmYXVsdFZhbHVlLCAnZGVmYXVsdCcpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZXIgZm9yIGNsaSBhbmQgZW52IHN1cHBsaWVkIHZhbHVlc1xuICAgIGNvbnN0IGhhbmRsZU9wdGlvblZhbHVlID0gKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgdmFsdWVTb3VyY2UpID0+IHtcbiAgICAgIC8vIHZhbCBpcyBudWxsIGZvciBvcHRpb25hbCBvcHRpb24gdXNlZCB3aXRob3V0IGFuIG9wdGlvbmFsLWFyZ3VtZW50LlxuICAgICAgLy8gdmFsIGlzIHVuZGVmaW5lZCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBvcHRpb24uXG4gICAgICBpZiAodmFsID09IG51bGwgJiYgb3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbCA9IG9wdGlvbi5wcmVzZXRBcmc7XG4gICAgICB9XG5cbiAgICAgIC8vIGN1c3RvbSBwcm9jZXNzaW5nXG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUobmFtZSk7XG4gICAgICBpZiAodmFsICE9PSBudWxsICYmIG9wdGlvbi5wYXJzZUFyZykge1xuICAgICAgICB2YWwgPSB0aGlzLl9jYWxsUGFyc2VBcmcob3B0aW9uLCB2YWwsIG9sZFZhbHVlLCBpbnZhbGlkVmFsdWVNZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsICE9PSBudWxsICYmIG9wdGlvbi52YXJpYWRpYykge1xuICAgICAgICB2YWwgPSBvcHRpb24uX2NvbGxlY3RWYWx1ZSh2YWwsIG9sZFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsbC1pbiBhcHByb3ByaWF0ZSBtaXNzaW5nIHZhbHVlcy4gTG9uZyB3aW5kZWQgYnV0IGVhc3kgdG8gZm9sbG93LlxuICAgICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAgICAgdmFsID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmlzQm9vbGVhbigpIHx8IG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgIHZhbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gJyc7IC8vIG5vdCBub3JtYWwsIHBhcnNlQXJnIG1pZ2h0IGhhdmUgZmFpbGVkIG9yIGJlIGEgbW9jayBmdW5jdGlvbiBmb3IgdGVzdGluZ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShuYW1lLCB2YWwsIHZhbHVlU291cmNlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbignb3B0aW9uOicgKyBvbmFtZSwgKHZhbCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIGFyZ3VtZW50ICcke3ZhbH0nIGlzIGludmFsaWQuYDtcbiAgICAgIGhhbmRsZU9wdGlvblZhbHVlKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgJ2NsaScpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbi5lbnZWYXIpIHtcbiAgICAgIHRoaXMub24oJ29wdGlvbkVudjonICsgb25hbWUsICh2YWwpID0+IHtcbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIHZhbHVlICcke3ZhbH0nIGZyb20gZW52ICcke29wdGlvbi5lbnZWYXJ9JyBpcyBpbnZhbGlkLmA7XG4gICAgICAgIGhhbmRsZU9wdGlvblZhbHVlKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgJ2VudicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gc2hhcmVkIGJ5IC5vcHRpb24oKSBhbmQgLnJlcXVpcmVkT3B0aW9uKClcbiAgICpcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb3B0aW9uRXgoY29uZmlnLCBmbGFncywgZGVzY3JpcHRpb24sIGZuLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnb2JqZWN0JyAmJiBmbGFncyBpbnN0YW5jZW9mIE9wdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVG8gYWRkIGFuIE9wdGlvbiBvYmplY3QgdXNlIGFkZE9wdGlvbigpIGluc3RlYWQgb2Ygb3B0aW9uKCkgb3IgcmVxdWlyZWRPcHRpb24oKScsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICAgIG9wdGlvbi5tYWtlT3B0aW9uTWFuZGF0b3J5KCEhY29uZmlnLm1hbmRhdG9yeSk7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIoZm4pO1xuICAgIH0gZWxzZSBpZiAoZm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIGRlcHJlY2F0ZWRcbiAgICAgIGNvbnN0IHJlZ2V4ID0gZm47XG4gICAgICBmbiA9ICh2YWwsIGRlZikgPT4ge1xuICAgICAgICBjb25zdCBtID0gcmVnZXguZXhlYyh2YWwpO1xuICAgICAgICByZXR1cm4gbSA/IG1bMF0gOiBkZWY7XG4gICAgICB9O1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIoZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb24uZGVmYXVsdChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkT3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIG9wdGlvbiB3aXRoIGBmbGFnc2AsIGBkZXNjcmlwdGlvbmAsIGFuZCBvcHRpb25hbCBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9uIG9yIGBkZWZhdWx0VmFsdWVgIG9yIGJvdGguXG4gICAqXG4gICAqIFRoZSBgZmxhZ3NgIHN0cmluZyBjb250YWlucyB0aGUgc2hvcnQgYW5kL29yIGxvbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBjb21tYSwgYSBwaXBlIG9yIHNwYWNlLiBBIHJlcXVpcmVkXG4gICAqIG9wdGlvbi1hcmd1bWVudCBpcyBpbmRpY2F0ZWQgYnkgYDw+YCBhbmQgYW4gb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IGJ5IGBbXWAuXG4gICAqXG4gICAqIFNlZSB0aGUgUkVBRE1FIGZvciBtb3JlIGRldGFpbHMsIGFuZCBzZWUgYWxzbyBhZGRPcHRpb24oKSBhbmQgcmVxdWlyZWRPcHRpb24oKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgICAgLm9wdGlvbignLXAsIC0tcGVwcGVyJywgJ2FkZCBwZXBwZXInKVxuICAgKiAgICAgLm9wdGlvbignLS1wdCwgLS1waXp6YS10eXBlIDxUWVBFPicsICd0eXBlIG9mIHBpenphJykgLy8gcmVxdWlyZWQgb3B0aW9uLWFyZ3VtZW50XG4gICAqICAgICAub3B0aW9uKCctYywgLS1jaGVlc2UgW0NIRUVTRV0nLCAnYWRkIGV4dHJhIGNoZWVzZScsICdtb3p6YXJlbGxhJykgLy8gb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IHdpdGggZGVmYXVsdFxuICAgKiAgICAgLm9wdGlvbignLXQsIC0tdGlwIDxWQUxVRT4nLCAnYWRkIHRpcCB0byBwdXJjaGFzZSBjb3N0JywgcGFyc2VGbG9hdCkgLy8gY3VzdG9tIHBhcnNlIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIG9wdGlvbihmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRXgoe30sIGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcmVxdWlyZWQgb3B0aW9uIHdoaWNoIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcuIFRoaXMgdXN1YWxseSBtZWFuc1xuICAgKiB0aGUgb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuIChPdGhlcndpc2UgdGhlIHNhbWUgYXMgLm9wdGlvbigpLilcbiAgICpcbiAgICogVGhlIGBmbGFnc2Agc3RyaW5nIGNvbnRhaW5zIHRoZSBzaG9ydCBhbmQvb3IgbG9uZyBmbGFncywgc2VwYXJhdGVkIGJ5IGNvbW1hLCBhIHBpcGUgb3Igc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHJlcXVpcmVkT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25FeChcbiAgICAgIHsgbWFuZGF0b3J5OiB0cnVlIH0sXG4gICAgICBmbGFncyxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgcGFyc2VBcmcsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbHRlciBwYXJzaW5nIG9mIHNob3J0IGZsYWdzIHdpdGggb3B0aW9uYWwgdmFsdWVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBmb3IgYC5vcHRpb24oJy1mLC0tZmxhZyBbdmFsdWVdJyk6XG4gICAqIHByb2dyYW0uY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKHRydWUpOyAgLy8gYC1mODBgIGlzIHRyZWF0ZWQgbGlrZSBgLS1mbGFnPTgwYCwgdGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXJcbiAgICogcHJvZ3JhbS5jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUoZmFsc2UpIC8vIGAtZmJgIGlzIHRyZWF0ZWQgbGlrZSBgLWYgLWJgXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbWJpbmVdIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIGFuIG9wdGlvbmFsIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIGZsYWcuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKGNvbWJpbmUgPSB0cnVlKSB7XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID0gISFjb21iaW5lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVua25vd24gb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd1Vua25vd25dIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWxsb3dVbmtub3duT3B0aW9uKGFsbG93VW5rbm93biA9IHRydWUpIHtcbiAgICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSAhIWFsbG93VW5rbm93bjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBleGNlc3MgY29tbWFuZC1hcmd1bWVudHMgb24gdGhlIGNvbW1hbmQgbGluZS4gUGFzcyBmYWxzZSB0byBtYWtlIGV4Y2VzcyBhcmd1bWVudHMgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93RXhjZXNzXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBubyBlcnJvciB3aWxsIGJlIHRocm93biBmb3IgZXhjZXNzIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhbGxvd0V4Y2Vzc0FyZ3VtZW50cyhhbGxvd0V4Y2VzcyA9IHRydWUpIHtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9ICEhYWxsb3dFeGNlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHBvc2l0aW9uYWwgb3B0aW9ucy4gUG9zaXRpb25hbCBtZWFucyBnbG9iYWwgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGJlZm9yZSBzdWJjb21tYW5kcyB3aGljaCBsZXRzXG4gICAqIHN1YmNvbW1hbmRzIHJldXNlIHRoZSBzYW1lIG9wdGlvbiBuYW1lcywgYW5kIGFsc28gZW5hYmxlcyBzdWJjb21tYW5kcyB0byB0dXJuIG9uIHBhc3NUaHJvdWdoT3B0aW9ucy5cbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vbi1wb3NpdGlvbmFsIGFuZCBnbG9iYWwgb3B0aW9ucyBtYXkgYXBwZWFyIGFueXdoZXJlIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Bvc2l0aW9uYWxdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMocG9zaXRpb25hbCA9IHRydWUpIHtcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9ICEhcG9zaXRpb25hbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzIHRocm91Z2ggb3B0aW9ucyB0aGF0IGNvbWUgYWZ0ZXIgY29tbWFuZC1hcmd1bWVudHMgcmF0aGVyIHRoYW4gdHJlYXQgdGhlbSBhcyBjb21tYW5kLW9wdGlvbnMsXG4gICAqIHNvIGFjdHVhbCBjb21tYW5kLW9wdGlvbnMgY29tZSBiZWZvcmUgY29tbWFuZC1hcmd1bWVudHMuIFR1cm5pbmcgdGhpcyBvbiBmb3IgYSBzdWJjb21tYW5kIHJlcXVpcmVzXG4gICAqIHBvc2l0aW9uYWwgb3B0aW9ucyB0byBoYXZlIGJlZW4gZW5hYmxlZCBvbiB0aGUgcHJvZ3JhbSAocGFyZW50IGNvbW1hbmRzKS5cbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vbi1wb3NpdGlvbmFsIGFuZCBvcHRpb25zIG1heSBhcHBlYXIgYmVmb3JlIG9yIGFmdGVyIGNvbW1hbmQtYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXNzVGhyb3VnaF0gZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBwYXNzVGhyb3VnaE9wdGlvbnMocGFzc1Rocm91Z2ggPSB0cnVlKSB7XG4gICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zID0gISFwYXNzVGhyb3VnaDtcbiAgICB0aGlzLl9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQgJiZcbiAgICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyAmJlxuICAgICAgIXRoaXMucGFyZW50Ll9lbmFibGVQb3NpdGlvbmFsT3B0aW9uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcGFzc1Rocm91Z2hPcHRpb25zIGNhbm5vdCBiZSB1c2VkIGZvciAnJHt0aGlzLl9uYW1lfScgd2l0aG91dCB0dXJuaW5nIG9uIGVuYWJsZVBvc2l0aW9uYWxPcHRpb25zIGZvciBwYXJlbnQgY29tbWFuZChzKWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0b3JlIG9wdGlvbiB2YWx1ZXMgYXMgcHJvcGVydGllcyBvbiBjb21tYW5kIG9iamVjdCxcbiAgICogb3Igc3RvcmUgc2VwYXJhdGVseSAoc3BlY2lmeSBmYWxzZSkuIEluIGJvdGggY2FzZXMgdGhlIG9wdGlvbiB2YWx1ZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIC5vcHRzKCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0b3JlQXNQcm9wZXJ0aWVzPXRydWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoc3RvcmVBc1Byb3BlcnRpZXMgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbCAuc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKCkgYmVmb3JlIGFkZGluZyBvcHRpb25zJyk7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9vcHRpb25WYWx1ZXMpLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnY2FsbCAuc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKCkgYmVmb3JlIHNldHRpbmcgb3B0aW9uIHZhbHVlcycsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSAhIXN0b3JlQXNQcm9wZXJ0aWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtvYmplY3R9IHZhbHVlXG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlKGtleSkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZXNba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzZXRPcHRpb25WYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKGtleSwgdmFsdWUsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgb3B0aW9uIHZhbHVlIGFuZCB3aGVyZSB0aGUgdmFsdWUgY2FtZSBmcm9tLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gZXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0L2NvbmZpZy9lbnYvY2xpL2ltcGxpZWRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShrZXksIHZhbHVlLCBzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3B0aW9uVmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzW2tleV0gPSBzb3VyY2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZSBvZiBvcHRpb24gdmFsdWUuXG4gICAqIEV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdCB8IGNvbmZpZyB8IGVudiB8IGNsaSB8IGltcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlU291cmNlKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXNba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc291cmNlIG9mIG9wdGlvbiB2YWx1ZS4gU2VlIGFsc28gLm9wdHNXaXRoR2xvYmFscygpLlxuICAgKiBFeHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQgfCBjb25maWcgfCBlbnYgfCBjbGkgfCBpbXBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZVNvdXJjZVdpdGhHbG9iYWxzKGtleSkge1xuICAgIC8vIGdsb2JhbCBvdmVyd3JpdGVzIGxvY2FsLCBsaWtlIG9wdHNXaXRoR2xvYmFsc1xuICAgIGxldCBzb3VyY2U7XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgaWYgKGNtZC5nZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc291cmNlID0gY21kLmdldE9wdGlvblZhbHVlU291cmNlKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBhcmd1bWVudHMgZnJvbSBpbXBsaWVkIG9yIGV4cGxpY2l0IGFyZ3VtZW50cy5cbiAgICogU2lkZS1lZmZlY3RzOiBzZXQgX3NjcmlwdFBhdGggaWYgYXJncyBpbmNsdWRlZCBzY3JpcHQuIFVzZWQgZm9yIGRlZmF1bHQgcHJvZ3JhbSBuYW1lLCBhbmQgc3ViY29tbWFuZCBzZWFyY2hlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICBpZiAoYXJndiAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KGFyZ3YpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IHBhcmFtZXRlciB0byBwYXJzZSBtdXN0IGJlIGFycmF5IG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBwYXJzZU9wdGlvbnMgPSBwYXJzZU9wdGlvbnMgfHwge307XG5cbiAgICAvLyBhdXRvLWRldGVjdCBhcmd1bWVudCBjb252ZW50aW9ucyBpZiBub3RoaW5nIHN1cHBsaWVkXG4gICAgaWYgKGFyZ3YgPT09IHVuZGVmaW5lZCAmJiBwYXJzZU9wdGlvbnMuZnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy52ZXJzaW9ucz8uZWxlY3Ryb24pIHtcbiAgICAgICAgcGFyc2VPcHRpb25zLmZyb20gPSAnZWxlY3Ryb24nO1xuICAgICAgfVxuICAgICAgLy8gY2hlY2sgbm9kZSBzcGVjaWZpYyBvcHRpb25zIGZvciBzY2VuYXJpb3Mgd2hlcmUgdXNlciBDTEkgYXJncyBmb2xsb3cgZXhlY3V0YWJsZSB3aXRob3V0IHNjcmlwdG5hbWVcbiAgICAgIGNvbnN0IGV4ZWNBcmd2ID0gcHJvY2Vzcy5leGVjQXJndiA/PyBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy1lJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy0tZXZhbCcpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctcCcpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctLXByaW50JylcbiAgICAgICkge1xuICAgICAgICBwYXJzZU9wdGlvbnMuZnJvbSA9ICdldmFsJzsgLy8gaW50ZXJuYWwgdXNhZ2UsIG5vdCBkb2N1bWVudGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCB0byB1c2luZyBwcm9jZXNzLmFyZ3ZcbiAgICBpZiAoYXJndiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICAgIH1cbiAgICB0aGlzLnJhd0FyZ3MgPSBhcmd2LnNsaWNlKCk7XG5cbiAgICAvLyBleHRyYWN0IHRoZSB1c2VyIGFyZ3MgYW5kIHNjcmlwdFBhdGhcbiAgICBsZXQgdXNlckFyZ3M7XG4gICAgc3dpdGNoIChwYXJzZU9wdGlvbnMuZnJvbSkge1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCA9IGFyZ3ZbMV07XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbGVjdHJvbic6XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZGVmYXVsdEFwcCBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIGlmIChwcm9jZXNzLmRlZmF1bHRBcHApIHtcbiAgICAgICAgICB0aGlzLl9zY3JpcHRQYXRoID0gYXJndlsxXTtcbiAgICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmFsJzpcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgdW5leHBlY3RlZCBwYXJzZSBvcHRpb24geyBmcm9tOiAnJHtwYXJzZU9wdGlvbnMuZnJvbX0nIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZpbmQgZGVmYXVsdCBuYW1lIGZvciBwcm9ncmFtIGZyb20gYXJndW1lbnRzLlxuICAgIGlmICghdGhpcy5fbmFtZSAmJiB0aGlzLl9zY3JpcHRQYXRoKVxuICAgICAgdGhpcy5uYW1lRnJvbUZpbGVuYW1lKHRoaXMuX3NjcmlwdFBhdGgpO1xuICAgIHRoaXMuX25hbWUgPSB0aGlzLl9uYW1lIHx8ICdwcm9ncmFtJztcblxuICAgIHJldHVybiB1c2VyQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBgYXJndmAsIHNldHRpbmcgb3B0aW9ucyBhbmQgaW52b2tpbmcgY29tbWFuZHMgd2hlbiBkZWZpbmVkLlxuICAgKlxuICAgKiBVc2UgcGFyc2VBc3luYyBpbnN0ZWFkIG9mIHBhcnNlIGlmIGFueSBvZiB5b3VyIGFjdGlvbiBoYW5kbGVycyBhcmUgYXN5bmMuXG4gICAqXG4gICAqIENhbGwgd2l0aCBubyBwYXJhbWV0ZXJzIHRvIHBhcnNlIGBwcm9jZXNzLmFyZ3ZgLiBEZXRlY3RzIEVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgb3B0aW9ucyBsaWtlIGBub2RlIC0tZXZhbGAuIEVhc3kgbW9kZSFcbiAgICpcbiAgICogT3IgY2FsbCB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UsIGFuZCBvcHRpb25hbGx5IHdoZXJlIHRoZSB1c2VyIGFyZ3VtZW50cyBzdGFydCBieSBzcGVjaWZ5aW5nIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIGBmcm9tYDpcbiAgICogLSBgJ25vZGUnYDogZGVmYXVsdCwgYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIGlzIHRoZSBzY3JpcHQgYmVpbmcgcnVuLCB3aXRoIHVzZXIgYXJndW1lbnRzIGFmdGVyIHRoYXRcbiAgICogLSBgJ2VsZWN0cm9uJ2A6IGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGVsZWN0cm9uIGFwcGxpY2F0aW9uIGlzIHBhY2thZ2VkXG4gICAqIC0gYCd1c2VyJ2A6IGp1c3QgdXNlciBhcmd1bWVudHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5wYXJzZSgpOyAvLyBwYXJzZSBwcm9jZXNzLmFyZ3YgYW5kIGF1dG8tZGV0ZWN0IGVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgZmxhZ3NcbiAgICogcHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpOyAvLyBhc3N1bWUgYXJndlswXSBpcyBhcHAgYW5kIGFyZ3ZbMV0gaXMgc2NyaXB0XG4gICAqIHByb2dyYW0ucGFyc2UobXktYXJncywgeyBmcm9tOiAndXNlcicgfSk7IC8vIGp1c3QgdXNlciBzdXBwbGllZCBhcmd1bWVudHMsIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBhcmd2WzBdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmd2XSAtIG9wdGlvbmFsLCBkZWZhdWx0cyB0byBwcm9jZXNzLmFyZ3ZcbiAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJzZU9wdGlvbnNdIC0gb3B0aW9uYWxseSBzcGVjaWZ5IHN0eWxlIG9mIG9wdGlvbnMgd2l0aCBmcm9tOiBub2RlL3VzZXIvZWxlY3Ryb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJzZU9wdGlvbnMuZnJvbV0gLSB3aGVyZSB0aGUgYXJncyBhcmUgZnJvbTogJ25vZGUnLCAndXNlcicsICdlbGVjdHJvbidcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHBhcnNlKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIHRoaXMuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGNvbnN0IHVzZXJBcmdzID0gdGhpcy5fcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucyk7XG4gICAgdGhpcy5fcGFyc2VDb21tYW5kKFtdLCB1c2VyQXJncyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBgYXJndmAsIHNldHRpbmcgb3B0aW9ucyBhbmQgaW52b2tpbmcgY29tbWFuZHMgd2hlbiBkZWZpbmVkLlxuICAgKlxuICAgKiBDYWxsIHdpdGggbm8gcGFyYW1ldGVycyB0byBwYXJzZSBgcHJvY2Vzcy5hcmd2YC4gRGV0ZWN0cyBFbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIG9wdGlvbnMgbGlrZSBgbm9kZSAtLWV2YWxgLiBFYXN5IG1vZGUhXG4gICAqXG4gICAqIE9yIGNhbGwgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlLCBhbmQgb3B0aW9uYWxseSB3aGVyZSB0aGUgdXNlciBhcmd1bWVudHMgc3RhcnQgYnkgc3BlY2lmeWluZyB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSBgZnJvbWA6XG4gICAqIC0gYCdub2RlJ2A6IGRlZmF1bHQsIGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCBpcyB0aGUgc2NyaXB0IGJlaW5nIHJ1biwgd2l0aCB1c2VyIGFyZ3VtZW50cyBhZnRlciB0aGF0XG4gICAqIC0gYCdlbGVjdHJvbidgOiBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBlbGVjdHJvbiBhcHBsaWNhdGlvbiBpcyBwYWNrYWdlZFxuICAgKiAtIGAndXNlcidgOiBqdXN0IHVzZXIgYXJndW1lbnRzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYygpOyAvLyBwYXJzZSBwcm9jZXNzLmFyZ3YgYW5kIGF1dG8tZGV0ZWN0IGVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgZmxhZ3NcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7IC8vIGFzc3VtZSBhcmd2WzBdIGlzIGFwcCBhbmQgYXJndlsxXSBpcyBzY3JpcHRcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKG15LWFyZ3MsIHsgZnJvbTogJ3VzZXInIH0pOyAvLyBqdXN0IHVzZXIgc3VwcGxpZWQgYXJndW1lbnRzLCBub3RoaW5nIHNwZWNpYWwgYWJvdXQgYXJndlswXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJndl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJzZU9wdGlvbnNdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJzZU9wdGlvbnMuZnJvbSAtIHdoZXJlIHRoZSBhcmdzIGFyZSBmcm9tOiAnbm9kZScsICd1c2VyJywgJ2VsZWN0cm9uJ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cblxuICBhc3luYyBwYXJzZUFzeW5jKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIHRoaXMuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGNvbnN0IHVzZXJBcmdzID0gdGhpcy5fcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucyk7XG4gICAgYXdhaXQgdGhpcy5fcGFyc2VDb21tYW5kKFtdLCB1c2VyQXJncyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9wcmVwYXJlRm9yUGFyc2UoKSB7XG4gICAgaWYgKHRoaXMuX3NhdmVkU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2F2ZVN0YXRlQmVmb3JlUGFyc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN0b3JlU3RhdGVCZWZvcmVQYXJzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgdGhlIGZpcnN0IHRpbWUgcGFyc2UgaXMgY2FsbGVkIHRvIHNhdmUgc3RhdGUgYW5kIGFsbG93IGEgcmVzdG9yZSBiZWZvcmUgc3Vic2VxdWVudCBjYWxscyB0byBwYXJzZS5cbiAgICogTm90IHVzdWFsbHkgY2FsbGVkIGRpcmVjdGx5LCBidXQgYXZhaWxhYmxlIGZvciBzdWJjbGFzc2VzIHRvIHNhdmUgdGhlaXIgY3VzdG9tIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbiBhIGxhenkgd2F5LiBPbmx5IGNvbW1hbmRzIHVzZWQgaW4gcGFyc2luZyBjaGFpbiB3aWxsIGhhdmUgc3RhdGUgc2F2ZWQuXG4gICAqL1xuICBzYXZlU3RhdGVCZWZvcmVQYXJzZSgpIHtcbiAgICB0aGlzLl9zYXZlZFN0YXRlID0ge1xuICAgICAgLy8gbmFtZSBpcyBzdGFibGUgaWYgc3VwcGxpZWQgYnkgYXV0aG9yLCBidXQgbWF5IGJlIHVuc3BlY2lmaWVkIGZvciByb290IGNvbW1hbmQgYW5kIGRlZHVjZWQgZHVyaW5nIHBhcnNpbmdcbiAgICAgIF9uYW1lOiB0aGlzLl9uYW1lLFxuICAgICAgLy8gb3B0aW9uIHZhbHVlcyBiZWZvcmUgcGFyc2UgaGF2ZSBkZWZhdWx0IHZhbHVlcyAoaW5jbHVkaW5nIGZhbHNlIGZvciBuZWdhdGVkIG9wdGlvbnMpXG4gICAgICAvLyBzaGFsbG93IGNsb25lc1xuICAgICAgX29wdGlvblZhbHVlczogeyAuLi50aGlzLl9vcHRpb25WYWx1ZXMgfSxcbiAgICAgIF9vcHRpb25WYWx1ZVNvdXJjZXM6IHsgLi4udGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHN0YXRlIGJlZm9yZSBwYXJzZSBmb3IgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgKiBOb3QgdXN1YWxseSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBhdmFpbGFibGUgZm9yIHN1YmNsYXNzZXMgdG8gc2F2ZSB0aGVpciBjdXN0b20gc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGluIGEgbGF6eSB3YXkuIE9ubHkgY29tbWFuZHMgdXNlZCBpbiBwYXJzaW5nIGNoYWluIHdpbGwgaGF2ZSBzdGF0ZSByZXN0b3JlZC5cbiAgICovXG4gIHJlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgY2FsbCBwYXJzZSBhZ2FpbiB3aGVuIHN0b3JlT3B0aW9uc0FzUHJvcGVydGllcyBpcyB0cnVlLlxuLSBlaXRoZXIgbWFrZSBhIG5ldyBDb21tYW5kIGZvciBlYWNoIGNhbGwgdG8gcGFyc2UsIG9yIHN0b3Agc3RvcmluZyBvcHRpb25zIGFzIHByb3BlcnRpZXNgKTtcblxuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3ByZXBhcmVVc2VyQXJnc1xuICAgIHRoaXMuX25hbWUgPSB0aGlzLl9zYXZlZFN0YXRlLl9uYW1lO1xuICAgIHRoaXMuX3NjcmlwdFBhdGggPSBudWxsO1xuICAgIHRoaXMucmF3QXJncyA9IFtdO1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlXG4gICAgdGhpcy5fb3B0aW9uVmFsdWVzID0geyAuLi50aGlzLl9zYXZlZFN0YXRlLl9vcHRpb25WYWx1ZXMgfTtcbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgPSB7IC4uLnRoaXMuX3NhdmVkU3RhdGUuX29wdGlvblZhbHVlU291cmNlcyB9O1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3BhcnNlQ29tbWFuZFxuICAgIHRoaXMuYXJncyA9IFtdO1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3Byb2Nlc3NBcmd1bWVudHNcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvdyBpZiBleHBlY3RlZCBleGVjdXRhYmxlIGlzIG1pc3NpbmcuIEFkZCBsb3RzIG9mIGhlbHAgZm9yIGF1dGhvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4ZWN1dGFibGVGaWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGVjdXRhYmxlRGlyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJjb21tYW5kTmFtZVxuICAgKi9cbiAgX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoZXhlY3V0YWJsZUZpbGUsIGV4ZWN1dGFibGVEaXIsIHN1YmNvbW1hbmROYW1lKSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZXhlY3V0YWJsZUZpbGUpKSByZXR1cm47XG5cbiAgICBjb25zdCBleGVjdXRhYmxlRGlyTWVzc2FnZSA9IGV4ZWN1dGFibGVEaXJcbiAgICAgID8gYHNlYXJjaGVkIGZvciBsb2NhbCBzdWJjb21tYW5kIHJlbGF0aXZlIHRvIGRpcmVjdG9yeSAnJHtleGVjdXRhYmxlRGlyfSdgXG4gICAgICA6ICdubyBkaXJlY3RvcnkgZm9yIHNlYXJjaCBmb3IgbG9jYWwgc3ViY29tbWFuZCwgdXNlIC5leGVjdXRhYmxlRGlyKCkgdG8gc3VwcGx5IGEgY3VzdG9tIGRpcmVjdG9yeSc7XG4gICAgY29uc3QgZXhlY3V0YWJsZU1pc3NpbmcgPSBgJyR7ZXhlY3V0YWJsZUZpbGV9JyBkb2VzIG5vdCBleGlzdFxuIC0gaWYgJyR7c3ViY29tbWFuZE5hbWV9JyBpcyBub3QgbWVhbnQgdG8gYmUgYW4gZXhlY3V0YWJsZSBjb21tYW5kLCByZW1vdmUgZGVzY3JpcHRpb24gcGFyYW1ldGVyIGZyb20gJy5jb21tYW5kKCknIGFuZCB1c2UgJy5kZXNjcmlwdGlvbigpJyBpbnN0ZWFkXG4gLSBpZiB0aGUgZGVmYXVsdCBleGVjdXRhYmxlIG5hbWUgaXMgbm90IHN1aXRhYmxlLCB1c2UgdGhlIGV4ZWN1dGFibGVGaWxlIG9wdGlvbiB0byBzdXBwbHkgYSBjdXN0b20gbmFtZSBvciBwYXRoXG4gLSAke2V4ZWN1dGFibGVEaXJNZXNzYWdlfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKGV4ZWN1dGFibGVNaXNzaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgc3ViLWNvbW1hbmQgZXhlY3V0YWJsZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4ZWN1dGVTdWJDb21tYW5kKHN1YmNvbW1hbmQsIGFyZ3MpIHtcbiAgICBhcmdzID0gYXJncy5zbGljZSgpO1xuICAgIGxldCBsYXVuY2hXaXRoTm9kZSA9IGZhbHNlOyAvLyBVc2Ugbm9kZSBmb3Igc291cmNlIHRhcmdldHMgc28gZG8gbm90IG5lZWQgdG8gZ2V0IHBlcm1pc3Npb25zIGNvcnJlY3QsIGFuZCBvbiBXaW5kb3dzLlxuICAgIGNvbnN0IHNvdXJjZUV4dCA9IFsnLmpzJywgJy50cycsICcudHN4JywgJy5tanMnLCAnLmNqcyddO1xuXG4gICAgZnVuY3Rpb24gZmluZEZpbGUoYmFzZURpciwgYmFzZU5hbWUpIHtcbiAgICAgIC8vIExvb2sgZm9yIHNwZWNpZmllZCBmaWxlXG4gICAgICBjb25zdCBsb2NhbEJpbiA9IHBhdGgucmVzb2x2ZShiYXNlRGlyLCBiYXNlTmFtZSk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2NhbEJpbikpIHJldHVybiBsb2NhbEJpbjtcblxuICAgICAgLy8gU3RvcCBsb29raW5nIGlmIGNhbmRpZGF0ZSBhbHJlYWR5IGhhcyBhbiBleHBlY3RlZCBleHRlbnNpb24uXG4gICAgICBpZiAoc291cmNlRXh0LmluY2x1ZGVzKHBhdGguZXh0bmFtZShiYXNlTmFtZSkpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBUcnkgYWxsIHRoZSBleHRlbnNpb25zLlxuICAgICAgY29uc3QgZm91bmRFeHQgPSBzb3VyY2VFeHQuZmluZCgoZXh0KSA9PlxuICAgICAgICBmcy5leGlzdHNTeW5jKGAke2xvY2FsQmlufSR7ZXh0fWApLFxuICAgICAgKTtcbiAgICAgIGlmIChmb3VuZEV4dCkgcmV0dXJuIGAke2xvY2FsQmlufSR7Zm91bmRFeHR9YDtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBOb3QgY2hlY2tpbmcgZm9yIGhlbHAgZmlyc3QuIFVubGlrZWx5IHRvIGhhdmUgbWFuZGF0b3J5IGFuZCBleGVjdXRhYmxlLCBhbmQgY2FuJ3Qgcm9idXN0bHkgdGVzdCBmb3IgaGVscCBmbGFncyBpbiBleHRlcm5hbCBjb21tYW5kLlxuICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKTtcbiAgICB0aGlzLl9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpO1xuXG4gICAgLy8gZXhlY3V0YWJsZUZpbGUgYW5kIGV4ZWN1dGFibGVEaXIgbWlnaHQgYmUgZnVsbCBwYXRoLCBvciBqdXN0IGEgbmFtZVxuICAgIGxldCBleGVjdXRhYmxlRmlsZSA9XG4gICAgICBzdWJjb21tYW5kLl9leGVjdXRhYmxlRmlsZSB8fCBgJHt0aGlzLl9uYW1lfS0ke3N1YmNvbW1hbmQuX25hbWV9YDtcbiAgICBsZXQgZXhlY3V0YWJsZURpciA9IHRoaXMuX2V4ZWN1dGFibGVEaXIgfHwgJyc7XG4gICAgaWYgKHRoaXMuX3NjcmlwdFBhdGgpIHtcbiAgICAgIGxldCByZXNvbHZlZFNjcmlwdFBhdGg7IC8vIHJlc29sdmUgcG9zc2libGUgc3ltbGluayBmb3IgaW5zdGFsbGVkIG5wbSBiaW5hcnlcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc29sdmVkU2NyaXB0UGF0aCA9IGZzLnJlYWxwYXRoU3luYyh0aGlzLl9zY3JpcHRQYXRoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXNvbHZlZFNjcmlwdFBhdGggPSB0aGlzLl9zY3JpcHRQYXRoO1xuICAgICAgfVxuICAgICAgZXhlY3V0YWJsZURpciA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgcGF0aC5kaXJuYW1lKHJlc29sdmVkU2NyaXB0UGF0aCksXG4gICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIExvb2sgZm9yIGEgbG9jYWwgZmlsZSBpbiBwcmVmZXJlbmNlIHRvIGEgY29tbWFuZCBpbiBQQVRILlxuICAgIGlmIChleGVjdXRhYmxlRGlyKSB7XG4gICAgICBsZXQgbG9jYWxGaWxlID0gZmluZEZpbGUoZXhlY3V0YWJsZURpciwgZXhlY3V0YWJsZUZpbGUpO1xuXG4gICAgICAvLyBMZWdhY3kgc2VhcmNoIHVzaW5nIHByZWZpeCBvZiBzY3JpcHQgbmFtZSBpbnN0ZWFkIG9mIGNvbW1hbmQgbmFtZVxuICAgICAgaWYgKCFsb2NhbEZpbGUgJiYgIXN1YmNvbW1hbmQuX2V4ZWN1dGFibGVGaWxlICYmIHRoaXMuX3NjcmlwdFBhdGgpIHtcbiAgICAgICAgY29uc3QgbGVnYWN5TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCxcbiAgICAgICAgICBwYXRoLmV4dG5hbWUodGhpcy5fc2NyaXB0UGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsZWdhY3lOYW1lICE9PSB0aGlzLl9uYW1lKSB7XG4gICAgICAgICAgbG9jYWxGaWxlID0gZmluZEZpbGUoXG4gICAgICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICAgICAgYCR7bGVnYWN5TmFtZX0tJHtzdWJjb21tYW5kLl9uYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhlY3V0YWJsZUZpbGUgPSBsb2NhbEZpbGUgfHwgZXhlY3V0YWJsZUZpbGU7XG4gICAgfVxuXG4gICAgbGF1bmNoV2l0aE5vZGUgPSBzb3VyY2VFeHQuaW5jbHVkZXMocGF0aC5leHRuYW1lKGV4ZWN1dGFibGVGaWxlKSk7XG5cbiAgICBsZXQgcHJvYztcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgICAgaWYgKGxhdW5jaFdpdGhOb2RlKSB7XG4gICAgICAgIGFyZ3MudW5zaGlmdChleGVjdXRhYmxlRmlsZSk7XG4gICAgICAgIC8vIGFkZCBleGVjdXRhYmxlIGFyZ3VtZW50cyB0byBzcGF3blxuICAgICAgICBhcmdzID0gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQocHJvY2Vzcy5leGVjQXJndikuY29uY2F0KGFyZ3MpO1xuXG4gICAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24ocHJvY2Vzcy5hcmd2WzBdLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKGV4ZWN1dGFibGVGaWxlLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoXG4gICAgICAgIGV4ZWN1dGFibGVGaWxlLFxuICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICBzdWJjb21tYW5kLl9uYW1lLFxuICAgICAgKTtcbiAgICAgIGFyZ3MudW5zaGlmdChleGVjdXRhYmxlRmlsZSk7XG4gICAgICAvLyBhZGQgZXhlY3V0YWJsZSBhcmd1bWVudHMgdG8gc3Bhd25cbiAgICAgIGFyZ3MgPSBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChwcm9jZXNzLmV4ZWNBcmd2KS5jb25jYXQoYXJncyk7XG4gICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Mua2lsbGVkKSB7XG4gICAgICAvLyB0ZXN0aW5nIG1haW5seSB0byBhdm9pZCBsZWFrIHdhcm5pbmdzIGR1cmluZyB1bml0IHRlc3RzIHdpdGggbW9ja2VkIHNwYXduXG4gICAgICBjb25zdCBzaWduYWxzID0gWydTSUdVU1IxJywgJ1NJR1VTUjInLCAnU0lHVEVSTScsICdTSUdJTlQnLCAnU0lHSFVQJ107XG4gICAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICAgIGlmIChwcm9jLmtpbGxlZCA9PT0gZmFsc2UgJiYgcHJvYy5leGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBiZWNhdXNlIHNpZ25hbHMgbm90IHR5cGVkIHRvIGtub3duIHN0cmluZ3NcbiAgICAgICAgICAgIHByb2Mua2lsbChzaWduYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0IHRlcm1pbmF0ZSBwcm9jZXNzIHdoZW4gc3Bhd25lZCBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gICAgY29uc3QgZXhpdENhbGxiYWNrID0gdGhpcy5fZXhpdENhbGxiYWNrO1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGNvZGUgPSBjb2RlID8/IDE7IC8vIGNvZGUgaXMgbnVsbCBpZiBzcGF3bmVkIHByb2Nlc3MgdGVybWluYXRlZCBkdWUgdG8gYSBzaWduYWxcbiAgICAgIGlmICghZXhpdENhbGxiYWNrKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXRDYWxsYmFjayhcbiAgICAgICAgICBuZXcgQ29tbWFuZGVyRXJyb3IoXG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJyxcbiAgICAgICAgICAgICcoY2xvc2UpJyxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBlcnIuY29kZSBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoXG4gICAgICAgICAgZXhlY3V0YWJsZUZpbGUsXG4gICAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgICBzdWJjb21tYW5kLl9uYW1lLFxuICAgICAgICApO1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGVyci5jb2RlIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7ZXhlY3V0YWJsZUZpbGV9JyBub3QgZXhlY3V0YWJsZWApO1xuICAgICAgfVxuICAgICAgaWYgKCFleGl0Q2FsbGJhY2spIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IENvbW1hbmRlckVycm9yKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJyxcbiAgICAgICAgICAnKGVycm9yKScsXG4gICAgICAgICk7XG4gICAgICAgIHdyYXBwZWRFcnJvci5uZXN0ZWRFcnJvciA9IGVycjtcbiAgICAgICAgZXhpdENhbGxiYWNrKHdyYXBwZWRFcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBwcm9jZXNzXG4gICAgdGhpcy5ydW5uaW5nQ29tbWFuZCA9IHByb2M7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2Rpc3BhdGNoU3ViY29tbWFuZChjb21tYW5kTmFtZSwgb3BlcmFuZHMsIHVua25vd24pIHtcbiAgICBjb25zdCBzdWJDb21tYW5kID0gdGhpcy5fZmluZENvbW1hbmQoY29tbWFuZE5hbWUpO1xuICAgIGlmICghc3ViQ29tbWFuZCkgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG5cbiAgICBzdWJDb21tYW5kLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBsZXQgcHJvbWlzZUNoYWluO1xuICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsU3ViQ29tbWFuZEhvb2soXG4gICAgICBwcm9taXNlQ2hhaW4sXG4gICAgICBzdWJDb21tYW5kLFxuICAgICAgJ3ByZVN1YmNvbW1hbmQnLFxuICAgICk7XG4gICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PiB7XG4gICAgICBpZiAoc3ViQ29tbWFuZC5fZXhlY3V0YWJsZUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fZXhlY3V0ZVN1YkNvbW1hbmQoc3ViQ29tbWFuZCwgb3BlcmFuZHMuY29uY2F0KHVua25vd24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdWJDb21tYW5kLl9wYXJzZUNvbW1hbmQob3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGhlbHAgZGlyZWN0bHkgaWYgcG9zc2libGUsIG9yIGRpc3BhdGNoIGlmIG5lY2Vzc2FyeS5cbiAgICogZS5nLiBoZWxwIGZvb1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZGlzcGF0Y2hIZWxwQ29tbWFuZChzdWJjb21tYW5kTmFtZSkge1xuICAgIGlmICghc3ViY29tbWFuZE5hbWUpIHtcbiAgICAgIHRoaXMuaGVscCgpO1xuICAgIH1cbiAgICBjb25zdCBzdWJDb21tYW5kID0gdGhpcy5fZmluZENvbW1hbmQoc3ViY29tbWFuZE5hbWUpO1xuICAgIGlmIChzdWJDb21tYW5kICYmICFzdWJDb21tYW5kLl9leGVjdXRhYmxlSGFuZGxlcikge1xuICAgICAgc3ViQ29tbWFuZC5oZWxwKCk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gcGFyc2luZyB0aGUgaGVscCBmbGFnIHRvIGludm9rZSB0aGUgaGVscC5cbiAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKFxuICAgICAgc3ViY29tbWFuZE5hbWUsXG4gICAgICBbXSxcbiAgICAgIFt0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LmxvbmcgPz8gdGhpcy5fZ2V0SGVscE9wdGlvbigpPy5zaG9ydCA/PyAnLS1oZWxwJ10sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGlzLmFyZ3MgYWdhaW5zdCBleHBlY3RlZCB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja051bWJlck9mQXJndW1lbnRzKCkge1xuICAgIC8vIHRvbyBmZXdcbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoYXJnLCBpKSA9PiB7XG4gICAgICBpZiAoYXJnLnJlcXVpcmVkICYmIHRoaXMuYXJnc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubWlzc2luZ0FyZ3VtZW50KGFyZy5uYW1lKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHRvbyBtYW55XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50c1t0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoIC0gMV0udmFyaWFkaWNcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXJncy5sZW5ndGggPiB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9leGNlc3NBcmd1bWVudHModGhpcy5hcmdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGlzLmFyZ3MgdXNpbmcgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzIGFuZCBzYXZlIGFzIHRoaXMucHJvY2Vzc2VkQXJncyFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3Byb2Nlc3NBcmd1bWVudHMoKSB7XG4gICAgY29uc3QgbXlQYXJzZUFyZyA9IChhcmd1bWVudCwgdmFsdWUsIHByZXZpb3VzKSA9PiB7XG4gICAgICAvLyBFeHRyYSBwcm9jZXNzaW5nIGZvciBuaWNlIGVycm9yIG1lc3NhZ2Ugb24gcGFyc2luZyBmYWlsdXJlLlxuICAgICAgbGV0IHBhcnNlZFZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgYXJndW1lbnQucGFyc2VBcmcpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogY29tbWFuZC1hcmd1bWVudCB2YWx1ZSAnJHt2YWx1ZX0nIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICcke2FyZ3VtZW50Lm5hbWUoKX0nLmA7XG4gICAgICAgIHBhcnNlZFZhbHVlID0gdGhpcy5fY2FsbFBhcnNlQXJnKFxuICAgICAgICAgIGFyZ3VtZW50LFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzLFxuICAgICAgICAgIGludmFsaWRWYWx1ZU1lc3NhZ2UsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyc2VkVmFsdWU7XG4gICAgfTtcblxuICAgIHRoaXMuX2NoZWNrTnVtYmVyT2ZBcmd1bWVudHMoKTtcblxuICAgIGNvbnN0IHByb2Nlc3NlZEFyZ3MgPSBbXTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoZGVjbGFyZWRBcmcsIGluZGV4KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWU7XG4gICAgICBpZiAoZGVjbGFyZWRBcmcudmFyaWFkaWMpIHtcbiAgICAgICAgLy8gQ29sbGVjdCB0b2dldGhlciByZW1haW5pbmcgYXJndW1lbnRzIGZvciBwYXNzaW5nIHRvZ2V0aGVyIGFzIGFuIGFycmF5LlxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmFyZ3Muc2xpY2UoaW5kZXgpO1xuICAgICAgICAgIGlmIChkZWNsYXJlZEFyZy5wYXJzZUFyZykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZWR1Y2UoKHByb2Nlc3NlZCwgdikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gbXlQYXJzZUFyZyhkZWNsYXJlZEFyZywgdiwgcHJvY2Vzc2VkKTtcbiAgICAgICAgICAgIH0sIGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGluZGV4IDwgdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuYXJnc1tpbmRleF07XG4gICAgICAgIGlmIChkZWNsYXJlZEFyZy5wYXJzZUFyZykge1xuICAgICAgICAgIHZhbHVlID0gbXlQYXJzZUFyZyhkZWNsYXJlZEFyZywgdmFsdWUsIGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZEFyZ3NbaW5kZXhdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gcHJvY2Vzc2VkQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmNlIHdlIGhhdmUgYSBwcm9taXNlIHdlIGNoYWluLCBidXQgY2FsbCBzeW5jaHJvbm91c2x5IHVudGlsIHRoZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGwocHJvbWlzZSwgZm4pIHtcbiAgICAvLyB0aGVuYWJsZVxuICAgIGlmIChwcm9taXNlPy50aGVuICYmIHR5cGVvZiBwcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGFscmVhZHkgaGF2ZSBhIHByb21pc2UsIGNoYWluIGNhbGxiYWNrXG4gICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IGZuKCkpO1xuICAgIH1cbiAgICAvLyBjYWxsYmFjayBtaWdodCByZXR1cm4gYSBwcm9taXNlXG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGxIb29rcyhwcm9taXNlLCBldmVudCkge1xuICAgIGxldCByZXN1bHQgPSBwcm9taXNlO1xuICAgIGNvbnN0IGhvb2tzID0gW107XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmlsdGVyKChjbWQpID0+IGNtZC5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpXG4gICAgICAuZm9yRWFjaCgoaG9va2VkQ29tbWFuZCkgPT4ge1xuICAgICAgICBob29rZWRDb21tYW5kLl9saWZlQ3ljbGVIb29rc1tldmVudF0uZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBob29rcy5wdXNoKHsgaG9va2VkQ29tbWFuZCwgY2FsbGJhY2sgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKGV2ZW50ID09PSAncG9zdEFjdGlvbicpIHtcbiAgICAgIGhvb2tzLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBob29rcy5mb3JFYWNoKChob29rRGV0YWlsKSA9PiB7XG4gICAgICByZXN1bHQgPSB0aGlzLl9jaGFpbk9yQ2FsbChyZXN1bHQsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGhvb2tEZXRhaWwuY2FsbGJhY2soaG9va0RldGFpbC5ob29rZWRDb21tYW5kLCB0aGlzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gc3ViQ29tbWFuZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsU3ViQ29tbWFuZEhvb2socHJvbWlzZSwgc3ViQ29tbWFuZCwgZXZlbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gcHJvbWlzZTtcbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5mb3JFYWNoKChob29rKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2NoYWluT3JDYWxsKHJlc3VsdCwgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBob29rKHRoaXMsIHN1YkNvbW1hbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYXJndW1lbnRzIGluIGNvbnRleHQgb2YgdGhpcyBjb21tYW5kLlxuICAgKiBSZXR1cm5zIGFjdGlvbiByZXN1bHQsIGluIGNhc2UgaXQgaXMgYSBwcm9taXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcGFyc2VDb21tYW5kKG9wZXJhbmRzLCB1bmtub3duKSB7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZU9wdGlvbnModW5rbm93bik7XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zRW52KCk7IC8vIGFmdGVyIGNsaSwgc28gcGFyc2VBcmcgbm90IGNhbGxlZCBvbiBib3RoIGNsaSBhbmQgZW52XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zSW1wbGllZCgpO1xuICAgIG9wZXJhbmRzID0gb3BlcmFuZHMuY29uY2F0KHBhcnNlZC5vcGVyYW5kcyk7XG4gICAgdW5rbm93biA9IHBhcnNlZC51bmtub3duO1xuICAgIHRoaXMuYXJncyA9IG9wZXJhbmRzLmNvbmNhdCh1bmtub3duKTtcblxuICAgIGlmIChvcGVyYW5kcyAmJiB0aGlzLl9maW5kQ29tbWFuZChvcGVyYW5kc1swXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQob3BlcmFuZHNbMF0sIG9wZXJhbmRzLnNsaWNlKDEpLCB1bmtub3duKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZ2V0SGVscENvbW1hbmQoKSAmJlxuICAgICAgb3BlcmFuZHNbMF0gPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hIZWxwQ29tbWFuZChvcGVyYW5kc1sxXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZCh1bmtub3duKTsgLy8gUnVuIHRoZSBoZWxwIGZvciBkZWZhdWx0IGNvbW1hbmQgZnJvbSBwYXJlbnQgcmF0aGVyIHRoYW4gcGFzc2luZyB0byBkZWZhdWx0IGNvbW1hbmRcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoXG4gICAgICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgb3BlcmFuZHMsXG4gICAgICAgIHVua25vd24sXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5hcmdzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgIXRoaXMuX2FjdGlvbkhhbmRsZXIgJiZcbiAgICAgICF0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWVcbiAgICApIHtcbiAgICAgIC8vIHByb2JhYmx5IG1pc3Npbmcgc3ViY29tbWFuZCBhbmQgbm8gaGFuZGxlciwgdXNlciBuZWVkcyBoZWxwIChhbmQgZXhpdClcbiAgICAgIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZChwYXJzZWQudW5rbm93bik7XG4gICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpO1xuICAgIHRoaXMuX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCk7XG5cbiAgICAvLyBXZSBkbyBub3QgYWx3YXlzIGNhbGwgdGhpcyBjaGVjayB0byBhdm9pZCBtYXNraW5nIGEgXCJiZXR0ZXJcIiBlcnJvciwgbGlrZSB1bmtub3duIGNvbW1hbmQuXG4gICAgY29uc3QgY2hlY2tGb3JVbmtub3duT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmIChwYXJzZWQudW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5rbm93bk9wdGlvbihwYXJzZWQudW5rbm93blswXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbW1hbmRFdmVudCA9IGBjb21tYW5kOiR7dGhpcy5uYW1lKCl9YDtcbiAgICBpZiAodGhpcy5fYWN0aW9uSGFuZGxlcikge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuXG4gICAgICBsZXQgcHJvbWlzZUNoYWluO1xuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxIb29rcyhwcm9taXNlQ2hhaW4sICdwcmVBY3Rpb24nKTtcbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT5cbiAgICAgICAgdGhpcy5fYWN0aW9uSGFuZGxlcih0aGlzLnByb2Nlc3NlZEFyZ3MpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBhcmVudC5lbWl0KGNvbW1hbmRFdmVudCwgb3BlcmFuZHMsIHVua25vd24pOyAvLyBsZWdhY3lcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2VDaGFpbiwgJ3Bvc3RBY3Rpb24nKTtcbiAgICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcmVudD8ubGlzdGVuZXJDb3VudChjb21tYW5kRXZlbnQpKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICB0aGlzLnBhcmVudC5lbWl0KGNvbW1hbmRFdmVudCwgb3BlcmFuZHMsIHVua25vd24pOyAvLyBsZWdhY3lcbiAgICB9IGVsc2UgaWYgKG9wZXJhbmRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuX2ZpbmRDb21tYW5kKCcqJykpIHtcbiAgICAgICAgLy8gbGVnYWN5IGRlZmF1bHQgY29tbWFuZFxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKCcqJywgb3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudCgnY29tbWFuZDoqJykpIHtcbiAgICAgICAgLy8gc2tpcCBvcHRpb24gY2hlY2ssIGVtaXQgZXZlbnQgZm9yIHBvc3NpYmxlIG1pc3NwZWxsaW5nIHN1Z2dlc3Rpb25cbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOionLCBvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5rbm93bkNvbW1hbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIC8vIFRoaXMgY29tbWFuZCBoYXMgc3ViY29tbWFuZHMgYW5kIG5vdGhpbmcgaG9va2VkIHVwIGF0IHRoaXMgbGV2ZWwsIHNvIGRpc3BsYXkgaGVscCAoYW5kIGV4aXQpLlxuICAgICAgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaCBmb3IgY2FsbGVyIHRvIGhhbmRsZSBhZnRlciBjYWxsaW5nIC5wYXJzZSgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbWF0Y2hpbmcgY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybiB7Q29tbWFuZCB8IHVuZGVmaW5lZH1cbiAgICovXG4gIF9maW5kQ29tbWFuZChuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmRzLmZpbmQoXG4gICAgICAoY21kKSA9PiBjbWQuX25hbWUgPT09IG5hbWUgfHwgY21kLl9hbGlhc2VzLmluY2x1ZGVzKG5hbWUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbiBtYXRjaGluZyBgYXJnYCBpZiBhbnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfZmluZE9wdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmlzKGFyZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBhIG1hbmRhdG9yeSBvcHRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbHVlLlxuICAgKiBDYWxsZWQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGhlbHAgZmxhZ3MgaW4gbGVhZiBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpIHtcbiAgICAvLyBXYWxrIHVwIGhpZXJhcmNoeSBzbyBjYW4gY2FsbCBpbiBzdWJjb21tYW5kIGFmdGVyIGNoZWNraW5nIGZvciBkaXNwbGF5aW5nIGhlbHAuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgY21kLm9wdGlvbnMuZm9yRWFjaCgoYW5PcHRpb24pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFuT3B0aW9uLm1hbmRhdG9yeSAmJlxuICAgICAgICAgIGNtZC5nZXRPcHRpb25WYWx1ZShhbk9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kLm1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZShhbk9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSB1c2VkIHRvZ2V0aGVyIGluIHRoaXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tGb3JDb25mbGljdGluZ0xvY2FsT3B0aW9ucygpIHtcbiAgICBjb25zdCBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBpZiAodGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSAhPT0gJ2RlZmF1bHQnO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3B0aW9uc1dpdGhDb25mbGljdGluZyA9IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucy5maWx0ZXIoXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uY29uZmxpY3RzV2l0aC5sZW5ndGggPiAwLFxuICAgICk7XG5cbiAgICBvcHRpb25zV2l0aENvbmZsaWN0aW5nLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgY29uZmxpY3RpbmdBbmREZWZpbmVkID0gZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zLmZpbmQoKGRlZmluZWQpID0+XG4gICAgICAgIG9wdGlvbi5jb25mbGljdHNXaXRoLmluY2x1ZGVzKGRlZmluZWQuYXR0cmlidXRlTmFtZSgpKSxcbiAgICAgICk7XG4gICAgICBpZiAoY29uZmxpY3RpbmdBbmREZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NvbmZsaWN0aW5nT3B0aW9uKG9wdGlvbiwgY29uZmxpY3RpbmdBbmREZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgdXNlZCB0b2dldGhlci5cbiAgICogQ2FsbGVkIGFmdGVyIGNoZWNraW5nIGZvciBoZWxwIGZsYWdzIGluIGxlYWYgc3ViY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpIHtcbiAgICAvLyBXYWxrIHVwIGhpZXJhcmNoeSBzbyBjYW4gY2FsbCBpbiBzdWJjb21tYW5kIGFmdGVyIGNoZWNraW5nIGZvciBkaXNwbGF5aW5nIGhlbHAuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgY21kLl9jaGVja0ZvckNvbmZsaWN0aW5nTG9jYWxPcHRpb25zKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2Ugb3B0aW9ucyBmcm9tIGBhcmd2YCByZW1vdmluZyBrbm93biBvcHRpb25zLFxuICAgKiBhbmQgcmV0dXJuIGFyZ3Ygc3BsaXQgaW50byBvcGVyYW5kcyBhbmQgdW5rbm93biBhcmd1bWVudHMuXG4gICAqXG4gICAqIFNpZGUgZWZmZWN0czogbW9kaWZpZXMgY29tbWFuZCBieSBzdG9yaW5nIG9wdGlvbnMuIERvZXMgbm90IHJlc2V0IHN0YXRlIGlmIGNhbGxlZCBhZ2Fpbi5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBhcmd2ID0+IG9wZXJhbmRzLCB1bmtub3duXG4gICAqICAgICAtLWtub3duIGtrayBvcCA9PiBbb3BdLCBbXVxuICAgKiAgICAgb3AgLS1rbm93biBra2sgPT4gW29wXSwgW11cbiAgICogICAgIHN1YiAtLXVua25vd24gdXV1IG9wID0+IFtzdWJdLCBbLS11bmtub3duIHV1dSBvcF1cbiAgICogICAgIHN1YiAtLSAtLXVua25vd24gdXV1IG9wID0+IFtzdWIgLS11bmtub3duIHV1dSBvcF0sIFtdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3NcbiAgICogQHJldHVybiB7e29wZXJhbmRzOiBzdHJpbmdbXSwgdW5rbm93bjogc3RyaW5nW119fVxuICAgKi9cblxuICBwYXJzZU9wdGlvbnMoYXJncykge1xuICAgIGNvbnN0IG9wZXJhbmRzID0gW107IC8vIG9wZXJhbmRzLCBub3Qgb3B0aW9ucyBvciB2YWx1ZXNcbiAgICBjb25zdCB1bmtub3duID0gW107IC8vIGZpcnN0IHVua25vd24gb3B0aW9uIGFuZCByZW1haW5pbmcgdW5rbm93biBhcmdzXG4gICAgbGV0IGRlc3QgPSBvcGVyYW5kcztcblxuICAgIGZ1bmN0aW9uIG1heWJlT3B0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy5sZW5ndGggPiAxICYmIGFyZ1swXSA9PT0gJy0nO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZ2F0aXZlTnVtYmVyQXJnID0gKGFyZykgPT4ge1xuICAgICAgLy8gcmV0dXJuIGZhbHNlIGlmIG5vdCBhIG5lZ2F0aXZlIG51bWJlclxuICAgICAgaWYgKCEvXi1cXGQqXFwuP1xcZCsoZVsrLV0/XFxkKyk/JC8udGVzdChhcmcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBuZWdhdGl2ZSBudW1iZXIgaXMgb2sgdW5sZXNzIGRpZ2l0IHVzZWQgYXMgYW4gb3B0aW9uIGluIGNvbW1hbmQgaGllcmFyY2h5XG4gICAgICByZXR1cm4gIXRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5zb21lKChjbWQpID0+XG4gICAgICAgIGNtZC5vcHRpb25zXG4gICAgICAgICAgLm1hcCgob3B0KSA9PiBvcHQuc2hvcnQpXG4gICAgICAgICAgLnNvbWUoKHNob3J0KSA9PiAvXi1cXGQkLy50ZXN0KHNob3J0KSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvLyBwYXJzZSBvcHRpb25zXG4gICAgbGV0IGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gbnVsbDtcbiAgICBsZXQgYWN0aXZlR3JvdXAgPSBudWxsOyAvLyB3b3JraW5nIHRocm91Z2ggZ3JvdXAgb2Ygc2hvcnQgb3B0aW9ucywgbGlrZSAtYWJjXG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGggfHwgYWN0aXZlR3JvdXApIHtcbiAgICAgIGNvbnN0IGFyZyA9IGFjdGl2ZUdyb3VwID8/IGFyZ3NbaSsrXTtcbiAgICAgIGFjdGl2ZUdyb3VwID0gbnVsbDtcblxuICAgICAgLy8gbGl0ZXJhbFxuICAgICAgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICBpZiAoZGVzdCA9PT0gdW5rbm93bikgZGVzdC5wdXNoKGFyZyk7XG4gICAgICAgIGRlc3QucHVzaCguLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gJiZcbiAgICAgICAgKCFtYXliZU9wdGlvbihhcmcpIHx8IG5lZ2F0aXZlTnVtYmVyQXJnKGFyZykpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHthY3RpdmVWYXJpYWRpY09wdGlvbi5uYW1lKCl9YCwgYXJnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG5cbiAgICAgIGlmIChtYXliZU9wdGlvbihhcmcpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYXJnKTtcbiAgICAgICAgLy8gcmVjb2duaXNlZCBvcHRpb24sIGNhbGwgbGlzdGVuZXIgdG8gYXNzaWduIHZhbHVlIHdpdGggcG9zc2libGUgY3VzdG9tIHByb2Nlc3NpbmdcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpKytdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHRoaXMub3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgLy8gaGlzdG9yaWNhbCBiZWhhdmlvdXIgaXMgb3B0aW9uYWwgdmFsdWUgaXMgZm9sbG93aW5nIGFyZyB1bmxlc3MgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGkgPCBhcmdzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoIW1heWJlT3B0aW9uKGFyZ3NbaV0pIHx8IG5lZ2F0aXZlTnVtYmVyQXJnKGFyZ3NbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gYXJnc1tpKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhbiBmbGFnXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gb3B0aW9uLnZhcmlhZGljID8gb3B0aW9uIDogbnVsbDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb29rIGZvciBjb21ibyBvcHRpb25zIGZvbGxvd2luZyBzaW5nbGUgZGFzaCwgZWF0IGZpcnN0IG9uZSBpZiBrbm93bi5cbiAgICAgIGlmIChhcmcubGVuZ3RoID4gMiAmJiBhcmdbMF0gPT09ICctJyAmJiBhcmdbMV0gIT09ICctJykge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGAtJHthcmdbMV19YCk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb24ucmVxdWlyZWQgfHxcbiAgICAgICAgICAgIChvcHRpb24ub3B0aW9uYWwgJiYgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gb3B0aW9uIHdpdGggdmFsdWUgZm9sbG93aW5nIGluIHNhbWUgYXJndW1lbnRcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCBhcmcuc2xpY2UoMikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuIG9wdGlvblxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBwcm9jZXNzZWQgb3B0aW9uIGFuZCBrZWVwIHByb2Nlc3NpbmcgZ3JvdXBcbiAgICAgICAgICAgIGFjdGl2ZUdyb3VwID0gYC0ke2FyZy5zbGljZSgyKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb29rIGZvciBrbm93biBsb25nIGZsYWcgd2l0aCB2YWx1ZSwgbGlrZSAtLWZvbz1iYXJcbiAgICAgIGlmICgvXi0tW149XSs9Ly50ZXN0KGFyZykpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcmcuaW5kZXhPZignPScpO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGFyZy5zbGljZSgwLCBpbmRleCkpO1xuICAgICAgICBpZiAob3B0aW9uICYmIChvcHRpb24ucmVxdWlyZWQgfHwgb3B0aW9uLm9wdGlvbmFsKSkge1xuICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCBhcmcuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90IGEgcmVjb2duaXNlZCBvcHRpb24gYnkgdGhpcyBjb21tYW5kLlxuICAgICAgLy8gTWlnaHQgYmUgYSBjb21tYW5kLWFyZ3VtZW50LCBvciBzdWJjb21tYW5kIG9wdGlvbiwgb3IgdW5rbm93biBvcHRpb24sIG9yIGhlbHAgY29tbWFuZCBvciBvcHRpb24uXG5cbiAgICAgIC8vIEFuIHVua25vd24gb3B0aW9uIG1lYW5zIGZ1cnRoZXIgYXJndW1lbnRzIGFsc28gY2xhc3NpZmllZCBhcyB1bmtub3duIHNvIGNhbiBiZSByZXByb2Nlc3NlZCBieSBzdWJjb21tYW5kcy5cbiAgICAgIC8vIEEgbmVnYXRpdmUgbnVtYmVyIGluIGEgbGVhZiBjb21tYW5kIGlzIG5vdCBhbiB1bmtub3duIG9wdGlvbi5cbiAgICAgIGlmIChcbiAgICAgICAgZGVzdCA9PT0gb3BlcmFuZHMgJiZcbiAgICAgICAgbWF5YmVPcHRpb24oYXJnKSAmJlxuICAgICAgICAhKHRoaXMuY29tbWFuZHMubGVuZ3RoID09PSAwICYmIG5lZ2F0aXZlTnVtYmVyQXJnKGFyZykpXG4gICAgICApIHtcbiAgICAgICAgZGVzdCA9IHVua25vd247XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVzaW5nIHBvc2l0aW9uYWxPcHRpb25zLCBzdG9wIHByb2Nlc3Npbmcgb3VyIG9wdGlvbnMgYXQgc3ViY29tbWFuZC5cbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zIHx8IHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucykgJiZcbiAgICAgICAgb3BlcmFuZHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHVua25vd24ubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmRDb21tYW5kKGFyZykpIHtcbiAgICAgICAgICBvcGVyYW5kcy5wdXNoKGFyZyk7XG4gICAgICAgICAgdW5rbm93bi5wdXNoKC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuX2dldEhlbHBDb21tYW5kKCkgJiZcbiAgICAgICAgICBhcmcgPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgICAgICB1bmtub3duLnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB1c2luZyBwYXNzVGhyb3VnaE9wdGlvbnMsIHN0b3AgcHJvY2Vzc2luZyBvcHRpb25zIGF0IGZpcnN0IGNvbW1hbmQtYXJndW1lbnQuXG4gICAgICBpZiAodGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zKSB7XG4gICAgICAgIGRlc3QucHVzaChhcmcsIC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGFyZ1xuICAgICAgZGVzdC5wdXNoKGFyZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgb3BlcmFuZHMsIHVua25vd24gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgbG9jYWwgb3B0aW9uIHZhbHVlcyBhcyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICovXG4gIG9wdHMoKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgLy8gUHJlc2VydmUgb3JpZ2luYWwgYmVoYXZpb3VyIHNvIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdoZW4gc3RpbGwgdXNpbmcgcHJvcGVydGllc1xuICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICBjb25zdCBsZW4gPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMub3B0aW9uc1tpXS5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICAgIHJlc3VsdFtrZXldID1cbiAgICAgICAgICBrZXkgPT09IHRoaXMuX3ZlcnNpb25PcHRpb25OYW1lID8gdGhpcy5fdmVyc2lvbiA6IHRoaXNba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgbWVyZ2VkIGxvY2FsIGFuZCBnbG9iYWwgb3B0aW9uIHZhbHVlcyBhcyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICovXG4gIG9wdHNXaXRoR2xvYmFscygpIHtcbiAgICAvLyBnbG9iYWxzIG92ZXJ3cml0ZSBsb2NhbHNcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLnJlZHVjZShcbiAgICAgIChjb21iaW5lZE9wdGlvbnMsIGNtZCkgPT4gT2JqZWN0LmFzc2lnbihjb21iaW5lZE9wdGlvbnMsIGNtZC5vcHRzKCkpLFxuICAgICAge30sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQgKG9yIGNhbGwgZXhpdE92ZXJyaWRlKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtvYmplY3R9IFtlcnJvck9wdGlvbnNdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXJyb3JPcHRpb25zLmNvZGVdIC0gYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtlcnJvck9wdGlvbnMuZXhpdENvZGVdIC0gdXNlZCB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKi9cbiAgZXJyb3IobWVzc2FnZSwgZXJyb3JPcHRpb25zKSB7XG4gICAgLy8gb3V0cHV0IGhhbmRsaW5nXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5vdXRwdXRFcnJvcihcbiAgICAgIGAke21lc3NhZ2V9XFxuYCxcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIsXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoYCR7dGhpcy5fc2hvd0hlbHBBZnRlckVycm9yfVxcbmApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fc2hvd0hlbHBBZnRlckVycm9yKSB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0SGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIGV4aXQgaGFuZGxpbmdcbiAgICBjb25zdCBjb25maWcgPSBlcnJvck9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZXhpdENvZGUgPSBjb25maWcuZXhpdENvZGUgfHwgMTtcbiAgICBjb25zdCBjb2RlID0gY29uZmlnLmNvZGUgfHwgJ2NvbW1hbmRlci5lcnJvcic7XG4gICAgdGhpcy5fZXhpdChleGl0Q29kZSwgY29kZSwgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYW55IG9wdGlvbiByZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcywgaWYgb3B0aW9uIGRvZXNcbiAgICogbm90IGhhdmUgYSB2YWx1ZSBmcm9tIGNsaSBvciBjbGllbnQgY29kZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZU9wdGlvbnNFbnYoKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5lbnZWYXIgJiYgb3B0aW9uLmVudlZhciBpbiBwcm9jZXNzLmVudikge1xuICAgICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgICAvLyBQcmlvcml0eSBjaGVjay4gRG8gbm90IG92ZXJ3cml0ZSBjbGkgb3Igb3B0aW9ucyBmcm9tIHVua25vd24gc291cmNlIChjbGllbnQtY29kZSkuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIFsnZGVmYXVsdCcsICdjb25maWcnLCAnZW52J10uaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAob3B0aW9uLnJlcXVpcmVkIHx8IG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgLy8gb3B0aW9uIGNhbiB0YWtlIGEgdmFsdWVcbiAgICAgICAgICAgIC8vIGtlZXAgdmVyeSBzaW1wbGUsIG9wdGlvbmFsIGFsd2F5cyB0YWtlcyB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb25FbnY6JHtvcHRpb24ubmFtZSgpfWAsIHByb2Nlc3MuZW52W29wdGlvbi5lbnZWYXJdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhblxuICAgICAgICAgICAgLy8ga2VlcCB2ZXJ5IHNpbXBsZSwgb25seSBjYXJlIHRoYXQgZW52VmFyIGRlZmluZWQgYW5kIG5vdCB0aGUgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uRW52OiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbnkgaW1wbGllZCBvcHRpb24gdmFsdWVzLCBpZiBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFyc2VPcHRpb25zSW1wbGllZCgpIHtcbiAgICBjb25zdCBkdWFsSGVscGVyID0gbmV3IER1YWxPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgY29uc3QgaGFzQ3VzdG9tT3B0aW9uVmFsdWUgPSAob3B0aW9uS2V5KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhWydkZWZhdWx0JywgJ2ltcGxpZWQnXS5pbmNsdWRlcyh0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSkpXG4gICAgICApO1xuICAgIH07XG4gICAgdGhpcy5vcHRpb25zXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgIG9wdGlvbi5pbXBsaWVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBoYXNDdXN0b21PcHRpb25WYWx1ZShvcHRpb24uYXR0cmlidXRlTmFtZSgpKSAmJlxuICAgICAgICAgIGR1YWxIZWxwZXIudmFsdWVGcm9tT3B0aW9uKFxuICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24uYXR0cmlidXRlTmFtZSgpKSxcbiAgICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24uaW1wbGllZClcbiAgICAgICAgICAuZmlsdGVyKChpbXBsaWVkS2V5KSA9PiAhaGFzQ3VzdG9tT3B0aW9uVmFsdWUoaW1wbGllZEtleSkpXG4gICAgICAgICAgLmZvckVhY2goKGltcGxpZWRLZXkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKFxuICAgICAgICAgICAgICBpbXBsaWVkS2V5LFxuICAgICAgICAgICAgICBvcHRpb24uaW1wbGllZFtpbXBsaWVkS2V5XSxcbiAgICAgICAgICAgICAgJ2ltcGxpZWQnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50IGBuYW1lYCBpcyBtaXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBtaXNzaW5nQXJndW1lbnQobmFtZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJyR7bmFtZX0nYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5taXNzaW5nQXJndW1lbnQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGlzIG1pc3NpbmcgYW4gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgb3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBhcmd1bWVudCBtaXNzaW5nYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5vcHRpb25NaXNzaW5nQXJndW1lbnQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwgYW5kIGlzIGEgbWFuZGF0b3J5IG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBtaXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogcmVxdWlyZWQgb3B0aW9uICcke29wdGlvbi5mbGFnc30nIG5vdCBzcGVjaWZpZWRgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZScgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgY29uZmxpY3RzIHdpdGggYW5vdGhlciBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHBhcmFtIHtPcHRpb259IGNvbmZsaWN0aW5nT3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uZmxpY3RpbmdPcHRpb24ob3B0aW9uLCBjb25mbGljdGluZ09wdGlvbikge1xuICAgIC8vIFRoZSBjYWxsaW5nIGNvZGUgZG9lcyBub3Qga25vdyB3aGV0aGVyIGEgbmVnYXRlZCBvcHRpb24gaXMgdGhlIHNvdXJjZSBvZiB0aGVcbiAgICAvLyB2YWx1ZSwgc28gZG8gc29tZSB3b3JrIHRvIHRha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MuXG4gICAgY29uc3QgZmluZEJlc3RPcHRpb25Gcm9tVmFsdWUgPSAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSk7XG4gICAgICBjb25zdCBuZWdhdGl2ZU9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgICAodGFyZ2V0KSA9PiB0YXJnZXQubmVnYXRlICYmIG9wdGlvbktleSA9PT0gdGFyZ2V0LmF0dHJpYnV0ZU5hbWUoKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBwb3NpdGl2ZU9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgICAodGFyZ2V0KSA9PiAhdGFyZ2V0Lm5lZ2F0ZSAmJiBvcHRpb25LZXkgPT09IHRhcmdldC5hdHRyaWJ1dGVOYW1lKCksXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBuZWdhdGl2ZU9wdGlvbiAmJlxuICAgICAgICAoKG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZyA9PT0gdW5kZWZpbmVkICYmIG9wdGlvblZhbHVlID09PSBmYWxzZSkgfHxcbiAgICAgICAgICAobmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIG9wdGlvblZhbHVlID09PSBuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZWdhdGl2ZU9wdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb3NpdGl2ZU9wdGlvbiB8fCBvcHRpb247XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEVycm9yTWVzc2FnZSA9IChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGJlc3RPcHRpb24gPSBmaW5kQmVzdE9wdGlvbkZyb21WYWx1ZShvcHRpb24pO1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gYmVzdE9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSk7XG4gICAgICBpZiAoc291cmNlID09PSAnZW52Jykge1xuICAgICAgICByZXR1cm4gYGVudmlyb25tZW50IHZhcmlhYmxlICcke2Jlc3RPcHRpb24uZW52VmFyfSdgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBvcHRpb24gJyR7YmVzdE9wdGlvbi5mbGFnc30nYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogJHtnZXRFcnJvck1lc3NhZ2Uob3B0aW9uKX0gY2Fubm90IGJlIHVzZWQgd2l0aCAke2dldEVycm9yTWVzc2FnZShjb25mbGljdGluZ09wdGlvbil9YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5jb25mbGljdGluZ09wdGlvbicgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5rbm93biBvcHRpb24gYGZsYWdgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICB1bmtub3duT3B0aW9uKGZsYWcpIHtcbiAgICBpZiAodGhpcy5fYWxsb3dVbmtub3duT3B0aW9uKSByZXR1cm47XG4gICAgbGV0IHN1Z2dlc3Rpb24gPSAnJztcblxuICAgIGlmIChmbGFnLnN0YXJ0c1dpdGgoJy0tJykgJiYgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKSB7XG4gICAgICAvLyBMb29waW5nIHRvIHBpY2sgdXAgdGhlIGdsb2JhbCBvcHRpb25zIHRvb1xuICAgICAgbGV0IGNhbmRpZGF0ZUZsYWdzID0gW107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgIGxldCBjb21tYW5kID0gdGhpcztcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbW9yZUZsYWdzID0gY29tbWFuZFxuICAgICAgICAgIC5jcmVhdGVIZWxwKClcbiAgICAgICAgICAudmlzaWJsZU9wdGlvbnMoY29tbWFuZClcbiAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5sb25nKVxuICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxvbmcpO1xuICAgICAgICBjYW5kaWRhdGVGbGFncyA9IGNhbmRpZGF0ZUZsYWdzLmNvbmNhdChtb3JlRmxhZ3MpO1xuICAgICAgICBjb21tYW5kID0gY29tbWFuZC5wYXJlbnQ7XG4gICAgICB9IHdoaWxlIChjb21tYW5kICYmICFjb21tYW5kLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyk7XG4gICAgICBzdWdnZXN0aW9uID0gc3VnZ2VzdFNpbWlsYXIoZmxhZywgY2FuZGlkYXRlRmxhZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHVua25vd24gb3B0aW9uICcke2ZsYWd9JyR7c3VnZ2VzdGlvbn1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLnVua25vd25PcHRpb24nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2VzcyBhcmd1bWVudHMsIG1vcmUgdGhhbiBleHBlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcmVjZWl2ZWRBcmdzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGNlc3NBcmd1bWVudHMocmVjZWl2ZWRBcmdzKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzKSByZXR1cm47XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGg7XG4gICAgY29uc3QgcyA9IGV4cGVjdGVkID09PSAxID8gJycgOiAncyc7XG4gICAgY29uc3QgZm9yU3ViY29tbWFuZCA9IHRoaXMucGFyZW50ID8gYCBmb3IgJyR7dGhpcy5uYW1lKCl9J2AgOiAnJztcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB0b28gbWFueSBhcmd1bWVudHMke2ZvclN1YmNvbW1hbmR9LiBFeHBlY3RlZCAke2V4cGVjdGVkfSBhcmd1bWVudCR7c30gYnV0IGdvdCAke3JlY2VpdmVkQXJncy5sZW5ndGh9LmA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIuZXhjZXNzQXJndW1lbnRzJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmtub3duIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIHVua25vd25Db21tYW5kKCkge1xuICAgIGNvbnN0IHVua25vd25OYW1lID0gdGhpcy5hcmdzWzBdO1xuICAgIGxldCBzdWdnZXN0aW9uID0gJyc7XG5cbiAgICBpZiAodGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lcyA9IFtdO1xuICAgICAgdGhpcy5jcmVhdGVIZWxwKClcbiAgICAgICAgLnZpc2libGVDb21tYW5kcyh0aGlzKVxuICAgICAgICAuZm9yRWFjaCgoY29tbWFuZCkgPT4ge1xuICAgICAgICAgIGNhbmRpZGF0ZU5hbWVzLnB1c2goY29tbWFuZC5uYW1lKCkpO1xuICAgICAgICAgIC8vIGp1c3QgdmlzaWJsZSBhbGlhc1xuICAgICAgICAgIGlmIChjb21tYW5kLmFsaWFzKCkpIGNhbmRpZGF0ZU5hbWVzLnB1c2goY29tbWFuZC5hbGlhcygpKTtcbiAgICAgICAgfSk7XG4gICAgICBzdWdnZXN0aW9uID0gc3VnZ2VzdFNpbWlsYXIodW5rbm93bk5hbWUsIGNhbmRpZGF0ZU5hbWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB1bmtub3duIGNvbW1hbmQgJyR7dW5rbm93bk5hbWV9JyR7c3VnZ2VzdGlvbn1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLnVua25vd25Db21tYW5kJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBwcm9ncmFtIHZlcnNpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGF1dG8tcmVnaXN0ZXJzIHRoZSBcIi1WLCAtLXZlcnNpb25cIiBvcHRpb24gd2hpY2ggd2lsbCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIuXG4gICAqXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzdXBwbHkgdGhlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHsodGhpcyB8IHN0cmluZyB8IHVuZGVmaW5lZCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3IgdmVyc2lvbiBzdHJpbmcgaWYgbm8gYXJndW1lbnRzXG4gICAqL1xuXG4gIHZlcnNpb24oc3RyLCBmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIHRoaXMuX3ZlcnNpb24gPSBzdHI7XG4gICAgZmxhZ3MgPSBmbGFncyB8fCAnLVYsIC0tdmVyc2lvbic7XG4gICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnb3V0cHV0IHRoZSB2ZXJzaW9uIG51bWJlcic7XG4gICAgY29uc3QgdmVyc2lvbk9wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gICAgdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPSB2ZXJzaW9uT3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICB0aGlzLl9yZWdpc3Rlck9wdGlvbih2ZXJzaW9uT3B0aW9uKTtcblxuICAgIHRoaXMub24oJ29wdGlvbjonICsgdmVyc2lvbk9wdGlvbi5uYW1lKCksICgpID0+IHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVPdXQoYCR7c3RyfVxcbmApO1xuICAgICAgdGhpcy5fZXhpdCgwLCAnY29tbWFuZGVyLnZlcnNpb24nLCBzdHIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NEZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG4gIGRlc2NyaXB0aW9uKHN0ciwgYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkICYmIGFyZ3NEZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gc3RyO1xuICAgIGlmIChhcmdzRGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2FyZ3NEZXNjcmlwdGlvbiA9IGFyZ3NEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdW1tYXJ5LiBVc2VkIHdoZW4gbGlzdGVkIGFzIHN1YmNvbW1hbmQgb2YgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG4gIHN1bW1hcnkoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fc3VtbWFyeTtcbiAgICB0aGlzLl9zdW1tYXJ5ID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBhbGlhcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBtb3JlIHRoYW4gb25jZSB0byBhZGQgbXVsdGlwbGUgYWxpYXNlcy4gT25seSB0aGUgZmlyc3QgYWxpYXMgaXMgc2hvd24gaW4gdGhlIGF1dG8tZ2VuZXJhdGVkIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIGFsaWFzKGFsaWFzKSB7XG4gICAgaWYgKGFsaWFzID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9hbGlhc2VzWzBdOyAvLyBqdXN0IHJldHVybiBmaXJzdCwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiAgICAvKiogQHR5cGUge0NvbW1hbmR9ICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgbGV0IGNvbW1hbmQgPSB0aGlzO1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoICE9PSAwICYmXG4gICAgICB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV0uX2V4ZWN1dGFibGVIYW5kbGVyXG4gICAgKSB7XG4gICAgICAvLyBhc3N1bWUgYWRkaW5nIGFsaWFzIGZvciBsYXN0IGFkZGVkIGV4ZWN1dGFibGUgc3ViY29tbWFuZCwgcmF0aGVyIHRoYW4gdGhpc1xuICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbdGhpcy5jb21tYW5kcy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBpZiAoYWxpYXMgPT09IGNvbW1hbmQuX25hbWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21tYW5kIGFsaWFzIGNhbid0IGJlIHRoZSBzYW1lIGFzIGl0cyBuYW1lXCIpO1xuICAgIGNvbnN0IG1hdGNoaW5nQ29tbWFuZCA9IHRoaXMucGFyZW50Py5fZmluZENvbW1hbmQoYWxpYXMpO1xuICAgIGlmIChtYXRjaGluZ0NvbW1hbmQpIHtcbiAgICAgIC8vIGMuZi4gX3JlZ2lzdGVyQ29tbWFuZFxuICAgICAgY29uc3QgZXhpc3RpbmdDbWQgPSBbbWF0Y2hpbmdDb21tYW5kLm5hbWUoKV1cbiAgICAgICAgLmNvbmNhdChtYXRjaGluZ0NvbW1hbmQuYWxpYXNlcygpKVxuICAgICAgICAuam9pbignfCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgY2Fubm90IGFkZCBhbGlhcyAnJHthbGlhc30nIHRvIGNvbW1hbmQgJyR7dGhpcy5uYW1lKCl9JyBhcyBhbHJlYWR5IGhhdmUgY29tbWFuZCAnJHtleGlzdGluZ0NtZH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tbWFuZC5fYWxpYXNlcy5wdXNoKGFsaWFzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYWxpYXNlcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIE9ubHkgdGhlIGZpcnN0IGFsaWFzIGlzIHNob3duIGluIHRoZSBhdXRvLWdlbmVyYXRlZCBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYWxpYXNlc11cbiAgICogQHJldHVybiB7KHN0cmluZ1tdfENvbW1hbmQpfVxuICAgKi9cblxuICBhbGlhc2VzKGFsaWFzZXMpIHtcbiAgICAvLyBHZXR0ZXIgZm9yIHRoZSBhcnJheSBvZiBhbGlhc2VzIGlzIHRoZSBtYWluIHJlYXNvbiBmb3IgaGF2aW5nIGFsaWFzZXMoKSBpbiBhZGRpdGlvbiB0byBhbGlhcygpLlxuICAgIGlmIChhbGlhc2VzID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9hbGlhc2VzO1xuXG4gICAgYWxpYXNlcy5mb3JFYWNoKChhbGlhcykgPT4gdGhpcy5hbGlhcyhhbGlhcykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCAvIGdldCB0aGUgY29tbWFuZCB1c2FnZSBgc3RyYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIHVzYWdlKHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuX3VzYWdlKSByZXR1cm4gdGhpcy5fdXNhZ2U7XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubWFwKChhcmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbXVxuICAgICAgICAuY29uY2F0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGggfHwgdGhpcy5faGVscE9wdGlvbiAhPT0gbnVsbCA/ICdbb3B0aW9uc10nIDogW10sXG4gICAgICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggPyAnW2NvbW1hbmRdJyA6IFtdLFxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggPyBhcmdzIDogW10sXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICB0aGlzLl91c2FnZSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgbmFtZShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIHRoaXMuX25hbWUgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgaGVscCBncm91cCBoZWFkaW5nIGZvciB0aGlzIHN1YmNvbW1hbmQgaW4gcGFyZW50IGNvbW1hbmQncyBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm4ge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuXG4gIGhlbHBHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPz8gJyc7XG4gICAgdGhpcy5faGVscEdyb3VwSGVhZGluZyA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgZGVmYXVsdCBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIHN1YmNvbW1hbmRzIGFkZGVkIHRvIHRoaXMgY29tbWFuZC5cbiAgICogKFRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgYSBncm91cCBzZXQgZGlyZWN0bHkgb24gdGhlIHN1YmNvbW1hbmQgdXNpbmcgLmhlbHBHcm91cCgpLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5jb21tYW5kc0dyb3VwKCdEZXZlbG9wbWVudCBDb21tYW5kczopO1xuICAgKiBwcm9ncmFtLmNvbW1hbmQoJ3dhdGNoJykuLi5cbiAgICogcHJvZ3JhbS5jb21tYW5kKCdsaW50JykuLi5cbiAgICogLi4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaGVhZGluZ11cbiAgICogQHJldHVybnMge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuICBjb21tYW5kc0dyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA/PyAnJztcbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IHRoZSBkZWZhdWx0IGhlbHAgZ3JvdXAgaGVhZGluZyBmb3Igb3B0aW9ucyBhZGRlZCB0byB0aGlzIGNvbW1hbmQuXG4gICAqIChUaGlzIGRvZXMgbm90IG92ZXJyaWRlIGEgZ3JvdXAgc2V0IGRpcmVjdGx5IG9uIHRoZSBvcHRpb24gdXNpbmcgLmhlbHBHcm91cCgpLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5vcHRpb25zR3JvdXAoJ0RldmVsb3BtZW50IE9wdGlvbnM6JylcbiAgICogICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdvdXRwdXQgZXh0cmEgZGVidWdnaW5nJylcbiAgICogICAub3B0aW9uKCctcCwgLS1wcm9maWxlJywgJ291dHB1dCBwcm9maWxpbmcgaW5mb3JtYXRpb24nKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm5zIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cbiAgb3B0aW9uc0dyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID8/ICcnO1xuICAgIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRPcHRpb25Hcm91cChvcHRpb24pIHtcbiAgICBpZiAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwICYmICFvcHRpb24uaGVscEdyb3VwSGVhZGluZylcbiAgICAgIG9wdGlvbi5oZWxwR3JvdXAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRDb21tYW5kR3JvdXAoY21kKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgJiYgIWNtZC5oZWxwR3JvdXAoKSlcbiAgICAgIGNtZC5oZWxwR3JvdXAodGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIGZyb20gc2NyaXB0IGZpbGVuYW1lLCBzdWNoIGFzIHByb2Nlc3MuYXJndlsxXSxcbiAgICogb3IgcmVxdWlyZS5tYWluLmZpbGVuYW1lLCBvciBfX2ZpbGVuYW1lLlxuICAgKlxuICAgKiAoVXNlZCBpbnRlcm5hbGx5IGFuZCBwdWJsaWMgYWx0aG91Z2ggbm90IGRvY3VtZW50ZWQgaW4gUkVBRE1FLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5uYW1lRnJvbUZpbGVuYW1lKHJlcXVpcmUubWFpbi5maWxlbmFtZSk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfVxuICAgKi9cblxuICBuYW1lRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgdGhpcy5fbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHBhdGguZXh0bmFtZShmaWxlbmFtZSkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgZGlyZWN0b3J5IGZvciBzZWFyY2hpbmcgZm9yIGV4ZWN1dGFibGUgc3ViY29tbWFuZHMgb2YgdGhpcyBjb21tYW5kLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmV4ZWN1dGFibGVEaXIoX19kaXJuYW1lKTtcbiAgICogLy8gb3JcbiAgICogcHJvZ3JhbS5leGVjdXRhYmxlRGlyKCdzdWJjb21tYW5kcycpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8bnVsbHxDb21tYW5kKX1cbiAgICovXG5cbiAgZXhlY3V0YWJsZURpcihwYXRoKSB7XG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2V4ZWN1dGFibGVEaXI7XG4gICAgdGhpcy5fZXhlY3V0YWJsZURpciA9IHBhdGg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHByb2dyYW0gaGVscCBkb2N1bWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfX0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyYXAgZm9yIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGhlbHBJbmZvcm1hdGlvbihjb250ZXh0T3B0aW9ucykge1xuICAgIGNvbnN0IGhlbHBlciA9IHRoaXMuY3JlYXRlSGVscCgpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcbiAgICBoZWxwZXIucHJlcGFyZUNvbnRleHQoe1xuICAgICAgZXJyb3I6IGNvbnRleHQuZXJyb3IsXG4gICAgICBoZWxwV2lkdGg6IGNvbnRleHQuaGVscFdpZHRoLFxuICAgICAgb3V0cHV0SGFzQ29sb3JzOiBjb250ZXh0Lmhhc0NvbG9ycyxcbiAgICB9KTtcbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmZvcm1hdEhlbHAodGhpcywgaGVscGVyKTtcbiAgICBpZiAoY29udGV4dC5oYXNDb2xvcnMpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLnN0cmlwQ29sb3IodGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYgSGVscENvbnRleHRcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvclxuICAgKiBAcHJvcGVydHkge251bWJlcn0gaGVscFdpZHRoXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGFzQ29sb3JzXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHdyaXRlIC0gaW5jbHVkZXMgc3RyaXBDb2xvciBpZiBuZWVkZWRcbiAgICpcbiAgICogQHJldHVybnMge0hlbHBDb250ZXh0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucykge1xuICAgIGNvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZXJyb3IgPSAhIWNvbnRleHRPcHRpb25zLmVycm9yO1xuICAgIGxldCBiYXNlV3JpdGU7XG4gICAgbGV0IGhhc0NvbG9ycztcbiAgICBsZXQgaGVscFdpZHRoO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgYmFzZVdyaXRlID0gKHN0cikgPT4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycihzdHIpO1xuICAgICAgaGFzQ29sb3JzID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRFcnJIYXNDb2xvcnMoKTtcbiAgICAgIGhlbHBXaWR0aCA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0RXJySGVscFdpZHRoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VXcml0ZSA9IChzdHIpID0+IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVPdXQoc3RyKTtcbiAgICAgIGhhc0NvbG9ycyA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0T3V0SGFzQ29sb3JzKCk7XG4gICAgICBoZWxwV2lkdGggPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldE91dEhlbHBXaWR0aCgpO1xuICAgIH1cbiAgICBjb25zdCB3cml0ZSA9IChzdHIpID0+IHtcbiAgICAgIGlmICghaGFzQ29sb3JzKSBzdHIgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLnN0cmlwQ29sb3Ioc3RyKTtcbiAgICAgIHJldHVybiBiYXNlV3JpdGUoc3RyKTtcbiAgICB9O1xuICAgIHJldHVybiB7IGVycm9yLCB3cml0ZSwgaGFzQ29sb3JzLCBoZWxwV2lkdGggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb21tYW5kLlxuICAgKlxuICAgKiBPdXRwdXRzIGJ1aWx0LWluIGhlbHAsIGFuZCBjdXN0b20gdGV4dCBhZGRlZCB1c2luZyBgLmFkZEhlbHBUZXh0KClgLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfSB8IEZ1bmN0aW9ufSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqL1xuXG4gIG91dHB1dEhlbHAoY29udGV4dE9wdGlvbnMpIHtcbiAgICBsZXQgZGVwcmVjYXRlZENhbGxiYWNrO1xuICAgIGlmICh0eXBlb2YgY29udGV4dE9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRlcHJlY2F0ZWRDYWxsYmFjayA9IGNvbnRleHRPcHRpb25zO1xuICAgICAgY29udGV4dE9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0Q29udGV4dCA9IHRoaXMuX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpO1xuICAgIC8qKiBAdHlwZSB7SGVscFRleHRFdmVudENvbnRleHR9ICovXG4gICAgY29uc3QgZXZlbnRDb250ZXh0ID0ge1xuICAgICAgZXJyb3I6IG91dHB1dENvbnRleHQuZXJyb3IsXG4gICAgICB3cml0ZTogb3V0cHV0Q29udGV4dC53cml0ZSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMsXG4gICAgfTtcblxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZvckVhY2goKGNvbW1hbmQpID0+IGNvbW1hbmQuZW1pdCgnYmVmb3JlQWxsSGVscCcsIGV2ZW50Q29udGV4dCkpO1xuICAgIHRoaXMuZW1pdCgnYmVmb3JlSGVscCcsIGV2ZW50Q29udGV4dCk7XG5cbiAgICBsZXQgaGVscEluZm9ybWF0aW9uID0gdGhpcy5oZWxwSW5mb3JtYXRpb24oeyBlcnJvcjogb3V0cHV0Q29udGV4dC5lcnJvciB9KTtcbiAgICBpZiAoZGVwcmVjYXRlZENhbGxiYWNrKSB7XG4gICAgICBoZWxwSW5mb3JtYXRpb24gPSBkZXByZWNhdGVkQ2FsbGJhY2soaGVscEluZm9ybWF0aW9uKTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGhlbHBJbmZvcm1hdGlvbiAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgIUJ1ZmZlci5pc0J1ZmZlcihoZWxwSW5mb3JtYXRpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdXRwdXRIZWxwIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIGEgQnVmZmVyJyk7XG4gICAgICB9XG4gICAgfVxuICAgIG91dHB1dENvbnRleHQud3JpdGUoaGVscEluZm9ybWF0aW9uKTtcblxuICAgIGlmICh0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LmxvbmcpIHtcbiAgICAgIHRoaXMuZW1pdCh0aGlzLl9nZXRIZWxwT3B0aW9uKCkubG9uZyk7IC8vIGRlcHJlY2F0ZWRcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdhZnRlckhlbHAnLCBldmVudENvbnRleHQpO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjb21tYW5kKSA9PlxuICAgICAgY29tbWFuZC5lbWl0KCdhZnRlckFsbEhlbHAnLCBldmVudENvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBwYXNzIGluIGZsYWdzIGFuZCBhIGRlc2NyaXB0aW9uIHRvIGN1c3RvbWlzZSB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqIFBhc3MgaW4gZmFsc2UgdG8gZGlzYWJsZSB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uaGVscE9wdGlvbignLT8sIC0taGVscCcgJ3Nob3cgaGVscCcpOyAvLyBjdXN0b21pc2VcbiAgICogcHJvZ3JhbS5oZWxwT3B0aW9uKGZhbHNlKTsgLy8gZGlzYWJsZVxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBib29sZWFuKX0gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhlbHBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gU3VwcG9ydCBlbmFibGluZy9kaXNhYmxpbmcgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAoZmxhZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2hlbHBPcHRpb24gPT09IG51bGwpIHRoaXMuX2hlbHBPcHRpb24gPSB1bmRlZmluZWQ7IC8vIHJlZW5hYmxlXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXApIHtcbiAgICAgICAgICAvLyBtYWtlIHRoZSBvcHRpb24gdG8gc3RvcmUgdGhlIGdyb3VwXG4gICAgICAgICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKHRoaXMuX2dldEhlbHBPcHRpb24oKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hlbHBPcHRpb24gPSBudWxsOyAvLyBkaXNhYmxlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBDdXN0b21pc2UgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uLlxuICAgIHRoaXMuX2hlbHBPcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihcbiAgICAgIGZsYWdzID8/ICctaCwgLS1oZWxwJyxcbiAgICAgIGRlc2NyaXB0aW9uID8/ICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnLFxuICAgICk7XG4gICAgLy8gaW5pdCBncm91cCB1bmxlc3MgbGF6eSBjcmVhdGVcbiAgICBpZiAoZmxhZ3MgfHwgZGVzY3JpcHRpb24pIHRoaXMuX2luaXRPcHRpb25Hcm91cCh0aGlzLl9oZWxwT3B0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgY3JlYXRlIGhlbHAgb3B0aW9uLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgaGFzIGJlZW4gZGlzYWJsZWQgd2l0aCAuaGVscE9wdGlvbihmYWxzZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHsoT3B0aW9uIHwgbnVsbCl9IHRoZSBoZWxwIG9wdGlvblxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBPcHRpb24oKSB7XG4gICAgLy8gTGF6eSBjcmVhdGUgaGVscCBvcHRpb24gb24gZGVtYW5kLlxuICAgIGlmICh0aGlzLl9oZWxwT3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaGVscE9wdGlvbih1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oZWxwT3B0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1cHBseSB5b3VyIG93biBvcHRpb24gdG8gdXNlIGZvciB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgaGVscE9wdGlvbigpIHRvIGN1c3RvbWlzZSB0aGUgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5faGVscE9wdGlvbiA9IG9wdGlvbjtcbiAgICB0aGlzLl9pbml0T3B0aW9uR3JvdXAob3B0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cbiAgICpcbiAgICogT3V0cHV0cyBidWlsdC1pbiBoZWxwLCBhbmQgY3VzdG9tIHRleHQgYWRkZWQgdXNpbmcgYC5hZGRIZWxwVGV4dCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH19IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICovXG5cbiAgaGVscChjb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMub3V0cHV0SGVscChjb250ZXh0T3B0aW9ucyk7XG4gICAgbGV0IGV4aXRDb2RlID0gTnVtYmVyKHByb2Nlc3MuZXhpdENvZGUgPz8gMCk7IC8vIHByb2Nlc3MuZXhpdENvZGUgZG9lcyBhbGxvdyBhIHN0cmluZyBvciBhbiBpbnRlZ2VyLCBidXQgd2UgcHJlZmVyIGp1c3QgYSBudW1iZXJcbiAgICBpZiAoXG4gICAgICBleGl0Q29kZSA9PT0gMCAmJlxuICAgICAgY29udGV4dE9wdGlvbnMgJiZcbiAgICAgIHR5cGVvZiBjb250ZXh0T3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgY29udGV4dE9wdGlvbnMuZXJyb3JcbiAgICApIHtcbiAgICAgIGV4aXRDb2RlID0gMTtcbiAgICB9XG4gICAgLy8gbWVzc2FnZTogZG8gbm90IGhhdmUgYWxsIGRpc3BsYXllZCB0ZXh0IGF2YWlsYWJsZSBzbyBvbmx5IHBhc3NpbmcgcGxhY2Vob2xkZXIuXG4gICAgdGhpcy5fZXhpdChleGl0Q29kZSwgJ2NvbW1hbmRlci5oZWxwJywgJyhvdXRwdXRIZWxwKScpO1xuICB9XG5cbiAgLyoqXG4gICAqIC8vIERvIGEgbGl0dGxlIHR5cGluZyB0byBjb29yZGluYXRlIGVtaXQgYW5kIGxpc3RlbmVyIGZvciB0aGUgaGVscCB0ZXh0IGV2ZW50cy5cbiAgICogQHR5cGVkZWYgSGVscFRleHRFdmVudENvbnRleHRcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvclxuICAgKiBAcHJvcGVydHkge0NvbW1hbmR9IGNvbW1hbmRcbiAgICogQHByb3BlcnR5IHtmdW5jdGlvbn0gd3JpdGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIHRleHQgdG8gYmUgZGlzcGxheWVkIHdpdGggdGhlIGJ1aWx0LWluIGhlbHAuXG4gICAqXG4gICAqIFBvc2l0aW9uIGlzICdiZWZvcmUnIG9yICdhZnRlcicgdG8gYWZmZWN0IGp1c3QgdGhpcyBjb21tYW5kLFxuICAgKiBhbmQgJ2JlZm9yZUFsbCcgb3IgJ2FmdGVyQWxsJyB0byBhZmZlY3QgdGhpcyBjb21tYW5kIGFuZCBhbGwgaXRzIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb24gLSBiZWZvcmUgb3IgYWZ0ZXIgYnVpbHQtaW4gaGVscFxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBGdW5jdGlvbil9IHRleHQgLSBzdHJpbmcgdG8gYWRkLCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYWRkSGVscFRleHQocG9zaXRpb24sIHRleHQpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydiZWZvcmVBbGwnLCAnYmVmb3JlJywgJ2FmdGVyJywgJ2FmdGVyQWxsJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHBvc2l0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBwb3NpdGlvbiB0byBhZGRIZWxwVGV4dC5cbkV4cGVjdGluZyBvbmUgb2YgJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVscEV2ZW50ID0gYCR7cG9zaXRpb259SGVscGA7XG4gICAgdGhpcy5vbihoZWxwRXZlbnQsICgvKiogQHR5cGUge0hlbHBUZXh0RXZlbnRDb250ZXh0fSAqLyBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgaGVscFN0cjtcbiAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBoZWxwU3RyID0gdGV4dCh7IGVycm9yOiBjb250ZXh0LmVycm9yLCBjb21tYW5kOiBjb250ZXh0LmNvbW1hbmQgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxwU3RyID0gdGV4dDtcbiAgICAgIH1cbiAgICAgIC8vIElnbm9yZSBmYWxzeSB2YWx1ZSB3aGVuIG5vdGhpbmcgdG8gb3V0cHV0LlxuICAgICAgaWYgKGhlbHBTdHIpIHtcbiAgICAgICAgY29udGV4dC53cml0ZShgJHtoZWxwU3RyfVxcbmApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGlmIGhlbHAgZmxhZ3Mgc3BlY2lmaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgLSBhcnJheSBvZiBvcHRpb25zIHRvIHNlYXJjaCBmb3IgaGVscCBmbGFnc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfb3V0cHV0SGVscElmUmVxdWVzdGVkKGFyZ3MpIHtcbiAgICBjb25zdCBoZWxwT3B0aW9uID0gdGhpcy5fZ2V0SGVscE9wdGlvbigpO1xuICAgIGNvbnN0IGhlbHBSZXF1ZXN0ZWQgPSBoZWxwT3B0aW9uICYmIGFyZ3MuZmluZCgoYXJnKSA9PiBoZWxwT3B0aW9uLmlzKGFyZykpO1xuICAgIGlmIChoZWxwUmVxdWVzdGVkKSB7XG4gICAgICB0aGlzLm91dHB1dEhlbHAoKTtcbiAgICAgIC8vIChEbyBub3QgaGF2ZSBhbGwgZGlzcGxheWVkIHRleHQgYXZhaWxhYmxlIHNvIG9ubHkgcGFzc2luZyBwbGFjZWhvbGRlci4pXG4gICAgICB0aGlzLl9leGl0KDAsICdjb21tYW5kZXIuaGVscERpc3BsYXllZCcsICcob3V0cHV0SGVscCknKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTY2FuIGFyZ3VtZW50cyBhbmQgaW5jcmVtZW50IHBvcnQgbnVtYmVyIGZvciBpbnNwZWN0IGNhbGxzICh0byBhdm9pZCBjb25mbGljdHMgd2hlbiBzcGF3bmluZyBuZXcgY29tbWFuZCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIGFycmF5IG9mIGFyZ3VtZW50cyBmcm9tIG5vZGUuZXhlY0FyZ3ZcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQoYXJncykge1xuICAvLyBUZXN0aW5nIGZvciB0aGVzZSBvcHRpb25zOlxuICAvLyAgLS1pbnNwZWN0Wz1baG9zdDpdcG9ydF1cbiAgLy8gIC0taW5zcGVjdC1icmtbPVtob3N0Ol1wb3J0XVxuICAvLyAgLS1pbnNwZWN0LXBvcnQ9W2hvc3Q6XXBvcnRcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoIWFyZy5zdGFydHNXaXRoKCctLWluc3BlY3QnKSkge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgbGV0IGRlYnVnT3B0aW9uO1xuICAgIGxldCBkZWJ1Z0hvc3QgPSAnMTI3LjAuMC4xJztcbiAgICBsZXQgZGVidWdQb3J0ID0gJzkyMjknO1xuICAgIGxldCBtYXRjaDtcbiAgICBpZiAoKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrKT8pJC8pKSAhPT0gbnVsbCkge1xuICAgICAgLy8gZS5nLiAtLWluc3BlY3RcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJya3wtcG9ydCk/KT0oW146XSspJC8pKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KG1hdGNoWzNdKSkge1xuICAgICAgICAvLyBlLmcuIC0taW5zcGVjdD0xMjM0XG4gICAgICAgIGRlYnVnUG9ydCA9IG1hdGNoWzNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9bG9jYWxob3N0XG4gICAgICAgIGRlYnVnSG9zdCA9IG1hdGNoWzNdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmt8LXBvcnQpPyk9KFteOl0rKTooXFxkKykkLykpICE9PSBudWxsXG4gICAgKSB7XG4gICAgICAvLyBlLmcuIC0taW5zcGVjdD1sb2NhbGhvc3Q6MTIzNFxuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICAgIGRlYnVnSG9zdCA9IG1hdGNoWzNdO1xuICAgICAgZGVidWdQb3J0ID0gbWF0Y2hbNF07XG4gICAgfVxuXG4gICAgaWYgKGRlYnVnT3B0aW9uICYmIGRlYnVnUG9ydCAhPT0gJzAnKSB7XG4gICAgICByZXR1cm4gYCR7ZGVidWdPcHRpb259PSR7ZGVidWdIb3N0fToke3BhcnNlSW50KGRlYnVnUG9ydCkgKyAxfWA7XG4gICAgfVxuICAgIHJldHVybiBhcmc7XG4gIH0pO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkfVxuICogQHBhY2thZ2VcbiAqL1xuZnVuY3Rpb24gdXNlQ29sb3IoKSB7XG4gIC8vIFRlc3QgZm9yIGNvbW1vbiBjb252ZW50aW9ucy5cbiAgLy8gTkI6IHRoZSBvYnNlcnZlZCBiZWhhdmlvdXIgaXMgaW4gY29tYmluYXRpb24gd2l0aCBob3cgYXV0aG9yIGFkZHMgY29sb3IhIEZvciBleGFtcGxlOlxuICAvLyAgIC0gd2UgZG8gbm90IHRlc3QgTk9ERV9ESVNBQkxFX0NPTE9SUywgYnV0IHV0aWw6c3R5bGV0ZXh0IGRvZXNcbiAgLy8gICAtIHdlIGRvIHRlc3QgTk9fQ09MT1IsIGJ1dCBDaGFsayBkb2VzIG5vdFxuICAvL1xuICAvLyBSZWZlcmVuY2VzOlxuICAvLyBodHRwczovL25vLWNvbG9yLm9yZ1xuICAvLyBodHRwczovL2JpeGVuc2UuY29tL2NsaWNvbG9ycy9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvMGEwMDIxN2E1ZjY3ZWY0YTIyMzg0Y2ZjODBlYjZkZDlhOTE3ZmRjMS9saWIvaW50ZXJuYWwvdHR5LmpzI0wxMDlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yL2Jsb2IvYzIxNDMxNGExNGJjYjE3NGIxMmIzMDE0YjJiMGE4ZGUzNzUwMjlhZS9pbmRleC5qcyNMMzNcbiAgLy8gKGh0dHBzOi8vZm9yY2UtY29sb3Iub3JnIHJlY2VudCB3ZWIgcGFnZSBmcm9tIDIwMjMsIGRvZXMgbm90IG1hdGNoIG1ham9yIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb25zKVxuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT19DT0xPUiB8fFxuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID09PSAnMCcgfHxcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJ1xuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAocHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgfHwgcHJvY2Vzcy5lbnYuQ0xJQ09MT1JfRk9SQ0UgIT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcbmV4cG9ydHMudXNlQ29sb3IgPSB1c2VDb2xvcjsgLy8gZXhwb3J0aW5nIGZvciB0ZXN0c1xuIiwgImNvbnN0IHsgQXJndW1lbnQgfSA9IHJlcXVpcmUoJy4vbGliL2FyZ3VtZW50LmpzJyk7XG5jb25zdCB7IENvbW1hbmQgfSA9IHJlcXVpcmUoJy4vbGliL2NvbW1hbmQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZGVyRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2xpYi9lcnJvci5qcycpO1xuY29uc3QgeyBIZWxwIH0gPSByZXF1aXJlKCcuL2xpYi9oZWxwLmpzJyk7XG5jb25zdCB7IE9wdGlvbiB9ID0gcmVxdWlyZSgnLi9saWIvb3B0aW9uLmpzJyk7XG5cbmV4cG9ydHMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWFuZCA9IChuYW1lKSA9PiBuZXcgQ29tbWFuZChuYW1lKTtcbmV4cG9ydHMuY3JlYXRlT3B0aW9uID0gKGZsYWdzLCBkZXNjcmlwdGlvbikgPT4gbmV3IE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuZXhwb3J0cy5jcmVhdGVBcmd1bWVudCA9IChuYW1lLCBkZXNjcmlwdGlvbikgPT4gbmV3IEFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcblxuLyoqXG4gKiBFeHBvc2UgY2xhc3Nlc1xuICovXG5cbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcbmV4cG9ydHMuQXJndW1lbnQgPSBBcmd1bWVudDtcbmV4cG9ydHMuSGVscCA9IEhlbHA7XG5cbmV4cG9ydHMuQ29tbWFuZGVyRXJyb3IgPSBDb21tYW5kZXJFcnJvcjtcbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbmV4cG9ydHMuSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjsgLy8gRGVwcmVjYXRlZFxuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xudmFyIHRscyA9IHJlcXVpcmUoJ3RscycpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblxuZXhwb3J0cy5odHRwT3Zlckh0dHAgPSBodHRwT3Zlckh0dHA7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHAgPSBodHRwc092ZXJIdHRwO1xuZXhwb3J0cy5odHRwT3Zlckh0dHBzID0gaHR0cE92ZXJIdHRwcztcbmV4cG9ydHMuaHR0cHNPdmVySHR0cHMgPSBodHRwc092ZXJIdHRwcztcblxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHAucmVxdWVzdDtcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0O1xuICBhZ2VudC5kZWZhdWx0UG9ydCA9IDQ0MztcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHBzKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdDtcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuXG5mdW5jdGlvbiBUdW5uZWxpbmdBZ2VudChvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgc2VsZi5wcm94eU9wdGlvbnMgPSBzZWxmLm9wdGlvbnMucHJveHkgfHwge307XG4gIHNlbGYubWF4U29ja2V0cyA9IHNlbGYub3B0aW9ucy5tYXhTb2NrZXRzIHx8IGh0dHAuQWdlbnQuZGVmYXVsdE1heFNvY2tldHM7XG4gIHNlbGYucmVxdWVzdHMgPSBbXTtcbiAgc2VsZi5zb2NrZXRzID0gW107XG5cbiAgc2VsZi5vbignZnJlZScsIGZ1bmN0aW9uIG9uRnJlZShzb2NrZXQsIGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICAgIHZhciBvcHRpb25zID0gdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcyk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYucmVxdWVzdHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHZhciBwZW5kaW5nID0gc2VsZi5yZXF1ZXN0c1tpXTtcbiAgICAgIGlmIChwZW5kaW5nLmhvc3QgPT09IG9wdGlvbnMuaG9zdCAmJiBwZW5kaW5nLnBvcnQgPT09IG9wdGlvbnMucG9ydCkge1xuICAgICAgICAvLyBEZXRlY3QgdGhlIHJlcXVlc3QgdG8gY29ubmVjdCBzYW1lIG9yaWdpbiBzZXJ2ZXIsXG4gICAgICAgIC8vIHJldXNlIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICBzZWxmLnJlcXVlc3RzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICBzZWxmLnJlbW92ZVNvY2tldChzb2NrZXQpO1xuICB9KTtcbn1cbnV0aWwuaW5oZXJpdHMoVHVubmVsaW5nQWdlbnQsIGV2ZW50cy5FdmVudEVtaXR0ZXIpO1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuYWRkUmVxdWVzdCA9IGZ1bmN0aW9uIGFkZFJlcXVlc3QocmVxLCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7cmVxdWVzdDogcmVxfSwgc2VsZi5vcHRpb25zLCB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSk7XG5cbiAgaWYgKHNlbGYuc29ja2V0cy5sZW5ndGggPj0gdGhpcy5tYXhTb2NrZXRzKSB7XG4gICAgLy8gV2UgYXJlIG92ZXIgbGltaXQgc28gd2UnbGwgYWRkIGl0IHRvIHRoZSBxdWV1ZS5cbiAgICBzZWxmLnJlcXVlc3RzLnB1c2gob3B0aW9ucyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgd2UgYXJlIHVuZGVyIG1heFNvY2tldHMgY3JlYXRlIGEgbmV3IG9uZS5cbiAgc2VsZi5jcmVhdGVTb2NrZXQob3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgc29ja2V0Lm9uKCdmcmVlJywgb25GcmVlKTtcbiAgICBzb2NrZXQub24oJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICBzb2NrZXQub24oJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICByZXEub25Tb2NrZXQoc29ja2V0KTtcblxuICAgIGZ1bmN0aW9uIG9uRnJlZSgpIHtcbiAgICAgIHNlbGYuZW1pdCgnZnJlZScsIHNvY2tldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbG9zZU9yUmVtb3ZlKGVycikge1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZnJlZScsIG9uRnJlZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0ID0gZnVuY3Rpb24gY3JlYXRlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHBsYWNlaG9sZGVyID0ge307XG4gIHNlbGYuc29ja2V0cy5wdXNoKHBsYWNlaG9sZGVyKTtcblxuICB2YXIgY29ubmVjdE9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYucHJveHlPcHRpb25zLCB7XG4gICAgbWV0aG9kOiAnQ09OTkVDVCcsXG4gICAgcGF0aDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0LFxuICAgIGFnZW50OiBmYWxzZSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBob3N0OiBvcHRpb25zLmhvc3QgKyAnOicgKyBvcHRpb25zLnBvcnRcbiAgICB9XG4gIH0pO1xuICBpZiAob3B0aW9ucy5sb2NhbEFkZHJlc3MpIHtcbiAgICBjb25uZWN0T3B0aW9ucy5sb2NhbEFkZHJlc3MgPSBvcHRpb25zLmxvY2FsQWRkcmVzcztcbiAgfVxuICBpZiAoY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKSB7XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVycyA9IGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljICcgK1xuICAgICAgICBuZXcgQnVmZmVyKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgZGVidWcoJ21ha2luZyBDT05ORUNUIHJlcXVlc3QnKTtcbiAgdmFyIGNvbm5lY3RSZXEgPSBzZWxmLnJlcXVlc3QoY29ubmVjdE9wdGlvbnMpO1xuICBjb25uZWN0UmVxLnVzZUNodW5rZWRFbmNvZGluZ0J5RGVmYXVsdCA9IGZhbHNlOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7IC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgndXBncmFkZScsIG9uVXBncmFkZSk7ICAgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdjb25uZWN0Jywgb25Db25uZWN0KTsgICAvLyBmb3IgdjAuNyBvciBsYXRlclxuICBjb25uZWN0UmVxLm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gIGNvbm5lY3RSZXEuZW5kKCk7XG5cbiAgZnVuY3Rpb24gb25SZXNwb25zZShyZXMpIHtcbiAgICAvLyBWZXJ5IGhhY2t5LiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBodHRwLXBhcnNlciBsZWFrcy5cbiAgICByZXMudXBncmFkZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBvblVwZ3JhZGUocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICAvLyBIYWNreS5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgb25Db25uZWN0KHJlcywgc29ja2V0LCBoZWFkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgc3RhdHVzQ29kZT0lZCcsXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICtcbiAgICAgICAgJ3N0YXR1c0NvZGU9JyArIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChoZWFkLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlYnVnKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2dvdCBpbGxlZ2FsIHJlc3BvbnNlIGJvZHkgZnJvbSBwcm94eScpO1xuICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVidWcoJ3R1bm5lbGluZyBjb25uZWN0aW9uIGhhcyBlc3RhYmxpc2hlZCcpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihwbGFjZWhvbGRlcildID0gc29ja2V0O1xuICAgIHJldHVybiBjYihzb2NrZXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FcnJvcihjYXVzZSkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIGNhdXNlPSVzXFxuJyxcbiAgICAgICAgICBjYXVzZS5tZXNzYWdlLCBjYXVzZS5zdGFjayk7XG4gICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdjYXVzZT0nICsgY2F1c2UubWVzc2FnZSk7XG4gICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICB9XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUucmVtb3ZlU29ja2V0ID0gZnVuY3Rpb24gcmVtb3ZlU29ja2V0KHNvY2tldCkge1xuICB2YXIgcG9zID0gdGhpcy5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KVxuICBpZiAocG9zID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnNvY2tldHMuc3BsaWNlKHBvcywgMSk7XG5cbiAgdmFyIHBlbmRpbmcgPSB0aGlzLnJlcXVlc3RzLnNoaWZ0KCk7XG4gIGlmIChwZW5kaW5nKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHJlcXVlc3RzIGFuZCBhIHNvY2tldCBnZXRzIGNsb3NlZCBhIG5ldyBvbmVcbiAgICAvLyBuZWVkcyB0byBiZSBjcmVhdGVkIHRvIHRha2Ugb3ZlciBpbiB0aGUgcG9vbCBmb3IgdGhlIG9uZSB0aGF0IGNsb3NlZC5cbiAgICB0aGlzLmNyZWF0ZVNvY2tldChwZW5kaW5nLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVTZWN1cmVTb2NrZXQob3B0aW9ucywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBUdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0LmNhbGwoc2VsZiwgb3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgdmFyIGhvc3RIZWFkZXIgPSBvcHRpb25zLnJlcXVlc3QuZ2V0SGVhZGVyKCdob3N0Jyk7XG4gICAgdmFyIHRsc09wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYub3B0aW9ucywge1xuICAgICAgc29ja2V0OiBzb2NrZXQsXG4gICAgICBzZXJ2ZXJuYW1lOiBob3N0SGVhZGVyID8gaG9zdEhlYWRlci5yZXBsYWNlKC86LiokLywgJycpIDogb3B0aW9ucy5ob3N0XG4gICAgfSk7XG5cbiAgICAvLyAwIGlzIGR1bW15IHBvcnQgZm9yIHYwLjZcbiAgICB2YXIgc2VjdXJlU29ja2V0ID0gdGxzLmNvbm5lY3QoMCwgdGxzT3B0aW9ucyk7XG4gICAgc2VsZi5zb2NrZXRzW3NlbGYuc29ja2V0cy5pbmRleE9mKHNvY2tldCldID0gc2VjdXJlU29ja2V0O1xuICAgIGNiKHNlY3VyZVNvY2tldCk7XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJykgeyAvLyBzaW5jZSB2MC4xMFxuICAgIHJldHVybiB7XG4gICAgICBob3N0OiBob3N0LFxuICAgICAgcG9ydDogcG9ydCxcbiAgICAgIGxvY2FsQWRkcmVzczogbG9jYWxBZGRyZXNzXG4gICAgfTtcbiAgfVxuICByZXR1cm4gaG9zdDsgLy8gZm9yIHYwLjExIG9yIGxhdGVyXG59XG5cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBvdmVycmlkZXMgPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAgICBmb3IgKHZhciBqID0gMCwga2V5TGVuID0ga2V5cy5sZW5ndGg7IGogPCBrZXlMZW47ICsraikge1xuICAgICAgICB2YXIgayA9IGtleXNbal07XG4gICAgICAgIGlmIChvdmVycmlkZXNba10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldFtrXSA9IG92ZXJyaWRlc1trXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5cbnZhciBkZWJ1ZztcbmlmIChwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmIC9cXGJ0dW5uZWxcXGIvLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRykpIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgYXJnc1swXSA9ICdUVU5ORUw6ICcgKyBhcmdzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnVuc2hpZnQoJ1RVTk5FTDonKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnOyAvLyBmb3IgdGVzdFxuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvdHVubmVsJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBVbmRpY2lFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdVbmRpY2lFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUidcbiAgfVxufVxuXG5jbGFzcyBDb25uZWN0VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ29ubmVjdFRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ29ubmVjdFRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdDb25uZWN0IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQ09OTkVDVF9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzVGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgSGVhZGVyc092ZXJmbG93RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzT3ZlcmZsb3dFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc092ZXJmbG93RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSGVhZGVycyBPdmVyZmxvdyBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX09WRVJGTE9XJ1xuICB9XG59XG5cbmNsYXNzIEJvZHlUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBCb2R5VGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdCb2R5VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0JvZHkgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CT0RZX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBib2R5KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgU3RhdHVzIENvZGUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTUE9OU0VfU1RBVFVTX0NPREUnXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkQXJndW1lbnRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZEFyZ3VtZW50RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBBcmd1bWVudCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX0FSRydcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0QWJvcnRlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdEFib3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBJbmZvcm1hdGlvbmFsRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbmZvcm1hdGlvbmFsRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0luZm9ybWF0aW9uYWxFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGluZm9ybWF0aW9uJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lORk8nXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGJvZHkgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfQ09OVEVOVF9MRU5HVEhfTUlTTUFUQ0gnXG4gIH1cbn1cblxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDbGllbnREZXN0cm95ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50Q2xvc2VkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxufVxuXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgU29ja2V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxufVxuXG5jbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE5vdFN1cHBvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdOb3RTdXBwb3J0ZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdOb3Qgc3VwcG9ydGVkIGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX05PVF9TVVBQT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxufVxuXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIVFRQUGFyc2VyRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hUVFBQYXJzZXJFcnJvcidcbiAgICB0aGlzLmNvZGUgPSBjb2RlID8gYEhQRV8ke2NvZGV9YCA6IHVuZGVmaW5lZFxuICAgIHRoaXMuZGF0YSA9IGRhdGEgPyBkYXRhLnRvU3RyaW5nKCkgOiB1bmRlZmluZWRcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBjb250ZW50IGV4Y2VlZGVkIG1heCBzaXplJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0UmV0cnlFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0UmV0cnlFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdFJldHJ5RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCByZXRyeSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVFfUkVUUlknXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gY29kZVxuICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgVW5kaWNpRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIENvbm5lY3RUaW1lb3V0RXJyb3IsXG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBSZXF1ZXN0UmV0cnlFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD59ICovXG5jb25zdCBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCA9IHt9XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUVFAvSGVhZGVyc1xuY29uc3Qgd2VsbGtub3duSGVhZGVyTmFtZXMgPSBbXG4gICdBY2NlcHQnLFxuICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgJ0FjY2VwdC1MYW5ndWFnZScsXG4gICdBY2NlcHQtUmFuZ2VzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLFxuICAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtTWF4LUFnZScsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnLFxuICAnQWdlJyxcbiAgJ0FsbG93JyxcbiAgJ0FsdC1TdmMnLFxuICAnQWx0LVVzZWQnLFxuICAnQXV0aG9yaXphdGlvbicsXG4gICdDYWNoZS1Db250cm9sJyxcbiAgJ0NsZWFyLVNpdGUtRGF0YScsXG4gICdDb25uZWN0aW9uJyxcbiAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nLFxuICAnQ29udGVudC1FbmNvZGluZycsXG4gICdDb250ZW50LUxhbmd1YWdlJyxcbiAgJ0NvbnRlbnQtTGVuZ3RoJyxcbiAgJ0NvbnRlbnQtTG9jYXRpb24nLFxuICAnQ29udGVudC1SYW5nZScsXG4gICdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsXG4gICdDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seScsXG4gICdDb250ZW50LVR5cGUnLFxuICAnQ29va2llJyxcbiAgJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLFxuICAnQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3knLFxuICAnQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeScsXG4gICdEYXRlJyxcbiAgJ0RldmljZS1NZW1vcnknLFxuICAnRG93bmxpbmsnLFxuICAnRUNUJyxcbiAgJ0VUYWcnLFxuICAnRXhwZWN0JyxcbiAgJ0V4cGVjdC1DVCcsXG4gICdFeHBpcmVzJyxcbiAgJ0ZvcndhcmRlZCcsXG4gICdGcm9tJyxcbiAgJ0hvc3QnLFxuICAnSWYtTWF0Y2gnLFxuICAnSWYtTW9kaWZpZWQtU2luY2UnLFxuICAnSWYtTm9uZS1NYXRjaCcsXG4gICdJZi1SYW5nZScsXG4gICdJZi1Vbm1vZGlmaWVkLVNpbmNlJyxcbiAgJ0tlZXAtQWxpdmUnLFxuICAnTGFzdC1Nb2RpZmllZCcsXG4gICdMaW5rJyxcbiAgJ0xvY2F0aW9uJyxcbiAgJ01heC1Gb3J3YXJkcycsXG4gICdPcmlnaW4nLFxuICAnUGVybWlzc2lvbnMtUG9saWN5JyxcbiAgJ1ByYWdtYScsXG4gICdQcm94eS1BdXRoZW50aWNhdGUnLFxuICAnUHJveHktQXV0aG9yaXphdGlvbicsXG4gICdSVFQnLFxuICAnUmFuZ2UnLFxuICAnUmVmZXJlcicsXG4gICdSZWZlcnJlci1Qb2xpY3knLFxuICAnUmVmcmVzaCcsXG4gICdSZXRyeS1BZnRlcicsXG4gICdTZWMtV2ViU29ja2V0LUFjY2VwdCcsXG4gICdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnLFxuICAnU2VjLVdlYlNvY2tldC1LZXknLFxuICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcsXG4gICdTZWMtV2ViU29ja2V0LVZlcnNpb24nLFxuICAnU2VydmVyJyxcbiAgJ1NlcnZlci1UaW1pbmcnLFxuICAnU2VydmljZS1Xb3JrZXItQWxsb3dlZCcsXG4gICdTZXJ2aWNlLVdvcmtlci1OYXZpZ2F0aW9uLVByZWxvYWQnLFxuICAnU2V0LUNvb2tpZScsXG4gICdTb3VyY2VNYXAnLFxuICAnU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eScsXG4gICdTdXBwb3J0cy1Mb2FkaW5nLU1vZGUnLFxuICAnVEUnLFxuICAnVGltaW5nLUFsbG93LU9yaWdpbicsXG4gICdUcmFpbGVyJyxcbiAgJ1RyYW5zZmVyLUVuY29kaW5nJyxcbiAgJ1VwZ3JhZGUnLFxuICAnVXBncmFkZS1JbnNlY3VyZS1SZXF1ZXN0cycsXG4gICdVc2VyLUFnZW50JyxcbiAgJ1ZhcnknLFxuICAnVmlhJyxcbiAgJ1dXVy1BdXRoZW50aWNhdGUnLFxuICAnWC1Db250ZW50LVR5cGUtT3B0aW9ucycsXG4gICdYLUROUy1QcmVmZXRjaC1Db250cm9sJyxcbiAgJ1gtRnJhbWUtT3B0aW9ucycsXG4gICdYLVBlcm1pdHRlZC1Dcm9zcy1Eb21haW4tUG9saWNpZXMnLFxuICAnWC1Qb3dlcmVkLUJ5JyxcbiAgJ1gtUmVxdWVzdGVkLVdpdGgnLFxuICAnWC1YU1MtUHJvdGVjdGlvbidcbl1cblxuZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWxsa25vd25IZWFkZXJOYW1lcy5sZW5ndGg7ICsraSkge1xuICBjb25zdCBrZXkgPSB3ZWxsa25vd25IZWFkZXJOYW1lc1tpXVxuICBjb25zdCBsb3dlckNhc2VkS2V5ID0ga2V5LnRvTG93ZXJDYXNlKClcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRba2V5XSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2xvd2VyQ2FzZWRLZXldID1cbiAgICBsb3dlckNhc2VkS2V5XG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkLCBudWxsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2VsbGtub3duSGVhZGVyTmFtZXMsXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmxldCBmYXN0Tm93ID0gRGF0ZS5ub3coKVxubGV0IGZhc3ROb3dUaW1lb3V0XG5cbmNvbnN0IGZhc3RUaW1lcnMgPSBbXVxuXG5mdW5jdGlvbiBvblRpbWVvdXQgKCkge1xuICBmYXN0Tm93ID0gRGF0ZS5ub3coKVxuXG4gIGxldCBsZW4gPSBmYXN0VGltZXJzLmxlbmd0aFxuICBsZXQgaWR4ID0gMFxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgY29uc3QgdGltZXIgPSBmYXN0VGltZXJzW2lkeF1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gMCkge1xuICAgICAgdGltZXIuc3RhdGUgPSBmYXN0Tm93ICsgdGltZXIuZGVsYXlcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXRlID4gMCAmJiBmYXN0Tm93ID49IHRpbWVyLnN0YXRlKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IC0xXG4gICAgICB0aW1lci5jYWxsYmFjayh0aW1lci5vcGFxdWUpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLnN0YXRlID09PSAtMSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMlxuICAgICAgaWYgKGlkeCAhPT0gbGVuIC0gMSkge1xuICAgICAgICBmYXN0VGltZXJzW2lkeF0gPSBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9XG4gICAgICBsZW4gLT0gMVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHggKz0gMVxuICAgIH1cbiAgfVxuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCA+IDApIHtcbiAgICByZWZyZXNoVGltZW91dCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVmcmVzaFRpbWVvdXQgKCkge1xuICBpZiAoZmFzdE5vd1RpbWVvdXQgJiYgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCkge1xuICAgIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2goKVxuICB9IGVsc2Uge1xuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IHNldFRpbWVvdXQob25UaW1lb3V0LCAxZTMpXG4gICAgaWYgKGZhc3ROb3dUaW1lb3V0LnVucmVmKSB7XG4gICAgICBmYXN0Tm93VGltZW91dC51bnJlZigpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvciAoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmRlbGF5ID0gZGVsYXlcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZVxuXG4gICAgLy8gIC0yIG5vdCBpbiB0aW1lciBsaXN0XG4gICAgLy8gIC0xIGluIHRpbWVyIGxpc3QgYnV0IGluYWN0aXZlXG4gICAgLy8gICAwIGluIHRpbWVyIGxpc3Qgd2FpdGluZyBmb3IgdGltZVxuICAgIC8vID4gMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWUgdG8gZXhwaXJlXG4gICAgdGhpcy5zdGF0ZSA9IC0yXG5cbiAgICB0aGlzLnJlZnJlc2goKVxuICB9XG5cbiAgcmVmcmVzaCAoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IC0yKSB7XG4gICAgICBmYXN0VGltZXJzLnB1c2godGhpcylcbiAgICAgIGlmICghZmFzdE5vd1RpbWVvdXQgfHwgZmFzdFRpbWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAwXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IC0xXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgcmV0dXJuIGRlbGF5IDwgMWUzXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpXG4gICAgICA6IG5ldyBUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICB9LFxuICBjbGVhclRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICBpZiAodGltZW91dCBpbnN0YW5jZW9mIFRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQuY2xlYXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBDb3B5cmlnaHQgQnJpYW4gV2hpdGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXNjZGV4L3N0cmVhbXNlYXJjaFxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4gKiBJTiBUSEUgU09GVFdBUkUuXG4gKlxuICogQmFzZWQgaGVhdmlseSBvbiB0aGUgU3RyZWFtaW5nIEJveWVyLU1vb3JlLUhvcnNwb29sIEMrKyBpbXBsZW1lbnRhdGlvblxuICogYnkgSG9uZ2xpIExhaSBhdDogaHR0cHM6Ly9naXRodWIuY29tL0Zvb0JhcldpZGdldC9ib3llci1tb29yZS1ob3JzcG9vbFxuICovXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuXG5mdW5jdGlvbiBTQk1IIChuZWVkbGUpIHtcbiAgaWYgKHR5cGVvZiBuZWVkbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgbmVlZGxlID0gQnVmZmVyLmZyb20obmVlZGxlKVxuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIobmVlZGxlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBuZWVkbGUgaGFzIHRvIGJlIGEgU3RyaW5nIG9yIGEgQnVmZmVyLicpXG4gIH1cblxuICBjb25zdCBuZWVkbGVMZW5ndGggPSBuZWVkbGUubGVuZ3RoXG5cbiAgaWYgKG5lZWRsZUxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5lZWRsZSBjYW5ub3QgYmUgYW4gZW1wdHkgU3RyaW5nL0J1ZmZlci4nKVxuICB9XG5cbiAgaWYgKG5lZWRsZUxlbmd0aCA+IDI1Nikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5lZWRsZSBjYW5ub3QgaGF2ZSBhIGxlbmd0aCBiaWdnZXIgdGhhbiAyNTYuJylcbiAgfVxuXG4gIHRoaXMubWF4TWF0Y2hlcyA9IEluZmluaXR5XG4gIHRoaXMubWF0Y2hlcyA9IDBcblxuICB0aGlzLl9vY2MgPSBuZXcgQXJyYXkoMjU2KVxuICAgIC5maWxsKG5lZWRsZUxlbmd0aCkgLy8gSW5pdGlhbGl6ZSBvY2N1cnJlbmNlIHRhYmxlLlxuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMuX25lZWRsZSA9IG5lZWRsZVxuICB0aGlzLl9idWZwb3MgPSAwXG5cbiAgdGhpcy5fbG9va2JlaGluZCA9IEJ1ZmZlci5hbGxvYyhuZWVkbGVMZW5ndGgpXG5cbiAgLy8gUG9wdWxhdGUgb2NjdXJyZW5jZSB0YWJsZSB3aXRoIGFuYWx5c2lzIG9mIHRoZSBuZWVkbGUsXG4gIC8vIGlnbm9yaW5nIGxhc3QgbGV0dGVyLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5lZWRsZUxlbmd0aCAtIDE7ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHRoaXMuX29jY1tuZWVkbGVbaV1dID0gbmVlZGxlTGVuZ3RoIC0gMSAtIGlcbiAgfVxufVxuaW5oZXJpdHMoU0JNSCwgRXZlbnRFbWl0dGVyKVxuXG5TQk1ILnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICB0aGlzLm1hdGNoZXMgPSAwXG4gIHRoaXMuX2J1ZnBvcyA9IDBcbn1cblxuU0JNSC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgcG9zKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssICdiaW5hcnknKVxuICB9XG4gIGNvbnN0IGNobGVuID0gY2h1bmsubGVuZ3RoXG4gIHRoaXMuX2J1ZnBvcyA9IHBvcyB8fCAwXG4gIGxldCByXG4gIHdoaWxlIChyICE9PSBjaGxlbiAmJiB0aGlzLm1hdGNoZXMgPCB0aGlzLm1heE1hdGNoZXMpIHsgciA9IHRoaXMuX3NibWhfZmVlZChjaHVuaykgfVxuICByZXR1cm4gclxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9mZWVkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGhcbiAgY29uc3QgbmVlZGxlID0gdGhpcy5fbmVlZGxlXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcbiAgY29uc3QgbGFzdE5lZWRsZUNoYXIgPSBuZWVkbGVbbmVlZGxlTGVuZ3RoIC0gMV1cblxuICAvLyBQb3NpdGl2ZTogcG9pbnRzIHRvIGEgcG9zaXRpb24gaW4gYGRhdGFgXG4gIC8vICAgICAgICAgICBwb3MgPT0gMyBwb2ludHMgdG8gZGF0YVszXVxuICAvLyBOZWdhdGl2ZTogcG9pbnRzIHRvIGEgcG9zaXRpb24gaW4gdGhlIGxvb2tiZWhpbmQgYnVmZmVyXG4gIC8vICAgICAgICAgICBwb3MgPT0gLTIgcG9pbnRzIHRvIGxvb2tiZWhpbmRbbG9va2JlaGluZF9zaXplIC0gMl1cbiAgbGV0IHBvcyA9IC10aGlzLl9sb29rYmVoaW5kX3NpemVcbiAgbGV0IGNoXG5cbiAgaWYgKHBvcyA8IDApIHtcbiAgICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3QgZW1wdHkuIFBlcmZvcm0gQm95ZXItTW9vcmUtSG9yc3Bvb2xcbiAgICAvLyBzZWFyY2ggd2l0aCBjaGFyYWN0ZXIgbG9va3VwIGNvZGUgdGhhdCBjb25zaWRlcnMgYm90aCB0aGVcbiAgICAvLyBsb29rYmVoaW5kIGJ1ZmZlciBhbmQgdGhlIGN1cnJlbnQgcm91bmQncyBoYXlzdGFjayBkYXRhLlxuICAgIC8vXG4gICAgLy8gTG9vcCB1bnRpbFxuICAgIC8vICAgdGhlcmUgaXMgYSBtYXRjaC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgd2UndmUgbW92ZWQgcGFzdCB0aGUgcG9zaXRpb24gdGhhdCByZXF1aXJlcyB0aGVcbiAgICAvLyAgIGxvb2tiZWhpbmQgYnVmZmVyLiBJbiB0aGlzIGNhc2Ugd2Ugc3dpdGNoIHRvIHRoZVxuICAgIC8vICAgb3B0aW1pemVkIGxvb3AuXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHRoZSBjaGFyYWN0ZXIgdG8gbG9vayBhdCBsaWVzIG91dHNpZGUgdGhlIGhheXN0YWNrLlxuICAgIHdoaWxlIChwb3MgPCAwICYmIHBvcyA8PSBsZW4gLSBuZWVkbGVMZW5ndGgpIHtcbiAgICAgIGNoID0gdGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBuZWVkbGVMZW5ndGggLSAxKVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNoID09PSBsYXN0TmVlZGxlQ2hhciAmJlxuICAgICAgICB0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIG5lZWRsZUxlbmd0aCAtIDEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgICAgICArK3RoaXMubWF0Y2hlc1xuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKVxuXG4gICAgICAgIHJldHVybiAodGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlTGVuZ3RoKVxuICAgICAgfVxuICAgICAgcG9zICs9IHRoaXMuX29jY1tjaF1cbiAgICB9XG5cbiAgICAvLyBObyBtYXRjaC5cblxuICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAvLyBUaGVyZSdzIHRvbyBmZXcgZGF0YSBmb3IgQm95ZXItTW9vcmUtSG9yc3Bvb2wgdG8gcnVuLFxuICAgICAgLy8gc28gbGV0J3MgdXNlIGEgZGlmZmVyZW50IGFsZ29yaXRobSB0byBza2lwIGFzIG11Y2ggYXNcbiAgICAgIC8vIHdlIGNhbi5cbiAgICAgIC8vIEZvcndhcmQgcG9zIHVudGlsXG4gICAgICAvLyAgIHRoZSB0cmFpbGluZyBwYXJ0IG9mIGxvb2tiZWhpbmQgKyBkYXRhXG4gICAgICAvLyAgIGxvb2tzIGxpa2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmVlZGxlXG4gICAgICAvLyBvciB1bnRpbFxuICAgICAgLy8gICBwb3MgPT0gMFxuICAgICAgd2hpbGUgKHBvcyA8IDAgJiYgIXRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbGVuIC0gcG9zKSkgeyArK3BvcyB9XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICAvLyBEaXNjYXJkIGxvb2tiZWhpbmQgYnVmZmVyLlxuICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIHRoaXMuX2xvb2tiZWhpbmQsIDAsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3V0IG9mZiBwYXJ0IG9mIHRoZSBsb29rYmVoaW5kIGJ1ZmZlciB0aGF0IGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQgYW5kIGFwcGVuZCB0aGUgZW50aXJlIGhheXN0YWNrXG4gICAgICAvLyBpbnRvIGl0LlxuICAgICAgY29uc3QgYnl0ZXNUb0N1dE9mZiA9IHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc1xuICAgICAgaWYgKGJ5dGVzVG9DdXRPZmYgPiAwKSB7XG4gICAgICAgIC8vIFRoZSBjdXQgb2ZmIGRhdGEgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiB0aGUgbmVlZGxlLlxuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZilcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9va2JlaGluZC5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYsXG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtIGJ5dGVzVG9DdXRPZmYpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLT0gYnl0ZXNUb0N1dE9mZlxuXG4gICAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplICs9IGxlblxuXG4gICAgICB0aGlzLl9idWZwb3MgPSBsZW5cbiAgICAgIHJldHVybiBsZW5cbiAgICB9XG4gIH1cblxuICBwb3MgKz0gKHBvcyA+PSAwKSAqIHRoaXMuX2J1ZnBvc1xuXG4gIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdyBlbXB0eS4gV2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIHRoZVxuICAvLyBuZWVkbGUgaXMgaW4gdGhlIGhheXN0YWNrLlxuICBpZiAoZGF0YS5pbmRleE9mKG5lZWRsZSwgcG9zKSAhPT0gLTEpIHtcbiAgICBwb3MgPSBkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpXG4gICAgKyt0aGlzLm1hdGNoZXNcbiAgICBpZiAocG9zID4gMCkgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcykgfSBlbHNlIHsgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSkgfVxuXG4gICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gIH0gZWxzZSB7XG4gICAgcG9zID0gbGVuIC0gbmVlZGxlTGVuZ3RoXG4gIH1cblxuICAvLyBUaGVyZSB3YXMgbm8gbWF0Y2guIElmIHRoZXJlJ3MgdHJhaWxpbmcgaGF5c3RhY2sgZGF0YSB0aGF0IHdlIGNhbm5vdFxuICAvLyBtYXRjaCB5ZXQgdXNpbmcgdGhlIEJveWVyLU1vb3JlLUhvcnNwb29sIGFsZ29yaXRobSAoYmVjYXVzZSB0aGUgdHJhaWxpbmdcbiAgLy8gZGF0YSBpcyBsZXNzIHRoYW4gdGhlIG5lZWRsZSBzaXplKSB0aGVuIG1hdGNoIHVzaW5nIGEgbW9kaWZpZWRcbiAgLy8gYWxnb3JpdGhtIHRoYXQgc3RhcnRzIG1hdGNoaW5nIGZyb20gdGhlIGJlZ2lubmluZyBpbnN0ZWFkIG9mIHRoZSBlbmQuXG4gIC8vIFdoYXRldmVyIHRyYWlsaW5nIGRhdGEgaXMgbGVmdCBhZnRlciBydW5uaW5nIHRoaXMgYWxnb3JpdGhtIGlzIGFkZGVkIHRvXG4gIC8vIHRoZSBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgd2hpbGUgKFxuICAgIHBvcyA8IGxlbiAmJlxuICAgIChcbiAgICAgIGRhdGFbcG9zXSAhPT0gbmVlZGxlWzBdIHx8XG4gICAgICAoXG4gICAgICAgIChCdWZmZXIuY29tcGFyZShcbiAgICAgICAgICBkYXRhLnN1YmFycmF5KHBvcywgcG9zICsgbGVuIC0gcG9zKSxcbiAgICAgICAgICBuZWVkbGUuc3ViYXJyYXkoMCwgbGVuIC0gcG9zKVxuICAgICAgICApICE9PSAwKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgKytwb3NcbiAgfVxuICBpZiAocG9zIDwgbGVuKSB7XG4gICAgZGF0YS5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIDAsIHBvcywgcG9zICsgKGxlbiAtIHBvcykpXG4gICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gbGVuIC0gcG9zXG4gIH1cblxuICAvLyBFdmVyeXRoaW5nIHVudGlsIHBvcyBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIG5lZWRsZSBkYXRhLlxuICBpZiAocG9zID4gMCkgeyB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MgPCBsZW4gPyBwb3MgOiBsZW4pIH1cblxuICB0aGlzLl9idWZwb3MgPSBsZW5cbiAgcmV0dXJuIGxlblxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9sb29rdXBfY2hhciA9IGZ1bmN0aW9uIChkYXRhLCBwb3MpIHtcbiAgcmV0dXJuIChwb3MgPCAwKVxuICAgID8gdGhpcy5fbG9va2JlaGluZFt0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NdXG4gICAgOiBkYXRhW3Bvc11cbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbWVtY21wID0gZnVuY3Rpb24gKGRhdGEsIHBvcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAodGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBpKSAhPT0gdGhpcy5fbmVlZGxlW2ldKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTQk1IXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRMaW1pdCAobGltaXRzLCBuYW1lLCBkZWZhdWx0TGltaXQpIHtcbiAgaWYgKFxuICAgICFsaW1pdHMgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IHVuZGVmaW5lZCB8fFxuICAgIGxpbWl0c1tuYW1lXSA9PT0gbnVsbFxuICApIHsgcmV0dXJuIGRlZmF1bHRMaW1pdCB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBsaW1pdHNbbmFtZV0gIT09ICdudW1iZXInIHx8XG4gICAgaXNOYU4obGltaXRzW25hbWVdKVxuICApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignTGltaXQgJyArIG5hbWUgKyAnIGlzIG5vdCBhIHZhbGlkIG51bWJlcicpIH1cblxuICByZXR1cm4gbGltaXRzW25hbWVdXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFN0cmVhbVNlYXJjaCA9IHJlcXVpcmUoJy4uLy4uL3N0cmVhbXNlYXJjaC9zYm1oJylcblxuY29uc3QgQl9EQ1JMRiA9IEJ1ZmZlci5mcm9tKCdcXHJcXG5cXHJcXG4nKVxuY29uc3QgUkVfQ1JMRiA9IC9cXHJcXG4vZ1xuY29uc3QgUkVfSERSID0gL14oW146XSspOlsgXFx0XT8oW1xceDAwLVxceEZGXSspPyQvIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udHJvbC1yZWdleFxuXG5mdW5jdGlvbiBIZWFkZXJQYXJzZXIgKGNmZykge1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKVxuXG4gIGNmZyA9IGNmZyB8fCB7fVxuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLm5yZWFkID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5ucGFpcnMgPSAwXG4gIHRoaXMubWF4SGVhZGVyUGFpcnMgPSBnZXRMaW1pdChjZmcsICdtYXhIZWFkZXJQYWlycycsIDIwMDApXG4gIHRoaXMubWF4SGVhZGVyU2l6ZSA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclNpemUnLCA4MCAqIDEwMjQpXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5zcyA9IG5ldyBTdHJlYW1TZWFyY2goQl9EQ1JMRilcbiAgdGhpcy5zcy5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgaWYgKGRhdGEgJiYgIXNlbGYubWF4ZWQpIHtcbiAgICAgIGlmIChzZWxmLm5yZWFkICsgZW5kIC0gc3RhcnQgPj0gc2VsZi5tYXhIZWFkZXJTaXplKSB7XG4gICAgICAgIGVuZCA9IHNlbGYubWF4SGVhZGVyU2l6ZSAtIHNlbGYubnJlYWQgKyBzdGFydFxuICAgICAgICBzZWxmLm5yZWFkID0gc2VsZi5tYXhIZWFkZXJTaXplXG4gICAgICAgIHNlbGYubWF4ZWQgPSB0cnVlXG4gICAgICB9IGVsc2UgeyBzZWxmLm5yZWFkICs9IChlbmQgLSBzdGFydCkgfVxuXG4gICAgICBzZWxmLmJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBzdGFydCwgZW5kKVxuICAgIH1cbiAgICBpZiAoaXNNYXRjaCkgeyBzZWxmLl9maW5pc2goKSB9XG4gIH0pXG59XG5pbmhlcml0cyhIZWFkZXJQYXJzZXIsIEV2ZW50RW1pdHRlcilcblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgciA9IHRoaXMuc3MucHVzaChkYXRhKVxuICBpZiAodGhpcy5maW5pc2hlZCkgeyByZXR1cm4gciB9XG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5zcy5yZXNldCgpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX2ZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYnVmZmVyKSB7IHRoaXMuX3BhcnNlSGVhZGVyKCkgfVxuICB0aGlzLnNzLm1hdGNoZXMgPSB0aGlzLnNzLm1heE1hdGNoZXNcbiAgY29uc3QgaGVhZGVyID0gdGhpcy5oZWFkZXJcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuZmluaXNoZWQgPSB0cnVlXG4gIHRoaXMubnJlYWQgPSB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhlZCA9IGZhbHNlXG4gIHRoaXMuZW1pdCgnaGVhZGVyJywgaGVhZGVyKVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLl9wYXJzZUhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubnBhaXJzID09PSB0aGlzLm1heEhlYWRlclBhaXJzKSB7IHJldHVybiB9XG5cbiAgY29uc3QgbGluZXMgPSB0aGlzLmJ1ZmZlci5zcGxpdChSRV9DUkxGKVxuICBjb25zdCBsZW4gPSBsaW5lcy5sZW5ndGhcbiAgbGV0IG0sIGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKGxpbmVzW2ldLmxlbmd0aCA9PT0gMCkgeyBjb250aW51ZSB9XG4gICAgaWYgKGxpbmVzW2ldWzBdID09PSAnXFx0JyB8fCBsaW5lc1tpXVswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBmb2xkZWQgaGVhZGVyIGNvbnRlbnRcbiAgICAgIC8vIFJGQzI4MjIgc2F5cyB0byBqdXN0IHJlbW92ZSB0aGUgQ1JMRiBhbmQgbm90IHRoZSB3aGl0ZXNwYWNlIGZvbGxvd2luZ1xuICAgICAgLy8gaXQsIHNvIHdlIGZvbGxvdyB0aGUgUkZDIGFuZCBpbmNsdWRlIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgLi4uXG4gICAgICBpZiAoaCkge1xuICAgICAgICB0aGlzLmhlYWRlcltoXVt0aGlzLmhlYWRlcltoXS5sZW5ndGggLSAxXSArPSBsaW5lc1tpXVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvc0NvbG9uID0gbGluZXNbaV0uaW5kZXhPZignOicpXG4gICAgaWYgKFxuICAgICAgcG9zQ29sb24gPT09IC0xIHx8XG4gICAgICBwb3NDb2xvbiA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG0gPSBSRV9IRFIuZXhlYyhsaW5lc1tpXSlcbiAgICBoID0gbVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgdGhpcy5oZWFkZXJbaF0gPSB0aGlzLmhlYWRlcltoXSB8fCBbXVxuICAgIHRoaXMuaGVhZGVyW2hdLnB1c2goKG1bMl0gfHwgJycpKVxuICAgIGlmICgrK3RoaXMubnBhaXJzID09PSB0aGlzLm1heEhlYWRlclBhaXJzKSB7IGJyZWFrIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhlYWRlclBhcnNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsICIndXNlIHN0cmljdCdcblxuLy8gTm9kZSBoYXMgYWx3YXlzIHV0Zi04XG5jb25zdCB1dGY4RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKVxuY29uc3QgdGV4dERlY29kZXJzID0gbmV3IE1hcChbXG4gIFsndXRmLTgnLCB1dGY4RGVjb2Rlcl0sXG4gIFsndXRmOCcsIHV0ZjhEZWNvZGVyXVxuXSlcblxuZnVuY3Rpb24gZ2V0RGVjb2RlciAoY2hhcnNldCkge1xuICBsZXQgbGNcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmOFxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2FzY2lpJzogLy8gVE9ETzogTWFrZSB0aGVzZSBhIHNlcGFyYXRlLCBzdHJpY3QgZGVjb2Rlcj9cbiAgICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgICBjYXNlICdjcDEyNTInOlxuICAgICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMubGF0aW4xXG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmMTZsZVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmJhc2U2NFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxjID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsYyA9IHRydWVcbiAgICAgICAgICBjaGFyc2V0ID0gY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjb2RlcnMub3RoZXIuYmluZChjaGFyc2V0KVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBkZWNvZGVycyA9IHtcbiAgdXRmODogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51dGY4U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgbGF0aW4xOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS5sYXRpbjFTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICB1dGYxNmxlOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLnVjczJTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBiYXNlNjQ6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuYmFzZTY0U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgb3RoZXI6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG5cbiAgICBpZiAodGV4dERlY29kZXJzLmhhcyh0aGlzLnRvU3RyaW5nKCkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGV4dERlY29kZXJzLmdldCh0aGlzKS5kZWNvZGUoZGF0YSlcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgPyBkYXRhXG4gICAgICA6IGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVRleHQgKHRleHQsIHNvdXJjZUVuY29kaW5nLCBkZXN0RW5jb2RpbmcpIHtcbiAgaWYgKHRleHQpIHtcbiAgICByZXR1cm4gZ2V0RGVjb2RlcihkZXN0RW5jb2RpbmcpKHRleHQsIHNvdXJjZUVuY29kaW5nKVxuICB9XG4gIHJldHVybiB0ZXh0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVjb2RlVGV4dFxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1wcm9wZXJ0eS1uZXdsaW5lICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4vZGVjb2RlVGV4dCcpXG5cbmNvbnN0IFJFX0VOQ09ERUQgPSAvJVthLWZBLUYwLTldW2EtZkEtRjAtOV0vZ1xuXG5jb25zdCBFbmNvZGVkTG9va3VwID0ge1xuICAnJTAwJzogJ1xceDAwJywgJyUwMSc6ICdcXHgwMScsICclMDInOiAnXFx4MDInLCAnJTAzJzogJ1xceDAzJywgJyUwNCc6ICdcXHgwNCcsXG4gICclMDUnOiAnXFx4MDUnLCAnJTA2JzogJ1xceDA2JywgJyUwNyc6ICdcXHgwNycsICclMDgnOiAnXFx4MDgnLCAnJTA5JzogJ1xceDA5JyxcbiAgJyUwYSc6ICdcXHgwYScsICclMEEnOiAnXFx4MGEnLCAnJTBiJzogJ1xceDBiJywgJyUwQic6ICdcXHgwYicsICclMGMnOiAnXFx4MGMnLFxuICAnJTBDJzogJ1xceDBjJywgJyUwZCc6ICdcXHgwZCcsICclMEQnOiAnXFx4MGQnLCAnJTBlJzogJ1xceDBlJywgJyUwRSc6ICdcXHgwZScsXG4gICclMGYnOiAnXFx4MGYnLCAnJTBGJzogJ1xceDBmJywgJyUxMCc6ICdcXHgxMCcsICclMTEnOiAnXFx4MTEnLCAnJTEyJzogJ1xceDEyJyxcbiAgJyUxMyc6ICdcXHgxMycsICclMTQnOiAnXFx4MTQnLCAnJTE1JzogJ1xceDE1JywgJyUxNic6ICdcXHgxNicsICclMTcnOiAnXFx4MTcnLFxuICAnJTE4JzogJ1xceDE4JywgJyUxOSc6ICdcXHgxOScsICclMWEnOiAnXFx4MWEnLCAnJTFBJzogJ1xceDFhJywgJyUxYic6ICdcXHgxYicsXG4gICclMUInOiAnXFx4MWInLCAnJTFjJzogJ1xceDFjJywgJyUxQyc6ICdcXHgxYycsICclMWQnOiAnXFx4MWQnLCAnJTFEJzogJ1xceDFkJyxcbiAgJyUxZSc6ICdcXHgxZScsICclMUUnOiAnXFx4MWUnLCAnJTFmJzogJ1xceDFmJywgJyUxRic6ICdcXHgxZicsICclMjAnOiAnXFx4MjAnLFxuICAnJTIxJzogJ1xceDIxJywgJyUyMic6ICdcXHgyMicsICclMjMnOiAnXFx4MjMnLCAnJTI0JzogJ1xceDI0JywgJyUyNSc6ICdcXHgyNScsXG4gICclMjYnOiAnXFx4MjYnLCAnJTI3JzogJ1xceDI3JywgJyUyOCc6ICdcXHgyOCcsICclMjknOiAnXFx4MjknLCAnJTJhJzogJ1xceDJhJyxcbiAgJyUyQSc6ICdcXHgyYScsICclMmInOiAnXFx4MmInLCAnJTJCJzogJ1xceDJiJywgJyUyYyc6ICdcXHgyYycsICclMkMnOiAnXFx4MmMnLFxuICAnJTJkJzogJ1xceDJkJywgJyUyRCc6ICdcXHgyZCcsICclMmUnOiAnXFx4MmUnLCAnJTJFJzogJ1xceDJlJywgJyUyZic6ICdcXHgyZicsXG4gICclMkYnOiAnXFx4MmYnLCAnJTMwJzogJ1xceDMwJywgJyUzMSc6ICdcXHgzMScsICclMzInOiAnXFx4MzInLCAnJTMzJzogJ1xceDMzJyxcbiAgJyUzNCc6ICdcXHgzNCcsICclMzUnOiAnXFx4MzUnLCAnJTM2JzogJ1xceDM2JywgJyUzNyc6ICdcXHgzNycsICclMzgnOiAnXFx4MzgnLFxuICAnJTM5JzogJ1xceDM5JywgJyUzYSc6ICdcXHgzYScsICclM0EnOiAnXFx4M2EnLCAnJTNiJzogJ1xceDNiJywgJyUzQic6ICdcXHgzYicsXG4gICclM2MnOiAnXFx4M2MnLCAnJTNDJzogJ1xceDNjJywgJyUzZCc6ICdcXHgzZCcsICclM0QnOiAnXFx4M2QnLCAnJTNlJzogJ1xceDNlJyxcbiAgJyUzRSc6ICdcXHgzZScsICclM2YnOiAnXFx4M2YnLCAnJTNGJzogJ1xceDNmJywgJyU0MCc6ICdcXHg0MCcsICclNDEnOiAnXFx4NDEnLFxuICAnJTQyJzogJ1xceDQyJywgJyU0Myc6ICdcXHg0MycsICclNDQnOiAnXFx4NDQnLCAnJTQ1JzogJ1xceDQ1JywgJyU0Nic6ICdcXHg0NicsXG4gICclNDcnOiAnXFx4NDcnLCAnJTQ4JzogJ1xceDQ4JywgJyU0OSc6ICdcXHg0OScsICclNGEnOiAnXFx4NGEnLCAnJTRBJzogJ1xceDRhJyxcbiAgJyU0Yic6ICdcXHg0YicsICclNEInOiAnXFx4NGInLCAnJTRjJzogJ1xceDRjJywgJyU0Qyc6ICdcXHg0YycsICclNGQnOiAnXFx4NGQnLFxuICAnJTREJzogJ1xceDRkJywgJyU0ZSc6ICdcXHg0ZScsICclNEUnOiAnXFx4NGUnLCAnJTRmJzogJ1xceDRmJywgJyU0Ric6ICdcXHg0ZicsXG4gICclNTAnOiAnXFx4NTAnLCAnJTUxJzogJ1xceDUxJywgJyU1Mic6ICdcXHg1MicsICclNTMnOiAnXFx4NTMnLCAnJTU0JzogJ1xceDU0JyxcbiAgJyU1NSc6ICdcXHg1NScsICclNTYnOiAnXFx4NTYnLCAnJTU3JzogJ1xceDU3JywgJyU1OCc6ICdcXHg1OCcsICclNTknOiAnXFx4NTknLFxuICAnJTVhJzogJ1xceDVhJywgJyU1QSc6ICdcXHg1YScsICclNWInOiAnXFx4NWInLCAnJTVCJzogJ1xceDViJywgJyU1Yyc6ICdcXHg1YycsXG4gICclNUMnOiAnXFx4NWMnLCAnJTVkJzogJ1xceDVkJywgJyU1RCc6ICdcXHg1ZCcsICclNWUnOiAnXFx4NWUnLCAnJTVFJzogJ1xceDVlJyxcbiAgJyU1Zic6ICdcXHg1ZicsICclNUYnOiAnXFx4NWYnLCAnJTYwJzogJ1xceDYwJywgJyU2MSc6ICdcXHg2MScsICclNjInOiAnXFx4NjInLFxuICAnJTYzJzogJ1xceDYzJywgJyU2NCc6ICdcXHg2NCcsICclNjUnOiAnXFx4NjUnLCAnJTY2JzogJ1xceDY2JywgJyU2Nyc6ICdcXHg2NycsXG4gICclNjgnOiAnXFx4NjgnLCAnJTY5JzogJ1xceDY5JywgJyU2YSc6ICdcXHg2YScsICclNkEnOiAnXFx4NmEnLCAnJTZiJzogJ1xceDZiJyxcbiAgJyU2Qic6ICdcXHg2YicsICclNmMnOiAnXFx4NmMnLCAnJTZDJzogJ1xceDZjJywgJyU2ZCc6ICdcXHg2ZCcsICclNkQnOiAnXFx4NmQnLFxuICAnJTZlJzogJ1xceDZlJywgJyU2RSc6ICdcXHg2ZScsICclNmYnOiAnXFx4NmYnLCAnJTZGJzogJ1xceDZmJywgJyU3MCc6ICdcXHg3MCcsXG4gICclNzEnOiAnXFx4NzEnLCAnJTcyJzogJ1xceDcyJywgJyU3Myc6ICdcXHg3MycsICclNzQnOiAnXFx4NzQnLCAnJTc1JzogJ1xceDc1JyxcbiAgJyU3Nic6ICdcXHg3NicsICclNzcnOiAnXFx4NzcnLCAnJTc4JzogJ1xceDc4JywgJyU3OSc6ICdcXHg3OScsICclN2EnOiAnXFx4N2EnLFxuICAnJTdBJzogJ1xceDdhJywgJyU3Yic6ICdcXHg3YicsICclN0InOiAnXFx4N2InLCAnJTdjJzogJ1xceDdjJywgJyU3Qyc6ICdcXHg3YycsXG4gICclN2QnOiAnXFx4N2QnLCAnJTdEJzogJ1xceDdkJywgJyU3ZSc6ICdcXHg3ZScsICclN0UnOiAnXFx4N2UnLCAnJTdmJzogJ1xceDdmJyxcbiAgJyU3Ric6ICdcXHg3ZicsICclODAnOiAnXFx4ODAnLCAnJTgxJzogJ1xceDgxJywgJyU4Mic6ICdcXHg4MicsICclODMnOiAnXFx4ODMnLFxuICAnJTg0JzogJ1xceDg0JywgJyU4NSc6ICdcXHg4NScsICclODYnOiAnXFx4ODYnLCAnJTg3JzogJ1xceDg3JywgJyU4OCc6ICdcXHg4OCcsXG4gICclODknOiAnXFx4ODknLCAnJThhJzogJ1xceDhhJywgJyU4QSc6ICdcXHg4YScsICclOGInOiAnXFx4OGInLCAnJThCJzogJ1xceDhiJyxcbiAgJyU4Yyc6ICdcXHg4YycsICclOEMnOiAnXFx4OGMnLCAnJThkJzogJ1xceDhkJywgJyU4RCc6ICdcXHg4ZCcsICclOGUnOiAnXFx4OGUnLFxuICAnJThFJzogJ1xceDhlJywgJyU4Zic6ICdcXHg4ZicsICclOEYnOiAnXFx4OGYnLCAnJTkwJzogJ1xceDkwJywgJyU5MSc6ICdcXHg5MScsXG4gICclOTInOiAnXFx4OTInLCAnJTkzJzogJ1xceDkzJywgJyU5NCc6ICdcXHg5NCcsICclOTUnOiAnXFx4OTUnLCAnJTk2JzogJ1xceDk2JyxcbiAgJyU5Nyc6ICdcXHg5NycsICclOTgnOiAnXFx4OTgnLCAnJTk5JzogJ1xceDk5JywgJyU5YSc6ICdcXHg5YScsICclOUEnOiAnXFx4OWEnLFxuICAnJTliJzogJ1xceDliJywgJyU5Qic6ICdcXHg5YicsICclOWMnOiAnXFx4OWMnLCAnJTlDJzogJ1xceDljJywgJyU5ZCc6ICdcXHg5ZCcsXG4gICclOUQnOiAnXFx4OWQnLCAnJTllJzogJ1xceDllJywgJyU5RSc6ICdcXHg5ZScsICclOWYnOiAnXFx4OWYnLCAnJTlGJzogJ1xceDlmJyxcbiAgJyVhMCc6ICdcXHhhMCcsICclQTAnOiAnXFx4YTAnLCAnJWExJzogJ1xceGExJywgJyVBMSc6ICdcXHhhMScsICclYTInOiAnXFx4YTInLFxuICAnJUEyJzogJ1xceGEyJywgJyVhMyc6ICdcXHhhMycsICclQTMnOiAnXFx4YTMnLCAnJWE0JzogJ1xceGE0JywgJyVBNCc6ICdcXHhhNCcsXG4gICclYTUnOiAnXFx4YTUnLCAnJUE1JzogJ1xceGE1JywgJyVhNic6ICdcXHhhNicsICclQTYnOiAnXFx4YTYnLCAnJWE3JzogJ1xceGE3JyxcbiAgJyVBNyc6ICdcXHhhNycsICclYTgnOiAnXFx4YTgnLCAnJUE4JzogJ1xceGE4JywgJyVhOSc6ICdcXHhhOScsICclQTknOiAnXFx4YTknLFxuICAnJWFhJzogJ1xceGFhJywgJyVBYSc6ICdcXHhhYScsICclYUEnOiAnXFx4YWEnLCAnJUFBJzogJ1xceGFhJywgJyVhYic6ICdcXHhhYicsXG4gICclQWInOiAnXFx4YWInLCAnJWFCJzogJ1xceGFiJywgJyVBQic6ICdcXHhhYicsICclYWMnOiAnXFx4YWMnLCAnJUFjJzogJ1xceGFjJyxcbiAgJyVhQyc6ICdcXHhhYycsICclQUMnOiAnXFx4YWMnLCAnJWFkJzogJ1xceGFkJywgJyVBZCc6ICdcXHhhZCcsICclYUQnOiAnXFx4YWQnLFxuICAnJUFEJzogJ1xceGFkJywgJyVhZSc6ICdcXHhhZScsICclQWUnOiAnXFx4YWUnLCAnJWFFJzogJ1xceGFlJywgJyVBRSc6ICdcXHhhZScsXG4gICclYWYnOiAnXFx4YWYnLCAnJUFmJzogJ1xceGFmJywgJyVhRic6ICdcXHhhZicsICclQUYnOiAnXFx4YWYnLCAnJWIwJzogJ1xceGIwJyxcbiAgJyVCMCc6ICdcXHhiMCcsICclYjEnOiAnXFx4YjEnLCAnJUIxJzogJ1xceGIxJywgJyViMic6ICdcXHhiMicsICclQjInOiAnXFx4YjInLFxuICAnJWIzJzogJ1xceGIzJywgJyVCMyc6ICdcXHhiMycsICclYjQnOiAnXFx4YjQnLCAnJUI0JzogJ1xceGI0JywgJyViNSc6ICdcXHhiNScsXG4gICclQjUnOiAnXFx4YjUnLCAnJWI2JzogJ1xceGI2JywgJyVCNic6ICdcXHhiNicsICclYjcnOiAnXFx4YjcnLCAnJUI3JzogJ1xceGI3JyxcbiAgJyViOCc6ICdcXHhiOCcsICclQjgnOiAnXFx4YjgnLCAnJWI5JzogJ1xceGI5JywgJyVCOSc6ICdcXHhiOScsICclYmEnOiAnXFx4YmEnLFxuICAnJUJhJzogJ1xceGJhJywgJyViQSc6ICdcXHhiYScsICclQkEnOiAnXFx4YmEnLCAnJWJiJzogJ1xceGJiJywgJyVCYic6ICdcXHhiYicsXG4gICclYkInOiAnXFx4YmInLCAnJUJCJzogJ1xceGJiJywgJyViYyc6ICdcXHhiYycsICclQmMnOiAnXFx4YmMnLCAnJWJDJzogJ1xceGJjJyxcbiAgJyVCQyc6ICdcXHhiYycsICclYmQnOiAnXFx4YmQnLCAnJUJkJzogJ1xceGJkJywgJyViRCc6ICdcXHhiZCcsICclQkQnOiAnXFx4YmQnLFxuICAnJWJlJzogJ1xceGJlJywgJyVCZSc6ICdcXHhiZScsICclYkUnOiAnXFx4YmUnLCAnJUJFJzogJ1xceGJlJywgJyViZic6ICdcXHhiZicsXG4gICclQmYnOiAnXFx4YmYnLCAnJWJGJzogJ1xceGJmJywgJyVCRic6ICdcXHhiZicsICclYzAnOiAnXFx4YzAnLCAnJUMwJzogJ1xceGMwJyxcbiAgJyVjMSc6ICdcXHhjMScsICclQzEnOiAnXFx4YzEnLCAnJWMyJzogJ1xceGMyJywgJyVDMic6ICdcXHhjMicsICclYzMnOiAnXFx4YzMnLFxuICAnJUMzJzogJ1xceGMzJywgJyVjNCc6ICdcXHhjNCcsICclQzQnOiAnXFx4YzQnLCAnJWM1JzogJ1xceGM1JywgJyVDNSc6ICdcXHhjNScsXG4gICclYzYnOiAnXFx4YzYnLCAnJUM2JzogJ1xceGM2JywgJyVjNyc6ICdcXHhjNycsICclQzcnOiAnXFx4YzcnLCAnJWM4JzogJ1xceGM4JyxcbiAgJyVDOCc6ICdcXHhjOCcsICclYzknOiAnXFx4YzknLCAnJUM5JzogJ1xceGM5JywgJyVjYSc6ICdcXHhjYScsICclQ2EnOiAnXFx4Y2EnLFxuICAnJWNBJzogJ1xceGNhJywgJyVDQSc6ICdcXHhjYScsICclY2InOiAnXFx4Y2InLCAnJUNiJzogJ1xceGNiJywgJyVjQic6ICdcXHhjYicsXG4gICclQ0InOiAnXFx4Y2InLCAnJWNjJzogJ1xceGNjJywgJyVDYyc6ICdcXHhjYycsICclY0MnOiAnXFx4Y2MnLCAnJUNDJzogJ1xceGNjJyxcbiAgJyVjZCc6ICdcXHhjZCcsICclQ2QnOiAnXFx4Y2QnLCAnJWNEJzogJ1xceGNkJywgJyVDRCc6ICdcXHhjZCcsICclY2UnOiAnXFx4Y2UnLFxuICAnJUNlJzogJ1xceGNlJywgJyVjRSc6ICdcXHhjZScsICclQ0UnOiAnXFx4Y2UnLCAnJWNmJzogJ1xceGNmJywgJyVDZic6ICdcXHhjZicsXG4gICclY0YnOiAnXFx4Y2YnLCAnJUNGJzogJ1xceGNmJywgJyVkMCc6ICdcXHhkMCcsICclRDAnOiAnXFx4ZDAnLCAnJWQxJzogJ1xceGQxJyxcbiAgJyVEMSc6ICdcXHhkMScsICclZDInOiAnXFx4ZDInLCAnJUQyJzogJ1xceGQyJywgJyVkMyc6ICdcXHhkMycsICclRDMnOiAnXFx4ZDMnLFxuICAnJWQ0JzogJ1xceGQ0JywgJyVENCc6ICdcXHhkNCcsICclZDUnOiAnXFx4ZDUnLCAnJUQ1JzogJ1xceGQ1JywgJyVkNic6ICdcXHhkNicsXG4gICclRDYnOiAnXFx4ZDYnLCAnJWQ3JzogJ1xceGQ3JywgJyVENyc6ICdcXHhkNycsICclZDgnOiAnXFx4ZDgnLCAnJUQ4JzogJ1xceGQ4JyxcbiAgJyVkOSc6ICdcXHhkOScsICclRDknOiAnXFx4ZDknLCAnJWRhJzogJ1xceGRhJywgJyVEYSc6ICdcXHhkYScsICclZEEnOiAnXFx4ZGEnLFxuICAnJURBJzogJ1xceGRhJywgJyVkYic6ICdcXHhkYicsICclRGInOiAnXFx4ZGInLCAnJWRCJzogJ1xceGRiJywgJyVEQic6ICdcXHhkYicsXG4gICclZGMnOiAnXFx4ZGMnLCAnJURjJzogJ1xceGRjJywgJyVkQyc6ICdcXHhkYycsICclREMnOiAnXFx4ZGMnLCAnJWRkJzogJ1xceGRkJyxcbiAgJyVEZCc6ICdcXHhkZCcsICclZEQnOiAnXFx4ZGQnLCAnJUREJzogJ1xceGRkJywgJyVkZSc6ICdcXHhkZScsICclRGUnOiAnXFx4ZGUnLFxuICAnJWRFJzogJ1xceGRlJywgJyVERSc6ICdcXHhkZScsICclZGYnOiAnXFx4ZGYnLCAnJURmJzogJ1xceGRmJywgJyVkRic6ICdcXHhkZicsXG4gICclREYnOiAnXFx4ZGYnLCAnJWUwJzogJ1xceGUwJywgJyVFMCc6ICdcXHhlMCcsICclZTEnOiAnXFx4ZTEnLCAnJUUxJzogJ1xceGUxJyxcbiAgJyVlMic6ICdcXHhlMicsICclRTInOiAnXFx4ZTInLCAnJWUzJzogJ1xceGUzJywgJyVFMyc6ICdcXHhlMycsICclZTQnOiAnXFx4ZTQnLFxuICAnJUU0JzogJ1xceGU0JywgJyVlNSc6ICdcXHhlNScsICclRTUnOiAnXFx4ZTUnLCAnJWU2JzogJ1xceGU2JywgJyVFNic6ICdcXHhlNicsXG4gICclZTcnOiAnXFx4ZTcnLCAnJUU3JzogJ1xceGU3JywgJyVlOCc6ICdcXHhlOCcsICclRTgnOiAnXFx4ZTgnLCAnJWU5JzogJ1xceGU5JyxcbiAgJyVFOSc6ICdcXHhlOScsICclZWEnOiAnXFx4ZWEnLCAnJUVhJzogJ1xceGVhJywgJyVlQSc6ICdcXHhlYScsICclRUEnOiAnXFx4ZWEnLFxuICAnJWViJzogJ1xceGViJywgJyVFYic6ICdcXHhlYicsICclZUInOiAnXFx4ZWInLCAnJUVCJzogJ1xceGViJywgJyVlYyc6ICdcXHhlYycsXG4gICclRWMnOiAnXFx4ZWMnLCAnJWVDJzogJ1xceGVjJywgJyVFQyc6ICdcXHhlYycsICclZWQnOiAnXFx4ZWQnLCAnJUVkJzogJ1xceGVkJyxcbiAgJyVlRCc6ICdcXHhlZCcsICclRUQnOiAnXFx4ZWQnLCAnJWVlJzogJ1xceGVlJywgJyVFZSc6ICdcXHhlZScsICclZUUnOiAnXFx4ZWUnLFxuICAnJUVFJzogJ1xceGVlJywgJyVlZic6ICdcXHhlZicsICclRWYnOiAnXFx4ZWYnLCAnJWVGJzogJ1xceGVmJywgJyVFRic6ICdcXHhlZicsXG4gICclZjAnOiAnXFx4ZjAnLCAnJUYwJzogJ1xceGYwJywgJyVmMSc6ICdcXHhmMScsICclRjEnOiAnXFx4ZjEnLCAnJWYyJzogJ1xceGYyJyxcbiAgJyVGMic6ICdcXHhmMicsICclZjMnOiAnXFx4ZjMnLCAnJUYzJzogJ1xceGYzJywgJyVmNCc6ICdcXHhmNCcsICclRjQnOiAnXFx4ZjQnLFxuICAnJWY1JzogJ1xceGY1JywgJyVGNSc6ICdcXHhmNScsICclZjYnOiAnXFx4ZjYnLCAnJUY2JzogJ1xceGY2JywgJyVmNyc6ICdcXHhmNycsXG4gICclRjcnOiAnXFx4ZjcnLCAnJWY4JzogJ1xceGY4JywgJyVGOCc6ICdcXHhmOCcsICclZjknOiAnXFx4ZjknLCAnJUY5JzogJ1xceGY5JyxcbiAgJyVmYSc6ICdcXHhmYScsICclRmEnOiAnXFx4ZmEnLCAnJWZBJzogJ1xceGZhJywgJyVGQSc6ICdcXHhmYScsICclZmInOiAnXFx4ZmInLFxuICAnJUZiJzogJ1xceGZiJywgJyVmQic6ICdcXHhmYicsICclRkInOiAnXFx4ZmInLCAnJWZjJzogJ1xceGZjJywgJyVGYyc6ICdcXHhmYycsXG4gICclZkMnOiAnXFx4ZmMnLCAnJUZDJzogJ1xceGZjJywgJyVmZCc6ICdcXHhmZCcsICclRmQnOiAnXFx4ZmQnLCAnJWZEJzogJ1xceGZkJyxcbiAgJyVGRCc6ICdcXHhmZCcsICclZmUnOiAnXFx4ZmUnLCAnJUZlJzogJ1xceGZlJywgJyVmRSc6ICdcXHhmZScsICclRkUnOiAnXFx4ZmUnLFxuICAnJWZmJzogJ1xceGZmJywgJyVGZic6ICdcXHhmZicsICclZkYnOiAnXFx4ZmYnLCAnJUZGJzogJ1xceGZmJ1xufVxuXG5mdW5jdGlvbiBlbmNvZGVkUmVwbGFjZXIgKG1hdGNoKSB7XG4gIHJldHVybiBFbmNvZGVkTG9va3VwW21hdGNoXVxufVxuXG5jb25zdCBTVEFURV9LRVkgPSAwXG5jb25zdCBTVEFURV9WQUxVRSA9IDFcbmNvbnN0IFNUQVRFX0NIQVJTRVQgPSAyXG5jb25zdCBTVEFURV9MQU5HID0gM1xuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyAoc3RyKSB7XG4gIGNvbnN0IHJlcyA9IFtdXG4gIGxldCBzdGF0ZSA9IFNUQVRFX0tFWVxuICBsZXQgY2hhcnNldCA9ICcnXG4gIGxldCBpbnF1b3RlID0gZmFsc2VcbiAgbGV0IGVzY2FwaW5nID0gZmFsc2VcbiAgbGV0IHAgPSAwXG4gIGxldCB0bXAgPSAnJ1xuICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGNvbnN0IGNoYXIgPSBzdHJbaV1cbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnICYmIGlucXVvdGUpIHtcbiAgICAgIGlmIChlc2NhcGluZykgeyBlc2NhcGluZyA9IGZhbHNlIH0gZWxzZSB7XG4gICAgICAgIGVzY2FwaW5nID0gdHJ1ZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgaWYgKCFlc2NhcGluZykge1xuICAgICAgICBpZiAoaW5xdW90ZSkge1xuICAgICAgICAgIGlucXVvdGUgPSBmYWxzZVxuICAgICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIH0gZWxzZSB7IGlucXVvdGUgPSB0cnVlIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7IGVzY2FwaW5nID0gZmFsc2UgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXNjYXBpbmcgJiYgaW5xdW90ZSkgeyB0bXAgKz0gJ1xcXFwnIH1cbiAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgIGlmICgoc3RhdGUgPT09IFNUQVRFX0NIQVJTRVQgfHwgc3RhdGUgPT09IFNUQVRFX0xBTkcpICYmIGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCkge1xuICAgICAgICAgIHN0YXRlID0gU1RBVEVfTEFOR1xuICAgICAgICAgIGNoYXJzZXQgPSB0bXAuc3Vic3RyaW5nKDEpXG4gICAgICAgIH0gZWxzZSB7IHN0YXRlID0gU1RBVEVfVkFMVUUgfVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gU1RBVEVfS0VZICYmXG4gICAgICAgIChjaGFyID09PSAnKicgfHwgY2hhciA9PT0gJz0nKSAmJlxuICAgICAgICByZXMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlID0gY2hhciA9PT0gJyonXG4gICAgICAgICAgPyBTVEFURV9DSEFSU0VUXG4gICAgICAgICAgOiBTVEFURV9WQUxVRVxuICAgICAgICByZXNbcF0gPSBbdG1wLCB1bmRlZmluZWRdXG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKCFpbnF1b3RlICYmIGNoYXIgPT09ICc7Jykge1xuICAgICAgICBzdGF0ZSA9IFNUQVRFX0tFWVxuICAgICAgICBpZiAoY2hhcnNldCkge1xuICAgICAgICAgIGlmICh0bXAubGVuZ3RoKSB7XG4gICAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcC5yZXBsYWNlKFJFX0VOQ09ERUQsIGVuY29kZWRSZXBsYWNlciksXG4gICAgICAgICAgICAgICdiaW5hcnknLFxuICAgICAgICAgICAgICBjaGFyc2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgICBjaGFyc2V0ID0gJydcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoKSB7XG4gICAgICAgICAgdG1wID0gZGVjb2RlVGV4dCh0bXAsICdiaW5hcnknLCAndXRmOCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc1twXSA9PT0gdW5kZWZpbmVkKSB7IHJlc1twXSA9IHRtcCB9IGVsc2UgeyByZXNbcF1bMV0gPSB0bXAgfVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICArK3BcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgKGNoYXIgPT09ICcgJyB8fCBjaGFyID09PSAnXFx0JykpIHsgY29udGludWUgfVxuICAgIH1cbiAgICB0bXAgKz0gY2hhclxuICB9XG4gIGlmIChjaGFyc2V0ICYmIHRtcC5sZW5ndGgpIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcC5yZXBsYWNlKFJFX0VOQ09ERUQsIGVuY29kZWRSZXBsYWNlciksXG4gICAgICAnYmluYXJ5JyxcbiAgICAgIGNoYXJzZXQpXG4gIH0gZWxzZSBpZiAodG1wKSB7XG4gICAgdG1wID0gZGVjb2RlVGV4dCh0bXAsICdiaW5hcnknLCAndXRmOCcpXG4gIH1cblxuICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodG1wKSB7IHJlc1twXSA9IHRtcCB9XG4gIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG5cbiAgcmV0dXJuIHJlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlUGFyYW1zXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUT0RPOlxuLy8gICogc3VwcG9ydCAxIG5lc3RlZCBtdWx0aXBhcnQgbGV2ZWxcbi8vICAgIChzZWUgc2Vjb25kIG11bHRpcGFydCBleGFtcGxlIGhlcmU6XG4vLyAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2RpZHgtbXVsdGlwYXJ0Zm9ybS1kYXRhKVxuLy8gICogc3VwcG9ydCBsaW1pdHMuZmllbGROYW1lU2l6ZVxuLy8gICAgIC0tIHRoaXMgd2lsbCByZXF1aXJlIG1vZGlmaWNhdGlvbnMgdG8gdXRpbHMucGFyc2VQYXJhbXNcblxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcblxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi8uLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi4vdXRpbHMvcGFyc2VQYXJhbXMnKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgYmFzZW5hbWUgPSByZXF1aXJlKCcuLi91dGlscy9iYXNlbmFtZScpXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgUkVfQk9VTkRBUlkgPSAvXmJvdW5kYXJ5JC9pXG5jb25zdCBSRV9GSUVMRCA9IC9eZm9ybS1kYXRhJC9pXG5jb25zdCBSRV9DSEFSU0VUID0gL15jaGFyc2V0JC9pXG5jb25zdCBSRV9GSUxFTkFNRSA9IC9eZmlsZW5hbWUkL2lcbmNvbnN0IFJFX05BTUUgPSAvXm5hbWUkL2lcblxuTXVsdGlwYXJ0LmRldGVjdCA9IC9ebXVsdGlwYXJ0XFwvZm9ybS1kYXRhL2lcbmZ1bmN0aW9uIE11bHRpcGFydCAoYm95LCBjZmcpIHtcbiAgbGV0IGlcbiAgbGV0IGxlblxuICBjb25zdCBzZWxmID0gdGhpc1xuICBsZXQgYm91bmRhcnlcbiAgY29uc3QgbGltaXRzID0gY2ZnLmxpbWl0c1xuICBjb25zdCBpc1BhcnRBRmlsZSA9IGNmZy5pc1BhcnRBRmlsZSB8fCAoKGZpZWxkTmFtZSwgY29udGVudFR5cGUsIGZpbGVOYW1lKSA9PiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIHx8IGZpbGVOYW1lICE9PSB1bmRlZmluZWQpKVxuICBjb25zdCBwYXJzZWRDb25UeXBlID0gY2ZnLnBhcnNlZENvblR5cGUgfHwgW11cbiAgY29uc3QgZGVmQ2hhcnNldCA9IGNmZy5kZWZDaGFyc2V0IHx8ICd1dGY4J1xuICBjb25zdCBwcmVzZXJ2ZVBhdGggPSBjZmcucHJlc2VydmVQYXRoXG4gIGNvbnN0IGZpbGVPcHRzID0geyBoaWdoV2F0ZXJNYXJrOiBjZmcuZmlsZUh3bSB9XG5cbiAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkQ29uVHlwZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZENvblR5cGVbaV0pICYmXG4gICAgICBSRV9CT1VOREFSWS50ZXN0KHBhcnNlZENvblR5cGVbaV1bMF0pKSB7XG4gICAgICBib3VuZGFyeSA9IHBhcnNlZENvblR5cGVbaV1bMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tGaW5pc2hlZCAoKSB7XG4gICAgaWYgKG5lbmRzID09PSAwICYmIGZpbmlzaGVkICYmICFib3kuX2RvbmUpIHtcbiAgICAgIGZpbmlzaGVkID0gZmFsc2VcbiAgICAgIHNlbGYuZW5kKClcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGJvdW5kYXJ5ICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGFydDogQm91bmRhcnkgbm90IGZvdW5kJykgfVxuXG4gIGNvbnN0IGZpZWxkU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRTaXplJywgMSAqIDEwMjQgKiAxMDI0KVxuICBjb25zdCBmaWxlU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmlsZVNpemUnLCBJbmZpbml0eSlcbiAgY29uc3QgZmlsZXNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVzJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG4gIGNvbnN0IHBhcnRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdwYXJ0cycsIEluZmluaXR5KVxuICBjb25zdCBoZWFkZXJQYWlyc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyUGFpcnMnLCAyMDAwKVxuICBjb25zdCBoZWFkZXJTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdoZWFkZXJTaXplJywgODAgKiAxMDI0KVxuXG4gIGxldCBuZmlsZXMgPSAwXG4gIGxldCBuZmllbGRzID0gMFxuICBsZXQgbmVuZHMgPSAwXG4gIGxldCBjdXJGaWxlXG4gIGxldCBjdXJGaWVsZFxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIHRoaXMuX25lZWREcmFpbiA9IGZhbHNlXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgdGhpcy5fbnBhcnRzID0gMFxuICB0aGlzLl9ib3kgPSBib3lcblxuICBjb25zdCBwYXJzZXJDZmcgPSB7XG4gICAgYm91bmRhcnksXG4gICAgbWF4SGVhZGVyUGFpcnM6IGhlYWRlclBhaXJzTGltaXQsXG4gICAgbWF4SGVhZGVyU2l6ZTogaGVhZGVyU2l6ZUxpbWl0LFxuICAgIHBhcnRId206IGZpbGVPcHRzLmhpZ2hXYXRlck1hcmssXG4gICAgaGlnaFdhdGVyTWFyazogY2ZnLmhpZ2hXYXRlck1hcmtcbiAgfVxuXG4gIHRoaXMucGFyc2VyID0gbmV3IERpY2VyKHBhcnNlckNmZylcbiAgdGhpcy5wYXJzZXIub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuX25lZWREcmFpbiA9IGZhbHNlXG4gICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9wYXVzZSkge1xuICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgIGNiKClcbiAgICB9XG4gIH0pLm9uKCdwYXJ0JywgZnVuY3Rpb24gb25QYXJ0IChwYXJ0KSB7XG4gICAgaWYgKCsrc2VsZi5fbnBhcnRzID4gcGFydHNMaW1pdCkge1xuICAgICAgc2VsZi5wYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ3BhcnQnLCBvblBhcnQpXG4gICAgICBzZWxmLnBhcnNlci5vbigncGFydCcsIHNraXBQYXJ0KVxuICAgICAgYm95LmhpdFBhcnRzTGltaXQgPSB0cnVlXG4gICAgICBib3kuZW1pdCgncGFydHNMaW1pdCcpXG4gICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICB9XG5cbiAgICAvLyBoYWNrIGJlY2F1c2Ugc3RyZWFtczIgX2Fsd2F5c18gZG9lc24ndCBlbWl0ICdlbmQnIHVudGlsIG5leHRUaWNrLCBzbyBsZXRcbiAgICAvLyB1cyBlbWl0ICdlbmQnIGVhcmx5IHNpbmNlIHdlIGtub3cgdGhlIHBhcnQgaGFzIGVuZGVkIGlmIHdlIGFyZSBhbHJlYWR5XG4gICAgLy8gc2VlaW5nIHRoZSBuZXh0IHBhcnRcbiAgICBpZiAoY3VyRmllbGQpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gY3VyRmllbGRcbiAgICAgIGZpZWxkLmVtaXQoJ2VuZCcpXG4gICAgICBmaWVsZC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2VuZCcpXG4gICAgfVxuXG4gICAgcGFydC5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgICAgbGV0IGNvbnR5cGVcbiAgICAgIGxldCBmaWVsZG5hbWVcbiAgICAgIGxldCBwYXJzZWRcbiAgICAgIGxldCBjaGFyc2V0XG4gICAgICBsZXQgZW5jb2RpbmdcbiAgICAgIGxldCBmaWxlbmFtZVxuICAgICAgbGV0IG5zaXplID0gMFxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtdHlwZSddWzBdKVxuICAgICAgICBpZiAocGFyc2VkWzBdKSB7XG4gICAgICAgICAgY29udHlwZSA9IHBhcnNlZFswXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoUkVfQ0hBUlNFVC50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgICAgY2hhcnNldCA9IHBhcnNlZFtpXVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250eXBlID09PSB1bmRlZmluZWQpIHsgY29udHlwZSA9ICd0ZXh0L3BsYWluJyB9XG4gICAgICBpZiAoY2hhcnNldCA9PT0gdW5kZWZpbmVkKSB7IGNoYXJzZXQgPSBkZWZDaGFyc2V0IH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddWzBdKVxuICAgICAgICBpZiAoIVJFX0ZJRUxELnRlc3QocGFyc2VkWzBdKSkgeyByZXR1cm4gc2tpcFBhcnQocGFydCkgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoUkVfTkFNRS50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgIGZpZWxkbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgIH0gZWxzZSBpZiAoUkVfRklMRU5BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBhdGgpIHsgZmlsZW5hbWUgPSBiYXNlbmFtZShmaWxlbmFtZSkgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddKSB7IGVuY29kaW5nID0gaGVhZGVyWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ11bMF0udG9Mb3dlckNhc2UoKSB9IGVsc2UgeyBlbmNvZGluZyA9ICc3Yml0JyB9XG5cbiAgICAgIGxldCBvbkRhdGEsXG4gICAgICAgIG9uRW5kXG5cbiAgICAgIGlmIChpc1BhcnRBRmlsZShmaWVsZG5hbWUsIGNvbnR5cGUsIGZpbGVuYW1lKSkge1xuICAgICAgICAvLyBmaWxlL2JpbmFyeSBmaWVsZFxuICAgICAgICBpZiAobmZpbGVzID09PSBmaWxlc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmlsZXNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpbGVzTGltaXQgPSB0cnVlXG4gICAgICAgICAgICBib3kuZW1pdCgnZmlsZXNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmlsZXNcblxuICAgICAgICBpZiAoYm95Lmxpc3RlbmVyQ291bnQoJ2ZpbGUnKSA9PT0gMCkge1xuICAgICAgICAgIHNlbGYucGFyc2VyLl9pZ25vcmUoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgKytuZW5kc1xuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGVTdHJlYW0oZmlsZU9wdHMpXG4gICAgICAgIGN1ckZpbGUgPSBmaWxlXG4gICAgICAgIGZpbGUub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgc2VsZi5fcGF1c2UgPSBmYWxzZVxuICAgICAgICAgIGNoZWNrRmluaXNoZWQoKVxuICAgICAgICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fbmVlZERyYWluKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICAgICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgY2IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgZmlsZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZSkgeyByZXR1cm4gfVxuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYm95LmVtaXQoJ2ZpbGUnLCBmaWVsZG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBlbmNvZGluZywgY29udHlwZSlcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmlsZVNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSBmaWxlU2l6ZUxpbWl0IC0gbnNpemUgKyBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgaWYgKGV4dHJhbGVuID4gMCkgeyBmaWxlLnB1c2goZGF0YS5zbGljZSgwLCBleHRyYWxlbikpIH1cbiAgICAgICAgICAgIGZpbGUudHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBmaWxlU2l6ZUxpbWl0XG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgICBmaWxlLmVtaXQoJ2xpbWl0JylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbGUucHVzaChkYXRhKSkgeyBzZWxmLl9wYXVzZSA9IHRydWUgfVxuXG4gICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBuc2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VyRmlsZSA9IHVuZGVmaW5lZFxuICAgICAgICAgIGZpbGUucHVzaChudWxsKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub24tZmlsZSBmaWVsZFxuICAgICAgICBpZiAobmZpZWxkcyA9PT0gZmllbGRzTGltaXQpIHtcbiAgICAgICAgICBpZiAoIWJveS5oaXRGaWVsZHNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkc0xpbWl0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgICAgIH1cblxuICAgICAgICArK25maWVsZHNcbiAgICAgICAgKytuZW5kc1xuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IHRydW5jYXRlZCA9IGZhbHNlXG4gICAgICAgIGN1ckZpZWxkID0gcGFydFxuXG4gICAgICAgIG9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgaWYgKChuc2l6ZSArPSBkYXRhLmxlbmd0aCkgPiBmaWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSAoZmllbGRTaXplTGltaXQgLSAobnNpemUgLSBkYXRhLmxlbmd0aCkpXG4gICAgICAgICAgICBidWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5JywgMCwgZXh0cmFsZW4pXG4gICAgICAgICAgICB0cnVuY2F0ZWQgPSB0cnVlXG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgfSBlbHNlIHsgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScpIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpZWxkID0gdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHsgYnVmZmVyID0gZGVjb2RlVGV4dChidWZmZXIsICdiaW5hcnknLCBjaGFyc2V0KSB9XG4gICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkJywgZmllbGRuYW1lLCBidWZmZXIsIGZhbHNlLCB0cnVuY2F0ZWQsIGVuY29kaW5nLCBjb250eXBlKVxuICAgICAgICAgIC0tbmVuZHNcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBBcyBvZiBub2RlQDJlZmU0YWI3NjE2NjYgKHYwLjEwLjI5Ky92MC4xMS4xNCspLCBidXNib3kgaGFkIGJlY29tZVxuICAgICAgICAgYnJva2VuLiBTdHJlYW1zMi9zdHJlYW1zMyBpcyBhIGh1Z2UgYmxhY2sgYm94IG9mIGNvbmZ1c2lvbiwgYnV0XG4gICAgICAgICBzb21laG93IG92ZXJyaWRpbmcgdGhlIHN5bmMgc3RhdGUgc2VlbXMgdG8gZml4IHRoaW5ncyBhZ2FpbiAoYW5kIHN0aWxsXG4gICAgICAgICBzZWVtcyB0byB3b3JrIGZvciBwcmV2aW91cyBub2RlIHZlcnNpb25zKS5cbiAgICAgICovXG4gICAgICBwYXJ0Ll9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZVxuXG4gICAgICBwYXJ0Lm9uKCdkYXRhJywgb25EYXRhKVxuICAgICAgcGFydC5vbignZW5kJywgb25FbmQpXG4gICAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGN1ckZpbGUpIHsgY3VyRmlsZS5lbWl0KCdlcnJvcicsIGVycikgfVxuICAgIH0pXG4gIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBib3kuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH0pLm9uKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmluaXNoZWQgPSB0cnVlXG4gICAgY2hlY2tGaW5pc2hlZCgpXG4gIH0pXG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGNiKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnBhcnNlci53cml0ZShjaHVuaylcbiAgaWYgKHIgJiYgIXRoaXMuX3BhdXNlKSB7XG4gICAgY2IoKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX25lZWREcmFpbiA9ICFyXG4gICAgdGhpcy5fY2IgPSBjYlxuICB9XG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIGlmIChzZWxmLnBhcnNlci53cml0YWJsZSkge1xuICAgIHNlbGYucGFyc2VyLmVuZCgpXG4gIH0gZWxzZSBpZiAoIXNlbGYuX2JveS5fZG9uZSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fYm95Ll9kb25lID0gdHJ1ZVxuICAgICAgc2VsZi5fYm95LmVtaXQoJ2ZpbmlzaCcpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBza2lwUGFydCAocGFydCkge1xuICBwYXJ0LnJlc3VtZSgpXG59XG5cbmZ1bmN0aW9uIEZpbGVTdHJlYW0gKG9wdHMpIHtcbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRzKVxuXG4gIHRoaXMuYnl0ZXNSZWFkID0gMFxuXG4gIHRoaXMudHJ1bmNhdGVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoRmlsZVN0cmVhbSwgUmVhZGFibGUpXG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gTXVsdGlwYXJ0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJFX1BMVVMgPSAvXFwrL2dcblxuY29uc3QgSEVYID0gW1xuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXG5dXG5cbmZ1bmN0aW9uIERlY29kZXIgKCkge1xuICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxufVxuRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIC8vIFJlcGxhY2UgJysnIHdpdGggJyAnIGJlZm9yZSBkZWNvZGluZ1xuICBzdHIgPSBzdHIucmVwbGFjZShSRV9QTFVTLCAnICcpXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDA7IGxldCBwID0gMDsgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuICBmb3IgKDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXMuYnVmZmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghSEVYW3N0ci5jaGFyQ29kZUF0KGkpXSkge1xuICAgICAgICByZXMgKz0gJyUnICsgdGhpcy5idWZmZXJcbiAgICAgICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbiAgICAgICAgLS1pIC8vIHJldHJ5IGNoYXJhY3RlclxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWZmZXIgKz0gc3RyW2ldXG4gICAgICAgICsrcFxuICAgICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodGhpcy5idWZmZXIsIDE2KSlcbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09ICclJykge1xuICAgICAgaWYgKGkgPiBwKSB7XG4gICAgICAgIHJlcyArPSBzdHIuc3Vic3RyaW5nKHAsIGkpXG4gICAgICAgIHAgPSBpXG4gICAgICB9XG4gICAgICB0aGlzLmJ1ZmZlciA9ICcnXG4gICAgICArK3BcbiAgICB9XG4gIH1cbiAgaWYgKHAgPCBsZW4gJiYgdGhpcy5idWZmZXIgPT09IHVuZGVmaW5lZCkgeyByZXMgKz0gc3RyLnN1YnN0cmluZyhwKSB9XG4gIHJldHVybiByZXNcbn1cbkRlY29kZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlY29kZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgV3JpdGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLldyaXRhYmxlXG5jb25zdCB7IGluaGVyaXRzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IE11bHRpcGFydFBhcnNlciA9IHJlcXVpcmUoJy4vdHlwZXMvbXVsdGlwYXJ0JylcbmNvbnN0IFVybGVuY29kZWRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL3VybGVuY29kZWQnKVxuY29uc3QgcGFyc2VQYXJhbXMgPSByZXF1aXJlKCcuL3V0aWxzL3BhcnNlUGFyYW1zJylcblxuZnVuY3Rpb24gQnVzYm95IChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdXNib3kpKSB7IHJldHVybiBuZXcgQnVzYm95KG9wdHMpIH1cblxuICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0LicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0IHdpdGggaGVhZGVycy1hdHRyaWJ1dGUuJylcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVhZGVyc1snY29udGVudC10eXBlJ10gIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzc2luZyBDb250ZW50LVR5cGUtaGVhZGVyLicpXG4gIH1cblxuICBjb25zdCB7XG4gICAgaGVhZGVycyxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH0gPSBvcHRzXG5cbiAgdGhpcy5vcHRzID0ge1xuICAgIGF1dG9EZXN0cm95OiBmYWxzZSxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0uY2FsbCh0aGlzLCB0aGlzLm9wdHMpXG5cbiAgdGhpcy5fZG9uZSA9IGZhbHNlXG4gIHRoaXMuX3BhcnNlciA9IHRoaXMuZ2V0UGFyc2VyQnlIZWFkZXJzKGhlYWRlcnMpXG4gIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2Vcbn1cbmluaGVyaXRzKEJ1c2JveSwgV3JpdGFibGVTdHJlYW0pXG5cbkJ1c2JveS5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldikge1xuICBpZiAoZXYgPT09ICdmaW5pc2gnKSB7XG4gICAgaWYgKCF0aGlzLl9kb25lKSB7XG4gICAgICB0aGlzLl9wYXJzZXI/LmVuZCgpXG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdXNib3kucHJvdG90eXBlLmdldFBhcnNlckJ5SGVhZGVycyA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKVxuXG4gIGNvbnN0IGNmZyA9IHtcbiAgICBkZWZDaGFyc2V0OiB0aGlzLm9wdHMuZGVmQ2hhcnNldCxcbiAgICBmaWxlSHdtOiB0aGlzLm9wdHMuZmlsZUh3bSxcbiAgICBoZWFkZXJzLFxuICAgIGhpZ2hXYXRlck1hcms6IHRoaXMub3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGlzUGFydEFGaWxlOiB0aGlzLm9wdHMuaXNQYXJ0QUZpbGUsXG4gICAgbGltaXRzOiB0aGlzLm9wdHMubGltaXRzLFxuICAgIHBhcnNlZENvblR5cGU6IHBhcnNlZCxcbiAgICBwcmVzZXJ2ZVBhdGg6IHRoaXMub3B0cy5wcmVzZXJ2ZVBhdGhcbiAgfVxuXG4gIGlmIChNdWx0aXBhcnRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwYXJ0UGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICBpZiAoVXJsZW5jb2RlZFBhcnNlci5kZXRlY3QudGVzdChwYXJzZWRbMF0pKSB7XG4gICAgcmV0dXJuIG5ldyBVcmxlbmNvZGVkUGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIENvbnRlbnQtVHlwZS4nKVxufVxuXG5CdXNib3kucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuX3BhcnNlci53cml0ZShjaHVuaywgY2IpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5CdXNib3kgPSBCdXNib3lcblxubW9kdWxlLmV4cG9ydHMuRGljZXIgPSBEaWNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1lc3NhZ2VDaGFubmVsLCByZWNlaXZlTWVzc2FnZU9uUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXVxuY29uc3QgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0ID0gbmV3IFNldChjb3JzU2FmZUxpc3RlZE1ldGhvZHMpXG5cbmNvbnN0IG51bGxCb2R5U3RhdHVzID0gWzEwMSwgMjA0LCAyMDUsIDMwNF1cblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5jb25zdCByZWRpcmVjdFN0YXR1c1NldCA9IG5ldyBTZXQocmVkaXJlY3RTdGF0dXMpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuY29uc3QgYmFkUG9ydHMgPSBbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzUwNjAnLCAnNTA2MScsICc2MDAwJywgJzY1NjYnLCAnNjY2NScsICc2NjY2JywgJzY2NjcnLCAnNjY2OCcsICc2NjY5JywgJzY2OTcnLFxuICAnMTAwODAnXG5dXG5cbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljaWVzXG5jb25zdCByZWZlcnJlclBvbGljeSA9IFtcbiAgJycsXG4gICduby1yZWZlcnJlcicsXG4gICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZScsXG4gICdzYW1lLW9yaWdpbicsXG4gICdvcmlnaW4nLFxuICAnc3RyaWN0LW9yaWdpbicsXG4gICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICd1bnNhZmUtdXJsJ1xuXVxuY29uc3QgcmVmZXJyZXJQb2xpY3lTZXQgPSBuZXcgU2V0KHJlZmVycmVyUG9saWN5KVxuXG5jb25zdCByZXF1ZXN0UmVkaXJlY3QgPSBbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXVxuXG5jb25zdCBzYWZlTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gWyduYXZpZ2F0ZScsICdzYW1lLW9yaWdpbicsICduby1jb3JzJywgJ2NvcnMnXVxuXG5jb25zdCByZXF1ZXN0Q3JlZGVudGlhbHMgPSBbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddXG5cbmNvbnN0IHJlcXVlc3RDYWNoZSA9IFtcbiAgJ2RlZmF1bHQnLFxuICAnbm8tc3RvcmUnLFxuICAncmVsb2FkJyxcbiAgJ25vLWNhY2hlJyxcbiAgJ2ZvcmNlLWNhY2hlJyxcbiAgJ29ubHktaWYtY2FjaGVkJ1xuXVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1ib2R5LWhlYWRlci1uYW1lXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IFtcbiAgJ2NvbnRlbnQtZW5jb2RpbmcnLFxuICAnY29udGVudC1sYW5ndWFnZScsXG4gICdjb250ZW50LWxvY2F0aW9uJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAyMVxuICAvLyAnQ29udGVudC1MZW5ndGgnIGlzIGEgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCB3aGljaCBpcyB0eXBpY2FsbHlcbiAgLy8gcmVtb3ZlZCBpbiB0aGUgSGVhZGVycyBpbXBsZW1lbnRhdGlvbi4gSG93ZXZlciwgdW5kaWNpIGRvZXNuJ3RcbiAgLy8gZmlsdGVyIG91dCBoZWFkZXJzLCBzbyB3ZSBhZGQgaXQgaGVyZS5cbiAgJ2NvbnRlbnQtbGVuZ3RoJ1xuXVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG5jb25zdCByZXF1ZXN0RHVwbGV4ID0gW1xuICAnaGFsZidcbl1cblxuLy8gaHR0cDovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZm9yYmlkZGVuLW1ldGhvZFxuY29uc3QgZm9yYmlkZGVuTWV0aG9kcyA9IFsnQ09OTkVDVCcsICdUUkFDRScsICdUUkFDSyddXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IFtcbiAgJ2F1ZGlvJyxcbiAgJ2F1ZGlvd29ya2xldCcsXG4gICdmb250JyxcbiAgJ2ltYWdlJyxcbiAgJ21hbmlmZXN0JyxcbiAgJ3BhaW50d29ya2xldCcsXG4gICdzY3JpcHQnLFxuICAnc3R5bGUnLFxuICAndHJhY2snLFxuICAndmlkZW8nLFxuICAneHNsdCcsXG4gICcnXG5dXG5jb25zdCBzdWJyZXNvdXJjZVNldCA9IG5ldyBTZXQoc3VicmVzb3VyY2UpXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRE9NRXhjZXB0aW9uJ119ICovXG5jb25zdCBET01FeGNlcHRpb24gPSBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvbiA/PyAoKCkgPT4ge1xuICAvLyBET01FeGNlcHRpb24gd2FzIG9ubHkgbWFkZSBhIGdsb2JhbCBpbiBOb2RlIHYxNy4wLjAsXG4gIC8vIGJ1dCBmZXRjaCBzdXBwb3J0cyA+PSB2MTYuOC5cbiAgdHJ5IHtcbiAgICBhdG9iKCd+JylcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlcnIpLmNvbnN0cnVjdG9yXG4gIH1cbn0pKClcblxubGV0IGNoYW5uZWxcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydzdHJ1Y3R1cmVkQ2xvbmUnXX0gKi9cbmNvbnN0IHN0cnVjdHVyZWRDbG9uZSA9XG4gIGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lID8/XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IyN2FlMjRkY2M0MjUxYmFkNzI2ZDlkODRiYWY2NzhkMWY3MDdmZWQvbGliL2ludGVybmFsL3N0cnVjdHVyZWRfY2xvbmUuanNcbiAgLy8gc3RydWN0dXJlZENsb25lIHdhcyBhZGRlZCBpbiB2MTcuMC4wLCBidXQgZmV0Y2ggc3VwcG9ydHMgdjE2LjhcbiAgZnVuY3Rpb24gc3RydWN0dXJlZENsb25lICh2YWx1ZSwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nIGFyZ3VtZW50JylcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5uZWwpIHtcbiAgICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKVxuICAgIH1cbiAgICBjaGFubmVsLnBvcnQxLnVucmVmKClcbiAgICBjaGFubmVsLnBvcnQyLnVucmVmKClcbiAgICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKHZhbHVlLCBvcHRpb25zPy50cmFuc2ZlcilcbiAgICByZXR1cm4gcmVjZWl2ZU1lc3NhZ2VPblBvcnQoY2hhbm5lbC5wb3J0MikubWVzc2FnZVxuICB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBET01FeGNlcHRpb24sXG4gIHN0cnVjdHVyZWRDbG9uZSxcbiAgc3VicmVzb3VyY2UsXG4gIGZvcmJpZGRlbk1ldGhvZHMsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlZGlyZWN0U3RhdHVzLFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHMsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kcyxcbiAgYmFkUG9ydHMsXG4gIHJlcXVlc3REdXBsZXgsXG4gIHN1YnJlc291cmNlU2V0LFxuICBiYWRQb3J0c1NldCxcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIHJlZmVycmVyUG9saWN5U2V0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gcmVxdWlyZSgncGVyZl9ob29rcycpXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBSZWFkYWJsZVN0cmVhbUZyb20gfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc1VpbnQ4QXJyYXkgfSA9IHJlcXVpcmUoJ3V0aWwvdHlwZXMnKVxuXG5sZXQgc3VwcG9ydGVkSGFzaGVzID0gW11cblxuLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jcnlwdG8uaHRtbCNkZXRlcm1pbmluZy1pZi1jcnlwdG8tc3VwcG9ydC1pcy11bmF2YWlsYWJsZVxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfHVuZGVmaW5lZH0gKi9cbmxldCBjcnlwdG9cblxudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlVVJMIChyZXNwb25zZSkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2VzXG4gIC8vIEEgcmVzcG9uc2UgaGFzIGFuIGFzc29jaWF0ZWQgVVJMLiBJdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgVVJMXG4gIC8vIGluIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBhbmQgbnVsbCBpZiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHkuXG4gIGNvbnN0IHVybExpc3QgPSByZXNwb25zZS51cmxMaXN0XG4gIGNvbnN0IGxlbmd0aCA9IHVybExpc3QubGVuZ3RoXG4gIHJldHVybiBsZW5ndGggPT09IDAgPyBudWxsIDogdXJsTGlzdFtsZW5ndGggLSAxXS50b1N0cmluZygpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWxvY2F0aW9uLXVybFxuZnVuY3Rpb24gcmVzcG9uc2VMb2NhdGlvblVSTCAocmVzcG9uc2UsIHJlcXVlc3RGcmFnbWVudCkge1xuICAvLyAxLiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyAyLiBMZXQgbG9jYXRpb24gYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlcyBnaXZlblxuICAvLyBgTG9jYXRpb25gIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGxldCBsb2NhdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nKVxuXG4gIC8vIDMuIElmIGxvY2F0aW9uIGlzIGEgaGVhZGVyIHZhbHVlLCB0aGVuIHNldCBsb2NhdGlvbiB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIHBhcnNpbmcgbG9jYXRpb24gd2l0aCByZXNwb25zZVx1MjAxOXMgVVJMLlxuICBpZiAobG9jYXRpb24gIT09IG51bGwgJiYgaXNWYWxpZEhlYWRlclZhbHVlKGxvY2F0aW9uKSkge1xuICAgIGxvY2F0aW9uID0gbmV3IFVSTChsb2NhdGlvbiwgcmVzcG9uc2VVUkwocmVzcG9uc2UpKVxuICB9XG5cbiAgLy8gNC4gSWYgbG9jYXRpb24gaXMgYSBVUkwgd2hvc2UgZnJhZ21lbnQgaXMgbnVsbCwgdGhlbiBzZXQgbG9jYXRpb25cdTIwMTlzXG4gIC8vIGZyYWdtZW50IHRvIHJlcXVlc3RGcmFnbWVudC5cbiAgaWYgKGxvY2F0aW9uICYmICFsb2NhdGlvbi5oYXNoKSB7XG4gICAgbG9jYXRpb24uaGFzaCA9IHJlcXVlc3RGcmFnbWVudFxuICB9XG5cbiAgLy8gNS4gUmV0dXJuIGxvY2F0aW9uLlxuICByZXR1cm4gbG9jYXRpb25cbn1cblxuLyoqIEByZXR1cm5zIHtVUkx9ICovXG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFVSTCAocmVxdWVzdCkge1xuICByZXR1cm4gcmVxdWVzdC51cmxMaXN0W3JlcXVlc3QudXJsTGlzdC5sZW5ndGggLSAxXVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0QmFkUG9ydCAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgdXJsIGJlIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDIuIElmIHVybFx1MjAxOXMgc2NoZW1lIGlzIGFuIEhUVFAoUykgc2NoZW1lIGFuZCB1cmxcdTIwMTlzIHBvcnQgaXMgYSBiYWQgcG9ydCxcbiAgLy8gdGhlbiByZXR1cm4gYmxvY2tlZC5cbiAgaWYgKHVybElzSHR0cEh0dHBzU2NoZW1lKHVybCkgJiYgYmFkUG9ydHNTZXQuaGFzKHVybC5wb3J0KSkge1xuICAgIHJldHVybiAnYmxvY2tlZCdcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBhbGxvd2VkLlxuICByZXR1cm4gJ2FsbG93ZWQnXG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEVycm9yIHx8IChcbiAgICBvYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRXJyb3InIHx8XG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0RPTUV4Y2VwdGlvbidcbiAgKVxufVxuXG4vLyBDaGVjayB3aGV0aGVyIHxzdGF0dXNUZXh0fCBpcyBhIEJ5dGVTdHJpbmcgYW5kXG4vLyBtYXRjaGVzIHRoZSBSZWFzb24tUGhyYXNlIHRva2VuIHByb2R1Y3Rpb24uXG4vLyBSRkMgMjYxNjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTZcbi8vIFJGQyA3MjMwOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMFxuLy8gXCJyZWFzb24tcGhyYXNlID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXCJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzk0LjAuNDYwNC4xL3RoaXJkX3BhcnR5L2JsaW5rL3JlbmRlcmVyL2NvcmUvZmV0Y2gvcmVzcG9uc2UuY2MjTDExNlxuZnVuY3Rpb24gaXNWYWxpZFJlYXNvblBocmFzZSAoc3RhdHVzVGV4dCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXR1c1RleHQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjID0gc3RhdHVzVGV4dC5jaGFyQ29kZUF0KGkpXG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgKFxuICAgICAgICAgIGMgPT09IDB4MDkgfHwgLy8gSFRBQlxuICAgICAgICAgIChjID49IDB4MjAgJiYgYyA8PSAweDdlKSB8fCAvLyBTUCAvIFZDSEFSXG4gICAgICAgICAgKGMgPj0gMHg4MCAmJiBjIDw9IDB4ZmYpXG4gICAgICAgICkgLy8gb2JzLXRleHRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1uYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhlYWRlck5hbWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIHJldHVybiBpc1ZhbGlkSFRUUFRva2VuKHBvdGVudGlhbFZhbHVlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgaWYgKFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuc3RhcnRzV2l0aCgnICcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJyAnKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFwwJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxyJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxuJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3RcdTIwMTlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdFx1MjAxOXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybFx1MjAxOXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybFx1MjAxOXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJsXHUyMDE5cyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmxcdTIwMTlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmxcdTIwMTlzIHBhdGggdG8gXHUwMEFCIHRoZSBlbXB0eSBzdHJpbmcgXHUwMEJCLlxuICAgIHVybC5wYXRobmFtZSA9ICcnXG5cbiAgICAvLyAyLiBTZXQgdXJsXHUyMDE5cyBxdWVyeSB0byBudWxsLlxuICAgIHVybC5zZWFyY2ggPSAnJ1xuICB9XG5cbiAgLy8gNy4gUmV0dXJuIHVybC5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKHVybCkge1xuICBpZiAoISh1cmwgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBJZiBjaGlsZCBvZiBhYm91dCwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5ocmVmID09PSAnYWJvdXQ6YmxhbmsnIHx8IHVybC5ocmVmID09PSAnYWJvdXQ6c3JjZG9jJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBJZiBzY2hlbWUgaXMgZGF0YSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgcmV0dXJuIHRydWVcblxuICAvLyBJZiBmaWxlLCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLnByb3RvY29sID09PSAnZmlsZTonKSByZXR1cm4gdHJ1ZVxuXG4gIHJldHVybiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkodXJsLm9yaWdpbilcblxuICBmdW5jdGlvbiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKG9yaWdpbikge1xuICAgIC8vIElmIG9yaWdpbiBpcyBleHBsaWNpdGx5IG51bGwsIHJldHVybiBmYWxzZVxuICAgIGlmIChvcmlnaW4gPT0gbnVsbCB8fCBvcmlnaW4gPT09ICdudWxsJykgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBvcmlnaW5Bc1VSTCA9IG5ldyBVUkwob3JpZ2luKVxuXG4gICAgLy8gSWYgc2VjdXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmIChvcmlnaW5Bc1VSTC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgfHwgb3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICd3c3M6Jykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBsb2NhbGhvc3Qgb3IgdmFyaWFudHMsIHJldHVybiB0cnVlXG4gICAgaWYgKC9eMTI3KD86XFwuWzAtOV0rKXswLDJ9XFwuWzAtOV0rJHxeXFxbKD86MCo6KSo/Oj8wKjFcXF0kLy50ZXN0KG9yaWdpbkFzVVJMLmhvc3RuYW1lKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnIHx8IG9yaWdpbkFzVVJMLmhvc3RuYW1lLmluY2x1ZGVzKCdsb2NhbGhvc3QuJykpIHx8XG4gICAgIChvcmlnaW5Bc1VSTC5ob3N0bmFtZS5lbmRzV2l0aCgnLmxvY2FsaG9zdCcpKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBhbnkgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jZG9lcy1yZXNwb25zZS1tYXRjaC1tZXRhZGF0YWxpc3RcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gYnl0ZXNNYXRjaCAoYnl0ZXMsIG1ldGFkYXRhTGlzdCkge1xuICAvLyBJZiBub2RlIGlzIG5vdCBidWlsdCB3aXRoIE9wZW5TU0wgc3VwcG9ydCwgd2UgY2Fubm90IGNoZWNrXG4gIC8vIGEgcmVxdWVzdCdzIGludGVncml0eSwgc28gYWxsb3cgaXQgYnkgZGVmYXVsdCAodGhlIHNwZWMgd2lsbFxuICAvLyBhbGxvdyByZXF1ZXN0cyBpZiBhbiBpbnZhbGlkIGhhc2ggaXMgZ2l2ZW4sIGFzIHByZWNlZGVuY2UpLlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IG9ubHkgaWYgbm9kZSBpcyBidWlsdCB3aXRoIC0td2l0aG91dC1zc2wgKi9cbiAgaWYgKGNyeXB0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDEuIExldCBwYXJzZWRNZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgbWV0YWRhdGFMaXN0LlxuICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9IHBhcnNlTWV0YWRhdGEobWV0YWRhdGFMaXN0KVxuXG4gIC8vIDIuIElmIHBhcnNlZE1ldGFkYXRhIGlzIG5vIG1ldGFkYXRhLCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhID09PSAnbm8gbWV0YWRhdGEnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlIGlzIG5vdCBlbGlnaWJsZSBmb3IgaW50ZWdyaXR5IHZhbGlkYXRpb24sIHJldHVybiBmYWxzZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDQuIElmIHBhcnNlZE1ldGFkYXRhIGlzIHRoZSBlbXB0eSBzZXQsIHJldHVybiB0cnVlLlxuICBpZiAocGFyc2VkTWV0YWRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDUuIExldCBtZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHN0cm9uZ2VzdFxuICAvLyAgICBtZXRhZGF0YSBmcm9tIHBhcnNlZE1ldGFkYXRhLlxuICBjb25zdCBzdHJvbmdlc3QgPSBnZXRTdHJvbmdlc3RNZXRhZGF0YShwYXJzZWRNZXRhZGF0YSlcbiAgY29uc3QgbWV0YWRhdGEgPSBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobShwYXJzZWRNZXRhZGF0YSwgc3Ryb25nZXN0KVxuXG4gIC8vIDYuIEZvciBlYWNoIGl0ZW0gaW4gbWV0YWRhdGE6XG4gIGZvciAoY29uc3QgaXRlbSBvZiBtZXRhZGF0YSkge1xuICAgIC8vIDEuIExldCBhbGdvcml0aG0gYmUgdGhlIGFsZyBjb21wb25lbnQgb2YgaXRlbS5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBpdGVtLmFsZ29cblxuICAgIC8vIDIuIExldCBleHBlY3RlZFZhbHVlIGJlIHRoZSB2YWwgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IGl0ZW0uaGFzaFxuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2NvbW1pdC9lNGM1Y2M3YTVlNDgwOTMyMjA1MjhkZmRkMWM0MDEyZGMzODM3YTBlXG4gICAgLy8gXCJiZSBsaWJlcmFsIHdpdGggcGFkZGluZ1wiLiBUaGlzIGlzIGFubm95aW5nLCBhbmQgaXQncyBub3QgZXZlbiBpbiB0aGUgc3BlYy5cblxuICAgIC8vIDMuIExldCBhY3R1YWxWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGFsZ29yaXRobSB0byBieXRlcy5cbiAgICBsZXQgYWN0dWFsVmFsdWUgPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0pLnVwZGF0ZShieXRlcykuZGlnZXN0KCdiYXNlNjQnKVxuXG4gICAgaWYgKGFjdHVhbFZhbHVlW2FjdHVhbFZhbHVlLmxlbmd0aCAtIDFdID09PSAnPScpIHtcbiAgICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAyXSA9PT0gJz0nKSB7XG4gICAgICAgIGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWUuc2xpY2UoMCwgLTIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0xKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGFjdHVhbFZhbHVlIGlzIGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIGV4cGVjdGVkVmFsdWUsXG4gICAgLy8gICAgcmV0dXJuIHRydWUuXG4gICAgaWYgKGNvbXBhcmVCYXNlNjRNaXhlZChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gNy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2dyYW1tYXJkZWYtaGFzaC13aXRoLW9wdGlvbnNcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1AyLyNzb3VyY2UtbGlzdC1zeW50YXhcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1MjM0I2FwcGVuZGl4LUIuMVxuY29uc3QgcGFyc2VIYXNoV2l0aE9wdGlvbnMgPSAvKD88YWxnbz5zaGEyNTZ8c2hhMzg0fHNoYTUxMiktKCg/PGhhc2g+W0EtWmEtejAtOSsvXSt8W0EtWmEtejAtOV8tXSspPXswLDJ9KD86XFxzfCQpKCArWyEtfl0qKT8pPy9pXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jcGFyc2UtbWV0YWRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YVxuICovXG5mdW5jdGlvbiBwYXJzZU1ldGFkYXRhIChtZXRhZGF0YSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzZXQuXG4gIC8qKiBAdHlwZSB7eyBhbGdvOiBzdHJpbmcsIGhhc2g6IHN0cmluZyB9W119ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgLy8gMi4gTGV0IGVtcHR5IGJlIGVxdWFsIHRvIHRydWUuXG4gIGxldCBlbXB0eSA9IHRydWVcblxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiByZXR1cm5lZCBieSBzcGxpdHRpbmcgbWV0YWRhdGEgb24gc3BhY2VzOlxuICBmb3IgKGNvbnN0IHRva2VuIG9mIG1ldGFkYXRhLnNwbGl0KCcgJykpIHtcbiAgICAvLyAxLiBTZXQgZW1wdHkgdG8gZmFsc2UuXG4gICAgZW1wdHkgPSBmYWxzZVxuXG4gICAgLy8gMi4gUGFyc2UgdG9rZW4gYXMgYSBoYXNoLXdpdGgtb3B0aW9ucy5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IHBhcnNlSGFzaFdpdGhPcHRpb25zLmV4ZWModG9rZW4pXG5cbiAgICAvLyAzLiBJZiB0b2tlbiBkb2VzIG5vdCBwYXJzZSwgY29udGludWUgdG8gdGhlIG5leHQgdG9rZW4uXG4gICAgaWYgKFxuICAgICAgcGFyc2VkVG9rZW4gPT09IG51bGwgfHxcbiAgICAgIHBhcnNlZFRva2VuLmdyb3VwcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMuYWxnbyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICAvLyBOb3RlOiBDaHJvbWl1bSBibG9ja3MgdGhlIHJlcXVlc3QgYXQgdGhpcyBwb2ludCwgYnV0IEZpcmVmb3hcbiAgICAgIC8vIGdpdmVzIGEgd2FybmluZyB0aGF0IGFuIGludmFsaWQgaW50ZWdyaXR5IHdhcyBnaXZlbi4gVGhlXG4gICAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIGlzIHRvIGlnbm9yZSB0aGVzZSwgYW5kIHN1YnNlcXVlbnRseSBub3RcbiAgICAgIC8vIGNoZWNrIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc291cmNlLlxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBoYXNoLWFsZ28gY29tcG9uZW50IG9mIHRva2VuLlxuICAgIGNvbnN0IGFsZ29yaXRobSA9IHBhcnNlZFRva2VuLmdyb3Vwcy5hbGdvLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIGFsZ29yaXRobSBpcyBhIGhhc2ggZnVuY3Rpb24gcmVjb2duaXplZCBieSB0aGUgdXNlclxuICAgIC8vICAgIGFnZW50LCBhZGQgdGhlIHBhcnNlZCB0b2tlbiB0byByZXN1bHQuXG4gICAgaWYgKHN1cHBvcnRlZEhhc2hlcy5pbmNsdWRlcyhhbGdvcml0aG0pKSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZWRUb2tlbi5ncm91cHMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5vIG1ldGFkYXRhIGlmIGVtcHR5IGlzIHRydWUsIG90aGVyd2lzZSByZXR1cm4gcmVzdWx0LlxuICBpZiAoZW1wdHkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJ25vIG1ldGFkYXRhJ1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEBwYXJhbSB7eyBhbGdvOiAnc2hhMjU2JyB8ICdzaGEzODQnIHwgJ3NoYTUxMicgfVtdfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U3Ryb25nZXN0TWV0YWRhdGEgKG1ldGFkYXRhTGlzdCkge1xuICAvLyBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGdvIGNvbXBvbmVudCBvZiB0aGUgZmlyc3QgaXRlbSBpbiBtZXRhZGF0YUxpc3QuXG4gIC8vIENhbiBiZSBzaGEyNTZcbiAgbGV0IGFsZ29yaXRobSA9IG1ldGFkYXRhTGlzdFswXS5hbGdvXG4gIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgLy8gYW5kIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHlcbiAgaWYgKGFsZ29yaXRobVszXSA9PT0gJzUnKSB7XG4gICAgcmV0dXJuIGFsZ29yaXRobVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBtZXRhZGF0YUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IG1ldGFkYXRhTGlzdFtpXVxuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgICAvLyBhbmQgd2UgY2FuIGJyZWFrIHRoZSBsb29wIGltbWVkaWF0ZWx5XG4gICAgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICc1Jykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTUxMidcbiAgICAgIGJyZWFrXG4gICAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGEzODQsIHRoZW4gYSBwb3RlbnRpYWwgc2hhMjU2IG9yIHNoYTM4NCBpcyBpZ25vcmVkXG4gICAgfSBlbHNlIGlmIChhbGdvcml0aG1bM10gPT09ICczJykge1xuICAgICAgY29udGludWVcbiAgICAvLyBhbGdvcml0aG0gaXMgc2hhMjU2LCBjaGVjayBpZiBhbGdvcml0aG0gaXMgc2hhMzg0IGFuZCBpZiBzbywgc2V0IGl0IGFzXG4gICAgLy8gdGhlIHN0cm9uZ2VzdFxuICAgIH0gZWxzZSBpZiAobWV0YWRhdGEuYWxnb1szXSA9PT0gJzMnKSB7XG4gICAgICBhbGdvcml0aG0gPSAnc2hhMzg0J1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWxnb3JpdGhtXG59XG5cbmZ1bmN0aW9uIGZpbHRlck1ldGFkYXRhTGlzdEJ5QWxnb3JpdGhtIChtZXRhZGF0YUxpc3QsIGFsZ29yaXRobSkge1xuICBpZiAobWV0YWRhdGFMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBtZXRhZGF0YUxpc3RcbiAgfVxuXG4gIGxldCBwb3MgPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG1ldGFkYXRhTGlzdFtpXS5hbGdvID09PSBhbGdvcml0aG0pIHtcbiAgICAgIG1ldGFkYXRhTGlzdFtwb3MrK10gPSBtZXRhZGF0YUxpc3RbaV1cbiAgICB9XG4gIH1cblxuICBtZXRhZGF0YUxpc3QubGVuZ3RoID0gcG9zXG5cbiAgcmV0dXJuIG1ldGFkYXRhTGlzdFxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBiYXNlNjQgc3RyaW5ncywgYWxsb3dpbmcgZm9yIGJhc2U2NHVybFxuICogaW4gdGhlIHNlY29uZCBzdHJpbmcuXG4gKlxuKiBAcGFyYW0ge3N0cmluZ30gYWN0dWFsVmFsdWUgYWx3YXlzIGJhc2U2NFxuICogQHBhcmFtIHtzdHJpbmd9IGV4cGVjdGVkVmFsdWUgYmFzZTY0IG9yIGJhc2U2NHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCYXNlNjRNaXhlZCAoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgaWYgKGFjdHVhbFZhbHVlLmxlbmd0aCAhPT0gZXhwZWN0ZWRWYWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbFZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFjdHVhbFZhbHVlW2ldICE9PSBleHBlY3RlZFZhbHVlW2ldKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJysnICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICctJykgfHxcbiAgICAgICAgKGFjdHVhbFZhbHVlW2ldID09PSAnLycgJiYgZXhwZWN0ZWRWYWx1ZVtpXSA9PT0gJ18nKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvI3VwZ3JhZGUtcmVxdWVzdFxuZnVuY3Rpb24gdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMIChyZXF1ZXN0KSB7XG4gIC8vIFRPRE9cbn1cblxuLyoqXG4gKiBAbGluayB7aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjc2FtZS1vcmlnaW59XG4gKiBAcGFyYW0ge1VSTH0gQVxuICogQHBhcmFtIHtVUkx9IEJcbiAqL1xuZnVuY3Rpb24gc2FtZU9yaWdpbiAoQSwgQikge1xuICAvLyAxLiBJZiBBIGFuZCBCIGFyZSB0aGUgc2FtZSBvcGFxdWUgb3JpZ2luLCB0aGVuIHJldHVybiB0cnVlLlxuICBpZiAoQS5vcmlnaW4gPT09IEIub3JpZ2luICYmIEEub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMi4gSWYgQSBhbmQgQiBhcmUgYm90aCB0dXBsZSBvcmlnaW5zIGFuZCB0aGVpciBzY2hlbWVzLFxuICAvLyAgICBob3N0cywgYW5kIHBvcnQgYXJlIGlkZW50aWNhbCwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEucHJvdG9jb2wgPT09IEIucHJvdG9jb2wgJiYgQS5ob3N0bmFtZSA9PT0gQi5ob3N0bmFtZSAmJiBBLnBvcnQgPT09IEIucG9ydCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gZmFsc2UuXG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZlcnJlZFByb21pc2UgKCkge1xuICBsZXQgcmVzXG4gIGxldCByZWpcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXMgPSByZXNvbHZlXG4gICAgcmVqID0gcmVqZWN0XG4gIH0pXG5cbiAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzLCByZWplY3Q6IHJlaiB9XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJ1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbGxlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJyB8fFxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICd0ZXJtaW5hdGVkJ1xufVxuXG5jb25zdCBub3JtYWxpemVNZXRob2RSZWNvcmQgPSB7XG4gIGRlbGV0ZTogJ0RFTEVURScsXG4gIERFTEVURTogJ0RFTEVURScsXG4gIGdldDogJ0dFVCcsXG4gIEdFVDogJ0dFVCcsXG4gIGhlYWQ6ICdIRUFEJyxcbiAgSEVBRDogJ0hFQUQnLFxuICBvcHRpb25zOiAnT1BUSU9OUycsXG4gIE9QVElPTlM6ICdPUFRJT05TJyxcbiAgcG9zdDogJ1BPU1QnLFxuICBQT1NUOiAnUE9TVCcsXG4gIHB1dDogJ1BVVCcsXG4gIFBVVDogJ1BVVCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplTWV0aG9kUmVjb3JkLCBudWxsKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWV0aG9kLW5vcm1hbGl6ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QgKG1ldGhvZCkge1xuICByZXR1cm4gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZC50b0xvd2VyQ2FzZSgpXSA/PyBtZXRob2Rcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGl6ZS1hLWphdmFzY3JpcHQtdmFsdWUtdG8tYS1qc29uLXN0cmluZ1xuZnVuY3Rpb24gc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nICh2YWx1ZSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlID8gQ2FsbCglSlNPTi5zdHJpbmdpZnklLCB1bmRlZmluZWQsIFx1MDBBQiB2YWx1ZSBcdTAwQkIpLlxuICBjb25zdCByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcblxuICAvLyAyLiBJZiByZXN1bHQgaXMgdW5kZWZpbmVkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBpcyBub3QgSlNPTiBzZXJpYWxpemFibGUnKVxuICB9XG5cbiAgLy8gMy4gQXNzZXJ0OiByZXN1bHQgaXMgYSBzdHJpbmcuXG4gIGFzc2VydCh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcblxuICAvLyA0LiBSZXR1cm4gcmVzdWx0LlxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJTI1aXRlcmF0b3Jwcm90b3R5cGUlMjUtb2JqZWN0XG5jb25zdCBlc0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICogQHBhcmFtIHsoKSA9PiB1bmtub3duW119IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBpbnN0YW5jZVxuICogQHBhcmFtIHsna2V5J3wndmFsdWUnfCdrZXkrdmFsdWUnfSBraW5kXG4gKi9cbmZ1bmN0aW9uIG1ha2VJdGVyYXRvciAoaXRlcmF0b3IsIG5hbWUsIGtpbmQpIHtcbiAgY29uc3Qgb2JqZWN0ID0ge1xuICAgIGluZGV4OiAwLFxuICAgIGtpbmQsXG4gICAgdGFyZ2V0OiBpdGVyYXRvclxuICB9XG5cbiAgY29uc3QgaSA9IHtcbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuXG4gICAgICAvLyAyLiBMZXQgdGhpc1ZhbHVlIGJlIHRoZSB0aGlzIHZhbHVlLlxuXG4gICAgICAvLyAzLiBMZXQgb2JqZWN0IGJlID8gVG9PYmplY3QodGhpc1ZhbHVlKS5cblxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG5cbiAgICAgIC8vIDUuIElmIG9iamVjdCBpcyBub3QgYSBkZWZhdWx0IGl0ZXJhdG9yIG9iamVjdCBmb3IgaW50ZXJmYWNlLFxuICAgICAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykgIT09IGkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJ25leHQnIGNhbGxlZCBvbiBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgaW50ZXJmYWNlICR7bmFtZX0gSXRlcmF0b3IuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIExldCBpbmRleCBiZSBvYmplY3RcdTIwMTlzIGluZGV4LlxuICAgICAgLy8gNy4gTGV0IGtpbmQgYmUgb2JqZWN0XHUyMDE5cyBraW5kLlxuICAgICAgLy8gOC4gTGV0IHZhbHVlcyBiZSBvYmplY3RcdTIwMTlzIHRhcmdldCdzIHZhbHVlIHBhaXJzIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgIGNvbnN0IHsgaW5kZXgsIGtpbmQsIHRhcmdldCB9ID0gb2JqZWN0XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0YXJnZXQoKVxuXG4gICAgICAvLyA5LiBMZXQgbGVuIGJlIHRoZSBsZW5ndGggb2YgdmFsdWVzLlxuICAgICAgY29uc3QgbGVuID0gdmFsdWVzLmxlbmd0aFxuXG4gICAgICAvLyAxMC4gSWYgaW5kZXggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGxlbiwgdGhlbiByZXR1cm5cbiAgICAgIC8vICAgICBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSkuXG4gICAgICBpZiAoaW5kZXggPj0gbGVuKSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHBhaXIgPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICBvYmplY3QuaW5kZXggPSBpbmRleCArIDFcblxuICAgICAgLy8gMTMuIFJldHVybiB0aGUgaXRlcmF0b3IgcmVzdWx0IGZvciBwYWlyIGFuZCBraW5kLlxuICAgICAgcmV0dXJuIGl0ZXJhdG9yUmVzdWx0KHBhaXIsIGtpbmQpXG4gICAgfSxcbiAgICAvLyBUaGUgY2xhc3Mgc3RyaW5nIG9mIGFuIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZm9yIGEgZ2l2ZW4gaW50ZXJmYWNlIGlzIHRoZVxuICAgIC8vIHJlc3VsdCBvZiBjb25jYXRlbmF0aW5nIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBpbnRlcmZhY2UgYW5kIHRoZSBzdHJpbmcgXCIgSXRlcmF0b3JcIi5cbiAgICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogYCR7bmFtZX0gSXRlcmF0b3JgXG4gIH1cblxuICAvLyBUaGUgW1tQcm90b3R5cGVdXSBpbnRlcm5hbCBzbG90IG9mIGFuIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgbXVzdCBiZSAlSXRlcmF0b3JQcm90b3R5cGUlLlxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoaSwgZXNJdGVyYXRvclByb3RvdHlwZSlcbiAgLy8gZXNJdGVyYXRvclByb3RvdHlwZSBuZWVkcyB0byBiZSB0aGUgcHJvdG90eXBlIG9mIGlcbiAgLy8gd2hpY2ggaXMgdGhlIHByb3RvdHlwZSBvZiBhbiBlbXB0eSBvYmplY3QuIFllcywgaXQncyBjb25mdXNpbmcuXG4gIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yoe30sIGkpXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5mdW5jdGlvbiBpdGVyYXRvclJlc3VsdCAocGFpciwga2luZCkge1xuICBsZXQgcmVzdWx0XG5cbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIHZhbHVlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIGtpbmQ6XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2tleSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxLZXkgYmUgcGFpclx1MjAxOXMga2V5LlxuICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAvLyAgICBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIGtleS5cbiAgICAgIHJlc3VsdCA9IHBhaXJbMF1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbFZhbHVlIGJlIHBhaXJcdTIwMTlzIHZhbHVlLlxuICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDMuIHJlc3VsdCBpcyB2YWx1ZS5cbiAgICAgIHJlc3VsdCA9IHBhaXJbMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgJ2tleSt2YWx1ZSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxLZXkgYmUgcGFpclx1MjAxOXMga2V5LlxuICAgICAgLy8gMi4gTGV0IGlkbFZhbHVlIGJlIHBhaXJcdTIwMTlzIHZhbHVlLlxuICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAvLyAgICBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNC4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDUuIExldCBhcnJheSBiZSAhIEFycmF5Q3JlYXRlKDIpLlxuICAgICAgLy8gNi4gQ2FsbCAhIENyZWF0ZURhdGFQcm9wZXJ0eShhcnJheSwgXCIwXCIsIGtleSkuXG4gICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgLy8gOC4gcmVzdWx0IGlzIGFycmF5LlxuICAgICAgcmVzdWx0ID0gcGFpclxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCwgZG9uZTogZmFsc2UgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRBbGxCeXRlcyhyZWFkZXIpXG4gICAgc3VjY2Vzc1N0ZXBzKHJlc3VsdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG4vKiogQHR5cGUge1JlYWRhYmxlU3RyZWFtfSAqL1xubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgcmV0dXJuIHN0cmVhbSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtIHx8IChcbiAgICBzdHJlYW1bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ1JlYWRhYmxlU3RyZWFtJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0udGVlID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuY29uc3QgTUFYSU1VTV9BUkdVTUVOVF9MRU5HVEggPSA2NTUzNVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZGVjb2RlXG4gKiBAcGFyYW0ge251bWJlcltdfFVpbnQ4QXJyYXl9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cblxuICBpZiAoaW5wdXQubGVuZ3RoIDwgTUFYSU1VTV9BUkdVTUVOVF9MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5pbnB1dClcbiAgfVxuXG4gIHJldHVybiBpbnB1dC5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cyArIFN0cmluZy5mcm9tQ2hhckNvZGUoY3VycmVudCksICcnKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1Db250cm9sbGVyPFVpbnQ4QXJyYXk+fSBjb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtQ2xvc2UgKGNvbnRyb2xsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNpc29tb3JwaGljLWVuY29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNFbmNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIEFzc2VydDogaW5wdXQgY29udGFpbnMgbm8gY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIFUrMDBGRi5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGFzc2VydChpbnB1dC5jaGFyQ29kZUF0KGkpIDw9IDB4RkYpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybEhhc0h0dHBzU2NoZW1lICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKCdodHRwczonKVxuICB9XG5cbiAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXNjaGVtZVxuICogQHBhcmFtIHtVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxJc0h0dHBIdHRwc1NjaGVtZSAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwOicgfHwgcHJvdG9jb2wgPT09ICdodHRwczonXG59XG5cbi8qKlxuICogRmV0Y2ggc3VwcG9ydHMgbm9kZSA+PSAxNi44LjAsIGJ1dCBPYmplY3QuaGFzT3duIHdhcyBhZGRlZCBpbiB2MTYuOS4wLlxuICovXG5jb25zdCBoYXNPd24gPSBPYmplY3QuaGFzT3duIHx8ICgoZGljdCwga2V5KSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGljdCwga2V5KSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQWJvcnRlZCxcbiAgaXNDYW5jZWxsZWQsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0b1VTVlN0cmluZyxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgbWFrZUl0ZXJhdG9yLFxuICBpc1ZhbGlkSGVhZGVyTmFtZSxcbiAgaXNWYWxpZEhlYWRlclZhbHVlLFxuICBoYXNPd24sXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgaXNvbW9ycGhpY0RlY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIG5vcm1hbGl6ZU1ldGhvZFJlY29yZCxcbiAgcGFyc2VNZXRhZGF0YVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBoYXNPd24sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvd2ViaWRsJykuV2ViaWRsfSAqL1xuY29uc3Qgd2ViaWRsID0ge31cbndlYmlkbC5jb252ZXJ0ZXJzID0ge31cbndlYmlkbC51dGlsID0ge31cbndlYmlkbC5lcnJvcnMgPSB7fVxuXG53ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKGAke21lc3NhZ2UuaGVhZGVyfTogJHttZXNzYWdlLm1lc3NhZ2V9YClcbn1cblxud2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgcGx1cmFsID0gY29udGV4dC50eXBlcy5sZW5ndGggPT09IDEgPyAnJyA6ICcgb25lIG9mJ1xuICBjb25zdCBtZXNzYWdlID1cbiAgICBgJHtjb250ZXh0LmFyZ3VtZW50fSBjb3VsZCBub3QgYmUgY29udmVydGVkIHRvYCArXG4gICAgYCR7cGx1cmFsfTogJHtjb250ZXh0LnR5cGVzLmpvaW4oJywgJyl9LmBcblxuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZVxuICB9KVxufVxuXG53ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlOiBgXCIke2NvbnRleHQudmFsdWV9XCIgaXMgYW4gaW52YWxpZCAke2NvbnRleHQudHlwZX0uYFxuICB9KVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2ltcGxlbWVudHNcbndlYmlkbC5icmFuZENoZWNrID0gZnVuY3Rpb24gKFYsIEksIG9wdHMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKG9wdHM/LnN0cmljdCAhPT0gZmFsc2UgJiYgIShWIGluc3RhbmNlb2YgSSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGludm9jYXRpb24nKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIC4uLmN0eFxuICAgIH0pXG4gIH1cbn1cblxud2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogJ1R5cGVFcnJvcicsXG4gICAgbWVzc2FnZTogJ0lsbGVnYWwgY29uc3RydWN0b3InXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1kYXRhLXR5cGVzLWFuZC12YWx1ZXNcbndlYmlkbC51dGlsLlR5cGUgPSBmdW5jdGlvbiAoVikge1xuICBzd2l0Y2ggKHR5cGVvZiBWKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuICdVbmRlZmluZWQnXG4gICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiAnQm9vbGVhbidcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gJ1N0cmluZydcbiAgICBjYXNlICdzeW1ib2wnOiByZXR1cm4gJ1N5bWJvbCdcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gJ051bWJlcidcbiAgICBjYXNlICdiaWdpbnQnOiByZXR1cm4gJ0JpZ0ludCdcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdOdWxsJ1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJ09iamVjdCdcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNhYnN0cmFjdC1vcGRlZi1jb252ZXJ0dG9pbnRcbndlYmlkbC51dGlsLkNvbnZlcnRUb0ludCA9IGZ1bmN0aW9uIChWLCBiaXRMZW5ndGgsIHNpZ25lZG5lc3MsIG9wdHMgPSB7fSkge1xuICBsZXQgdXBwZXJCb3VuZFxuICBsZXQgbG93ZXJCb3VuZFxuXG4gIC8vIDEuIElmIGJpdExlbmd0aCBpcyA2NCwgdGhlbjpcbiAgaWYgKGJpdExlbmd0aCA9PT0gNjQpIHtcbiAgICAvLyAxLiBMZXQgdXBwZXJCb3VuZCBiZSAyXjUzIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCA1MykgLSAxXG5cbiAgICAvLyAyLiBJZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbiBsZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgICBsb3dlckJvdW5kID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UgbGV0IGxvd2VyQm91bmQgYmUgXHUyMjEyMl41MyArIDEuXG4gICAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIDUzKSArIDFcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW46XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGxvd2VyQm91bmQgPSAwXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDFcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAtMl5iaXRMZW5ndGggXHUyMjEyIDEuXG4gICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCBiaXRMZW5ndGgpIC0gMVxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGggXHUyMjEyIDEgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpIC0gMVxuICB9XG5cbiAgLy8gNC4gTGV0IHggYmUgPyBUb051bWJlcihWKS5cbiAgbGV0IHggPSBOdW1iZXIoVilcblxuICAvLyA1LiBJZiB4IGlzIFx1MjIxMjAsIHRoZW4gc2V0IHggdG8gKzAuXG4gIGlmICh4ID09PSAwKSB7XG4gICAgeCA9IDBcbiAgfVxuXG4gIC8vIDYuIElmIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0VuZm9yY2VSYW5nZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7Vn0gdG8gYW4gaW50ZWdlci5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICAgIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gICAgLy8gMy4gSWYgeCA8IGxvd2VyQm91bmQgb3IgeCA+IHVwcGVyQm91bmQsIHRoZW5cbiAgICAvLyAgICB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG11c3QgYmUgYmV0d2VlbiAke2xvd2VyQm91bmR9LSR7dXBwZXJCb3VuZH0sIGdvdCAke3h9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDcuIElmIHggaXMgbm90IE5hTiBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMXG4gIC8vICAgIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBbQ2xhbXBdIGV4dGVuZGVkXG4gIC8vICAgIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKCFOdW1iZXIuaXNOYU4oeCkgJiYgb3B0cy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGF0b2IgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGlzb21vcnBoaWNEZWNvZGUgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9UT0tFTl9DT0RFUE9JTlRTID0gL15bISMkJSYnKistLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvKFxcdTAwMEF8XFx1MDAwRHxcXHUwMDA5fFxcdTAwMjApLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXF1b3RlZC1zdHJpbmctdG9rZW4tY29kZS1wb2ludFxuICovXG5jb25zdCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TID0gL1tcXHUwMDA5fFxcdTAwMjAtXFx1MDA3RXxcXHUwMDgwLVxcdTAwRkZdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgcmV0dXJuIGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jY29sbGVjdC1hLXNlcXVlbmNlLW9mLWNvZGUtcG9pbnRzXG4vKipcbiAqIEBwYXJhbSB7KGNoYXI6IHN0cmluZykgPT4gYm9vbGVhbn0gY29uZGl0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgKGNvbmRpdGlvbiwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgbGV0IHJlc3VsdCA9ICcnXG5cbiAgLy8gMi4gV2hpbGUgcG9zaXRpb24gZG9lc25cdTIwMTl0IHBvaW50IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCBhbmQgdGhlXG4gIC8vIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IG1lZXRzIHRoZSBjb25kaXRpb24gY29uZGl0aW9uOlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSkpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhhdCBjb2RlIHBvaW50IHRvIHRoZSBlbmQgb2YgcmVzdWx0LlxuICAgIHJlc3VsdCArPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gcmVzdWx0LlxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQSBmYXN0ZXIgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyB0aGF0IG9ubHkgd29ya3Mgd2hlbiBjb21wYXJpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgKGNoYXIsIGlucHV0LCBwb3NpdGlvbikge1xuICBjb25zdCBpZHggPSBpbnB1dC5pbmRleE9mKGNoYXIsIHBvc2l0aW9uLnBvc2l0aW9uKVxuICBjb25zdCBzdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlucHV0Lmxlbmd0aFxuICAgIHJldHVybiBpbnB1dC5zbGljZShzdGFydClcbiAgfVxuXG4gIHBvc2l0aW9uLnBvc2l0aW9uID0gaWR4XG4gIHJldHVybiBpbnB1dC5zbGljZShzdGFydCwgcG9zaXRpb24ucG9zaXRpb24pXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3RyaW5nLXBlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBzdHJpbmdQZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIFVURi04IGVuY29kaW5nIG9mIGlucHV0LlxuICBjb25zdCBieXRlcyA9IGVuY29kZXIuZW5jb2RlKGlucHV0KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcGVyY2VudC1kZWNvZGluZyBvZiBieXRlcy5cbiAgcmV0dXJuIHBlcmNlbnREZWNvZGUoYnl0ZXMpXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0ICovXG5mdW5jdGlvbiBwZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgb3V0cHV0IGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIGNvbnN0IG91dHB1dCA9IFtdXG5cbiAgLy8gMi4gRm9yIGVhY2ggYnl0ZSBieXRlIGluIGlucHV0OlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGlucHV0W2ldXG5cbiAgICAvLyAxLiBJZiBieXRlIGlzIG5vdCAweDI1ICglKSwgdGhlbiBhcHBlbmQgYnl0ZSB0byBvdXRwdXQuXG4gICAgaWYgKGJ5dGUgIT09IDB4MjUpIHtcbiAgICAgIG91dHB1dC5wdXNoKGJ5dGUpXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEvXlswLTlBLUZhLWZdezJ9JC9pLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpbnB1dFtpICsgMV0sIGlucHV0W2kgKyAyXSkpXG4gICAgKSB7XG4gICAgICBvdXRwdXQucHVzaCgweDI1KVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIGNvbnN0IG5leHRUd29CeXRlcyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pXG4gICAgICBjb25zdCBieXRlUG9pbnQgPSBOdW1iZXIucGFyc2VJbnQobmV4dFR3b0J5dGVzLCAxNilcblxuICAgICAgLy8gMi4gQXBwZW5kIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBieXRlUG9pbnQgdG8gb3V0cHV0LlxuICAgICAgb3V0cHV0LnB1c2goYnl0ZVBvaW50KVxuXG4gICAgICAvLyAzLiBTa2lwIHRoZSBuZXh0IHR3byBieXRlcyBpbiBpbnB1dC5cbiAgICAgIGkgKz0gMlxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBVaW50OEFycmF5LmZyb20ob3V0cHV0KVxufVxuXG4vLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWEtbWltZS10eXBlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBwYXJzZU1JTUVUeXBlIChpbnB1dCkge1xuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZVxuICAvLyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKGlucHV0LCB0cnVlLCB0cnVlKVxuXG4gIC8vIDIuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBpbnB1dCxcbiAgLy8gaW5pdGlhbGx5IHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyAzLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZVxuICAvLyBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDJGICgvKSBmcm9tXG4gIC8vIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgY29uc3QgdHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICcvJyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gNC4gSWYgdHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gIGlmICh0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gcmV0dXJuXG4gIC8vIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAyRiAoLykuKVxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNy4gTGV0IHN1YnR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2ZcbiAgLy8gY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgLy8gcG9zaXRpb24uXG4gIGxldCBzdWJ0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJzsnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA4LiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHN1YnR5cGUuXG4gIHN1YnR5cGUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShzdWJ0eXBlLCBmYWxzZSwgdHJ1ZSlcblxuICAvLyA5LiBJZiBzdWJ0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHN1YnR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChzdWJ0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IHR5cGVMb3dlcmNhc2UgPSB0eXBlLnRvTG93ZXJDYXNlKClcbiAgY29uc3Qgc3VidHlwZUxvd2VyY2FzZSA9IHN1YnR5cGUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIDEwLiBMZXQgbWltZVR5cGUgYmUgYSBuZXcgTUlNRSB0eXBlIHJlY29yZCB3aG9zZSB0eXBlXG4gIC8vIGlzIHR5cGUsIGluIEFTQ0lJIGxvd2VyY2FzZSwgYW5kIHN1YnR5cGUgaXMgc3VidHlwZSxcbiAgLy8gaW4gQVNDSUkgbG93ZXJjYXNlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZVxuICBjb25zdCBtaW1lVHlwZSA9IHtcbiAgICB0eXBlOiB0eXBlTG93ZXJjYXNlLFxuICAgIHN1YnR5cGU6IHN1YnR5cGVMb3dlcmNhc2UsXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIHBhcmFtZXRlcnM6IG5ldyBNYXAoKSxcbiAgICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZS1lc3NlbmNlXG4gICAgZXNzZW5jZTogYCR7dHlwZUxvd2VyY2FzZX0vJHtzdWJ0eXBlTG93ZXJjYXNlfWBcbiAgfVxuXG4gIC8vIDExLiBXaGlsZSBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0OlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAvLyAxLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNCICg7KS4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFBcbiAgICAvLyB3aGl0ZXNwYWNlIGZyb20gaW5wdXQgZ2l2ZW4gcG9zaXRpb24uXG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAgICAgIGNoYXIgPT4gSFRUUF9XSElURVNQQUNFX1JFR0VYLnRlc3QoY2hhciksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMy4gTGV0IHBhcmFtZXRlck5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgICAvLyBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgIC8vIG9yIFUrMDAzRCAoPSkgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IHBhcmFtZXRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgIT09ICc7JyAmJiBjaGFyICE9PSAnPScsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gNC4gU2V0IHBhcmFtZXRlck5hbWUgdG8gcGFyYW1ldGVyTmFtZSwgaW4gQVNDSUlcbiAgICAvLyBsb3dlcmNhc2UuXG4gICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNS4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbjpcbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgICAgLy8gVSswMDNCICg7KSwgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICc7Jykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNEICg9KS4pXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgcGFyYW1ldGVyVmFsdWUgYmUgbnVsbC5cbiAgICBsZXQgcGFyYW1ldGVyVmFsdWUgPSBudWxsXG5cbiAgICAvLyA4LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAvLyBVKzAwMjIgKFwiKSwgdGhlbjpcbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhbiBIVFRQIHF1b3RlZCBzdHJpbmcgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb25cbiAgICAgIC8vIGFuZCB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nKGlucHV0LCBwb3NpdGlvbiwgdHJ1ZSlcblxuICAgICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdFxuICAgICAgLy8gVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgLy8gOS4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgICAvLyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAgIC8vIDIuIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gcGFyYW1ldGVyVmFsdWUuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHBhcmFtZXRlclZhbHVlLCBmYWxzZSwgdHJ1ZSlcblxuICAgICAgLy8gMy4gSWYgcGFyYW1ldGVyVmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIHBhcmFtZXRlclZhbHVlIHNvbGVseSBjb250YWlucyBIVFRQIHF1b3RlZC1zdHJpbmcgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIGRvZXMgbm90IGV4aXN0XG4gICAgLy8gdGhlbiBzZXQgbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gdG8gcGFyYW1ldGVyVmFsdWUuXG4gICAgaWYgKFxuICAgICAgcGFyYW1ldGVyTmFtZS5sZW5ndGggIT09IDAgJiZcbiAgICAgIEhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHBhcmFtZXRlck5hbWUpICYmXG4gICAgICAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwIHx8IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMudGVzdChwYXJhbWV0ZXJWYWx1ZSkpICYmXG4gICAgICAhbWltZVR5cGUucGFyYW1ldGVycy5oYXMocGFyYW1ldGVyTmFtZSlcbiAgICApIHtcbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBSZXR1cm4gbWltZVR5cGUuXG4gIHJldHVybiBtaW1lVHlwZVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jZm9yZ2l2aW5nLWJhc2U2NC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAqL1xuZnVuY3Rpb24gZm9yZ2l2aW5nQmFzZTY0IChkYXRhKSB7XG4gIC8vIDEuIFJlbW92ZSBhbGwgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGRhdGEuXG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1tcXHUwMDA5XFx1MDAwQVxcdTAwMENcXHUwMDBEXFx1MDAyMF0vZywgJycpICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAwKSB7XG4gICAgLy8gMS4gSWYgZGF0YSBlbmRzIHdpdGggb25lIG9yIHR3byBVKzAwM0QgKD0pIGNvZGUgcG9pbnRzLFxuICAgIC8vIHRoZW4gcmVtb3ZlIHRoZW0gZnJvbSBkYXRhLlxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLz0/PSQvLCAnJylcbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmxlbmd0aCAlIDQgPT09IDEpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA0LiBJZiBkYXRhIGNvbnRhaW5zIGEgY29kZSBwb2ludCB0aGF0IGlzIG5vdCBvbmUgb2ZcbiAgLy8gIFUrMDAyQiAoKylcbiAgLy8gIFUrMDAyRiAoLylcbiAgLy8gIEFTQ0lJIGFscGhhbnVtZXJpY1xuICAvLyB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoL1teKy8wLTlBLVphLXpdLy50ZXN0KGRhdGEpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYmluYXJ5ID0gYXRvYihkYXRhKVxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeS5sZW5ndGgpXG5cbiAgZm9yIChsZXQgYnl0ZSA9IDA7IGJ5dGUgPCBiaW5hcnkubGVuZ3RoOyBieXRlKyspIHtcbiAgICBieXRlc1tieXRlXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGJ5dGUpXG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYW4taHR0cC1xdW90ZWQtc3RyaW5nXG4vLyB0ZXN0czogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2V4YW1wbGUtaHR0cC1xdW90ZWQtc3RyaW5nXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4dHJhY3RWYWx1ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nIChpbnB1dCwgcG9zaXRpb24sIGV4dHJhY3RWYWx1ZSkge1xuICAvLyAxLiBMZXQgcG9zaXRpb25TdGFydCBiZSBwb3NpdGlvbi5cbiAgY29uc3QgcG9zaXRpb25TdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMy4gQXNzZXJ0OiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXRcbiAgLy8gaXMgVSswMDIyIChcIikuXG4gIGFzc2VydChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpXG5cbiAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNS4gV2hpbGUgdHJ1ZTpcbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHNcbiAgICAvLyB0aGF0IGFyZSBub3QgVSswMDIyIChcIikgb3IgVSswMDVDIChcXCkgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgICAvLyBwb3NpdGlvbiwgdG8gdmFsdWUuXG4gICAgdmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICdcXFxcJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcXVvdGVPckJhY2tzbGFzaCBiZSB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW5cbiAgICAvLyBpbnB1dC5cbiAgICBjb25zdCBxdW90ZU9yQmFja3NsYXNoID0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyA0LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gNS4gSWYgcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwNUMgKFxcKSwgdGhlbjpcbiAgICBpZiAocXVvdGVPckJhY2tzbGFzaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyAxLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYXBwZW5kXG4gICAgICAvLyBVKzAwNUMgKFxcKSB0byB2YWx1ZSBhbmQgYnJlYWsuXG4gICAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlICs9ICdcXFxcJ1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAgIC8vIDMuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDYuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gQXNzZXJ0OiBxdW90ZU9yQmFja3NsYXNoIGlzIFUrMDAyMiAoXCIpLlxuICAgICAgYXNzZXJ0KHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcIicpXG5cbiAgICAgIC8vIDIuIEJyZWFrLlxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyA2LiBJZiB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnIGlzIHNldCwgdGhlbiByZXR1cm4gdmFsdWUuXG4gIGlmIChleHRyYWN0VmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB0aGUgY29kZSBwb2ludHMgZnJvbSBwb3NpdGlvblN0YXJ0IHRvIHBvc2l0aW9uLFxuICAvLyBpbmNsdXNpdmUsIHdpdGhpbiBpbnB1dC5cbiAgcmV0dXJuIGlucHV0LnNsaWNlKHBvc2l0aW9uU3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1taW1lLXR5cGVcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQU1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJylcbiAgY29uc3QgeyBwYXJhbWV0ZXJzLCBlc3NlbmNlIH0gPSBtaW1lVHlwZVxuXG4gIC8vIDEuIExldCBzZXJpYWxpemF0aW9uIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICB0eXBlLCBVKzAwMkYgKC8pLCBhbmQgbWltZVR5cGVcdTIwMTlzIHN1YnR5cGUuXG4gIGxldCBzZXJpYWxpemF0aW9uID0gZXNzZW5jZVxuXG4gIC8vIDIuIEZvciBlYWNoIG5hbWUgXHUyMTkyIHZhbHVlIG9mIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzOlxuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIHBhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgLy8gMS4gQXBwZW5kIFUrMDAzQiAoOykgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9ICc7J1xuXG4gICAgLy8gMi4gQXBwZW5kIG5hbWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IG5hbWVcblxuICAgIC8vIDMuIEFwcGVuZCBVKzAwM0QgKD0pIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnPSdcblxuICAgIC8vIDQuIElmIHZhbHVlIGRvZXMgbm90IHNvbGVseSBjb250YWluIEhUVFAgdG9rZW4gY29kZVxuICAgIC8vICAgIHBvaW50cyBvciB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodmFsdWUpKSB7XG4gICAgICAvLyAxLiBQcmVjZWRlIGVhY2ggb2NjdXJlbmNlIG9mIFUrMDAyMiAoXCIpIG9yXG4gICAgICAvLyAgICBVKzAwNUMgKFxcKSBpbiB2YWx1ZSB3aXRoIFUrMDA1QyAoXFwpLlxuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oXFxcXHxcIikvZywgJ1xcXFwkMScpXG5cbiAgICAgIC8vIDIuIFByZXBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSA9ICdcIicgKyB2YWx1ZVxuXG4gICAgICAvLyAzLiBBcHBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSArPSAnXCInXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIHZhbHVlIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSB2YWx1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHNlcmlhbGl6YXRpb24uXG4gIHJldHVybiBzZXJpYWxpemF0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlSFRUUFdoaXRlc3BhY2UgKHN0ciwgbGVhZGluZyA9IHRydWUsIHRyYWlsaW5nID0gdHJ1ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIGZvciAoOyBsZWFkIDwgc3RyLmxlbmd0aCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzSFRUUFdoaXRlU3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNBU0NJSVdoaXRlc3BhY2UgKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPT09ICdcXHInIHx8IGNoYXIgPT09ICdcXG4nIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXGYnIHx8IGNoYXIgPT09ICcgJ1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQVNDSUlXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW2xlYWRdKTsgbGVhZCsrKTtcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIGZvciAoOyB0cmFpbCA+IDAgJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkYXRhVVJMUHJvY2Vzc29yLFxuICBVUkxTZXJpYWxpemVyLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCxcbiAgc3RyaW5nUGVyY2VudERlY29kZSxcbiAgcGFyc2VNSU1FVHlwZSxcbiAgY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyxcbiAgc2VyaWFsaXplQU1pbWVUeXBlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzQmxvYkxpa2UgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuY2xhc3MgRmlsZSBleHRlbmRzIEJsb2Ige1xuICBjb25zdHJ1Y3RvciAoZmlsZUJpdHMsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0ZpbGUgY29uc3RydWN0b3InIH0pXG5cbiAgICBmaWxlQml0cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCbG9iUGFydD4nXShmaWxlQml0cylcbiAgICBmaWxlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlTmFtZSlcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuRmlsZVByb3BlcnR5QmFnKG9wdGlvbnMpXG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cbiAgICAvLyBOb3RlOiBCbG9iIGhhbmRsZXMgdGhpcyBmb3IgdXNcblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgMi4gQ29udmVydCBldmVyeSBjaGFyYWN0ZXIgaW4gdCB0byBBU0NJSSBsb3dlcmNhc2UuXG4gICAgbGV0IHQgPSBvcHRpb25zLnR5cGVcbiAgICBsZXQgZFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgIHN1YnN0ZXA6IHtcbiAgICAgIGlmICh0KSB7XG4gICAgICAgIHQgPSBwYXJzZU1JTUVUeXBlKHQpXG5cbiAgICAgICAgaWYgKHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIHQgPSAnJ1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICAgICAgICBicmVhayBzdWJzdGVwXG4gICAgICAgIH1cblxuICAgICAgICB0ID0gc2VyaWFsaXplQU1pbWVUeXBlKHQpLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cblxuICAgICAgLy8gICAgMy4gSWYgdGhlIGxhc3RNb2RpZmllZCBtZW1iZXIgaXMgcHJvdmlkZWQsIGxldCBkIGJlIHNldCB0byB0aGVcbiAgICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgICAgLy8gICAgdGhlIFVuaXggRXBvY2ggKHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mIERhdGUubm93KCkgW0VDTUEtMjYyXSkuXG4gICAgICBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWRcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICBzdXBlcihwcm9jZXNzQmxvYlBhcnRzKGZpbGVCaXRzLCBvcHRpb25zKSwgeyB0eXBlOiB0IH0pXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbmFtZTogbixcbiAgICAgIGxhc3RNb2RpZmllZDogZCxcbiAgICAgIHR5cGU6IHRcbiAgICB9XG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubmFtZVxuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG59XG5cbmNsYXNzIEZpbGVMaWtlIHtcbiAgY29uc3RydWN0b3IgKGJsb2JMaWtlLCBmaWxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVE9ETzogYXJndW1lbnQgaWRsIHR5cGUgY2hlY2tcblxuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICBUT0RPXG4gICAgY29uc3QgdCA9IG9wdGlvbnMudHlwZVxuXG4gICAgLy8gICAgMi4gQ29udmVydCBldmVyeSBjaGFyYWN0ZXIgaW4gdCB0byBBU0NJSSBsb3dlcmNhc2UuXG4gICAgLy8gICAgVE9ET1xuXG4gICAgLy8gICAgMy4gSWYgdGhlIGxhc3RNb2RpZmllZCBtZW1iZXIgaXMgcHJvdmlkZWQsIGxldCBkIGJlIHNldCB0byB0aGVcbiAgICAvLyAgICBsYXN0TW9kaWZpZWQgZGljdGlvbmFyeSBtZW1iZXIuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgc2V0IGQgdG8gdGhlXG4gICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgLy8gICAgdGhlIFVuaXggRXBvY2ggKHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mIERhdGUubm93KCkgW0VDTUEtMjYyXSkuXG4gICAgY29uc3QgZCA9IG9wdGlvbnMubGFzdE1vZGlmaWVkID8/IERhdGUubm93KClcblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGJsb2JMaWtlLFxuICAgICAgbmFtZTogbixcbiAgICAgIHR5cGU6IHQsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGRcbiAgICB9XG4gIH1cblxuICBzdHJlYW0gKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc3RyZWFtKC4uLmFyZ3MpXG4gIH1cblxuICBhcnJheUJ1ZmZlciAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5hcnJheUJ1ZmZlciguLi5hcmdzKVxuICB9XG5cbiAgc2xpY2UgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2xpY2UoLi4uYXJncylcbiAgfVxuXG4gIHRleHQgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudGV4dCguLi5hcmdzKVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zaXplXG4gIH1cblxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnR5cGVcbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubmFtZVxuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxhc3RNb2RpZmllZFxuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddICgpIHtcbiAgICByZXR1cm4gJ0ZpbGUnXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0TW9kaWZpZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0ID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyhWKSB8fFxuICAgICAgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKVxuICAgICkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWLCBvcHRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoViwgb3B0cylcbn1cblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CbG9iUGFydFxuKVxuXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jZGZuLUZpbGVQcm9wZXJ0eUJhZ1xud2ViaWRsLmNvbnZlcnRlcnMuRmlsZVByb3BlcnR5QmFnID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGFzdE1vZGlmaWVkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAndHlwZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnZW5kaW5ncycsXG4gICAgY29udmVydGVyOiAodmFsdWUpID0+IHtcbiAgICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHZhbHVlKVxuICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gJ25hdGl2ZScpIHtcbiAgICAgICAgdmFsdWUgPSAndHJhbnNwYXJlbnQnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgZGVmYXVsdFZhbHVlOiAndHJhbnNwYXJlbnQnXG4gIH1cbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jcHJvY2Vzcy1ibG9iLXBhcnRzXG4gKiBAcGFyYW0geyhOb2RlSlMuVHlwZWRBcnJheXxCbG9ifHN0cmluZylbXX0gcGFydHNcbiAqIEBwYXJhbSB7eyB0eXBlOiBzdHJpbmcsIGVuZGluZ3M6IHN0cmluZyB9fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NCbG9iUGFydHMgKHBhcnRzLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSBhbiBlbXB0eSBzZXF1ZW5jZSBvZiBieXRlcy5cbiAgLyoqIEB0eXBlIHtOb2RlSlMuVHlwZWRBcnJheVtdfSAqL1xuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgLy8gMi4gRm9yIGVhY2ggZWxlbWVudCBpbiBwYXJ0czpcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHBhcnRzKSB7XG4gICAgLy8gMS4gSWYgZWxlbWVudCBpcyBhIFVTVlN0cmluZywgcnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gMS4gTGV0IHMgYmUgZWxlbWVudC5cbiAgICAgIGxldCBzID0gZWxlbWVudFxuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5kaW5ncyBtZW1iZXIgb2Ygb3B0aW9ucyBpcyBcIm5hdGl2ZVwiLCBzZXQgc1xuICAgICAgLy8gICAgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGxpbmUgZW5kaW5ncyB0byBuYXRpdmVcbiAgICAgIC8vICAgIG9mIGVsZW1lbnQuXG4gICAgICBpZiAob3B0aW9ucy5lbmRpbmdzID09PSAnbmF0aXZlJykge1xuICAgICAgICBzID0gY29udmVydExpbmVFbmRpbmdzTmF0aXZlKHMpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIFVURi04IGVuY29kaW5nIHMgdG8gYnl0ZXMuXG4gICAgICBieXRlcy5wdXNoKGVuY29kZXIuZW5jb2RlKHMpKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKGVsZW1lbnQpIHx8XG4gICAgICB0eXBlcy5pc1R5cGVkQXJyYXkoZWxlbWVudClcbiAgICApIHtcbiAgICAgIC8vIDIuIElmIGVsZW1lbnQgaXMgYSBCdWZmZXJTb3VyY2UsIGdldCBhIGNvcHkgb2YgdGhlXG4gICAgICAvLyAgICBieXRlcyBoZWxkIGJ5IHRoZSBidWZmZXIgc291cmNlLCBhbmQgYXBwZW5kIHRob3NlXG4gICAgICAvLyAgICBieXRlcyB0byBieXRlcy5cbiAgICAgIGlmICghZWxlbWVudC5idWZmZXIpIHsgLy8gQXJyYXlCdWZmZXJcbiAgICAgICAgYnl0ZXMucHVzaChuZXcgVWludDhBcnJheShlbGVtZW50KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGVsZW1lbnQpKSB7XG4gICAgICAvLyAzLiBJZiBlbGVtZW50IGlzIGEgQmxvYiwgYXBwZW5kIHRoZSBieXRlcyBpdCByZXByZXNlbnRzXG4gICAgICAvLyAgICB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZWxlbWVudClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYnl0ZXMuXG4gIHJldHVybiBieXRlc1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2NvbnZlcnQtbGluZS1lbmRpbmdzLXRvLW5hdGl2ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNcbiAqL1xuZnVuY3Rpb24gY29udmVydExpbmVFbmRpbmdzTmF0aXZlIChzKSB7XG4gIC8vIDEuIExldCBuYXRpdmUgbGluZSBlbmRpbmcgYmUgYmUgdGhlIGNvZGUgcG9pbnQgVSswMDBBIExGLlxuICBsZXQgbmF0aXZlTGluZUVuZGluZyA9ICdcXG4nXG5cbiAgLy8gMi4gSWYgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm1cdTIwMTlzIGNvbnZlbnRpb25zIGFyZSB0b1xuICAvLyAgICByZXByZXNlbnQgbmV3bGluZXMgYXMgYSBjYXJyaWFnZSByZXR1cm4gYW5kIGxpbmUgZmVlZFxuICAvLyAgICBzZXF1ZW5jZSwgc2V0IG5hdGl2ZSBsaW5lIGVuZGluZyB0byB0aGUgY29kZSBwb2ludFxuICAvLyAgICBVKzAwMEQgQ1IgZm9sbG93ZWQgYnkgdGhlIGNvZGUgcG9pbnQgVSswMDBBIExGLlxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIG5hdGl2ZUxpbmVFbmRpbmcgPSAnXFxyXFxuJ1xuICB9XG5cbiAgcmV0dXJuIHMucmVwbGFjZSgvXFxyP1xcbi9nLCBuYXRpdmVMaW5lRW5kaW5nKVxufVxuXG4vLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIG1vdmVkIHRvIC4vdXRpbC5qcywgc29tZSB0b29scyAoc3VjaCBhc1xuLy8gcm9sbHVwKSB3aWxsIHdhcm4gYWJvdXQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLiBTZWU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTYyOVxuZnVuY3Rpb24gaXNGaWxlTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgKE5hdGl2ZUZpbGUgJiYgb2JqZWN0IGluc3RhbmNlb2YgTmF0aXZlRmlsZSkgfHxcbiAgICBvYmplY3QgaW5zdGFuY2VvZiBGaWxlIHx8IChcbiAgICAgIG9iamVjdCAmJlxuICAgICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGaWxlJ1xuICAgIClcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQnVzYm95ID0gcmVxdWlyZSgnQGZhc3RpZnkvYnVzYm95JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHlcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiwgc3RydWN0dXJlZENsb25lIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgaXNVaW50OEFycmF5LCBpc0FycmF5QnVmZmVyIH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuXG5sZXQgcmFuZG9tXG50cnkge1xuICBjb25zdCBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4gIHJhbmRvbSA9IChtYXgpID0+IGNyeXB0by5yYW5kb21JbnQoMCwgbWF4KVxufSBjYXRjaCB7XG4gIHJhbmRvbSA9IChtYXgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20obWF4KSlcbn1cblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdFx1MjAxOXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3RcdTIwMTlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake3JhbmRvbSgxZTExKX1gLnBhZFN0YXJ0KDExLCAnMCcpfWBcbiAgICBjb25zdCBwcmVmaXggPSBgLS0ke2JvdW5kYXJ5fVxcclxcbkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YWBcblxuICAgIC8qISBmb3JtZGF0YS1wb2x5ZmlsbC4gTUlUIExpY2Vuc2UuIEppbW15IFdcdTAwRTRydGluZyA8aHR0cHM6Ly9qaW1teS53YXJ0aW5nLnNlL29wZW5zb3VyY2U+ICovXG4gICAgY29uc3QgZXNjYXBlID0gKHN0cikgPT5cbiAgICAgIHN0ci5yZXBsYWNlKC9cXG4vZywgJyUwQScpLnJlcGxhY2UoL1xcci9nLCAnJTBEJykucmVwbGFjZSgvXCIvZywgJyUyMicpXG4gICAgY29uc3Qgbm9ybWFsaXplTGluZWZlZWRzID0gKHZhbHVlKSA9PiB2YWx1ZS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCAnXFxyXFxuJylcblxuICAgIC8vIFNldCBhY3Rpb24gdG8gdGhpcyBzdGVwOiBydW4gdGhlIG11bHRpcGFydC9mb3JtLWRhdGFcbiAgICAvLyBlbmNvZGluZyBhbGdvcml0aG0sIHdpdGggb2JqZWN0XHUyMDE5cyBlbnRyeSBsaXN0IGFuZCBVVEYtOC5cbiAgICAvLyAtIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBib2R5IGlzIGltbXV0YWJsZSBhbmQgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlcndvcmRzXG4gICAgLy8gLSBUaGF0IHRoZSBjb250ZW50LWxlbmd0aCBpcyBjYWxjdWxhdGVkIGluIGFkdmFuY2UuXG4gICAgLy8gLSBBbmQgdGhhdCBhbGwgcGFydHMgYXJlIHByZS1lbmNvZGVkIGFuZCByZWFkeSB0byBiZSBzZW50LlxuXG4gICAgY29uc3QgYmxvYlBhcnRzID0gW11cbiAgICBjb25zdCBybiA9IG5ldyBVaW50OEFycmF5KFsxMywgMTBdKSAvLyAnXFxyXFxuJ1xuICAgIGxlbmd0aCA9IDBcbiAgICBsZXQgaGFzVW5rbm93blNpemVWYWx1ZSA9IGZhbHNlXG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2Ygb2JqZWN0KSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShwcmVmaXggK1xuICAgICAgICAgIGA7IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgYFxcclxcblxcclxcbiR7bm9ybWFsaXplTGluZWZlZWRzKHZhbHVlKX1cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAke3ByZWZpeH07IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgKHZhbHVlLm5hbWUgPyBgOyBmaWxlbmFtZT1cIiR7ZXNjYXBlKHZhbHVlLm5hbWUpfVwiYCA6ICcnKSArICdcXHJcXG4nICtcbiAgICAgICAgICBgQ29udGVudC1UeXBlOiAke1xuICAgICAgICAgICAgdmFsdWUudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICAgIH1cXHJcXG5cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaywgdmFsdWUsIHJuKVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGggKyB2YWx1ZS5zaXplICsgcm4uYnl0ZUxlbmd0aFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhhc1Vua25vd25TaXplVmFsdWUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgLS0ke2JvdW5kYXJ5fS0tYClcbiAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aFxuICAgIGlmIChoYXNVbmtub3duU2l6ZVZhbHVlKSB7XG4gICAgICBsZW5ndGggPSBudWxsXG4gICAgfVxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBibG9iUGFydHMpIHtcbiAgICAgICAgaWYgKHBhcnQuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwYXJ0LnN0cmVhbSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeWllbGQgcGFydFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PWAsXG4gICAgLy8gZm9sbG93ZWQgYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgYm91bmRhcnkgc3RyaW5nIGdlbmVyYXRlZFxuICAgIC8vIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGVuY29kaW5nIGFsZ29yaXRobS5cbiAgICB0eXBlID0gJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyBib3VuZGFyeVxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2Uob2JqZWN0KSkge1xuICAgIC8vIEJsb2JcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IGxlbmd0aCB0byBvYmplY3RcdTIwMTlzIHNpemUuXG4gICAgbGVuZ3RoID0gb2JqZWN0LnNpemVcblxuICAgIC8vIElmIG9iamVjdFx1MjAxOXMgdHlwZSBhdHRyaWJ1dGUgaXMgbm90IHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBzZXRcbiAgICAvLyB0eXBlIHRvIGl0cyB2YWx1ZS5cbiAgICBpZiAob2JqZWN0LnR5cGUpIHtcbiAgICAgIHR5cGUgPSBvYmplY3QudHlwZVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIGtlZXBhbGl2ZSBpcyB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChrZWVwYWxpdmUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2tlZXBhbGl2ZScpXG4gICAgfVxuXG4gICAgLy8gSWYgb2JqZWN0IGlzIGRpc3R1cmJlZCBvciBsb2NrZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSB8fCBvYmplY3QubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnUmVzcG9uc2UgYm9keSBvYmplY3Qgc2hvdWxkIG5vdCBiZSBkaXN0dXJiZWQgb3IgbG9ja2VkJ1xuICAgICAgKVxuICAgIH1cblxuICAgIHN0cmVhbSA9XG4gICAgICBvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSA/IG9iamVjdCA6IFJlYWRhYmxlU3RyZWFtRnJvbShvYmplY3QpXG4gIH1cblxuICAvLyAxMS4gSWYgc291cmNlIGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgYWN0aW9uIHRvIGFcbiAgLy8gc3RlcCB0aGF0IHJldHVybnMgc291cmNlIGFuZCBsZW5ndGggdG8gc291cmNlXHUyMDE5cyBsZW5ndGguXG4gIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyB8fCB1dGlsLmlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChzb3VyY2UpXG4gIH1cblxuICAvLyAxMi4gSWYgYWN0aW9uIGlzIG5vbi1udWxsLCB0aGVuIHJ1biB0aGVzZSBzdGVwcyBpbiBpbiBwYXJhbGxlbDpcbiAgaWYgKGFjdGlvbiAhPSBudWxsKSB7XG4gICAgLy8gUnVuIGFjdGlvbi5cbiAgICBsZXQgaXRlcmF0b3JcbiAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGFjdGlvbihvYmplY3QpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyBXaGVuIHJ1bm5pbmcgYWN0aW9uIGlzIGRvbmUsIGNsb3NlIHN0cmVhbS5cbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIG9uZSBvciBtb3JlIGJ5dGVzIGFyZSBhdmFpbGFibGUgYW5kIHN0cmVhbSBpcyBub3QgZXJyb3JlZCxcbiAgICAgICAgICAvLyBlbnF1ZXVlIGEgVWludDhBcnJheSB3cmFwcGluZyBhbiBBcnJheUJ1ZmZlciBjb250YWluaW5nIHRoZSBhdmFpbGFibGVcbiAgICAgICAgICAvLyBieXRlcyBpbnRvIHN0cmVhbS5cbiAgICAgICAgICBpZiAoIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5kZXNpcmVkU2l6ZSA+IDBcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgfSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyBUbyBzYWZlbHkgZXh0cmFjdCBhIGJvZHkgYW5kIGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbVxuICAvLyBhIGJ5dGUgc2VxdWVuY2Ugb3IgQm9keUluaXQgb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbjpcbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gQXNzZXJ0OiBvYmplY3QgaXMgbmVpdGhlciBkaXN0dXJiZWQgbm9yIGxvY2tlZC5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghdXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpLCAnVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCFvYmplY3QubG9ja2VkLCAnVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgfVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0cyBvZiBleHRyYWN0aW5nIG9iamVjdC5cbiAgcmV0dXJuIGV4dHJhY3RCb2R5KG9iamVjdCwga2VlcGFsaXZlKVxufVxuXG5mdW5jdGlvbiBjbG9uZUJvZHkgKGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IFx1MDBBQiBvdXQxLCBvdXQyIFx1MDBCQiBiZSB0aGUgcmVzdWx0IG9mIHRlZWluZyBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIGNvbnN0IFtvdXQxLCBvdXQyXSA9IGJvZHkuc3RyZWFtLnRlZSgpXG4gIGNvbnN0IG91dDJDbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShvdXQyLCB7IHRyYW5zZmVyOiBbb3V0Ml0gfSlcbiAgLy8gVGhpcywgZm9yIHdoYXRldmVyIHJlYXNvbnMsIHVucmVmcyBvdXQyQ2xvbmUgd2hpY2ggYWxsb3dzXG4gIC8vIHRoZSBwcm9jZXNzIHRvIGV4aXQgYnkgaXRzZWxmLlxuICBjb25zdCBbLCBmaW5hbENsb25lXSA9IG91dDJDbG9uZS50ZWUoKVxuXG4gIC8vIDIuIFNldCBib2R5XHUyMDE5cyBzdHJlYW0gdG8gb3V0MS5cbiAgYm9keS5zdHJlYW0gPSBvdXQxXG5cbiAgLy8gMy4gUmV0dXJuIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgb3V0MiBhbmQgb3RoZXIgbWVtYmVycyBhcmUgY29waWVkIGZyb20gYm9keS5cbiAgcmV0dXJuIHtcbiAgICBzdHJlYW06IGZpbmFsQ2xvbmUsXG4gICAgbGVuZ3RoOiBib2R5Lmxlbmd0aCxcbiAgICBzb3VyY2U6IGJvZHkuc291cmNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb25zdW1lQm9keSAoYm9keSkge1xuICBpZiAoYm9keSkge1xuICAgIGlmIChpc1VpbnQ4QXJyYXkoYm9keSkpIHtcbiAgICAgIHlpZWxkIGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYm9keS5zdHJlYW1cblxuICAgICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQoc3RyZWFtKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gICAgICB9XG5cbiAgICAgIC8vIENvbXBhdC5cbiAgICAgIHN0cmVhbVtrQm9keVVzZWRdID0gdHJ1ZVxuXG4gICAgICB5aWVsZCAqIHN0cmVhbVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxufVxuXG5mdW5jdGlvbiBib2R5TWl4aW5NZXRob2RzIChpbnN0YW5jZSkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIGJsb2IgKCkge1xuICAgICAgLy8gVGhlIGJsb2IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBCbG9iIHdob3NlXG4gICAgICAvLyBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHdob3NlIHR5cGUgYXR0cmlidXRlIGlzIHRoaXNcdTIwMTlzXG4gICAgICAvLyBNSU1FIHR5cGUuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICBsZXQgbWltZVR5cGUgPSBib2R5TWltZVR5cGUodGhpcylcblxuICAgICAgICBpZiAobWltZVR5cGUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIG1pbWVUeXBlID0gJydcbiAgICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgIG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgQmxvYiB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHR5cGUgYXR0cmlidXRlXG4gICAgICAgIC8vIGlzIG1pbWVUeXBlLlxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiBtaW1lVHlwZSB9KVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFycmF5QnVmZmVyICgpIHtcbiAgICAgIC8vIFRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHRcbiAgICAgIC8vIG9mIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIG5ldyBBcnJheUJ1ZmZlclxuICAgICAgLy8gd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKS5idWZmZXJcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICB0ZXh0ICgpIHtcbiAgICAgIC8vIFRoZSB0ZXh0KCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBVVEYtOCBkZWNvZGUuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIHV0ZjhEZWNvZGVCeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGpzb24gKCkge1xuICAgICAgLy8gVGhlIGpzb24oKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHBhcnNlIEpTT04gZnJvbSBieXRlcy5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgcGFyc2VKU09ORnJvbUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9ybURhdGEgKCkge1xuICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgaW5zdGFuY2UpXG5cbiAgICAgIHRocm93SWZBYm9ydGVkKHRoaXNba1N0YXRlXSlcblxuICAgICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKVxuXG4gICAgICAvLyBJZiBtaW1lVHlwZVx1MjAxOXMgZXNzZW5jZSBpcyBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiwgdGhlbjpcbiAgICAgIGlmICgvbXVsdGlwYXJ0XFwvZm9ybS1kYXRhLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge31cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5oZWFkZXJzKSBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlXG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG5cbiAgICAgICAgbGV0IGJ1c2JveVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYnVzYm95ID0gbmV3IEJ1c2JveSh7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgcHJlc2VydmVQYXRoOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgJHtlcnJ9YCwgJ0Fib3J0RXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgYnVzYm95Lm9uKCdmaWVsZCcsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICBidXNib3kub24oJ2ZpbGUnLCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lLCBlbmNvZGluZywgbWltZVR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXVxuXG4gICAgICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0JyB8fCBlbmNvZGluZy50b0xvd2VyQ2FzZSgpID09PSAnYmFzZTY0Jykge1xuICAgICAgICAgICAgbGV0IGJhc2U2NGNodW5rID0gJydcblxuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgYmFzZTY0Y2h1bmsgKz0gY2h1bmsudG9TdHJpbmcoKS5yZXBsYWNlKC9bXFxyXFxuXS9nbSwgJycpXG5cbiAgICAgICAgICAgICAgY29uc3QgZW5kID0gYmFzZTY0Y2h1bmsubGVuZ3RoIC0gYmFzZTY0Y2h1bmsubGVuZ3RoICUgNFxuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuay5zbGljZSgwLCBlbmQpLCAnYmFzZTY0JykpXG5cbiAgICAgICAgICAgICAgYmFzZTY0Y2h1bmsgPSBiYXNlNjRjaHVuay5zbGljZShlbmQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oYmFzZTY0Y2h1bmssICdiYXNlNjQnKSlcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHZhbHVlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIG5ldyBGaWxlKGNodW5rcywgZmlsZW5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBidXNib3lSZXNvbHZlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGJ1c2JveS5vbignZmluaXNoJywgcmVzb2x2ZSlcbiAgICAgICAgICBidXNib3kub24oJ2Vycm9yJywgKGVycikgPT4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoZXJyKSkpXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRoaXMuYm9keSAhPT0gbnVsbCkgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjb25zdW1lQm9keSh0aGlzW2tTdGF0ZV0uYm9keSkpIGJ1c2JveS53cml0ZShjaHVuaylcbiAgICAgICAgYnVzYm95LmVuZCgpXG4gICAgICAgIGF3YWl0IGJ1c2JveVJlc29sdmVcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VGb3JtRGF0YVxuICAgICAgfSBlbHNlIGlmICgvYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiwgdGhlbjpcblxuICAgICAgICAvLyAxLiBMZXQgZW50cmllcyBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYnl0ZXMuXG4gICAgICAgIGxldCBlbnRyaWVzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHRleHQgPSAnJ1xuICAgICAgICAgIC8vIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBwYXJzZXIgd2lsbCBrZWVwIHRoZSBCT00uXG4gICAgICAgICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybGVuY29kZWQtcGFyc2VyXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHN0cmVhbWluZyBkZWNvZGVyIGlzIHN0YXRlZnVsIGFuZCBjYW5ub3QgYmUgcmV1c2VkXG4gICAgICAgICAgY29uc3Qgc3RyZWFtaW5nRGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGlnbm9yZUJPTTogdHJ1ZSB9KVxuXG4gICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjb25zdW1lQm9keSh0aGlzW2tTdGF0ZV0uYm9keSkpIHtcbiAgICAgICAgICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBVaW50OEFycmF5IGNodW5rJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHQgKz0gc3RyZWFtaW5nRGVjb2Rlci5kZWNvZGUoY2h1bmssIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHQgKz0gc3RyZWFtaW5nRGVjb2Rlci5kZWNvZGUoKVxuICAgICAgICAgIGVudHJpZXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHRleHQpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBVbmNsZWFyIHdoZW4gbmV3IFVSTFNlYXJjaFBhcmFtcyBjYW4gZmFpbCBvbiBhIHN0cmluZy5cbiAgICAgICAgICAvLyAyLiBJZiBlbnRyaWVzIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCksIHsgY2F1c2U6IGVyciB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIGEgbmV3IEZvcm1EYXRhIG9iamVjdCB3aG9zZSBlbnRyaWVzIGFyZSBlbnRyaWVzLlxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtRGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2FpdCBhIHRpY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgYSBUeXBlRXJyb3IgY2FuIGJlIHRocm93biB3aGVuIGFuIEFib3J0RXJyb3Igc2hvdWxkLlxuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuXG4gICAgICAgIHRocm93SWZBYm9ydGVkKHRoaXNba1N0YXRlXSlcblxuICAgICAgICAvLyBPdGhlcndpc2UsIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiBgJHtpbnN0YW5jZS5uYW1lfS5mb3JtRGF0YWAsXG4gICAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBwYXJzZSBjb250ZW50IGFzIEZvcm1EYXRhLidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0aG9kc1xufVxuXG5mdW5jdGlvbiBtaXhpbkJvZHkgKHByb3RvdHlwZSkge1xuICBPYmplY3QuYXNzaWduKHByb3RvdHlwZS5wcm90b3R5cGUsIGJvZHlNaXhpbk1ldGhvZHMocHJvdG90eXBlKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IG9iamVjdFxuICogQHBhcmFtIHsodmFsdWU6IHVua25vd24pID0+IHVua25vd259IGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBzcGVjQ29uc3VtZUJvZHkgKG9iamVjdCwgY29udmVydEJ5dGVzVG9KU1ZhbHVlLCBpbnN0YW5jZSkge1xuICB3ZWJpZGwuYnJhbmRDaGVjayhvYmplY3QsIGluc3RhbmNlKVxuXG4gIHRocm93SWZBYm9ydGVkKG9iamVjdFtrU3RhdGVdKVxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyB1bnVzYWJsZSwgdGhlbiByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkXG4gIC8vICAgIHdpdGggYSBUeXBlRXJyb3IuXG4gIGlmIChib2R5VW51c2FibGUob2JqZWN0W2tTdGF0ZV0uYm9keSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IGlzIHVudXNhYmxlJylcbiAgfVxuXG4gIC8vIDIuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDMuIExldCBlcnJvclN0ZXBzIGdpdmVuIGVycm9yIGJlIHRvIHJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIGNvbnN0IGVycm9yU3RlcHMgPSAoZXJyb3IpID0+IHByb21pc2UucmVqZWN0KGVycm9yKVxuXG4gIC8vIDQuIExldCBzdWNjZXNzU3RlcHMgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGRhdGEgYmUgdG8gcmVzb2x2ZVxuICAvLyAgICBwcm9taXNlIHdpdGggdGhlIHJlc3VsdCBvZiBydW5uaW5nIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICAvLyAgICB3aXRoIGRhdGEuIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzXG4gIC8vICAgIHdpdGggdGhhdCBleGNlcHRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IChkYXRhKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UucmVzb2x2ZShjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUoZGF0YSkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JTdGVwcyhlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDUuIElmIG9iamVjdFx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHJ1biBzdWNjZXNzU3RlcHMgd2l0aCBhblxuICAvLyAgICBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICBpZiAob2JqZWN0W2tTdGF0ZV0uYm9keSA9PSBudWxsKSB7XG4gICAgc3VjY2Vzc1N0ZXBzKG5ldyBVaW50OEFycmF5KCkpXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIG9iamVjdFx1MjAxOXMgYm9keSBnaXZlbiBzdWNjZXNzU3RlcHMsXG4gIC8vICAgIGVycm9yU3RlcHMsIGFuZCBvYmplY3RcdTIwMTlzIHJlbGV2YW50IGdsb2JhbCBvYmplY3QuXG4gIGF3YWl0IGZ1bGx5UmVhZEJvZHkob2JqZWN0W2tTdGF0ZV0uYm9keSwgc3VjY2Vzc1N0ZXBzLCBlcnJvclN0ZXBzKVxuXG4gIC8vIDcuIFJldHVybiBwcm9taXNlLlxuICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBib2R5VW51c2FibGUgKGJvZHkpIHtcbiAgLy8gQW4gb2JqZWN0IGluY2x1ZGluZyB0aGUgQm9keSBpbnRlcmZhY2UgbWl4aW4gaXNcbiAgLy8gc2FpZCB0byBiZSB1bnVzYWJsZSBpZiBpdHMgYm9keSBpcyBub24tbnVsbCBhbmRcbiAgLy8gaXRzIGJvZHlcdTIwMTlzIHN0cmVhbSBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLlxuICByZXR1cm4gYm9keSAhPSBudWxsICYmIChib2R5LnN0cmVhbS5sb2NrZWQgfHwgdXRpbC5pc0Rpc3R1cmJlZChib2R5LnN0cmVhbSkpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1qc29uLWJ5dGVzLXRvLWEtamF2YXNjcmlwdC12YWx1ZVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICovXG5mdW5jdGlvbiBwYXJzZUpTT05Gcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHV0ZjhEZWNvZGVCeXRlcyhieXRlcykpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LW1pbWUtdHlwZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vcmVzcG9uc2UnKS5SZXNwb25zZXxpbXBvcnQoJy4vcmVxdWVzdCcpLlJlcXVlc3R9IG9iamVjdFxuICovXG5mdW5jdGlvbiBib2R5TWltZVR5cGUgKG9iamVjdCkge1xuICBjb25zdCB7IGhlYWRlcnNMaXN0IH0gPSBvYmplY3Rba1N0YXRlXVxuICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnNMaXN0LmdldCgnY29udGVudC10eXBlJylcblxuICBpZiAoY29udGVudFR5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICByZXR1cm4gcGFyc2VNSU1FVHlwZShjb250ZW50VHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGV4dHJhY3RCb2R5LFxuICBzYWZlbHlFeHRyYWN0Qm9keSxcbiAgY2xvbmVCb2R5LFxuICBtaXhpbkJvZHlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNsYXNzIERpc3BhdGNoZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBkaXNwYXRjaCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCB7XG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0Rlc3Ryb3ksIGtDbG9zZSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGtEZXN0cm95ZWQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpXG5jb25zdCBrQ2xvc2VkID0gU3ltYm9sKCdjbG9zZWQnKVxuY29uc3Qga09uRGVzdHJveWVkID0gU3ltYm9sKCdvbkRlc3Ryb3llZCcpXG5jb25zdCBrT25DbG9zZWQgPSBTeW1ib2woJ29uQ2xvc2VkJylcbmNvbnN0IGtJbnRlcmNlcHRlZERpc3BhdGNoID0gU3ltYm9sKCdJbnRlcmNlcHRlZCBEaXNwYXRjaCcpXG5cbmNsYXNzIERpc3BhdGNoZXJCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tEZXN0cm95ZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSBudWxsXG4gICAgdGhpc1trQ2xvc2VkXSA9IGZhbHNlXG4gICAgdGhpc1trT25DbG9zZWRdID0gW11cbiAgfVxuXG4gIGdldCBkZXN0cm95ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tEZXN0cm95ZWRdXG4gIH1cblxuICBnZXQgY2xvc2VkICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xvc2VkXVxuICB9XG5cbiAgZ2V0IGludGVyY2VwdG9ycyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0ludGVyY2VwdG9yc11cbiAgfVxuXG4gIHNldCBpbnRlcmNlcHRvcnMgKG5ld0ludGVyY2VwdG9ycykge1xuICAgIGlmIChuZXdJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSBuZXdJbnRlcmNlcHRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldXG4gICAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludGVyY2VwdG9yIG11c3QgYmUgYW4gZnVuY3Rpb24nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG5ld0ludGVyY2VwdG9yc1xuICB9XG5cbiAgY2xvc2UgKGNhbGxiYWNrKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRGVzdHJveWVkXSkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobmV3IENsaWVudERlc3Ryb3llZEVycm9yKCksIG51bGwpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Nsb3NlZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkNsb3NlZF0pIHtcbiAgICAgICAgdGhpc1trT25DbG9zZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXNba0Nsb3NlZF0gPSB0cnVlXG4gICAgdGhpc1trT25DbG9zZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkNsb3NlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uQ2xvc2VkXVxuICAgICAgdGhpc1trT25DbG9zZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tDbG9zZV0oKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kZXN0cm95KCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKG9uQ2xvc2VkKVxuICAgICAgfSlcbiAgfVxuXG4gIGRlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBlcnJcbiAgICAgIGVyciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95KGVyciwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlcnIgPyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogc2hvdWxkIG5ldmVyIGVycm9yICovIHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBpZiAodGhpc1trT25EZXN0cm95ZWRdKSB7XG4gICAgICAgIHRoaXNba09uRGVzdHJveWVkXS5wdXNoKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobnVsbCwgbnVsbCkpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgZXJyID0gbmV3IENsaWVudERlc3Ryb3llZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IHRoaXNba09uRGVzdHJveWVkXSB8fCBbXVxuICAgIHRoaXNba09uRGVzdHJveWVkXS5wdXNoKGNhbGxiYWNrKVxuXG4gICAgY29uc3Qgb25EZXN0cm95ZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzW2tPbkRlc3Ryb3llZF1cbiAgICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShudWxsLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNob3VsZCBub3QgZXJyb3IuXG4gICAgdGhpc1trRGVzdHJveV0oZXJyKS50aGVuKCgpID0+IHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKG9uRGVzdHJveWVkKVxuICAgIH0pXG4gIH1cblxuICBba0ludGVyY2VwdGVkRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCF0aGlzW2tJbnRlcmNlcHRvcnNdIHx8IHRoaXNba0ludGVyY2VwdG9yc10ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IHRoaXNba0Rpc3BhdGNoXVxuICAgICAgcmV0dXJuIHRoaXNba0Rpc3BhdGNoXShvcHRzLCBoYW5kbGVyKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaCA9IHRoaXNba0Rpc3BhdGNoXS5iaW5kKHRoaXMpXG4gICAgZm9yIChsZXQgaSA9IHRoaXNba0ludGVyY2VwdG9yc10ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGRpc3BhdGNoID0gdGhpc1trSW50ZXJjZXB0b3JzXVtpXShkaXNwYXRjaClcbiAgICB9XG4gICAgdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0gPSBkaXNwYXRjaFxuICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdC4nKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trRGVzdHJveWVkXSB8fCB0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0Nsb3NlZF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IENsaWVudENsb3NlZEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25FcnJvciBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLm9uRXJyb3IoZXJyKVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyQmFzZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsIG51bGwsIG51bGwsICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcblxuZnVuY3Rpb24gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciAoeyBtYXhSZWRpcmVjdGlvbnM6IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSkge1xuICByZXR1cm4gKGRpc3BhdGNoKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBtYXhSZWRpcmVjdGlvbnMgPSBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0gPSBvcHRzXG5cbiAgICAgIGlmICghbWF4UmVkaXJlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWRpcmVjdEhhbmRsZXIgPSBuZXcgUmVkaXJlY3RIYW5kbGVyKGRpc3BhdGNoLCBtYXhSZWRpcmVjdGlvbnMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICBvcHRzID0geyAuLi5vcHRzLCBtYXhSZWRpcmVjdGlvbnM6IDAgfSAvLyBTdG9wIHN1YiBkaXNwYXRjaGVyIGZyb20gYWxzbyByZWRpcmVjdGluZy5cbiAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCByZWRpcmVjdEhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuIiwgIm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQk1BaGdBWDhCZjJBRGYzOS9BWDlnQkg5L2YzOEJmMkFBQUdBRGYzOS9BR0FCZndCZ0FuOS9BR0FHZjM5L2YzOS9BQUxMQVFnRFpXNTJHSGRoYzIxZmIyNWZhR1ZoWkdWeWMxOWpiMjF3YkdWMFpRQUNBMlZ1ZGhWM1lYTnRYMjl1WDIxbGMzTmhaMlZmWW1WbmFXNEFBQU5sYm5ZTGQyRnpiVjl2Ymw5MWNtd0FBUU5sYm5ZT2QyRnpiVjl2Ymw5emRHRjBkWE1BQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZlptbGxiR1FBQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZmRtRnNkV1VBQVFObGJuWU1kMkZ6YlY5dmJsOWliMlI1QUFFRFpXNTJHSGRoYzIxZmIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpRQUFBMFpGQXdNRUFBQUZBQUFBQUFBQUJRRUZBQVVGQlFBQUJnQUFBQUFHQmdZR0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBQUJBUWNBQUFVRkF3QUJCQVVCY0FFU0VnVURBUUFDQmdnQmZ3RkJnTlFFQ3dmUkJTSUdiV1Z0YjNKNUFnQUxYMmx1YVhScFlXeHBlbVVBQ1JsZlgybHVaR2x5WldOMFgyWjFibU4wYVc5dVgzUmhZbXhsQVFBTGJHeG9kSFJ3WDJsdWFYUUFDaGhzYkdoMGRIQmZjMmh2ZFd4a1gydGxaWEJmWVd4cGRtVUFRUXhzYkdoMGRIQmZZV3hzYjJNQURBWnRZV3hzYjJNQVJndHNiR2gwZEhCZlpuSmxaUUFOQkdaeVpXVUFTQTlzYkdoMGRIQmZaMlYwWDNSNWNHVUFEaFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV0ZxYjNJQUR4VnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXbHViM0lBRUJGc2JHaDBkSEJmWjJWMFgyMWxkR2h2WkFBUkZteHNhSFIwY0Y5blpYUmZjM1JoZEhWelgyTnZaR1VBRWhKc2JHaDBkSEJmWjJWMFgzVndaM0poWkdVQUV3eHNiR2gwZEhCZmNtVnpaWFFBRkE1c2JHaDBkSEJmWlhobFkzVjBaUUFWRkd4c2FIUjBjRjl6WlhSMGFXNW5jMTlwYm1sMEFCWU5iR3hvZEhSd1gyWnBibWx6YUFBWERHeHNhSFIwY0Y5d1lYVnpaUUFZRFd4c2FIUjBjRjl5WlhOMWJXVUFHUnRzYkdoMGRIQmZjbVZ6ZFcxbFgyRm1kR1Z5WDNWd1ozSmhaR1VBR2hCc2JHaDBkSEJmWjJWMFgyVnljbTV2QUJzWGJHeG9kSFJ3WDJkbGRGOWxjbkp2Y2w5eVpXRnpiMjRBSEJkc2JHaDBkSEJmYzJWMFgyVnljbTl5WDNKbFlYTnZiZ0FkRkd4c2FIUjBjRjluWlhSZlpYSnliM0pmY0c5ekFCNFJiR3hvZEhSd1gyVnljbTV2WDI1aGJXVUFIeEpzYkdoMGRIQmZiV1YwYUc5a1gyNWhiV1VBSUJKc2JHaDBkSEJmYzNSaGRIVnpYMjVoYldVQUlScHNiR2gwZEhCZmMyVjBYMnhsYm1sbGJuUmZhR1ZoWkdWeWN3QWlJV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlqYUhWdWEyVmtYMnhsYm1kMGFBQWpIV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlyWldWd1gyRnNhWFpsQUNRa2JHeG9kSFJ3WDNObGRGOXNaVzVwWlc1MFgzUnlZVzV6Wm1WeVgyVnVZMjlrYVc1bkFDVVliR3hvZEhSd1gyMWxjM05oWjJWZmJtVmxaSE5mWlc5bUFEOEpGd0VBUVFFTEVRRUNBd1FGQ3dZSE5UazNNUzh0SnlzcENzTGdBa1VDQUFzSUFCQ0lnSUNBQUFzWkFDQUFFTUtBZ0lBQUdpQUFJQUkyQWpnZ0FDQUJPZ0FvQ3h3QUlBQWdBQzhCTWlBQUxRQXVJQUFRd1lDQWdBQVFnSUNBZ0FBTEtnRUJmMEhBQUJER2dJQ0FBQ0lCRU1LQWdJQUFHaUFCUVlDSWdJQUFOZ0k0SUFFZ0FEb0FLQ0FCQ3dvQUlBQVF5SUNBZ0FBTEJ3QWdBQzBBS0FzSEFDQUFMUUFxQ3djQUlBQXRBQ3NMQndBZ0FDMEFLUXNIQUNBQUx3RXlDd2NBSUFBdEFDNExSUUVFZnlBQUtBSVlJUUVnQUMwQUxTRUNJQUF0QUNnaEF5QUFLQUk0SVFRZ0FCRENnSUNBQUJvZ0FDQUVOZ0k0SUFBZ0F6b0FLQ0FBSUFJNkFDMGdBQ0FCTmdJWUN4RUFJQUFnQVNBQklBSnFFTU9BZ0lBQUN4QUFJQUJCQUVIY0FCRE1nSUNBQUJvTFp3RUJmMEVBSVFFQ1FDQUFLQUlNRFFBQ1FBSkFBa0FDUUNBQUxRQXZEZ01CQUFNQ0N5QUFLQUk0SWdGRkRRQWdBU2dDTENJQlJRMEFJQUFnQVJHQWdJQ0FBQUFpQVEwREMwRUFEd3NReW9DQWdBQUFDeUFBUWNPV2dJQUFOZ0lRUVE0aEFRc2dBUXNlQUFKQUlBQW9BZ3dOQUNBQVFkR2JnSUFBTmdJUUlBQkJGVFlDREFzTEZnQUNRQ0FBS0FJTVFSVkhEUUFnQUVFQU5nSU1Dd3NXQUFKQUlBQW9BZ3hCRmtjTkFDQUFRUUEyQWd3TEN3Y0FJQUFvQWd3TEJ3QWdBQ2dDRUFzSkFDQUFJQUUyQWhBTEJ3QWdBQ2dDRkFzaUFBSkFJQUJCSkVrTkFCREtnSUNBQUFBTElBQkJBblJCb0xPQWdBQnFLQUlBQ3lJQUFrQWdBRUV1U1EwQUVNcUFnSUFBQUFzZ0FFRUNkRUd3dElDQUFHb29BZ0FMN2dzQkFYOUI2NmlBZ0FBaEFRSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCbkg5cUR2UURZMklBQVdGaFlXRmhZUUlEQkFWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhCZ2NJQ1FvTERBME9EMkZoWVdGaEVHRmhZV0ZoWVdGaFlXRmhFV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZUklURkJVV0Z4Z1pHaHRoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyWVRjNE9UcGhZV0ZoWVdGaFlUdGhZV0U4WVdGaFlUMCtQMkZoWVdGaFlXRmhRR0ZoUVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UyRmhZV0ZoWVdGaFZGVldWMWhaV2x0aFhGMWhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZlWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWDJCaEMwSGhwNENBQUE4TFFhU2hnSUFBRHd0Qnk2eUFnQUFQQzBIK3NZQ0FBQThMUWNDa2dJQUFEd3RCcTZTQWdBQVBDMEdOcUlDQUFBOExRZUttZ0lBQUR3dEJnTENBZ0FBUEMwRzVyNENBQUE4TFFkZWtnSUFBRHd0Qjc1K0FnQUFQQzBIaG40Q0FBQThMUWZxZmdJQUFEd3RCOHFDQWdBQVBDMEdvcjRDQUFBOExRYTZ5Z0lBQUR3dEJpTENBZ0FBUEMwSHNwNENBQUE4TFFZS2lnSUFBRHd0QmpwMkFnQUFQQzBIUXJvQ0FBQThMUWNxamdJQUFEd3RCeGJLQWdBQVBDMEhmbklDQUFBOExRZEtjZ0lBQUR3dEJ4S0NBZ0FBUEMwSFhvSUNBQUE4TFFhS2ZnSUFBRHd0QjdhNkFnQUFQQzBHcnNJQ0FBQThMUWRTbGdJQUFEd3RCeks2QWdBQVBDMEg2cm9DQUFBOExRZnlyZ0lBQUR3dEIwckNBZ0FBUEMwSHhuWUNBQUE4TFFidWdnSUFBRHd0Qjk2dUFnQUFQQzBHUXNZQ0FBQThMUWRleGdJQUFEd3RCb3EyQWdBQVBDMEhVcDRDQUFBOExRZUNyZ0lBQUR3dEJuNnlBZ0FBUEMwSHJzWUNBQUE4TFFkV2ZnSUFBRHd0QnlyR0FnQUFQQzBIZXBZQ0FBQThMUWRTZWdJQUFEd3RCOUp5QWdBQVBDMEduc29DQUFBOExRYkdkZ0lBQUR3dEJvSjJBZ0FBUEMwRzVzWUNBQUE4TFFieXdnSUFBRHd0QmtxR0FnQUFQQzBHenBvQ0FBQThMUWVtc2dJQUFEd3RCcko2QWdBQVBDMEhVcTRDQUFBOExRZmVtZ0lBQUR3dEJnS2FBZ0FBUEMwR3dvWUNBQUE4TFFmNmVnSUFBRHd0QmphT0FnQUFQQzBHSnJZQ0FBQThMUWZlaWdJQUFEd3RCb0xHQWdBQVBDMEd1bjRDQUFBOExRY2FsZ0lBQUR3dEI2SjZBZ0FBUEMwR1Rvb0NBQUE4TFFjS3ZnSUFBRHd0Qnc1MkFnQUFQQzBHTHJJQ0FBQThMUWVHZGdJQUFEd3RCamErQWdBQVBDMEhxb1lDQUFBOExRYlN0Z0lBQUR3dEIwcStBZ0FBUEMwSGZzb0NBQUE4TFFkS3lnSUFBRHd0QjhMQ0FnQUFQQzBHcG9vQ0FBQThMUWZtamdJQUFEd3RCbVo2QWdBQVBDMEcxcklDQUFBOExRWnV3Z0lBQUR3dEJrcktBZ0FBUEMwRzJxNENBQUE4TFFjS2lnSUFBRHd0QitMS0FnQUFQQzBHZXBZQ0FBQThMUWRDaWdJQUFEd3RCdXA2QWdBQVBDMEdCbm9DQUFBOExFTXFBZ0lBQUFBdEIxcUdBZ0FBaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ0FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDQkNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRY2FSZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJd0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlvQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NOQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlNSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3WnFBZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWpnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0VDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpXUWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSThJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaFFpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFR3FtNENBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDUUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJWUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pPQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NKQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlzSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWlnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaUlDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1VDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSWNJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQndwbUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba2dpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWlNVZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FKTUlnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FsUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NXQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0RkFRRi9Ba0FDUUNBQUx3RXdRUlJ4UVJSSERRQkJBU0VESUFBdEFDaEJBVVlOQVNBQUx3RXlRZVVBUmlFRERBRUxJQUF0QUNsQkJVWWhBd3NnQUNBRE9nQXVRUUFML2dFQkEzOUJBU0VEQWtBZ0FDOEJNQ0lFUVFoeERRQWdBQ2tESUVJQVVpRURDd0pBQWtBZ0FDMEFMa1VOQUVFQklRVWdBQzBBS1VFRlJnMEJRUUVoQlNBRVFjQUFjVVVnQTNGQkFVY05BUXRCQUNFRklBUkJ3QUJ4RFFCQkFpRUZJQVJCLy84RGNTSURRUWh4RFFBQ1FDQURRWUFFY1VVTkFBSkFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRcHhEUUJCQlE4TFFRUVBDd0pBSUFOQklIRU5BQUpBSUFBdEFDaEJBVVlOQUNBQUx3RXlRZi8vQTNFaUFFR2NmMnBCNUFCSkRRQWdBRUhNQVVZTkFDQUFRYkFDUmcwQVFRUWhCU0FFUVNoeFJRMENJQU5CaUFSeFFZQUVSZzBDQzBFQUR3dEJBRUVESUFBcEF5QlFHeUVGQ3lBRkMySUJBbjlCQUNFQkFrQWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lDUVp4L2FrSGtBRWtOQUNBQ1Fjd0JSZzBBSUFKQnNBSkdEUUFnQUM4Qk1DSUFRY0FBY1EwQVFRRWhBU0FBUVlnRWNVR0FCRVlOQUNBQVFTaHhSU0VCQ3lBQkM2Y0JBUU4vQWtBQ1FBSkFJQUF0QUNwRkRRQWdBQzBBSzBVTkFFRUFJUU1nQUM4Qk1DSUVRUUp4UlEwQkRBSUxRUUFoQXlBQUx3RXdJZ1JCQVhGRkRRRUxRUUVoQXlBQUxRQW9RUUZHRFFBZ0FDOEJNa0gvL3dOeElnVkJuSDlxUWVRQVNRMEFJQVZCekFGR0RRQWdCVUd3QWtZTkFDQUVRY0FBY1EwQVFRQWhBeUFFUVlnRWNVR0FCRVlOQUNBRVFTaHhRUUJISVFNTElBQkJBRHNCTUNBQVFRQTZBQzhnQXd1WkFRRUNmd0pBQWtBQ1FDQUFMUUFxUlEwQUlBQXRBQ3RGRFFCQkFDRUJJQUF2QVRBaUFrRUNjVVVOQVF3Q0MwRUFJUUVnQUM4Qk1DSUNRUUZ4UlEwQkMwRUJJUUVnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQVFaeC9ha0hrQUVrTkFDQUFRY3dCUmcwQUlBQkJzQUpHRFFBZ0FrSEFBSEVOQUVFQUlRRWdBa0dJQkhGQmdBUkdEUUFnQWtFb2NVRUFSeUVCQ3lBQkMxa0FJQUJCR0dwQ0FEY0RBQ0FBUWdBM0F3QWdBRUU0YWtJQU53TUFJQUJCTUdwQ0FEY0RBQ0FBUVNocVFnQTNBd0FnQUVFZ2FrSUFOd01BSUFCQkVHcENBRGNEQUNBQVFRaHFRZ0EzQXdBZ0FFSGRBVFlDSEVFQUMzc0JBWDhDUUNBQUtBSU1JZ01OQUFKQUlBQW9BZ1JGRFFBZ0FDQUJOZ0lFQ3dKQUlBQWdBU0FDRU1TQWdJQUFJZ01OQUNBQUtBSU1Ed3NnQUNBRE5nSWNRUUFoQXlBQUtBSUVJZ0ZGRFFBZ0FDQUJJQUlnQUNnQ0NCR0JnSUNBQUFBaUFVVU5BQ0FBSUFJMkFoUWdBQ0FCTmdJTUlBRWhBd3NnQXd2azh3RUREbjhEZmdSL0k0Q0FnSUFBUVJCcklnTWtnSUNBZ0FBZ0FTRUVJQUVoQlNBQklRWWdBU0VISUFFaENDQUJJUWtnQVNFS0lBRWhDeUFCSVF3Z0FTRU5JQUVoRGlBQklROENRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBQ2dDSENJUVFYOXFEdDBCMmdFQjJRRUNBd1FGQmdjSUNRb0xEQTBPMkFFUEVOY0JFUkxXQVJNVUZSWVhHQmthRytBQjN3RWNIUjdWQVI4Z0lTSWpKQ1hVQVNZbktDa3FLeXpUQWRJQkxTN1JBZEFCTHpBeE1qTTBOVFkzT0RrNk96dzlQajlBUVVKRFJFVkcyd0ZIU0VsS3p3SE9BVXZOQVV6TUFVMU9UMUJSVWxOVVZWWlhXRmxhVzF4ZFhsOWdZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcDdmSDErZjRBQmdRR0NBWU1CaEFHRkFZWUJod0dJQVlrQmlnR0xBWXdCalFHT0FZOEJrQUdSQVpJQmt3R1VBWlVCbGdHWEFaZ0JtUUdhQVpzQm5BR2RBWjRCbndHZ0FhRUJvZ0dqQWFRQnBRR21BYWNCcUFHcEFhb0Jxd0dzQWEwQnJnR3ZBYkFCc1FHeUFiTUJ0QUcxQWJZQnR3SExBY29CdUFISkFia0J5QUc2QWJzQnZBRzlBYjRCdndIQUFjRUJ3Z0hEQWNRQnhRSEdBUURjQVF0QkFDRVFETVlCQzBFT0lSQU14UUVMUVEwaEVBekVBUXRCRHlFUURNTUJDMEVRSVJBTXdnRUxRUk1oRUF6QkFRdEJGQ0VRRE1BQkMwRVZJUkFNdndFTFFSWWhFQXkrQVF0QkZ5RVFETDBCQzBFWUlSQU12QUVMUVJraEVBeTdBUXRCR2lFUURMb0JDMEViSVJBTXVRRUxRUndoRUF5NEFRdEJDQ0VRRExjQkMwRWRJUkFNdGdFTFFTQWhFQXkxQVF0Qkh5RVFETFFCQzBFSElSQU1zd0VMUVNFaEVBeXlBUXRCSWlFUURMRUJDMEVlSVJBTXNBRUxRU01oRUF5dkFRdEJFaUVRREs0QkMwRVJJUkFNclFFTFFTUWhFQXlzQVF0QkpTRVFES3NCQzBFbUlSQU1xZ0VMUVNjaEVBeXBBUXRCd3dFaEVBeW9BUXRCS1NFUURLY0JDMEVySVJBTXBnRUxRU3doRUF5bEFRdEJMU0VRREtRQkMwRXVJUkFNb3dFTFFTOGhFQXlpQVF0QnhBRWhFQXloQVF0Qk1DRVFES0FCQzBFMElSQU1ud0VMUVF3aEVBeWVBUXRCTVNFUURKMEJDMEV5SVJBTW5BRUxRVE1oRUF5YkFRdEJPU0VRREpvQkMwRTFJUkFNbVFFTFFjVUJJUkFNbUFFTFFRc2hFQXlYQVF0Qk9pRVFESllCQzBFMklSQU1sUUVMUVFvaEVBeVVBUXRCTnlFUURKTUJDMEU0SVJBTWtnRUxRVHdoRUF5UkFRdEJPeUVRREpBQkMwRTlJUkFNandFTFFRa2hFQXlPQVF0QktDRVFESTBCQzBFK0lSQU1qQUVMUVQ4aEVBeUxBUXRCd0FBaEVBeUtBUXRCd1FBaEVBeUpBUXRCd2dBaEVBeUlBUXRCd3dBaEVBeUhBUXRCeEFBaEVBeUdBUXRCeFFBaEVBeUZBUXRCeGdBaEVBeUVBUXRCS2lFUURJTUJDMEhIQUNFUURJSUJDMEhJQUNFUURJRUJDMEhKQUNFUURJQUJDMEhLQUNFUURIOExRY3NBSVJBTWZndEJ6UUFoRUF4OUMwSE1BQ0VRREh3TFFjNEFJUkFNZXd0Qnp3QWhFQXg2QzBIUUFDRVFESGtMUWRFQUlSQU1lQXRCMGdBaEVBeDNDMEhUQUNFUURIWUxRZFFBSVJBTWRRdEIxZ0FoRUF4MEMwSFZBQ0VRREhNTFFRWWhFQXh5QzBIWEFDRVFESEVMUVFVaEVBeHdDMEhZQUNFUURHOExRUVFoRUF4dUMwSFpBQ0VRREcwTFFkb0FJUkFNYkF0QjJ3QWhFQXhyQzBIY0FDRVFER29MUVFNaEVBeHBDMEhkQUNFUURHZ0xRZDRBSVJBTVp3dEIzd0FoRUF4bUMwSGhBQ0VRREdVTFFlQUFJUkFNWkF0QjRnQWhFQXhqQzBIakFDRVFER0lMUVFJaEVBeGhDMEhrQUNFUURHQUxRZVVBSVJBTVh3dEI1Z0FoRUF4ZUMwSG5BQ0VRREYwTFFlZ0FJUkFNWEF0QjZRQWhFQXhiQzBIcUFDRVFERm9MUWVzQUlSQU1XUXRCN0FBaEVBeFlDMEh0QUNFUURGY0xRZTRBSVJBTVZndEI3d0FoRUF4VkMwSHdBQ0VRREZRTFFmRUFJUkFNVXd0QjhnQWhFQXhTQzBIekFDRVFERkVMUWZRQUlSQU1VQXRCOVFBaEVBeFBDMEgyQUNFUURFNExRZmNBSVJBTVRRdEIrQUFoRUF4TUMwSDVBQ0VRREVzTFFmb0FJUkFNU2d0Qit3QWhFQXhKQzBIOEFDRVFERWdMUWYwQUlSQU1Sd3RCL2dBaEVBeEdDMEgvQUNFUURFVUxRWUFCSVJBTVJBdEJnUUVoRUF4REMwR0NBU0VRREVJTFFZTUJJUkFNUVF0QmhBRWhFQXhBQzBHRkFTRVFERDhMUVlZQklSQU1QZ3RCaHdFaEVBdzlDMEdJQVNFUUREd0xRWWtCSVJBTU93dEJpZ0VoRUF3NkMwR0xBU0VRRERrTFFZd0JJUkFNT0F0QmpRRWhFQXczQzBHT0FTRVFERFlMUVk4QklSQU1OUXRCa0FFaEVBdzBDMEdSQVNFUURETUxRWklCSVJBTU1ndEJrd0VoRUF3eEMwR1VBU0VRRERBTFFaVUJJUkFNTHd0QmxnRWhFQXd1QzBHWEFTRVFEQzBMUVpnQklSQU1MQXRCbVFFaEVBd3JDMEdhQVNFUURDb0xRWnNCSVJBTUtRdEJuQUVoRUF3b0MwR2RBU0VRRENjTFFaNEJJUkFNSmd0Qm53RWhFQXdsQzBHZ0FTRVFEQ1FMUWFFQklSQU1Jd3RCb2dFaEVBd2lDMEdqQVNFUURDRUxRYVFCSVJBTUlBdEJwUUVoRUF3ZkMwR21BU0VRREI0TFFhY0JJUkFNSFF0QnFBRWhFQXdjQzBHcEFTRVFEQnNMUWFvQklSQU1HZ3RCcXdFaEVBd1pDMEdzQVNFUURCZ0xRYTBCSVJBTUZ3dEJyZ0VoRUF3V0MwRUJJUkFNRlF0QnJ3RWhFQXdVQzBHd0FTRVFEQk1MUWJFQklSQU1FZ3RCc3dFaEVBd1JDMEd5QVNFUURCQUxRYlFCSVJBTUR3dEJ0UUVoRUF3T0MwRzJBU0VRREEwTFFiY0JJUkFNREF0QnVBRWhFQXdMQzBHNUFTRVFEQW9MUWJvQklSQU1DUXRCdXdFaEVBd0lDMEhHQVNFUURBY0xRYndCSVJBTUJndEJ2UUVoRUF3RkMwRytBU0VRREFRTFFiOEJJUkFNQXd0QndBRWhFQXdDQzBIQ0FTRVFEQUVMUWNFQklSQUxBMEFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBUURzY0JBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdlSHlBaEl5VW9QMEJCUkVWR1IwaEpTa3RNVFU5UVVWSlQzZ05YV1Z0Y1hXQmlaV1puYUdscWEyeHRiM0J4Y25OMGRYWjNlSGw2ZTN4OWZvQUJnZ0dGQVlZQmh3R0pBWXNCakFHTkFZNEJqd0dRQVpFQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnVBRzVBYm9CdXdHOEFiMEJ2Z0cvQWNBQndRSENBY01CeEFIRkFjWUJ4d0hJQWNrQnlnSExBY3dCelFIT0FjOEIwQUhSQWRJQjB3SFVBZFVCMWdIWEFkZ0IyUUhhQWRzQjNBSGRBZDRCNEFIaEFlSUI0d0hrQWVVQjVnSG5BZWdCNlFIcUFlc0I3QUh0QWU0Qjd3SHdBZkVCOGdIekFaa0NwQUt3QXY0Qy9nSUxJQUVpQkNBQ1J3M3pBVUhkQVNFUURQOERDeUFCSWhBZ0FrY04zUUZCd3dFaEVBeitBd3NnQVNJQklBSkhEWkFCUWZjQUlSQU0vUU1MSUFFaUFTQUNSdzJHQVVIdkFDRVFEUHdEQ3lBQklnRWdBa2NOZjBIcUFDRVFEUHNEQ3lBQklnRWdBa2NOZTBIb0FDRVFEUG9EQ3lBQklnRWdBa2NOZUVIbUFDRVFEUGtEQ3lBQklnRWdBa2NOR2tFWUlSQU0rQU1MSUFFaUFTQUNSdzBVUVJJaEVBejNBd3NnQVNJQklBSkhEVmxCeFFBaEVBejJBd3NnQVNJQklBSkhEVXBCUHlFUURQVURDeUFCSWdFZ0FrY05TRUU4SVJBTTlBTUxJQUVpQVNBQ1J3MUJRVEVoRUF6ekF3c2dBQzBBTGtFQlJnM3JBd3lIQWdzZ0FDQUJJZ0VnQWhEQWdJQ0FBRUVCUnczbUFTQUFRZ0EzQXlBTTV3RUxJQUFnQVNJQklBSVF0SUNBZ0FBaUVBM25BU0FCSVFFTTlRSUxBa0FnQVNJQklBSkhEUUJCQmlFUURQQURDeUFBSUFGQkFXb2lBU0FDRUx1QWdJQUFJaEFONkFFZ0FTRUJEREVMSUFCQ0FEY0RJRUVTSVJBTTFRTUxJQUVpRUNBQ1J3MHJRUjBoRUF6dEF3c0NRQ0FCSWdFZ0FrWU5BQ0FCUVFGcUlRRkJFQ0VRRE5RREMwRUhJUkFNN0FNTElBQkNBQ0FBS1FNZ0loRWdBaUFCSWhCcnJTSVNmU0lUSUJNZ0VWWWJOd01nSUJFZ0VsWWlGRVVONVFGQkNDRVFET3NEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVVSVJBTTBnTUxRUWtoRUF6cUF3c2dBU0VCSUFBcEF5QlFEZVFCSUFFaEFRenlBZ3NDUUNBQklnRWdBa2NOQUVFTElSQU02UU1MSUFBZ0FVRUJhaUlCSUFJUXRvQ0FnQUFpRUEzbEFTQUJJUUVNOGdJTElBQWdBU0lCSUFJUXVJQ0FnQUFpRUEzbEFTQUJJUUVNOGdJTElBQWdBU0lCSUFJUXVJQ0FnQUFpRUEzbUFTQUJJUUVNRFFzZ0FDQUJJZ0VnQWhDNmdJQ0FBQ0lRRGVjQklBRWhBUXp3QWdzQ1FDQUJJZ0VnQWtjTkFFRVBJUkFNNVFNTElBRXRBQUFpRUVFN1JnMElJQkJCRFVjTjZBRWdBVUVCYWlFQkRPOENDeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU42QUVnQVNFQkRQSUNDd05BQWtBZ0FTMEFBRUh3dFlDQUFHb3RBQUFpRUVFQlJnMEFJQkJCQWtjTjZ3RWdBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdBVUVCYWlJQkVMbUFnSUFBSWhBTjZnRWdBU0VCRFBRQ0N5QUJRUUZxSWdFZ0FrY05BQXRCRWlFUURPSURDeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU42UUVnQVNFQkRBb0xJQUVpQVNBQ1J3MEdRUnNoRUF6Z0F3c0NRQ0FCSWdFZ0FrY05BRUVXSVJBTTRBTUxJQUJCaW9DQWdBQTJBZ2dnQUNBQk5nSUVJQUFnQVNBQ0VMaUFnSUFBSWhBTjZnRWdBU0VCUVNBaEVBekdBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVId3Q0Q0FBR290QUFBaUVFRUNSZzBBQWtBZ0VFRi9hZzRFNVFIc0FRRHJBZXdCQ3lBQlFRRnFJUUZCQ0NFUURNZ0RDeUFCUVFGcUlnRWdBa2NOQUF0QkZTRVFETjhEQzBFVklSQU0zZ01MQTBBQ1FDQUJMUUFBUWZDNWdJQUFhaTBBQUNJUVFRSkdEUUFnRUVGL2FnNEUzZ0hzQWVBQjZ3SHNBUXNnQVVFQmFpSUJJQUpIRFFBTFFSZ2hFQXpkQXdzQ1FDQUJJZ0VnQWtZTkFDQUFRWXVBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCQnlFUURNUURDMEVaSVJBTTNBTUxJQUZCQVdvaEFRd0NDd0pBSUFFaUZDQUNSdzBBUVJvaEVBemJBd3NnRkNFQkFrQWdGQzBBQUVGemFnNFUzUUx1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0lBN2dJTFFRQWhFQ0FBUVFBMkFod2dBRUd2aTRDQUFEWUNFQ0FBUVFJMkFnd2dBQ0FVUVFGcU5nSVVETm9EQ3dKQUlBRXRBQUFpRUVFN1JnMEFJQkJCRFVjTjZBRWdBVUVCYWlFQkRPVUNDeUFCUVFGcUlRRUxRU0loRUF5L0F3c0NRQ0FCSWhBZ0FrY05BRUVjSVJBTTJBTUxRZ0FoRVNBUUlRRWdFQzBBQUVGUWFnNDM1d0htQVFFQ0F3UUZCZ2NJQUFBQUFBQUFBQWtLQ3d3TkRnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR4QVJFaE1VQUF0QkhpRVFETDBEQzBJQ0lSRU01UUVMUWdNaEVRemtBUXRDQkNFUkRPTUJDMElGSVJFTTRnRUxRZ1loRVF6aEFRdENCeUVSRE9BQkMwSUlJUkVNM3dFTFFna2hFUXplQVF0Q0NpRVJETjBCQzBJTElSRU0zQUVMUWd3aEVRemJBUXRDRFNFUkROb0JDMElPSVJFTTJRRUxRZzhoRVF6WUFRdENDaUVSRE5jQkMwSUxJUkVNMWdFTFFnd2hFUXpWQVF0Q0RTRVJETlFCQzBJT0lSRU0wd0VMUWc4aEVRelNBUXRDQUNFUkFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRTFFBQVFWQnFEamZsQWVRQkFBRUNBd1FGQmdmbUFlWUI1Z0htQWVZQjVnSG1BUWdKQ2dzTURlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdFT0R4QVJFaFBtQVF0Q0FpRVJET1FCQzBJRElSRU00d0VMUWdRaEVRemlBUXRDQlNFUkRPRUJDMElHSVJFTTRBRUxRZ2NoRVF6ZkFRdENDQ0VSRE40QkMwSUpJUkVNM1FFTFFnb2hFUXpjQVF0Q0N5RVJETnNCQzBJTUlSRU0yZ0VMUWcwaEVRelpBUXRDRGlFUkROZ0JDMElQSVJFTTF3RUxRZ29oRVF6V0FRdENDeUVSRE5VQkMwSU1JUkVNMUFFTFFnMGhFUXpUQVF0Q0RpRVJETklCQzBJUElSRU0wUUVMSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU4wZ0ZCSHlFUURNQURDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRWtJUkFNcHdNTFFTQWhFQXkvQXdzZ0FDQUJJaEFnQWhDK2dJQ0FBRUYvYWc0RnRnRUF4UUlCMFFIU0FRdEJFU0VRREtRREN5QUFRUUU2QUM4Z0VDRUJETHNEQ3lBQklnRWdBa2NOMGdGQkpDRVFETHNEQ3lBQklnMGdBa2NOSGtIR0FDRVFETG9EQ3lBQUlBRWlBU0FDRUxLQWdJQUFJaEFOMUFFZ0FTRUJETFVCQ3lBQkloQWdBa2NOSmtIUUFDRVFETGdEQ3dKQUlBRWlBU0FDUncwQVFTZ2hFQXk0QXdzZ0FFRUFOZ0lFSUFCQmpJQ0FnQUEyQWdnZ0FDQUJJQUVRc1lDQWdBQWlFQTNUQVNBQklRRU0yQUVMQWtBZ0FTSVFJQUpIRFFCQktTRVFETGNEQ3lBUUxRQUFJZ0ZCSUVZTkZDQUJRUWxIRGRNQklCQkJBV29oQVF3VkN3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFRd1hDMEVxSVJBTXRRTUxBa0FnQVNJUUlBSkhEUUJCS3lFUURMVURDd0pBSUJBdEFBQWlBVUVKUmcwQUlBRkJJRWNOMVFFTElBQXRBQ3hCQ0VZTjB3RWdFQ0VCREpFREN3SkFJQUVpQVNBQ1J3MEFRU3doRUF5MEF3c2dBUzBBQUVFS1J3M1ZBU0FCUVFGcUlRRU15UUlMSUFFaURpQUNSdzNWQVVFdklSQU1zZ01MQTBBQ1FDQUJMUUFBSWhCQklFWU5BQUpBSUJCQmRtb09CQURjQWR3QkFOb0JDeUFCSVFFTTRBRUxJQUZCQVdvaUFTQUNSdzBBQzBFeElSQU1zUU1MUVRJaEVDQUJJaFFnQWtZTnNBTWdBaUFVYXlBQUtBSUFJZ0ZxSVJVZ0ZDQUJhMEVEYWlFV0FrQURRQ0FVTFFBQUloZEJJSElnRnlBWFFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFmQzdnSUFBYWkwQUFFY05BUUpBSUFGQkEwY05BRUVHSVFFTWxnTUxJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBVk5nSUFETEVEQ3lBQVFRQTJBZ0FnRkNFQkROa0JDMEV6SVJBZ0FTSVVJQUpHRGE4RElBSWdGR3NnQUNnQ0FDSUJhaUVWSUJRZ0FXdEJDR29oRmdKQUEwQWdGQzBBQUNJWFFTQnlJQmNnRjBHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIMHU0Q0FBR290QUFCSERRRUNRQ0FCUVFoSERRQkJCU0VCREpVREN5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRlRZQ0FBeXdBd3NnQUVFQU5nSUFJQlFoQVF6WUFRdEJOQ0VRSUFFaUZDQUNSZzJ1QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRVnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCME1LQWdBQnFMUUFBUncwQkFrQWdBVUVGUncwQVFRY2hBUXlVQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXJ3TUxJQUJCQURZQ0FDQVVJUUVNMXdFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQkJnTDZBZ0FCcUxRQUFJaEJCQVVZTkFDQVFRUUpHRFFvZ0FTRUJETjBCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJNQ0VRREs0REMwRXdJUkFNclFNTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUlCQkJkbW9PQk5rQjJnSGFBZGtCMmdFTElBRkJBV29pQVNBQ1J3MEFDMEU0SVJBTXJRTUxRVGdoRUF5c0F3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUlCQkJDVWNOQXdzZ0FVRUJhaUlCSUFKSERRQUxRVHdoRUF5ckF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQ0FRUVhacURnVGFBUUVCMmdFQUN5QVFRU3hHRGRzQkN5QUJJUUVNQkFzZ0FVRUJhaUlCSUFKSERRQUxRVDhoRUF5cUF3c2dBU0VCRE5zQkMwSEFBQ0VRSUFFaUZDQUNSZzJvQXlBQ0lCUnJJQUFvQWdBaUFXb2hGaUFVSUFGclFRWnFJUmNDUUFOQUlCUXRBQUJCSUhJZ0FVR0F3SUNBQUdvdEFBQkhEUUVnQVVFR1JnMk9BeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlwQXdzZ0FFRUFOZ0lBSUJRaEFRdEJOaUVRREk0REN3SkFJQUVpRHlBQ1J3MEFRY0VBSVJBTXB3TUxJQUJCaklDQWdBQTJBZ2dnQUNBUE5nSUVJQThoQVNBQUxRQXNRWDlxRGdUTkFkVUIxd0haQVljREN5QUJRUUZxSVFFTXpBRUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ2NpQVFJQkJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJaEJCQ1VZTkFDQVFRU0JHRFFBQ1FBSkFBa0FDUUNBUVFaMS9hZzRUQUFNREF3TURBd01CQXdNREF3TURBd01EQWdNTElBRkJBV29oQVVFeElSQU1rUU1MSUFGQkFXb2hBVUV5SVJBTWtBTUxJQUZCQVdvaEFVRXpJUkFNandNTElBRWhBUXpRQVFzZ0FVRUJhaUlCSUFKSERRQUxRVFVoRUF5bEF3dEJOU0VRREtRREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRWUM4Z0lBQWFpMEFBRUVCUmcwQUlBRWhBUXpUQVFzZ0FVRUJhaUlCSUFKSERRQUxRVDBoRUF5a0F3dEJQU0VRREtNREN5QUFJQUVpQVNBQ0VMQ0FnSUFBSWhBTjFnRWdBU0VCREFFTElCQkJBV29oQVF0QlBDRVFESWNEQ3dKQUlBRWlBU0FDUncwQVFjSUFJUkFNb0FNTEFrQURRQUpBSUFFdEFBQkJkMm9PR0FBQy9nTCtBb1FEL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDQVA0Q0N5QUJRUUZxSWdFZ0FrY05BQXRCd2dBaEVBeWdBd3NnQVVFQmFpRUJJQUF0QUMxQkFYRkZEYjBCSUFFaEFRdEJMQ0VRRElVREN5QUJJZ0VnQWtjTjB3RkJ4QUFoRUF5ZEF3c0RRQUpBSUFFdEFBQkJrTUNBZ0FCcUxRQUFRUUZHRFFBZ0FTRUJETGNDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ4UUFoRUF5Y0F3c2dEUzBBQUNJUVFTQkdEYk1CSUJCQk9rY05nUU1nQUNnQ0JDRUJJQUJCQURZQ0JDQUFJQUVnRFJDdmdJQ0FBQ0lCRGRBQklBMUJBV29oQVF5ekFndEJ4d0FoRUNBQklnMGdBa1lObWdNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRUZhaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdRd29DQUFHb3RBQUJIRFlBRElBRkJCVVlOOUFJZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTW1nTUxRY2dBSVJBZ0FTSU5JQUpHRFprRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJDV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCbHNLQWdBQnFMUUFBUnczL0FnSkFJQUZCQ1VjTkFFRUNJUUVNOVFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKa0RDd0pBSUFFaURTQUNSdzBBUWNrQUlSQU1tUU1MQWtBQ1FDQU5MUUFBSWdGQklISWdBU0FCUWI5L2FrSC9BWEZCR2trYlFmOEJjVUdTZjJvT0J3Q0FBNEFEZ0FPQUE0QURBWUFEQ3lBTlFRRnFJUUZCUGlFUURJQURDeUFOUVFGcUlRRkJQeUVRRFA4Q0MwSEtBQ0VRSUFFaURTQUNSZzJYQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRRnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRYURDZ0lBQWFpMEFBRWNOL1FJZ0FVRUJSZzN3QWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5WEF3dEJ5d0FoRUNBQklnMGdBa1lObGdNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRU9haUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdpd29DQUFHb3RBQUJIRGZ3Q0lBRkJEa1lOOEFJZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTWxnTUxRY3dBSVJBZ0FTSU5JQUpHRFpVRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJEMm9oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCd01LQWdBQnFMUUFBUnczN0FnSkFJQUZCRDBjTkFFRURJUUVNOFFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKVURDMEhOQUNFUUlBRWlEU0FDUmcyVUF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUVZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWREQ2dJQUFhaTBBQUVjTitnSUNRQ0FCUVFWSERRQkJCQ0VCRFBBQ0N5QUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVVBd3NDUUNBQklnMGdBa2NOQUVIT0FDRVFESlFEQ3dKQUFrQUNRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaMS9hZzRUQVAwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBZ0g5QXYwQy9RSUNBLzBDQ3lBTlFRRnFJUUZCd1FBaEVBejlBZ3NnRFVFQmFpRUJRY0lBSVJBTS9BSUxJQTFCQVdvaEFVSERBQ0VRRFBzQ0N5QU5RUUZxSVFGQnhBQWhFQXo2QWdzQ1FDQUJJZ0VnQWtZTkFDQUFRWTJBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCeFFBaEVBejZBZ3RCendBaEVBeVNBd3NnRUNFQkFrQUNRQ0FRTFFBQVFYWnFEZ1FCcUFLb0FnQ29BZ3NnRUVFQmFpRUJDMEVuSVJBTStBSUxBa0FnQVNJQklBSkhEUUJCMFFBaEVBeVJBd3NDUUNBQkxRQUFRU0JHRFFBZ0FTRUJESTBCQ3lBQlFRRnFJUUVnQUMwQUxVRUJjVVVOeHdFZ0FTRUJESXdCQ3lBQkloY2dBa2NOeUFGQjBnQWhFQXlQQXd0QjB3QWhFQ0FCSWhRZ0FrWU5qZ01nQWlBVWF5QUFLQUlBSWdGcUlSWWdGQ0FCYTBFQmFpRVhBMEFnRkMwQUFDQUJRZGJDZ0lBQWFpMEFBRWNOekFFZ0FVRUJSZzNIQVNBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGallDQUF5T0F3c0NRQ0FCSWdFZ0FrY05BRUhWQUNFUURJNERDeUFCTFFBQVFRcEhEY3dCSUFGQkFXb2hBUXpIQVFzQ1FDQUJJZ0VnQWtjTkFFSFdBQ0VRREkwREN3SkFBa0FnQVMwQUFFRjJhZzRFQU0wQnpRRUJ6UUVMSUFGQkFXb2hBUXpIQVFzZ0FVRUJhaUVCUWNvQUlSQU04d0lMSUFBZ0FTSUJJQUlRcm9DQWdBQWlFQTNMQVNBQklRRkJ6UUFoRUF6eUFnc2dBQzBBS1VFaVJnMkZBd3ltQWdzQ1FDQUJJZ0VnQWtjTkFFSGJBQ0VRRElvREMwRUFJUlJCQVNFWFFRRWhGa0VBSVJBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FTMEFBRUZRYWc0SzFBSFRBUUFCQWdNRUJRWUkxUUVMUVFJaEVBd0dDMEVESVJBTUJRdEJCQ0VRREFRTFFRVWhFQXdEQzBFR0lSQU1BZ3RCQnlFUURBRUxRUWdoRUF0QkFDRVhRUUFoRmtFQUlSUU16QUVMUVFraEVFRUJJUlJCQUNFWFFRQWhGZ3pMQVFzQ1FDQUJJZ0VnQWtjTkFFSGRBQ0VRRElrREN5QUJMUUFBUVM1SERjd0JJQUZCQVdvaEFReW1BZ3NnQVNJQklBSkhEY3dCUWQ4QUlSQU1od01MQWtBZ0FTSUJJQUpHRFFBZ0FFR09nSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZEFBSVJBTTdnSUxRZUFBSVJBTWhnTUxRZUVBSVJBZ0FTSUJJQUpHRFlVRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBMm9oRndOQUlBRXRBQUFnRkVIaXdvQ0FBR290QUFCSERjMEJJQlJCQTBZTnpBRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oUU1MUWVJQUlSQWdBU0lCSUFKR0RZUURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQW1vaEZ3TkFJQUV0QUFBZ0ZFSG13b0NBQUdvdEFBQkhEY3dCSUJSQkFrWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNaEFNTFFlTUFJUkFnQVNJQklBSkdEWU1ESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhwd29DQUFHb3RBQUJIRGNzQklCUkJBMFlOemdFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWd3TUxBa0FnQVNJQklBSkhEUUJCNVFBaEVBeURBd3NnQUNBQlFRRnFJZ0VnQWhDb2dJQ0FBQ0lRRGMwQklBRWhBVUhXQUNFUURPa0NDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBSWhCQklFWU5BQUpBQWtBQ1FDQVFRYmgvYWc0TEFBSFBBYzhCendIUEFjOEJ6d0hQQWM4QkFzOEJDeUFCUVFGcUlRRkIwZ0FoRUF6dEFnc2dBVUVCYWlFQlFkTUFJUkFNN0FJTElBRkJBV29oQVVIVUFDRVFET3NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI1QUFoRUF5Q0F3dEI1QUFoRUF5QkF3c0RRQUpBSUFFdEFBQkI4TUtBZ0FCcUxRQUFJaEJCQVVZTkFDQVFRWDVxRGdQUEFkQUIwUUhTQVFzZ0FVRUJhaUlCSUFKSERRQUxRZVlBSVJBTWdBTUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQU1MUWVjQUlSQU0vd0lMQTBBQ1FDQUJMUUFBUWZERWdJQUFhaTBBQUNJUVFRRkdEUUFDUUNBUVFYNXFEZ1RTQWRNQjFBRUExUUVMSUFFaEFVSFhBQ0VRRE9jQ0N5QUJRUUZxSWdFZ0FrY05BQXRCNkFBaEVBeitBZ3NDUUNBQklnRWdBa2NOQUVIcEFDRVFEUDRDQ3dKQUlBRXRBQUFpRUVGMmFnNGF1Z0hWQWRVQnZBSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSEtBZFVCMVFFQTB3RUxJQUZCQVdvaEFRdEJCaUVRRE9NQ0N3TkFBa0FnQVMwQUFFSHd4b0NBQUdvdEFBQkJBVVlOQUNBQklRRU1uZ0lMSUFGQkFXb2lBU0FDUncwQUMwSHFBQ0VRRFBzQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFRd0RDMEhyQUNFUURQb0NDd0pBSUFFaUFTQUNSdzBBUWV3QUlSQU0rZ0lMSUFGQkFXb2hBUXdCQ3dKQUlBRWlBU0FDUncwQVFlMEFJUkFNK1FJTElBRkJBV29oQVF0QkJDRVFETjRDQ3dKQUlBRWlGQ0FDUncwQVFlNEFJUkFNOXdJTElCUWhBUUpBQWtBQ1FDQVVMUUFBUWZESWdJQUFhaTBBQUVGL2FnNEgxQUhWQWRZQkFKd0NBUUxYQVFzZ0ZFRUJhaUVCREFvTElCUkJBV29oQVF6TkFRdEJBQ0VRSUFCQkFEWUNIQ0FBUVp1U2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBSUJSQkFXbzJBaFFNOWdJTEFrQURRQUpBSUFFdEFBQkI4TWlBZ0FCcUxRQUFJaEJCQkVZTkFBSkFBa0FnRUVGL2FnNEgwZ0hUQWRRQjJRRUFCQUhaQVFzZ0FTRUJRZG9BSVJBTTRBSUxJQUZCQVdvaEFVSGNBQ0VRRE44Q0N5QUJRUUZxSWdFZ0FrY05BQXRCN3dBaEVBejJBZ3NnQVVFQmFpRUJETXNCQ3dKQUlBRWlGQ0FDUncwQVFmQUFJUkFNOVFJTElCUXRBQUJCTDBjTjFBRWdGRUVCYWlFQkRBWUxBa0FnQVNJVUlBSkhEUUJCOFFBaEVBejBBZ3NDUUNBVUxRQUFJZ0ZCTDBjTkFDQVVRUUZxSVFGQjNRQWhFQXpiQWdzZ0FVRjJhaUlFUVJaTERkTUJRUUVnQkhSQmlZQ0FBbkZGRGRNQkRNb0NDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBVUhlQUNFUUROb0NDMEh5QUNFUURQSUNDd0pBSUFFaUZDQUNSdzBBUWZRQUlSQU04Z0lMSUJRaEFRSkFJQlF0QUFCQjhNeUFnQUJxTFFBQVFYOXFEZ1BKQXBRQ0FOUUJDMEhoQUNFUUROZ0NDd0pBSUFFaUZDQUNSZzBBQTBBQ1FDQVVMUUFBUWZES2dJQUFhaTBBQUNJQlFRTkdEUUFDUUNBQlFYOXFEZ0xMQWdEVkFRc2dGQ0VCUWQ4QUlSQU0yZ0lMSUJSQkFXb2lGQ0FDUncwQUMwSHpBQ0VRRFBFQ0MwSHpBQ0VRRFBBQ0N3SkFJQUVpQVNBQ1JnMEFJQUJCajRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVIZ0FDRVFETmNDQzBIMUFDRVFETzhDQ3dKQUlBRWlBU0FDUncwQVFmWUFJUkFNN3dJTElBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBUXRCQXlFUUROUUNDd05BSUFFdEFBQkJJRWNOd3dJZ0FVRUJhaUlCSUFKSERRQUxRZmNBSVJBTTdBSUxBa0FnQVNJQklBSkhEUUJCK0FBaEVBenNBZ3NnQVMwQUFFRWdSdzNPQVNBQlFRRnFJUUVNN3dFTElBQWdBU0lCSUFJUXJJQ0FnQUFpRUEzT0FTQUJJUUVNamdJTEFrQWdBU0lFSUFKSERRQkIrZ0FoRUF6cUFnc2dCQzBBQUVITUFFY04wUUVnQkVFQmFpRUJRUk1oRUF6UEFRc0NRQ0FCSWdRZ0FrY05BRUg3QUNFUURPa0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQURRQ0FFTFFBQUlBRkI4TTZBZ0FCcUxRQUFSdzNRQVNBQlFRVkdEYzRCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWZzQUlSQU02QUlMQWtBZ0FTSUVJQUpIRFFCQi9BQWhFQXpvQWdzQ1FBSkFJQVF0QUFCQnZYOXFEZ3dBMFFIUkFkRUIwUUhSQWRFQjBRSFJBZEVCMFFFQjBRRUxJQVJCQVdvaEFVSG1BQ0VRRE04Q0N5QUVRUUZxSVFGQjV3QWhFQXpPQWdzQ1FDQUJJZ1FnQWtjTkFFSDlBQ0VRRE9jQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYzhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUg5QUNFUURPY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSQWhFQXpNQVFzQ1FDQUJJZ1FnQWtjTkFFSCtBQ0VRRE9ZQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVSDJ6b0NBQUdvdEFBQkhEYzRCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUgrQUNFUURPWUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSWWhFQXpMQVFzQ1FDQUJJZ1FnQWtjTkFFSC9BQ0VRRE9VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUU5xSVJBQ1FBTkFJQVF0QUFBZ0FVSDh6b0NBQUdvdEFBQkhEYzBCSUFGQkEwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUgvQUNFUURPVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRVWhFQXpLQVFzQ1FDQUJJZ1FnQWtjTkFFR0FBU0VRRE9RQ0N5QUVMUUFBUWRrQVJ3M0xBU0FFUVFGcUlRRkJDQ0VRRE1rQkN3SkFJQUVpQkNBQ1J3MEFRWUVCSVJBTTR3SUxBa0FDUUNBRUxRQUFRYkovYWc0REFNd0JBY3dCQ3lBRVFRRnFJUUZCNndBaEVBektBZ3NnQkVFQmFpRUJRZXdBSVJBTXlRSUxBa0FnQVNJRUlBSkhEUUJCZ2dFaEVBemlBZ3NDUUFKQUlBUXRBQUJCdUg5cURnZ0F5d0hMQWNzQnl3SExBY3NCQWNzQkN5QUVRUUZxSVFGQjZnQWhFQXpKQWdzZ0JFRUJhaUVCUWUwQUlSQU15QUlMQWtBZ0FTSUVJQUpIRFFCQmd3RWhFQXpoQWdzZ0FpQUVheUFBS0FJQUlnRnFJUkFnQkNBQmEwRUNhaUVVQWtBRFFDQUVMUUFBSUFGQmdNK0FnQUJxTFFBQVJ3M0pBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJBMkFnQkJnd0VoRUF6aEFndEJBQ0VRSUFCQkFEWUNBQ0FVUVFGcUlRRU14Z0VMQWtBZ0FTSUVJQUpIRFFCQmhBRWhFQXpnQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQmc4K0FnQUJxTFFBQVJ3M0lBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJoQUVoRUF6Z0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFaklSQU14UUVMQWtBZ0FTSUVJQUpIRFFCQmhRRWhFQXpmQWdzQ1FBSkFJQVF0QUFCQnRIOXFEZ2dBeUFISUFjZ0J5QUhJQWNnQkFjZ0JDeUFFUVFGcUlRRkI3d0FoRUF6R0Fnc2dCRUVCYWlFQlFmQUFJUkFNeFFJTEFrQWdBU0lFSUFKSERRQkJoZ0VoRUF6ZUFnc2dCQzBBQUVIRkFFY054UUVnQkVFQmFpRUJESU1DQ3dKQUlBRWlCQ0FDUncwQVFZY0JJUkFNM1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFZalBnSUFBYWkwQUFFY054UUVnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWWNCSVJBTTNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkxTRVFETUlCQ3dKQUlBRWlCQ0FDUncwQVFZZ0JJUkFNM0FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY054QUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWWdCSVJBTTNBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktTRVFETUVCQ3dKQUlBRWlBU0FDUncwQVFZa0JJUkFNMndJTFFRRWhFQ0FCTFFBQVFkOEFSdzNBQVNBQlFRRnFJUUVNZ1FJTEFrQWdBU0lFSUFKSERRQkJpZ0VoRUF6YUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUEwQWdCQzBBQUNBQlFZelBnSUFBYWkwQUFFY053UUVnQVVFQlJnMnZBaUFCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdLQVNFUUROa0NDd0pBSUFFaUJDQUNSdzBBUVlzQklSQU0yUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUVk3UGdJQUFhaTBBQUVjTndRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZc0JJUkFNMlFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQWlFUURMNEJDd0pBSUFFaUJDQUNSdzBBUVl3QklSQU0yQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTndBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZd0JJUkFNMkFJTElBQkJBRFlDQUNBUVFRRnFJUUZCSHlFUURMMEJDd0pBSUFFaUJDQUNSdzBBUVkwQklSQU0xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZMUGdJQUFhaTBBQUVjTnZ3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZMEJJUkFNMXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQ1NFUURMd0JDd0pBSUFFaUJDQUNSdzBBUVk0QklSQU0xZ0lMQWtBQ1FDQUVMUUFBUWJkL2FnNEhBTDhCdndHL0FiOEJ2d0VCdndFTElBUkJBV29oQVVINEFDRVFETDBDQ3lBRVFRRnFJUUZCK1FBaEVBeThBZ3NDUUNBQklnUWdBa2NOQUVHUEFTRVFETlVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHUno0Q0FBR290QUFCSERiMEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1BBU0VRRE5VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJnaEVBeTZBUXNDUUNBQklnUWdBa2NOQUVHUUFTRVFETlFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVHWHo0Q0FBR290QUFCSERid0JJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1FBU0VRRE5RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJjaEVBeTVBUXNDUUNBQklnUWdBa2NOQUVHUkFTRVFETk1DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRWnFJUkFDUUFOQUlBUXRBQUFnQVVHYXo0Q0FBR290QUFCSERic0JJQUZCQmtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1JBU0VRRE5NQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJVaEVBeTRBUXNDUUNBQklnUWdBa2NOQUVHU0FTRVFETklDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHaHo0Q0FBR290QUFCSERib0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1NBU0VRRE5JQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVI0aEVBeTNBUXNDUUNBQklnUWdBa2NOQUVHVEFTRVFETkVDQ3lBRUxRQUFRY3dBUncyNEFTQUVRUUZxSVFGQkNpRVFETFlCQ3dKQUlBUWdBa2NOQUVHVUFTRVFETkFDQ3dKQUFrQWdCQzBBQUVHL2Yyb09Ed0M1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBUUc1QVFzZ0JFRUJhaUVCUWY0QUlSQU10d0lMSUFSQkFXb2hBVUgvQUNFUURMWUNDd0pBSUFRZ0FrY05BRUdWQVNFUURNOENDd0pBQWtBZ0JDMEFBRUcvZjJvT0F3QzRBUUc0QVFzZ0JFRUJhaUVCUWYwQUlSQU10Z0lMSUFSQkFXb2hCRUdBQVNFUURMVUNDd0pBSUFRZ0FrY05BRUdXQVNFUURNNENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUduejRDQUFHb3RBQUJIRGJZQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHV0FTRVFETTRDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUXNoRUF5ekFRc0NRQ0FFSUFKSERRQkJsd0VoRUF6TkFnc0NRQUpBQWtBQ1FDQUVMUUFBUVZOcURpTUF1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBUUc0QWJnQnVBRzRBYmdCQXJnQnVBRzRBUU80QVFzZ0JFRUJhaUVCUWZzQUlSQU10Z0lMSUFSQkFXb2hBVUg4QUNFUURMVUNDeUFFUVFGcUlRUkJnUUVoRUF5MEFnc2dCRUVCYWlFRVFZSUJJUkFNc3dJTEFrQWdCQ0FDUncwQVFaZ0JJUkFNekFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCR29oRUFKQUEwQWdCQzBBQUNBQlFhblBnSUFBYWkwQUFFY050QUVnQVVFRVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWmdCSVJBTXpBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdTRVFETEVCQ3dKQUlBUWdBa2NOQUVHWkFTRVFETXNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHdXo0Q0FBR290QUFCSERiTUJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1pBU0VRRE1zQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFZaEVBeXdBUXNDUUNBRUlBSkhEUUJCbWdFaEVBektBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdE0rQWdBQnFMUUFBUncyeUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1nRWhFQXpLQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVjSVJBTXJ3RUxBa0FnQkNBQ1J3MEFRWnNCSVJBTXlRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYmJQZ0lBQWFpMEFBRWNOc1FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpzQklSQU15UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJKeUVRREs0QkN3SkFJQVFnQWtjTkFFR2NBU0VRRE1nQ0N3SkFBa0FnQkMwQUFFR3NmMm9PQWdBQnNRRUxJQVJCQVdvaEJFR0dBU0VRREs4Q0N5QUVRUUZxSVFSQmh3RWhFQXl1QWdzQ1FDQUVJQUpIRFFCQm5RRWhFQXpIQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnVNK0FnQUJxTFFBQVJ3MnZBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJuUUVoRUF6SEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbUlSQU1yQUVMQWtBZ0JDQUNSdzBBUVo0QklSQU14Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWJyUGdJQUFhaTBBQUVjTnJnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaNEJJUkFNeGdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQXlFUURLc0JDd0pBSUFRZ0FrY05BRUdmQVNFUURNVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGEwQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZkFTRVFETVVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUXdoRUF5cUFRc0NRQ0FFSUFKSERRQkJvQUVoRUF6RUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkJ2TStBZ0FCcUxRQUFSdzJzQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCb0FFaEVBekVBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU5JUkFNcVFFTEFrQWdCQ0FDUncwQVFhRUJJUkFNd3dJTEFrQUNRQ0FFTFFBQVFicC9hZzRMQUt3QnJBR3NBYXdCckFHc0Fhd0JyQUdzQVFHc0FRc2dCRUVCYWlFRVFZc0JJUkFNcWdJTElBUkJBV29oQkVHTUFTRVFES2tDQ3dKQUlBUWdBa2NOQUVHaUFTRVFETUlDQ3lBRUxRQUFRZEFBUncycEFTQUVRUUZxSVFRTTZRRUxBa0FnQkNBQ1J3MEFRYU1CSVJBTXdRSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFhb0JxZ0dxQWFvQnFnRUFxZ0VMSUFSQkFXb2hCRUdPQVNFUURLZ0NDeUFFUVFGcUlRRkJJaUVRREtZQkN3SkFJQVFnQWtjTkFFR2tBU0VRRE1BQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVSEF6NENBQUdvdEFBQkhEYWdCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdrQVNFUURNQUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSMGhFQXlsQVFzQ1FDQUVJQUpIRFFCQnBRRWhFQXkvQWdzQ1FBSkFJQVF0QUFCQnJuOXFEZ01BcUFFQnFBRUxJQVJCQVdvaEJFR1FBU0VRREtZQ0N5QUVRUUZxSVFGQkJDRVFES1FCQ3dKQUlBUWdBa2NOQUVHbUFTRVFETDRDQ3dKQUFrQUNRQUpBQWtBZ0JDMEFBRUcvZjJvT0ZRQ3FBYW9CcWdHcUFhb0JxZ0dxQWFvQnFnR3FBUUdxQWFvQkFxb0JxZ0VEcWdHcUFRU3FBUXNnQkVFQmFpRUVRWWdCSVJBTXFBSUxJQVJCQVdvaEJFR0pBU0VRREtjQ0N5QUVRUUZxSVFSQmlnRWhFQXltQWdzZ0JFRUJhaUVFUVk4QklSQU1wUUlMSUFSQkFXb2hCRUdSQVNFUURLUUNDd0pBSUFRZ0FrY05BRUduQVNFUURMMENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGFVQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHbkFTRVFETDBDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkVoRUF5aUFRc0NRQ0FFSUFKSERRQkJxQUVoRUF5OEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ3cytBZ0FCcUxRQUFSdzJrQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcUFFaEVBeThBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXNJUkFNb1FFTEFrQWdCQ0FDUncwQVFha0JJUkFNdXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCR29oRUFKQUEwQWdCQzBBQUNBQlFjWFBnSUFBYWkwQUFFY05vd0VnQVVFRVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWtCSVJBTXV3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkt5RVFES0FCQ3dKQUlBUWdBa2NOQUVHcUFTRVFETG9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIS3o0Q0FBR290QUFCSERhSUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3FBU0VRRExvQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJRaEVBeWZBUXNDUUNBRUlBSkhEUUJCcXdFaEVBeTVBZ3NDUUFKQUFrQUNRQ0FFTFFBQVFiNS9hZzRQQUFFQ3BBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQnBBR2tBUU9rQVFzZ0JFRUJhaUVFUVpNQklSQU1vZ0lMSUFSQkFXb2hCRUdVQVNFUURLRUNDeUFFUVFGcUlRUkJsUUVoRUF5Z0Fnc2dCRUVCYWlFRVFaWUJJUkFNbndJTEFrQWdCQ0FDUncwQVFhd0JJUkFNdUFJTElBUXRBQUJCeFFCSERaOEJJQVJCQVdvaEJBemdBUXNDUUNBRUlBSkhEUUJCclFFaEVBeTNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCemMrQWdBQnFMUUFBUncyZkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnJRRWhFQXkzQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVPSVJBTW5BRUxBa0FnQkNBQ1J3MEFRYTRCSVJBTXRnSUxJQVF0QUFCQjBBQkhEWjBCSUFSQkFXb2hBVUVsSVJBTW13RUxBa0FnQkNBQ1J3MEFRYThCSVJBTXRRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQ0dvaEVBSkFBMEFnQkMwQUFDQUJRZERQZ0lBQWFpMEFBRWNOblFFZ0FVRUlSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWE4QklSQU10UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLaUVRREpvQkN3SkFJQVFnQWtjTkFFR3dBU0VRRExRQ0N3SkFBa0FnQkMwQUFFR3JmMm9PQ3dDZEFaMEJuUUdkQVowQm5RR2RBWjBCblFFQm5RRUxJQVJCQVdvaEJFR2FBU0VRREpzQ0N5QUVRUUZxSVFSQm13RWhFQXlhQWdzQ1FDQUVJQUpIRFFCQnNRRWhFQXl6QWdzQ1FBSkFJQVF0QUFCQnYzOXFEaFFBbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCQVp3QkN5QUVRUUZxSVFSQm1RRWhFQXlhQWdzZ0JFRUJhaUVFUVp3QklSQU1tUUlMQWtBZ0JDQUNSdzBBUWJJQklSQU1zZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWRuUGdJQUFhaTBBQUVjTm1nRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiSUJJUkFNc2dJTElBQkJBRFlDQUNBUVFRRnFJUUZCSVNFUURKY0JDd0pBSUFRZ0FrY05BRUd6QVNFUURMRUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUhkejRDQUFHb3RBQUJIRFprQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHekFTRVFETEVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUm9oRUF5V0FRc0NRQ0FFSUFKSERRQkJ0QUVoRUF5d0Fnc0NRQUpBQWtBZ0JDMEFBRUc3ZjJvT0VRQ2FBWm9CbWdHYUFab0JtZ0dhQVpvQm1nRUJtZ0dhQVpvQm1nR2FBUUthQVFzZ0JFRUJhaUVFUVowQklSQU1tQUlMSUFSQkFXb2hCRUdlQVNFUURKY0NDeUFFUVFGcUlRUkJud0VoRUF5V0Fnc0NRQ0FFSUFKSERRQkJ0UUVoRUF5dkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVGYWlFUUFrQURRQ0FFTFFBQUlBRkI1TStBZ0FCcUxRQUFSdzJYQVNBQlFRVkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdFFFaEVBeXZBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW9JUkFNbEFFTEFrQWdCQ0FDUncwQVFiWUJJUkFNcmdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlclBnSUFBYWkwQUFFY05sZ0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYllCSVJBTXJnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJ5RVFESk1CQ3dKQUlBUWdBa2NOQUVHM0FTRVFESzBDQ3dKQUFrQWdCQzBBQUVHN2Yyb09EZ0NXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnRUJsZ0VMSUFSQkFXb2hCRUdoQVNFUURKUUNDeUFFUVFGcUlRUkJvZ0VoRUF5VEFnc0NRQ0FFSUFKSERRQkJ1QUVoRUF5c0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkI3YytBZ0FCcUxRQUFSdzJVQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdUFFaEVBeXNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRVNJUkFNa1FFTEFrQWdCQ0FDUncwQVFia0JJUkFNcXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmRFBnSUFBYWkwQUFFY05rd0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYmtCSVJBTXF3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQklDRVFESkFCQ3dKQUlBUWdBa2NOQUVHNkFTRVFES29DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIeXo0Q0FBR290QUFCSERaSUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzZBU0VRREtvQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVE4aEVBeVBBUXNDUUNBRUlBSkhEUUJCdXdFaEVBeXBBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0FrZ0dTQVpJQmtnR1NBUUdTQVFzZ0JFRUJhaUVFUWFVQklSQU1rQUlMSUFSQkFXb2hCRUdtQVNFUURJOENDd0pBSUFRZ0FrY05BRUc4QVNFUURLZ0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFkcUlSQUNRQU5BSUFRdEFBQWdBVUgwejRDQUFHb3RBQUJIRFpBQklBRkJCMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHOEFTRVFES2dDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUnNoRUF5TkFRc0NRQ0FFSUFKSERRQkJ2UUVoRUF5bkFnc0NRQUpBQWtBZ0JDMEFBRUcrZjJvT0VnQ1JBWkVCa1FHUkFaRUJrUUdSQVpFQmtRRUJrUUdSQVpFQmtRR1JBWkVCQXBFQkN5QUVRUUZxSVFSQnBBRWhFQXlQQWdzZ0JFRUJhaUVFUWFjQklSQU1qZ0lMSUFSQkFXb2hCRUdvQVNFUURJMENDd0pBSUFRZ0FrY05BRUcrQVNFUURLWUNDeUFFTFFBQVFjNEFSdzJOQVNBRVFRRnFJUVFNendFTEFrQWdCQ0FDUncwQVFiOEJJUkFNcFFJTEFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFBQkFnT2NBUVFGQnB3Qm5BR2NBUWNJQ1FvTG5BRU1EUTRQbkFFTElBUkJBV29oQVVIb0FDRVFESm9DQ3lBRVFRRnFJUUZCNlFBaEVBeVpBZ3NnQkVFQmFpRUJRZTRBSVJBTW1BSUxJQVJCQVdvaEFVSHlBQ0VRREpjQ0N5QUVRUUZxSVFGQjh3QWhFQXlXQWdzZ0JFRUJhaUVCUWZZQUlSQU1sUUlMSUFSQkFXb2hBVUgzQUNFUURKUUNDeUFFUVFGcUlRRkIrZ0FoRUF5VEFnc2dCRUVCYWlFRVFZTUJJUkFNa2dJTElBUkJBV29oQkVHRUFTRVFESkVDQ3lBRVFRRnFJUVJCaFFFaEVBeVFBZ3NnQkVFQmFpRUVRWklCSVJBTWp3SUxJQVJCQVdvaEJFR1lBU0VRREk0Q0N5QUVRUUZxSVFSQm9BRWhFQXlOQWdzZ0JFRUJhaUVFUWFNQklSQU1qQUlMSUFSQkFXb2hCRUdxQVNFUURJc0NDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUdyQVNFUURJc0NDMEhBQVNFUURLTUNDeUFBSUFVZ0FoQ3FnSUNBQUNJQkRZc0JJQVVoQVF4Y0N3SkFJQVlnQWtZTkFDQUdRUUZxSVFVTWpRRUxRY0lCSVJBTW9RSUxBMEFDUUNBUUxRQUFRWFpxRGdTTUFRQUFqd0VBQ3lBUVFRRnFJaEFnQWtjTkFBdEJ3d0VoRUF5Z0Fnc0NRQ0FISUFKR0RRQWdBRUdSZ0lDQUFEWUNDQ0FBSUFjMkFnUWdCeUVCUVFFaEVBeUhBZ3RCeEFFaEVBeWZBZ3NDUUNBSElBSkhEUUJCeFFFaEVBeWZBZ3NDUUFKQUlBY3RBQUJCZG1vT0JBSE9BYzRCQU00QkN5QUhRUUZxSVFZTWpRRUxJQWRCQVdvaEJReUpBUXNDUUNBSElBSkhEUUJCeGdFaEVBeWVBZ3NDUUFKQUlBY3RBQUJCZG1vT0Z3R1BBWThCQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVFDUEFRc2dCMEVCYWlFSEMwR3dBU0VRRElRQ0N3SkFJQWdnQWtjTkFFSElBU0VRREowQ0N5QUlMUUFBUVNCSERZMEJJQUJCQURzQk1pQUlRUUZxSVFGQnN3RWhFQXlEQWdzZ0FTRVhBa0FEUUNBWElnY2dBa1lOQVNBSExRQUFRVkJxUWY4QmNTSVFRUXBQRGN3QkFrQWdBQzhCTWlJVVFaa3pTdzBBSUFBZ0ZFRUtiQ0lVT3dFeUlCQkIvLzhEY3lBVVFmNy9BM0ZKRFFBZ0IwRUJhaUVYSUFBZ0ZDQVFhaUlRT3dFeUlCQkIvLzhEY1VIb0Iwa05BUXNMUVFBaEVDQUFRUUEyQWh3Z0FFSEJpWUNBQURZQ0VDQUFRUTAyQWd3Z0FDQUhRUUZxTmdJVURKd0NDMEhIQVNFUURKc0NDeUFBSUFnZ0FoQ3VnSUNBQUNJUVJRM0tBU0FRUVJWSERZd0JJQUJCeUFFMkFod2dBQ0FJTmdJVUlBQkJ5WmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlhQWdzQ1FDQUpJQUpIRFFCQnpBRWhFQXlhQWd0QkFDRVVRUUVoRjBFQklSWkJBQ0VRQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFrdEFBQkJVR29PQ3BZQmxRRUFBUUlEQkFVR0NKY0JDMEVDSVJBTUJndEJBeUVRREFVTFFRUWhFQXdFQzBFRklSQU1Bd3RCQmlFUURBSUxRUWNoRUF3QkMwRUlJUkFMUVFBaEYwRUFJUlpCQUNFVURJNEJDMEVKSVJCQkFTRVVRUUFoRjBFQUlSWU1qUUVMQWtBZ0NpQUNSdzBBUWM0QklSQU1tUUlMSUFvdEFBQkJMa2NOamdFZ0NrRUJhaUVKRE1vQkN5QUxJQUpIRFk0QlFkQUJJUkFNbHdJTEFrQWdDeUFDUmcwQUlBQkJqb0NBZ0FBMkFnZ2dBQ0FMTmdJRVFiY0JJUkFNL2dFTFFkRUJJUkFNbGdJTEFrQWdCQ0FDUncwQVFkSUJJUkFNbGdJTElBSWdCR3NnQUNnQ0FDSVFhaUVVSUFRZ0VHdEJCR29oQ3dOQUlBUXRBQUFnRUVIOHo0Q0FBR290QUFCSERZNEJJQkJCQkVZTjZRRWdFRUVCYWlFUUlBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIwZ0VoRUF5VkFnc2dBQ0FNSUFJUXJJQ0FnQUFpQVEyTkFTQU1JUUVNdUFFTEFrQWdCQ0FDUncwQVFkUUJJUkFNbEFJTElBSWdCR3NnQUNnQ0FDSVFhaUVVSUFRZ0VHdEJBV29oREFOQUlBUXRBQUFnRUVHQjBJQ0FBR290QUFCSERZOEJJQkJCQVVZTmpnRWdFRUVCYWlFUUlBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIxQUVoRUF5VEFnc0NRQ0FFSUFKSERRQkIxZ0VoRUF5VEFnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVDYWlFTEEwQWdCQzBBQUNBUVFZUFFnSUFBYWkwQUFFY05qZ0VnRUVFQ1JnMlFBU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhXQVNFUURKSUNDd0pBSUFRZ0FrY05BRUhYQVNFUURKSUNDd0pBQWtBZ0JDMEFBRUc3ZjJvT0VBQ1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBWThCQ3lBRVFRRnFJUVJCdXdFaEVBejVBUXNnQkVFQmFpRUVRYndCSVJBTStBRUxBa0FnQkNBQ1J3MEFRZGdCSVJBTWtRSUxJQVF0QUFCQnlBQkhEWXdCSUFSQkFXb2hCQXpFQVFzQ1FDQUVJQUpHRFFBZ0FFR1FnSUNBQURZQ0NDQUFJQVEyQWdSQnZnRWhFQXozQVF0QjJRRWhFQXlQQWdzQ1FDQUVJQUpIRFFCQjJnRWhFQXlQQWdzZ0JDMEFBRUhJQUVZTnd3RWdBRUVCT2dBb0RMa0JDeUFBUVFJNkFDOGdBQ0FFSUFJUXBvQ0FnQUFpRUEyTkFVSENBU0VRRFBRQkN5QUFMUUFvUVg5cURnSzNBYmtCdUFFTEEwQUNRQ0FFTFFBQVFYWnFEZ1FBamdHT0FRQ09BUXNnQkVFQmFpSUVJQUpIRFFBTFFkMEJJUkFNaXdJTElBQkJBRG9BTHlBQUxRQXRRUVJ4UlEyRUFnc2dBRUVBT2dBdklBQkJBVG9BTkNBQklRRU1qQUVMSUJCQkZVWU4yZ0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNaUFJTEFrQWdBQ0FRSUFJUXRJQ0FnQUFpQkEwQUlCQWhBUXlCQWdzQ1FDQUVRUlZIRFFBZ0FFRUROZ0ljSUFBZ0VEWUNGQ0FBUWJDWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTWlBSUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR25qb0NBQURZQ0VDQUFRUkkyQWd4QkFDRVFESWNDQ3lBUVFSVkdEZFlCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhhallDQUFEWUNFQ0FBUVJRMkFneEJBQ0VRRElZQ0N5QUFLQUlFSVJjZ0FFRUFOZ0lFSUJBZ0VhZHFJaFloQVNBQUlCY2dFQ0FXSUJRYkloQVF0WUNBZ0FBaUZFVU5qUUVnQUVFSE5nSWNJQUFnRURZQ0ZDQUFJQlEyQWd4QkFDRVFESVVDQ3lBQUlBQXZBVEJCZ0FGeU93RXdJQUVoQVF0QktpRVFET29CQ3lBUVFSVkdEZEVCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdEaklDQUFEWUNFQ0FBUVJNMkFneEJBQ0VRRElJQ0N5QVFRUlZHRGM4QklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURJRUNDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5TkFRc2dBRUVNTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFESUFDQ3lBUVFSVkdEY3dCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRFA4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlNQVFzZ0FFRU5OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQNEJDeUFRUVJWR0Rja0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUDBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF1WUNBZ0FBaUVBMEFJQUZCQVdvaEFReUxBUXNnQUVFT05nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFB3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQndKV0FnQUEyQWhBZ0FFRUNOZ0lNUVFBaEVBejdBUXNnRUVFVlJnM0ZBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4b3lBZ0FBMkFoQWdBRUVqTmdJTVFRQWhFQXo2QVFzZ0FFRVFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRFBrQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdVlDQWdBQWlCQTBBSUFGQkFXb2hBUXp4QVFzZ0FFRVJOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQZ0JDeUFRUVJWR0RjRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUGNCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF1WUNBZ0FBaUVBMEFJQUZCQVdvaEFReUlBUXNnQUVFVE5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBZQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdVlDQWdBQWlCQTBBSUFGQkFXb2hBUXp0QVFzZ0FFRVVOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQVUJDeUFRUVJWR0RiMEJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUFFCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReUdBUXNnQUVFV05nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBNQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdDRDQWdBQWlCQTBBSUFGQkFXb2hBUXpwQVFzZ0FFRVhOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQSUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6Wk9BZ0FBMkFoQWdBRUVNTmdJTVFRQWhFQXp4QVF0Q0FTRVJDeUFRUVFGcUlRRUNRQ0FBS1FNZ0loSkMvLy8vLy8vLy8vOFBWZzBBSUFBZ0VrSUVoaUFSaERjRElDQUJJUUVNaEFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHdGlZQ0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPOEJDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJ6Wk9BZ0FBMkFoQWdBRUVNTmdJTVFRQWhFQXp1QVFzZ0FDZ0NCQ0VYSUFCQkFEWUNCQ0FRSUJHbmFpSVdJUUVnQUNBWElCQWdGaUFVR3lJUUVMV0FnSUFBSWhSRkRYTWdBRUVGTmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURPMEJDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxcHlBZ0FBMkFoQWdBRUVQTmdJTVFRQWhFQXpzQVFzZ0FDQVFJQUlRdElDQWdBQWlBUTBCSUJBaEFRdEJEaUVRRE5FQkN3SkFJQUZCRlVjTkFDQUFRUUkyQWh3Z0FDQVFOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenFBUXNnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNNlFFTElBRkJBV29oRUFKQUlBQXZBVEFpQVVHQUFYRkZEUUFDUUNBQUlCQWdBaEM3Z0lDQUFDSUJEUUFnRUNFQkRIQUxJQUZCRlVjTnVnRWdBRUVGTmdJY0lBQWdFRFlDRkNBQVFmbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU02UUVMQWtBZ0FVR2dCSEZCb0FSSERRQWdBQzBBTFVFQ2NRMEFJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR1drNENBQURZQ0VDQUFRUVEyQWd4QkFDRVFET2tCQ3lBQUlCQWdBaEM5Z0lDQUFCb2dFQ0VCQWtBQ1FBSkFBa0FDUUNBQUlCQWdBaEN6Z0lDQUFBNFdBZ0VBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQXdRTElBQkJBVG9BTGdzZ0FDQUFMd0V3UWNBQWNqc0JNQ0FRSVFFTFFTWWhFQXpSQVFzZ0FFRWpOZ0ljSUFBZ0VEWUNGQ0FBUWFXV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFSFZpNENBQURZQ0VDQUFRUkUyQWd4QkFDRVFET2dCQ3lBQUxRQXRRUUZ4UlEwQlFjTUJJUkFNemdFTEFrQWdEU0FDUmcwQUEwQUNRQ0FOTFFBQVFTQkdEUUFnRFNFQkRNUUJDeUFOUVFGcUlnMGdBa2NOQUF0QkpTRVFET2NCQzBFbElSQU01Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUEwUXI0Q0FnQUFpQkVVTnJRRWdBRUVtTmdJY0lBQWdCRFlDRENBQUlBMUJBV28yQWhSQkFDRVFET1VCQ3lBUVFSVkdEYXNCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5allDQUFEWUNFQ0FBUVIwMkFneEJBQ0VRRE9RQkN5QUFRU2MyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTTR3RUxJQkFoQVVFQklSUUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUxRQXNRWDVxRGdjR0JRVURBUUlBQlFzZ0FDQUFMd0V3UVFoeU93RXdEQU1MUVFJaEZBd0JDMEVFSVJRTElBQkJBVG9BTENBQUlBQXZBVEFnRkhJN0FUQUxJQkFoQVF0Qkt5RVFETW9CQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcTVLQWdBQTJBaEFnQUVFTE5nSU1RUUFoRUF6aUFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREVFQUlSQU00UUVMSUFCQkFEb0FMQ0FRSVFFTXZRRUxJQkFoQVVFQklSUUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmUyb09CQU1CQWdBRkN5QUFJQUF2QVRCQkNISTdBVEFNQXd0QkFpRVVEQUVMUVFRaEZBc2dBRUVCT2dBc0lBQWdBQzhCTUNBVWNqc0JNQXNnRUNFQkMwRXBJUkFNeFFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVId2xJQ0FBRFlDRUNBQVFRTTJBZ3hCQUNFUUROMEJDd0pBSUE0dEFBQkJEVWNOQUNBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTVCQVdvaEFReDFDeUFBUVN3MkFod2dBQ0FCTmdJTUlBQWdEa0VCYWpZQ0ZFRUFJUkFNM1FFTElBQXRBQzFCQVhGRkRRRkJ4QUVoRUF6REFRc0NRQ0FPSUFKSERRQkJMU0VRRE53QkN3SkFBa0FEUUFKQUlBNHRBQUJCZG1vT0JBSUFBQU1BQ3lBT1FRRnFJZzRnQWtjTkFBdEJMU0VRRE4wQkN5QUFLQUlFSVFFZ0FFRUFOZ0lFQWtBZ0FDQUJJQTRRc1lDQWdBQWlBUTBBSUE0aEFReDBDeUFBUVN3MkFod2dBQ0FPTmdJVUlBQWdBVFlDREVFQUlSQU0zQUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEa0VCYWlFQkRITUxJQUJCTERZQ0hDQUFJQUUyQWd3Z0FDQU9RUUZxTmdJVVFRQWhFQXpiQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0RoQ3hnSUNBQUNJRURhQUJJQTRoQVF6T0FRc2dFRUVzUncwQklBRkJBV29oRUVFQklRRUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmUyb09CQU1CQWdRQUN5QVFJUUVNQkF0QkFpRUJEQUVMUVFRaEFRc2dBRUVCT2dBc0lBQWdBQzhCTUNBQmNqc0JNQ0FRSVFFTUFRc2dBQ0FBTHdFd1FRaHlPd0V3SUJBaEFRdEJPU0VRREw4QkN5QUFRUUE2QUN3Z0FTRUJDMEUwSVJBTXZRRUxJQUFnQUM4Qk1FRWdjanNCTUNBQklRRU1BZ3NnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVMR0FnSUFBSWdRTkFDQUJJUUVNeHdFTElBQkJOellDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF6VUFRc2dBRUVJT2dBc0lBRWhBUXRCTUNFUURMa0JDd0pBSUFBdEFDaEJBVVlOQUNBQklRRU1CQXNnQUMwQUxVRUljVVVOa3dFZ0FTRUJEQU1MSUFBdEFEQkJJSEVObEFGQnhRRWhFQXkzQVFzQ1FDQVBJQUpHRFFBQ1FBTkFBa0FnRHkwQUFFRlFhaUlCUWY4QmNVRUtTUTBBSUE4aEFVRTFJUkFNdWdFTElBQXBBeUFpRVVLWnMrYk1tYlBtekJsV0RRRWdBQ0FSUWdwK0loRTNBeUFnRVNBQnJVTC9BWU1pRWtKL2hWWU5BU0FBSUJFZ0VudzNBeUFnRDBFQmFpSVBJQUpIRFFBTFFUa2hFQXpSQVFzZ0FDZ0NCQ0VDSUFCQkFEWUNCQ0FBSUFJZ0QwRUJhaUlFRUxHQWdJQUFJZ0lObFFFZ0JDRUJETU1CQzBFNUlSQU16d0VMQWtBZ0FDOEJNQ0lCUVFoeFJRMEFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRaHhSUTJRQVFzZ0FDQUJRZmY3QTNGQmdBUnlPd0V3SUE4aEFRdEJOeUVRRExRQkN5QUFJQUF2QVRCQkVISTdBVEFNcXdFTElCQkJGVVlOaXdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZDT2dJQUFOZ0lRSUFCQkhEWUNERUVBSVJBTXl3RUxJQUJCd3dBMkFod2dBQ0FCTmdJTUlBQWdEVUVCYWpZQ0ZFRUFJUkFNeWdFTEFrQWdBUzBBQUVFNlJ3MEFJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDdmdJQ0FBQ0lRRFFBZ0FVRUJhaUVCREdNTElBQkJ3d0EyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU15Z0VMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd4a1lDQUFEWUNFQ0FBUVFvMkFneEJBQ0VRRE1rQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQm9KbUFnQUEyQWhBZ0FFRWVOZ0lNUVFBaEVBeklBUXNnQUVFQU5nSUFDeUFBUVlBU093RXFJQUFnRjBFQmFpSUJJQUlRcUlDQWdBQWlFQTBCSUFFaEFRdEJ4d0FoRUF5c0FRc2dFRUVWUncyREFTQUFRZEVBTmdJY0lBQWdBVFlDRkNBQVFlT1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU14QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREY0TElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXd3RUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSEJxSUNBQURZQ0VDQUFRUWMyQWd3Z0FFRUFOZ0lBUVFBaEVBekNBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNWFFzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6QkFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdBa1lDQUFEWUNFQ0FBUVFrMkFnd013QUVMSUJCQkZVWU5mU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXkvQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQVVFQmFpRUJBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUsyQWdJQUFJaEFOQUNBQklRRU1YQXNnQUVIWUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXkrQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFSzJBZ0lBQUlnUU5BQ0FCSVFFTXJRRUxJQUJCMlFBMkFod2dBQ0FCTmdJVUlBQWdCRFlDREVFQUlSQU12UUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtzQkN5QUFRZG9BTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMd0JDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXlwQVFzZ0FFSGNBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5N0FRc0NRQ0FCTFFBQVFWQnFJaEJCL3dGeFFRcFBEUUFnQUNBUU9nQXFJQUZCQVdvaEFVSFBBQ0VRREtJQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReW5BUXNnQUVIZUFEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk2QVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJMDhOQUNBQklRRU1XUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZE9KZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdVFFTElBQkJBRFlDQUF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR1FzNENBQURZQ0VDQUFRUWcyQWd3TXR3RUxJQUJCQURZQ0FDQVhRUUZxSVFFQ1FDQUFMUUFwUVNGSERRQWdBU0VCREZZTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHYmlvQ0FBRFlDRUNBQVFRZzJBZ3hCQUNFUURMWUJDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1NJUVFWMXFRUXRQRFFBZ0FTRUJERlVMQWtBZ0VFRUdTdzBBUVFFZ0VIUkJ5Z0J4UlEwQUlBRWhBUXhWQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmZUpnSUFBTmdJUUlBQkJDRFlDREF5MUFRc2dFRUVWUmcxeElBQkJBRFlDSENBQUlBRTJBaFFnQUVHNWpZQ0FBRFlDRUNBQVFSbzJBZ3hCQUNFUURMUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhVQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExNQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETElCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMRUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhSQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExBQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhvcUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXZBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNU1FzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5dUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl0QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVRRc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXNBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZHlJZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNcXdFTElCQkJQMGNOQVNBQlFRRnFJUUVMUVFVaEVBeVFBUXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVIOWtvQ0FBRFlDRUNBQVFRYzJBZ3dNcUFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFSUxJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwd0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXBnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERVlMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcFFFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkREOExJQUJCMGdBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1wQUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwd0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTW93RUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERU1MSUFCQjVRQTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb2dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLRUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3NCtBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlnQVF0QkFDRVFJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFR01uSUNBQURZQ0VDQUFRUWMyQWd3TW53RUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFR01uSUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjRCQ3lBQVFRQTJBaHdnQUNBVU5nSVVJQUJCL3BHQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5ZEFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFZNmJnSUFBTmdJUUlBQkJCallDREVFQUlSQU1uQUVMSUJCQkZVWU5WeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6STZBZ0FBMkFoQWdBRUVnTmdJTVFRQWhFQXliQVFzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVrSVJBTElBQWdFRG9BS1NBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQkVLdUFnSUFBSWhBTlZDQUJJUUVNUGdzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdCRFlDRkNBQVFmR2JnSUFBTmdJUUlBQkJCallDREF5WEFRc2dBVUVWUmcxUUlBQkJBRFlDSENBQUlBVTJBaFFnQUVId2pJQ0FBRFlDRUNBQVFSczJBZ3hCQUNFUURKWUJDeUFBS0FJRUlRVWdBRUVBTmdJRUlBQWdCU0FRRUttQWdJQUFJZ1VOQVNBUVFRRnFJUVVMUWEwQklSQU1ld3NnQUVIQkFUWUNIQ0FBSUFVMkFnd2dBQ0FRUVFGcU5nSVVRUUFoRUF5VEFRc2dBQ2dDQkNFR0lBQkJBRFlDQkNBQUlBWWdFQkNwZ0lDQUFDSUdEUUVnRUVFQmFpRUdDMEd1QVNFUURIZ0xJQUJCd2dFMkFod2dBQ0FHTmdJTUlBQWdFRUVCYWpZQ0ZFRUFJUkFNa0FFTElBQkJBRFlDSENBQUlBYzJBaFFnQUVHWGk0Q0FBRFlDRUNBQVFRMDJBZ3hCQUNFUURJOEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkI0NUNBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXlPQVFzZ0FFRUFOZ0ljSUFBZ0NEWUNGQ0FBUVpTTmdJQUFOZ0lRSUFCQklUWUNERUVBSVJBTWpRRUxRUUVoRmtFQUlSZEJBQ0VVUVFFaEVBc2dBQ0FRT2dBcklBbEJBV29oQ0FKQUFrQWdBQzBBTFVFUWNRMEFBa0FDUUFKQUlBQXRBQ29PQXdFQUFnUUxJQlpGRFFNTUFnc2dGQTBCREFJTElCZEZEUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUWdBQ0FRSUFnUXJZQ0FnQUFpRUVVTlBTQUFRY2tCTmdJY0lBQWdDRFlDRkNBQUlCQTJBZ3hCQUNFUURJd0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FJRUsyQWdJQUFJZ1JGRFhZZ0FFSEtBVFlDSENBQUlBZzJBaFFnQUNBRU5nSU1RUUFoRUF5TEFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDUkN0Z0lDQUFDSUVSUTEwSUFCQnl3RTJBaHdnQUNBSk5nSVVJQUFnQkRZQ0RFRUFJUkFNaWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBb1FyWUNBZ0FBaUJFVU5jaUFBUWMwQk5nSWNJQUFnQ2pZQ0ZDQUFJQVEyQWd4QkFDRVFESWtCQ3dKQUlBc3RBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0MwRUJhaUVLUWJZQklSQU1jQXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ3hDdGdJQ0FBQ0lFUlExd0lBQkJ6d0UyQWh3Z0FDQUxOZ0lVSUFBZ0JEWUNERUVBSVJBTWlBRUxJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFR1FzNENBQURZQ0VDQUFRUWcyQWd3Z0FFRUFOZ0lBUVFBaEVBeUhBUXNnQVVFVlJnMC9JQUJCQURZQ0hDQUFJQXcyQWhRZ0FFSE1qb0NBQURZQ0VDQUFRU0EyQWd4QkFDRVFESVlCQ3lBQVFZRUVPd0VvSUFBb0FnUWhFQ0FBUWdBM0F3QWdBQ0FRSUF4QkFXb2lEQkNyZ0lDQUFDSVFSUTA0SUFCQjB3RTJBaHdnQUNBTU5nSVVJQUFnRURZQ0RFRUFJUkFNaFFFTElBQkJBRFlDQUF0QkFDRVFJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFSFltNENBQURZQ0VDQUFRUWcyQWd3TWd3RUxJQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXRCQVdvaUN4Q3JnSUNBQUNJUURRRkJ4Z0VoRUF4cEN5QUFRUUk2QUNnTVZRc2dBRUhWQVRZQ0hDQUFJQXMyQWhRZ0FDQVFOZ0lNUVFBaEVBeUFBUXNnRUVFVlJnMDNJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFR2tqSUNBQURZQ0VDQUFRUkEyQWd4QkFDRVFESDhMSUFBdEFEUkJBVWNOTkNBQUlBUWdBaEM4Z0lDQUFDSVFSUTAwSUJCQkZVY05OU0FBUWR3Qk5nSWNJQUFnQkRZQ0ZDQUFRZFdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNZmd0QkFDRVFJQUJCQURZQ0hDQUFRYStMZ0lBQU5nSVFJQUJCQWpZQ0RDQUFJQlJCQVdvMkFoUU1mUXRCQUNFUURHTUxRUUloRUF4aUMwRU5JUkFNWVF0QkR5RVFER0FMUVNVaEVBeGZDMEVUSVJBTVhndEJGU0VRREYwTFFSWWhFQXhjQzBFWElSQU1Xd3RCR0NFUURGb0xRUmtoRUF4WkMwRWFJUkFNV0F0Qkd5RVFERmNMUVJ3aEVBeFdDMEVkSVJBTVZRdEJIeUVRREZRTFFTRWhFQXhUQzBFaklSQU1VZ3RCeGdBaEVBeFJDMEV1SVJBTVVBdEJMeUVRREU4TFFUc2hFQXhPQzBFOUlSQU1UUXRCeUFBaEVBeE1DMEhKQUNFUURFc0xRY3NBSVJBTVNndEJ6QUFoRUF4SkMwSE9BQ0VRREVnTFFkRUFJUkFNUnd0QjFRQWhFQXhHQzBIWUFDRVFERVVMUWRrQUlSQU1SQXRCMndBaEVBeERDMEhrQUNFUURFSUxRZVVBSVJBTVFRdEI4UUFoRUF4QUMwSDBBQ0VRREQ4TFFZMEJJUkFNUGd0Qmx3RWhFQXc5QzBHcEFTRVFERHdMUWF3QklSQU1Pd3RCd0FFaEVBdzZDMEc1QVNFUUREa0xRYThCSVJBTU9BdEJzUUVoRUF3M0MwR3lBU0VRRERZTFFiUUJJUkFNTlF0QnRRRWhFQXcwQzBHNkFTRVFERE1MUWIwQklSQU1NZ3RCdndFaEVBd3hDMEhCQVNFUUREQUxJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFSHBpNENBQURZQ0VDQUFRUjgyQWd4QkFDRVFERWdMSUFCQjJ3RTJBaHdnQUNBRU5nSVVJQUJCK3BhQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4SEN5QUFRZmdBTmdJY0lBQWdERFlDRkNBQVFjcVlnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SZ3NnQUVIUkFEWUNIQ0FBSUFVMkFoUWdBRUd3bDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVVTElBQkIrUUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTVJBc2dBRUg0QURZQ0hDQUFJQUUyQWhRZ0FFSEttSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERU1MSUFCQjVBQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4Q0N5QUFRZGNBTmdJY0lBQWdBVFlDRkNBQVFjbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1RUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNUUFzZ0FFSENBRFlDSENBQUlBRTJBaFFnQUVIam1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREOExJQUJCQURZQ0JDQUFJQThnRHhDeGdJQ0FBQ0lFUlEwQklBQkJPallDSENBQUlBUTJBZ3dnQUNBUFFRRnFOZ0lVUVFBaEVBdytDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXNZQ0FnQUFpQkVVTkFDQUFRVHMyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU1QZ3NnQVVFQmFpRUJEQzBMSUE5QkFXb2hBUXd0Q3lBQVFRQTJBaHdnQUNBUE5nSVVJQUJCNUpLQWdBQTJBaEFnQUVFRU5nSU1RUUFoRUF3N0N5QUFRVFkyQWh3Z0FDQUVOZ0lVSUFBZ0FqWUNERUVBSVJBTU9nc2dBRUV1TmdJY0lBQWdEallDRkNBQUlBUTJBZ3hCQUNFUUREa0xJQUJCMEFBMkFod2dBQ0FCTmdJVUlBQkJrWmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXc0Q3lBTlFRRnFJUUVNTEFzZ0FFRVZOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5nc2dBRUViTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OUXNnQUVFUE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTkFzZ0FFRUxOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU13c2dBRUVhTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NZ3NnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTVFzZ0FFRUtOZ0ljSUFBZ0FUWUNGQ0FBUWVTV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1Bc2dBRUVlTmdJY0lBQWdBVFlDRkNBQVFmbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Md3NnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRZHFOZ0lBQU5nSVFJQUJCRkRZQ0RFRUFJUkFNTGdzZ0FFRUVOZ0ljSUFBZ0FUWUNGQ0FBUWJDWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUxRc2dBRUVBTmdJQUlBdEJBV29oQ3d0QnVBRWhFQXdTQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRZlVBSVJBTUVRc2dBU0VCQWtBZ0FDMEFLVUVGUncwQVFlTUFJUkFNRVF0QjRnQWhFQXdRQzBFQUlSQWdBRUVBTmdJY0lBQkI1SkdBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBd29DeUFBUVFBMkFnQWdGMEVCYWlFQlFjQUFJUkFNRGd0QkFTRUJDeUFBSUFFNkFDd2dBRUVBTmdJQUlCZEJBV29oQVF0QktDRVFEQXNMSUFFaEFRdEJPQ0VRREFrTEFrQWdBU0lQSUFKR0RRQURRQUpBSUE4dEFBQkJnTDZBZ0FCcUxRQUFJZ0ZCQVVZTkFDQUJRUUpIRFFNZ0QwRUJhaUVCREFRTElBOUJBV29pRHlBQ1J3MEFDMEUrSVJBTUlndEJQaUVRRENFTElBQkJBRG9BTENBUElRRU1BUXRCQ3lFUURBWUxRVG9oRUF3RkN5QUJRUUZxSVFGQkxTRVFEQVFMSUFBZ0FUb0FMQ0FBUVFBMkFnQWdGa0VCYWlFQlFRd2hFQXdEQ3lBQVFRQTJBZ0FnRjBFQmFpRUJRUW9oRUF3Q0N5QUFRUUEyQWdBTElBQkJBRG9BTENBTklRRkJDU0VRREFBTEMwRUFJUkFnQUVFQU5nSWNJQUFnQ3pZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1hDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NqWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdXQzBFQUlSQWdBRUVBTmdJY0lBQWdDVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3VkMwRUFJUkFnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1VDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWMyUWdJQUFOZ0lRSUFCQkNUWUNEQXdUQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlbUtnSUFBTmdJUUlBQkJDVFlDREF3U0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYmVRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1JDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVp5UmdJQUFOZ0lRSUFCQkNUWUNEQXdRQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3UEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWmVWZ0lBQU5nSVFJQUJCRHpZQ0RBd09DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNDU2dJQUFOZ0lRSUFCQkN6WUNEQXdOQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaV0pnSUFBTmdJUUlBQkJDellDREF3TUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZUdQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0xDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZ1UGdJQUFOZ0lRSUFCQkNqWUNEQXdLQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmR1pnSUFBTmdJUUlBQkJBallDREF3SkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY1NVZ0lBQU5nSVFJQUJCQWpZQ0RBd0lDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZLVmdJQUFOZ0lRSUFCQkFqWUNEQXdIQ3lBQVFRSTJBaHdnQUNBQk5nSVVJQUJCbkpxQWdBQTJBaEFnQUVFV05nSU1RUUFoRUF3R0MwRUJJUkFNQlF0QjFBQWhFQ0FCSWdRZ0FrWU5CQ0FEUVFocUlBQWdCQ0FDUWRqQ2dJQUFRUW9ReFlDQWdBQWdBeWdDRENFRUlBTW9BZ2dPQXdFRUFnQUxFTXFBZ0lBQUFBc2dBRUVBTmdJY0lBQkJ0WnFBZ0FBMkFoQWdBRUVYTmdJTUlBQWdCRUVCYWpZQ0ZFRUFJUkFNQWdzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWNxYWdJQUFOZ0lRSUFCQkNUWUNERUVBSVJBTUFRc0NRQ0FCSWdRZ0FrY05BRUVpSVJBTUFRc2dBRUdKZ0lDQUFEWUNDQ0FBSUFRMkFnUkJJU0VRQ3lBRFFSQnFKSUNBZ0lBQUlCQUxyd0VCQW44Z0FTZ0NBQ0VHQWtBQ1FDQUNJQU5HRFFBZ0JDQUdhaUVFSUFZZ0Eyb2dBbXNoQnlBQ0lBWkJmM01nQldvaUJtb2hCUU5BQWtBZ0FpMEFBQ0FFTFFBQVJnMEFRUUloQkF3REN3SkFJQVlOQUVFQUlRUWdCU0VDREFNTElBWkJmMm9oQmlBRVFRRnFJUVFnQWtFQmFpSUNJQU5IRFFBTElBY2hCaUFESVFJTElBQkJBVFlDQUNBQklBWTJBZ0FnQUNBQ05nSUVEd3NnQVVFQU5nSUFJQUFnQkRZQ0FDQUFJQUkyQWdRTENnQWdBQkRIZ0lDQUFBdnlOZ0VMZnlPQWdJQ0FBRUVRYXlJQkpJQ0FnSUFBQWtCQkFDZ0NvTkNBZ0FBTkFFRUFFTXVBZ0lBQVFZRFVoSUFBYXlJQ1Fka0FTUTBBUVFBaEF3SkFRUUFvQXVEVGdJQUFJZ1FOQUVFQVFuODNBdXpUZ0lBQVFRQkNnSUNFZ0lDQXdBQTNBdVRUZ0lBQVFRQWdBVUVJYWtGd2NVSFlxdFdxQlhNaUJEWUM0Tk9BZ0FCQkFFRUFOZ0wwMDRDQUFFRUFRUUEyQXNUVGdJQUFDMEVBSUFJMkFzelRnSUFBUVFCQmdOU0VnQUEyQXNqVGdJQUFRUUJCZ05TRWdBQTJBcGpRZ0lBQVFRQWdCRFlDck5DQWdBQkJBRUYvTmdLbzBJQ0FBQU5BSUFOQnhOQ0FnQUJxSUFOQnVOQ0FnQUJxSWdRMkFnQWdCQ0FEUWJEUWdJQUFhaUlGTmdJQUlBTkJ2TkNBZ0FCcUlBVTJBZ0FnQTBITTBJQ0FBR29nQTBIQTBJQ0FBR29pQlRZQ0FDQUZJQVEyQWdBZ0EwSFUwSUNBQUdvZ0EwSEkwSUNBQUdvaUJEWUNBQ0FFSUFVMkFnQWdBMEhRMElDQUFHb2dCRFlDQUNBRFFTQnFJZ05CZ0FKSERRQUxRWURVaElBQVFYaEJnTlNFZ0FCclFROXhRUUJCZ05TRWdBQkJDR3BCRDNFYklnTnFJZ1JCQkdvZ0FrRklhaUlGSUFOcklnTkJBWEkyQWdCQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFRWURVaElBQUlBVnFRVGcyQWdRTEFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjdBRkxEUUFDUUVFQUtBS0kwSUNBQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJQ1FRTjJJZ1IySWdOQkEzRkZEUUFDUUFKQUlBTkJBWEVnQkhKQkFYTWlCVUVEZENJRVFiRFFnSUFBYWlJRElBUkJ1TkNBZ0FCcUtBSUFJZ1FvQWdnaUFrY05BRUVBSUFaQmZpQUZkM0UyQW9qUWdJQUFEQUVMSUFNZ0FqWUNDQ0FDSUFNMkFnd0xJQVJCQ0dvaEF5QUVJQVZCQTNRaUJVRURjallDQkNBRUlBVnFJZ1FnQkNnQ0JFRUJjallDQkF3TUN5QUNRUUFvQXBEUWdJQUFJZ2RORFFFQ1FDQURSUTBBQWtBQ1FDQURJQVIwUVFJZ0JIUWlBMEVBSUFOcmNuRWlBMEVBSUFOcmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJFRUZka0VJY1NJRklBTnlJQVFnQlhZaUEwRUNka0VFY1NJRWNpQURJQVIySWdOQkFYWkJBbkVpQkhJZ0F5QUVkaUlEUVFGMlFRRnhJZ1J5SUFNZ0JIWnFJZ1JCQTNRaUEwR3cwSUNBQUdvaUJTQURRYmpRZ0lBQWFpZ0NBQ0lES0FJSUlnQkhEUUJCQUNBR1FYNGdCSGR4SWdZMkFvalFnSUFBREFFTElBVWdBRFlDQ0NBQUlBVTJBZ3dMSUFNZ0FrRURjallDQkNBRElBUkJBM1FpQkdvZ0JDQUNheUlGTmdJQUlBTWdBbW9pQUNBRlFRRnlOZ0lFQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRUUNRQUpBSUFaQkFTQUhRUU4yZENJSWNRMEFRUUFnQmlBSWNqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRU5nSU1JQUlnQkRZQ0NDQUVJQUkyQWd3Z0JDQUlOZ0lJQ3lBRFFRaHFJUU5CQUNBQU5nS2MwSUNBQUVFQUlBVTJBcERRZ0lBQURBd0xRUUFvQW96UWdJQUFJZ2xGRFFFZ0NVRUFJQWxyY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacVFRSjBRYmpTZ0lBQWFpZ0NBQ0lBS0FJRVFYaHhJQUpySVFRZ0FDRUZBa0FEUUFKQUlBVW9BaEFpQXcwQUlBVkJGR29vQWdBaUEwVU5BZ3NnQXlnQ0JFRjRjU0FDYXlJRklBUWdCU0FFU1NJRkd5RUVJQU1nQUNBRkd5RUFJQU1oQlF3QUN3c2dBQ2dDR0NFS0FrQWdBQ2dDRENJSUlBQkdEUUFnQUNnQ0NDSURRUUFvQXBqUWdJQUFTUm9nQ0NBRE5nSUlJQU1nQ0RZQ0RBd0xDd0pBSUFCQkZHb2lCU2dDQUNJRERRQWdBQ2dDRUNJRFJRMERJQUJCRUdvaEJRc0RRQ0FGSVFzZ0F5SUlRUlJxSWdVb0FnQWlBdzBBSUFoQkVHb2hCU0FJS0FJUUlnTU5BQXNnQzBFQU5nSUFEQW9MUVg4aEFpQUFRYjkvU3cwQUlBQkJFMm9pQTBGd2NTRUNRUUFvQW96UWdJQUFJZ2RGRFFCQkFDRUxBa0FnQWtHQUFra05BRUVmSVFzZ0FrSC8vLzhIU3cwQUlBTkJDSFlpQXlBRFFZRCtQMnBCRUhaQkNIRWlBM1FpQkNBRVFZRGdIMnBCRUhaQkJIRWlCSFFpQlNBRlFZQ0FEMnBCRUhaQkFuRWlCWFJCRDNZZ0F5QUVjaUFGY21zaUEwRUJkQ0FDSUFOQkZXcDJRUUZ4Y2tFY2FpRUxDMEVBSUFKcklRUUNRQUpBQWtBQ1FDQUxRUUowUWJqU2dJQUFhaWdDQUNJRkRRQkJBQ0VEUVFBaENBd0JDMEVBSVFNZ0FrRUFRUmtnQzBFQmRtc2dDMEVmUmh0MElRQkJBQ0VJQTBBQ1FDQUZLQUlFUVhoeElBSnJJZ1lnQkU4TkFDQUdJUVFnQlNFSUlBWU5BRUVBSVFRZ0JTRUlJQVVoQXd3REN5QURJQVZCRkdvb0FnQWlCaUFHSUFVZ0FFRWRka0VFY1dwQkVHb29BZ0FpQlVZYklBTWdCaHNoQXlBQVFRRjBJUUFnQlEwQUN3c0NRQ0FESUFoeURRQkJBQ0VJUVFJZ0MzUWlBMEVBSUFOcmNpQUhjU0lEUlEwRElBTkJBQ0FEYTNGQmYyb2lBeUFEUVF4MlFSQnhJZ04ySWdWQkJYWkJDSEVpQUNBRGNpQUZJQUIySWdOQkFuWkJCSEVpQlhJZ0F5QUZkaUlEUVFGMlFRSnhJZ1Z5SUFNZ0JYWWlBMEVCZGtFQmNTSUZjaUFESUFWMmFrRUNkRUc0MG9DQUFHb29BZ0FoQXdzZ0EwVU5BUXNEUUNBREtBSUVRWGh4SUFKcklnWWdCRWtoQUFKQUlBTW9BaEFpQlEwQUlBTkJGR29vQWdBaEJRc2dCaUFFSUFBYklRUWdBeUFJSUFBYklRZ2dCU0VESUFVTkFBc0xJQWhGRFFBZ0JFRUFLQUtRMElDQUFDQUNhMDhOQUNBSUtBSVlJUXNDUUNBSUtBSU1JZ0FnQ0VZTkFDQUlLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUFJQU0yQWdnZ0F5QUFOZ0lNREFrTEFrQWdDRUVVYWlJRktBSUFJZ01OQUNBSUtBSVFJZ05GRFFNZ0NFRVFhaUVGQ3dOQUlBVWhCaUFESWdCQkZHb2lCU2dDQUNJRERRQWdBRUVRYWlFRklBQW9BaEFpQXcwQUN5QUdRUUEyQWdBTUNBc0NRRUVBS0FLUTBJQ0FBQ0lESUFKSkRRQkJBQ2dDbk5DQWdBQWhCQUpBQWtBZ0F5QUNheUlGUVJCSkRRQWdCQ0FDYWlJQUlBVkJBWEkyQWdSQkFDQUZOZ0tRMElDQUFFRUFJQUEyQXB6UWdJQUFJQVFnQTJvZ0JUWUNBQ0FFSUFKQkEzSTJBZ1FNQVFzZ0JDQURRUU55TmdJRUlBUWdBMm9pQXlBREtBSUVRUUZ5TmdJRVFRQkJBRFlDbk5DQWdBQkJBRUVBTmdLUTBJQ0FBQXNnQkVFSWFpRUREQW9MQWtCQkFDZ0NsTkNBZ0FBaUFDQUNUUTBBUVFBb0FxRFFnSUFBSWdNZ0Ftb2lCQ0FBSUFKcklnVkJBWEkyQWdSQkFDQUZOZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQU1nQWtFRGNqWUNCQ0FEUVFocUlRTU1DZ3NDUUFKQVFRQW9BdURUZ0lBQVJRMEFRUUFvQXVqVGdJQUFJUVFNQVF0QkFFSi9Od0xzMDRDQUFFRUFRb0NBaElDQWdNQUFOd0xrMDRDQUFFRUFJQUZCREdwQmNIRkIyS3JWcWdWek5nTGcwNENBQUVFQVFRQTJBdlRUZ0lBQVFRQkJBRFlDeE5PQWdBQkJnSUFFSVFRTFFRQWhBd0pBSUFRZ0FrSEhBR29pQjJvaUJrRUFJQVJySWd0eElnZ2dBa3NOQUVFQVFUQTJBdmpUZ0lBQURBb0xBa0JCQUNnQ3dOT0FnQUFpQTBVTkFBSkFRUUFvQXJqVGdJQUFJZ1FnQ0dvaUJTQUVUUTBBSUFVZ0EwME5BUXRCQUNFRFFRQkJNRFlDK05PQWdBQU1DZ3RCQUMwQXhOT0FnQUJCQkhFTkJBSkFBa0FDUUVFQUtBS2cwSUNBQUNJRVJRMEFRY2pUZ0lBQUlRTURRQUpBSUFNb0FnQWlCU0FFU3cwQUlBVWdBeWdDQkdvZ0JFc05Bd3NnQXlnQ0NDSUREUUFMQzBFQUVNdUFnSUFBSWdCQmYwWU5CU0FJSVFZQ1FFRUFLQUxrMDRDQUFDSURRWDlxSWdRZ0FIRkZEUUFnQ0NBQWF5QUVJQUJxUVFBZ0EydHhhaUVHQ3lBR0lBSk5EUVVnQmtIKy8vLy9CMHNOQlFKQVFRQW9Bc0RUZ0lBQUlnTkZEUUJCQUNnQ3VOT0FnQUFpQkNBR2FpSUZJQVJORFFZZ0JTQURTdzBHQ3lBR0VNdUFnSUFBSWdNZ0FFY05BUXdIQ3lBR0lBQnJJQXR4SWdaQi92Ly8vd2RMRFFRZ0JoRExnSUNBQUNJQUlBTW9BZ0FnQXlnQ0JHcEdEUU1nQUNFREN3SkFJQU5CZjBZTkFDQUNRY2dBYWlBR1RRMEFBa0FnQnlBR2EwRUFLQUxvMDRDQUFDSUVha0VBSUFScmNTSUVRZjcvLy84SFRRMEFJQU1oQUF3SEN3SkFJQVFReTRDQWdBQkJmMFlOQUNBRUlBWnFJUVlnQXlFQURBY0xRUUFnQm1zUXk0Q0FnQUFhREFRTElBTWhBQ0FEUVg5SERRVU1Bd3RCQUNFSURBY0xRUUFoQUF3RkN5QUFRWDlIRFFJTFFRQkJBQ2dDeE5PQWdBQkJCSEkyQXNUVGdJQUFDeUFJUWY3Ly8vOEhTdzBCSUFnUXk0Q0FnQUFoQUVFQUVNdUFnSUFBSVFNZ0FFRi9SZzBCSUFOQmYwWU5BU0FBSUFOUERRRWdBeUFBYXlJR0lBSkJPR3BORFFFTFFRQkJBQ2dDdU5PQWdBQWdCbW9pQXpZQ3VOT0FnQUFDUUNBRFFRQW9BcnpUZ0lBQVRRMEFRUUFnQXpZQ3ZOT0FnQUFMQWtBQ1FBSkFBa0JCQUNnQ29OQ0FnQUFpQkVVTkFFSEkwNENBQUNFREEwQWdBQ0FES0FJQUlnVWdBeWdDQkNJSWFrWU5BaUFES0FJSUlnTU5BQXdEQ3dzQ1FBSkFRUUFvQXBqUWdJQUFJZ05GRFFBZ0FDQURUdzBCQzBFQUlBQTJBcGpRZ0lBQUMwRUFJUU5CQUNBR05nTE0wNENBQUVFQUlBQTJBc2pUZ0lBQVFRQkJmellDcU5DQWdBQkJBRUVBS0FMZzA0Q0FBRFlDck5DQWdBQkJBRUVBTmdMVTA0Q0FBQU5BSUFOQnhOQ0FnQUJxSUFOQnVOQ0FnQUJxSWdRMkFnQWdCQ0FEUWJEUWdJQUFhaUlGTmdJQUlBTkJ2TkNBZ0FCcUlBVTJBZ0FnQTBITTBJQ0FBR29nQTBIQTBJQ0FBR29pQlRZQ0FDQUZJQVEyQWdBZ0EwSFUwSUNBQUdvZ0EwSEkwSUNBQUdvaUJEWUNBQ0FFSUFVMkFnQWdBMEhRMElDQUFHb2dCRFlDQUNBRFFTQnFJZ05CZ0FKSERRQUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnUWdCa0ZJYWlJRklBTnJJZ05CQVhJMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBSUFBZ0JXcEJPRFlDQkF3Q0N5QURMUUFNUVFoeERRQWdCQ0FGU1EwQUlBUWdBRThOQUNBRVFYZ2dCR3RCRDNGQkFDQUVRUWhxUVE5eEd5SUZhaUlBUVFBb0FwVFFnSUFBSUFacUlnc2dCV3NpQlVFQmNqWUNCQ0FESUFnZ0JtbzJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRk5nS1UwSUNBQUVFQUlBQTJBcURRZ0lBQUlBUWdDMnBCT0RZQ0JBd0JDd0pBSUFCQkFDZ0NtTkNBZ0FBaUNFOE5BRUVBSUFBMkFwalFnSUFBSUFBaENBc2dBQ0FHYWlFRlFjalRnSUFBSVFNQ1FBSkFBa0FDUUFKQUFrQUNRQU5BSUFNb0FnQWdCVVlOQVNBREtBSUlJZ01OQUF3Q0N3c2dBeTBBREVFSWNVVU5BUXRCeU5PQWdBQWhBd05BQWtBZ0F5Z0NBQ0lGSUFSTERRQWdCU0FES0FJRWFpSUZJQVJMRFFNTElBTW9BZ2doQXd3QUN3c2dBeUFBTmdJQUlBTWdBeWdDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZCQUNBQVFRaHFRUTl4RzJvaUN5QUNRUU55TmdJRUlBVkJlQ0FGYTBFUGNVRUFJQVZCQ0dwQkQzRWJhaUlHSUFzZ0Ftb2lBbXNoQXdKQUlBWWdCRWNOQUVFQUlBSTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBMm9pQXpZQ2xOQ0FnQUFnQWlBRFFRRnlOZ0lFREFNTEFrQWdCa0VBS0FLYzBJQ0FBRWNOQUVFQUlBSTJBcHpRZ0lBQVFRQkJBQ2dDa05DQWdBQWdBMm9pQXpZQ2tOQ0FnQUFnQWlBRFFRRnlOZ0lFSUFJZ0Eyb2dBellDQUF3REN3SkFJQVlvQWdRaUJFRURjVUVCUncwQUlBUkJlSEVoQndKQUFrQWdCRUgvQVVzTkFDQUdLQUlJSWdVZ0JFRURkaUlJUVFOMFFiRFFnSUFBYWlJQVJob0NRQ0FHS0FJTUlnUWdCVWNOQUVFQVFRQW9Bb2pRZ0lBQVFYNGdDSGR4TmdLSTBJQ0FBQXdDQ3lBRUlBQkdHaUFFSUFVMkFnZ2dCU0FFTmdJTURBRUxJQVlvQWhnaENRSkFBa0FnQmlnQ0RDSUFJQVpHRFFBZ0JpZ0NDQ0lFSUFoSkdpQUFJQVEyQWdnZ0JDQUFOZ0lNREFFTEFrQWdCa0VVYWlJRUtBSUFJZ1VOQUNBR1FSQnFJZ1FvQWdBaUJRMEFRUUFoQUF3QkN3TkFJQVFoQ0NBRklnQkJGR29pQkNnQ0FDSUZEUUFnQUVFUWFpRUVJQUFvQWhBaUJRMEFDeUFJUVFBMkFnQUxJQWxGRFFBQ1FBSkFJQVlnQmlnQ0hDSUZRUUowUWJqU2dJQUFhaUlFS0FJQVJ3MEFJQVFnQURZQ0FDQUFEUUZCQUVFQUtBS00wSUNBQUVGK0lBVjNjVFlDak5DQWdBQU1BZ3NnQ1VFUVFSUWdDU2dDRUNBR1JodHFJQUEyQWdBZ0FFVU5BUXNnQUNBSk5nSVlBa0FnQmlnQ0VDSUVSUTBBSUFBZ0JEWUNFQ0FFSUFBMkFoZ0xJQVlvQWhRaUJFVU5BQ0FBUVJScUlBUTJBZ0FnQkNBQU5nSVlDeUFISUFOcUlRTWdCaUFIYWlJR0tBSUVJUVFMSUFZZ0JFRitjVFlDQkNBQ0lBTnFJQU0yQWdBZ0FpQURRUUZ5TmdJRUFrQWdBMEgvQVVzTkFDQURRWGh4UWJEUWdJQUFhaUVFQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQTBFRGRuUWlBM0VOQUVFQUlBVWdBM0kyQW9qUWdJQUFJQVFoQXd3QkN5QUVLQUlJSVFNTElBTWdBallDRENBRUlBSTJBZ2dnQWlBRU5nSU1JQUlnQXpZQ0NBd0RDMEVmSVFRQ1FDQURRZi8vL3dkTERRQWdBMEVJZGlJRUlBUkJnUDQvYWtFUWRrRUljU0lFZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQUlBQkJnSUFQYWtFUWRrRUNjU0lBZEVFUGRpQUVJQVZ5SUFCeWF5SUVRUUYwSUFNZ0JFRVZhblpCQVhGeVFSeHFJUVFMSUFJZ0JEWUNIQ0FDUWdBM0FoQWdCRUVDZEVHNDBvQ0FBR29oQlFKQVFRQW9Bb3pRZ0lBQUlnQkJBU0FFZENJSWNRMEFJQVVnQWpZQ0FFRUFJQUFnQ0hJMkFvelFnSUFBSUFJZ0JUWUNHQ0FDSUFJMkFnZ2dBaUFDTmdJTURBTUxJQU5CQUVFWklBUkJBWFpySUFSQkgwWWJkQ0VFSUFVb0FnQWhBQU5BSUFBaUJTZ0NCRUY0Y1NBRFJnMENJQVJCSFhZaEFDQUVRUUYwSVFRZ0JTQUFRUVJ4YWtFUWFpSUlLQUlBSWdBTkFBc2dDQ0FDTmdJQUlBSWdCVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUlMSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYklnTnFJZ3NnQmtGSWFpSUlJQU5ySWdOQkFYSTJBZ1FnQUNBSWFrRTROZ0lFSUFRZ0JVRTNJQVZyUVE5eFFRQWdCVUZKYWtFUGNSdHFRVUZxSWdnZ0NDQUVRUkJxU1JzaUNFRWpOZ0lFUVFCQkFDZ0M4Tk9BZ0FBMkFxVFFnSUFBUVFBZ0F6WUNsTkNBZ0FCQkFDQUxOZ0tnMElDQUFDQUlRUkJxUVFBcEF0RFRnSUFBTndJQUlBaEJBQ2tDeU5PQWdBQTNBZ2hCQUNBSVFRaHFOZ0xRMDRDQUFFRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVFQU5nTFUwNENBQUNBSVFTUnFJUU1EUUNBRFFRYzJBZ0FnQTBFRWFpSURJQVZKRFFBTElBZ2dCRVlOQXlBSUlBZ29BZ1JCZm5FMkFnUWdDQ0FJSUFScklnQTJBZ0FnQkNBQVFRRnlOZ0lFQWtBZ0FFSC9BVXNOQUNBQVFYaHhRYkRRZ0lBQWFpRURBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBRUVEZG5RaUFIRU5BRUVBSUFVZ0FISTJBb2pRZ0lBQUlBTWhCUXdCQ3lBREtBSUlJUVVMSUFVZ0JEWUNEQ0FESUFRMkFnZ2dCQ0FETmdJTUlBUWdCVFlDQ0F3RUMwRWZJUU1DUUNBQVFmLy8vd2RMRFFBZ0FFRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lJSUFoQmdJQVBha0VRZGtFQ2NTSUlkRUVQZGlBRElBVnlJQWh5YXlJRFFRRjBJQUFnQTBFVmFuWkJBWEZ5UVJ4cUlRTUxJQVFnQXpZQ0hDQUVRZ0EzQWhBZ0EwRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdoQkFTQURkQ0lHY1EwQUlBVWdCRFlDQUVFQUlBZ2dCbkkyQW96UWdJQUFJQVFnQlRZQ0dDQUVJQVEyQWdnZ0JDQUVOZ0lNREFRTElBQkJBRUVaSUFOQkFYWnJJQU5CSDBZYmRDRURJQVVvQWdBaENBTkFJQWdpQlNnQ0JFRjRjU0FBUmcwRElBTkJIWFloQ0NBRFFRRjBJUU1nQlNBSVFRUnhha0VRYWlJR0tBSUFJZ2dOQUFzZ0JpQUVOZ0lBSUFRZ0JUWUNHQ0FFSUFRMkFnd2dCQ0FFTmdJSURBTUxJQVVvQWdnaUF5QUNOZ0lNSUFVZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFGTmdJTUlBSWdBellDQ0FzZ0MwRUlhaUVEREFVTElBVW9BZ2dpQXlBRU5nSU1JQVVnQkRZQ0NDQUVRUUEyQWhnZ0JDQUZOZ0lNSUFRZ0F6WUNDQXRCQUNnQ2xOQ0FnQUFpQXlBQ1RRMEFRUUFvQXFEUWdJQUFJZ1FnQW1vaUJTQURJQUpySWdOQkFYSTJBZ1JCQUNBRE5nS1UwSUNBQUVFQUlBVTJBcURRZ0lBQUlBUWdBa0VEY2pZQ0JDQUVRUWhxSVFNTUF3dEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUFnc0NRQ0FMUlEwQUFrQUNRQ0FJSUFnb0Fod2lCVUVDZEVHNDBvQ0FBR29pQXlnQ0FFY05BQ0FESUFBMkFnQWdBQTBCUVFBZ0IwRitJQVYzY1NJSE5nS00wSUNBQUF3Q0N5QUxRUkJCRkNBTEtBSVFJQWhHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQXMyQWhnQ1FDQUlLQUlRSWdORkRRQWdBQ0FETmdJUUlBTWdBRFlDR0FzZ0NFRVVhaWdDQUNJRFJRMEFJQUJCRkdvZ0F6WUNBQ0FESUFBMkFoZ0xBa0FDUUNBRVFROUxEUUFnQ0NBRUlBSnFJZ05CQTNJMkFnUWdDQ0FEYWlJRElBTW9BZ1JCQVhJMkFnUU1BUXNnQ0NBQ2FpSUFJQVJCQVhJMkFnUWdDQ0FDUVFOeU5nSUVJQUFnQkdvZ0JEWUNBQUpBSUFSQi93RkxEUUFnQkVGNGNVR3cwSUNBQUdvaEF3SkFBa0JCQUNnQ2lOQ0FnQUFpQlVFQklBUkJBM1owSWdSeERRQkJBQ0FGSUFSeU5nS0kwSUNBQUNBRElRUU1BUXNnQXlnQ0NDRUVDeUFFSUFBMkFnd2dBeUFBTmdJSUlBQWdBellDRENBQUlBUTJBZ2dNQVF0Qkh5RURBa0FnQkVILy8vOEhTdzBBSUFSQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCU0FGUVlEZ0gycEJFSFpCQkhFaUJYUWlBaUFDUVlDQUQycEJFSFpCQW5FaUFuUkJEM1lnQXlBRmNpQUNjbXNpQTBFQmRDQUVJQU5CRldwMlFRRnhja0VjYWlFREN5QUFJQU0yQWh3Z0FFSUFOd0lRSUFOQkFuUkJ1TktBZ0FCcUlRVUNRQ0FIUVFFZ0EzUWlBbkVOQUNBRklBQTJBZ0JCQUNBSElBSnlOZ0tNMElDQUFDQUFJQVUyQWhnZ0FDQUFOZ0lJSUFBZ0FEWUNEQXdCQ3lBRVFRQkJHU0FEUVFGMmF5QURRUjlHRzNRaEF5QUZLQUlBSVFJQ1FBTkFJQUlpQlNnQ0JFRjRjU0FFUmcwQklBTkJIWFloQWlBRFFRRjBJUU1nQlNBQ1FRUnhha0VRYWlJR0tBSUFJZ0lOQUFzZ0JpQUFOZ0lBSUFBZ0JUWUNHQ0FBSUFBMkFnd2dBQ0FBTmdJSURBRUxJQVVvQWdnaUF5QUFOZ0lNSUFVZ0FEWUNDQ0FBUVFBMkFoZ2dBQ0FGTmdJTUlBQWdBellDQ0FzZ0NFRUlhaUVEREFFTEFrQWdDa1VOQUFKQUFrQWdBQ0FBS0FJY0lnVkJBblJCdU5LQWdBQnFJZ01vQWdCSERRQWdBeUFJTmdJQUlBZ05BVUVBSUFsQmZpQUZkM0UyQW96UWdJQUFEQUlMSUFwQkVFRVVJQW9vQWhBZ0FFWWJhaUFJTmdJQUlBaEZEUUVMSUFnZ0NqWUNHQUpBSUFBb0FoQWlBMFVOQUNBSUlBTTJBaEFnQXlBSU5nSVlDeUFBUVJScUtBSUFJZ05GRFFBZ0NFRVVhaUFETmdJQUlBTWdDRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUFJQVFnQW1vaUEwRURjallDQkNBQUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUFJQUpxSWdVZ0JFRUJjallDQkNBQUlBSkJBM0kyQWdRZ0JTQUVhaUFFTmdJQUFrQWdCMFVOQUNBSFFYaHhRYkRRZ0lBQWFpRUNRUUFvQXB6UWdJQUFJUU1DUUFKQVFRRWdCMEVEZG5RaUNDQUdjUTBBUVFBZ0NDQUdjallDaU5DQWdBQWdBaUVJREFFTElBSW9BZ2doQ0FzZ0NDQUROZ0lNSUFJZ0F6WUNDQ0FESUFJMkFnd2dBeUFJTmdJSUMwRUFJQVUyQXB6UWdJQUFRUUFnQkRZQ2tOQ0FnQUFMSUFCQkNHb2hBd3NnQVVFUWFpU0FnSUNBQUNBREN3b0FJQUFReVlDQWdBQUw0ZzBCQjM4Q1FDQUFSUTBBSUFCQmVHb2lBU0FBUVh4cUtBSUFJZ0pCZUhFaUFHb2hBd0pBSUFKQkFYRU5BQ0FDUVFOeFJRMEJJQUVnQVNnQ0FDSUNheUlCUVFBb0FwalFnSUFBSWdSSkRRRWdBaUFBYWlFQUFrQWdBVUVBS0FLYzBJQ0FBRVlOQUFKQUlBSkIvd0ZMRFFBZ0FTZ0NDQ0lFSUFKQkEzWWlCVUVEZEVHdzBJQ0FBR29pQmtZYUFrQWdBU2dDRENJQ0lBUkhEUUJCQUVFQUtBS0kwSUNBQUVGK0lBVjNjVFlDaU5DQWdBQU1Bd3NnQWlBR1Job2dBaUFFTmdJSUlBUWdBallDREF3Q0N5QUJLQUlZSVFjQ1FBSkFJQUVvQWd3aUJpQUJSZzBBSUFFb0FnZ2lBaUFFU1JvZ0JpQUNOZ0lJSUFJZ0JqWUNEQXdCQ3dKQUlBRkJGR29pQWlnQ0FDSUVEUUFnQVVFUWFpSUNLQUlBSWdRTkFFRUFJUVlNQVFzRFFDQUNJUVVnQkNJR1FSUnFJZ0lvQWdBaUJBMEFJQVpCRUdvaEFpQUdLQUlRSWdRTkFBc2dCVUVBTmdJQUN5QUhSUTBCQWtBQ1FDQUJJQUVvQWh3aUJFRUNkRUc0MG9DQUFHb2lBaWdDQUVjTkFDQUNJQVkyQWdBZ0JnMEJRUUJCQUNnQ2pOQ0FnQUJCZmlBRWQzRTJBb3pRZ0lBQURBTUxJQWRCRUVFVUlBY29BaEFnQVVZYmFpQUdOZ0lBSUFaRkRRSUxJQVlnQnpZQ0dBSkFJQUVvQWhBaUFrVU5BQ0FHSUFJMkFoQWdBaUFHTmdJWUN5QUJLQUlVSWdKRkRRRWdCa0VVYWlBQ05nSUFJQUlnQmpZQ0dBd0JDeUFES0FJRUlnSkJBM0ZCQTBjTkFDQURJQUpCZm5FMkFnUkJBQ0FBTmdLUTBJQ0FBQ0FCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFRHdzZ0FTQURUdzBBSUFNb0FnUWlBa0VCY1VVTkFBSkFBa0FnQWtFQ2NRMEFBa0FnQTBFQUtBS2cwSUNBQUVjTkFFRUFJQUUyQXFEUWdJQUFRUUJCQUNnQ2xOQ0FnQUFnQUdvaUFEWUNsTkNBZ0FBZ0FTQUFRUUZ5TmdJRUlBRkJBQ2dDbk5DQWdBQkhEUU5CQUVFQU5nS1EwSUNBQUVFQVFRQTJBcHpRZ0lBQUR3c0NRQ0FEUVFBb0FwelFnSUFBUncwQVFRQWdBVFlDbk5DQWdBQkJBRUVBS0FLUTBJQ0FBQ0FBYWlJQU5nS1EwSUNBQUNBQklBQkJBWEkyQWdRZ0FTQUFhaUFBTmdJQUR3c2dBa0Y0Y1NBQWFpRUFBa0FDUUNBQ1FmOEJTdzBBSUFNb0FnZ2lCQ0FDUVFOMklnVkJBM1JCc05DQWdBQnFJZ1pHR2dKQUlBTW9BZ3dpQWlBRVJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBRmQzRTJBb2pRZ0lBQURBSUxJQUlnQmtZYUlBSWdCRFlDQ0NBRUlBSTJBZ3dNQVFzZ0F5Z0NHQ0VIQWtBQ1FDQURLQUlNSWdZZ0EwWU5BQ0FES0FJSUlnSkJBQ2dDbU5DQWdBQkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQTBFVWFpSUNLQUlBSWdRTkFDQURRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRQUNRQUpBSUFNZ0F5Z0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFZMkFnQWdCa1VOQVFzZ0JpQUhOZ0lZQWtBZ0F5Z0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFNb0FoUWlBa1VOQUNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZQ3lBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUlBRkJBQ2dDbk5DQWdBQkhEUUZCQUNBQU5nS1EwSUNBQUE4TElBTWdBa0YrY1RZQ0JDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVDd0pBSUFCQi93RkxEUUFnQUVGNGNVR3cwSUNBQUdvaEFnSkFBa0JCQUNnQ2lOQ0FnQUFpQkVFQklBQkJBM1owSWdCeERRQkJBQ0FFSUFCeU5nS0kwSUNBQUNBQ0lRQU1BUXNnQWlnQ0NDRUFDeUFBSUFFMkFnd2dBaUFCTmdJSUlBRWdBallDRENBQklBQTJBZ2dQQzBFZklRSUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSUNJQUpCZ1A0L2FrRVFka0VJY1NJQ2RDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUdJQVpCZ0lBUGFrRVFka0VDY1NJR2RFRVBkaUFDSUFSeUlBWnlheUlDUVFGMElBQWdBa0VWYW5aQkFYRnlRUnhxSVFJTElBRWdBallDSENBQlFnQTNBaEFnQWtFQ2RFRzQwb0NBQUdvaEJBSkFBa0JCQUNnQ2pOQ0FnQUFpQmtFQklBSjBJZ054RFFBZ0JDQUJOZ0lBUVFBZ0JpQURjallDak5DQWdBQWdBU0FFTmdJWUlBRWdBVFlDQ0NBQklBRTJBZ3dNQVFzZ0FFRUFRUmtnQWtFQmRtc2dBa0VmUmh0MElRSWdCQ2dDQUNFR0FrQURRQ0FHSWdRb0FnUkJlSEVnQUVZTkFTQUNRUjEySVFZZ0FrRUJkQ0VDSUFRZ0JrRUVjV3BCRUdvaUF5Z0NBQ0lHRFFBTElBTWdBVFlDQUNBQklBUTJBaGdnQVNBQk5nSU1JQUVnQVRZQ0NBd0JDeUFFS0FJSUlnQWdBVFlDRENBRUlBRTJBZ2dnQVVFQU5nSVlJQUVnQkRZQ0RDQUJJQUEyQWdnTFFRQkJBQ2dDcU5DQWdBQkJmMm9pQVVGL0lBRWJOZ0tvMElDQUFBc0xCQUFBQUF0T0FBSkFJQUFOQUQ4QVFSQjBEd3NDUUNBQVFmLy9BM0VOQUNBQVFYOU1EUUFDUUNBQVFSQjJRQUFpQUVGL1J3MEFRUUJCTURZQytOT0FnQUJCZnc4TElBQkJFSFFQQ3hES2dJQ0FBQUFMOGdJQ0EzOEJmZ0pBSUFKRkRRQWdBQ0FCT2dBQUlBSWdBR29pQTBGL2FpQUJPZ0FBSUFKQkEwa05BQ0FBSUFFNkFBSWdBQ0FCT2dBQklBTkJmV29nQVRvQUFDQURRWDVxSUFFNkFBQWdBa0VIU1EwQUlBQWdBVG9BQXlBRFFYeHFJQUU2QUFBZ0FrRUpTUTBBSUFCQkFDQUFhMEVEY1NJRWFpSURJQUZCL3dGeFFZR0NoQWhzSWdFMkFnQWdBeUFDSUFSclFYeHhJZ1JxSWdKQmZHb2dBVFlDQUNBRVFRbEpEUUFnQXlBQk5nSUlJQU1nQVRZQ0JDQUNRWGhxSUFFMkFnQWdBa0YwYWlBQk5nSUFJQVJCR1VrTkFDQURJQUUyQWhnZ0F5QUJOZ0lVSUFNZ0FUWUNFQ0FESUFFMkFnd2dBa0Z3YWlBQk5nSUFJQUpCYkdvZ0FUWUNBQ0FDUVdocUlBRTJBZ0FnQWtGa2FpQUJOZ0lBSUFRZ0EwRUVjVUVZY2lJRmF5SUNRU0JKRFFBZ0FhMUNnWUNBZ0JCK0lRWWdBeUFGYWlFQkEwQWdBU0FHTndNWUlBRWdCamNERUNBQklBWTNBd2dnQVNBR053TUFJQUZCSUdvaEFTQUNRV0JxSWdKQkgwc05BQXNMSUFBTEM0NUlBUUJCZ0FnTGhrZ0JBQUFBQWdBQUFBTUFBQUFBQUFBQUFBQUFBQVFBQUFBRkFBQUFBQUFBQUFBQUFBQUdBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY1hWbGNua0FVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWliMlI1QUVOdmJuUmxiblF0VEdWdVozUm9JRzkyWlhKbWJHOTNBRU5vZFc1cklITnBlbVVnYjNabGNtWnNiM2NBVW1WemNHOXVjMlVnYjNabGNtWnNiM2NBU1c1MllXeHBaQ0J0WlhSb2IyUWdabTl5SUVoVVZGQXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdabTl5SUZKVVUxQXZlQzU0SUhKbGNYVmxjM1FBUlhod1pXTjBaV1FnVTA5VlVrTkZJRzFsZEdodlpDQm1iM0lnU1VORkwzZ3VlQ0J5WlhGMVpYTjBBRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnWm5KaFoyMWxiblFnYzNSaGNuUUFSWGh3WldOMFpXUWdaRzkwQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYzNSaGRIVnpBRWx1ZG1Gc2FXUWdjbVZ6Y0c5dWMyVWdjM1JoZEhWekFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTUFWWE5sY2lCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmNtVnpaWFJnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlvWldGa1pYSmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMkpsWjJsdVlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmMzUmhkSFZ6WDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmRtVnljMmx2Ymw5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzVnliRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMmhsWVdSbGNsOW1hV1ZzWkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhObGNuWmxjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQjJZV3gxWlNCamFHRnlBRWx1ZG1Gc2FXUWdhR1ZoWkdWeUlHWnBaV3hrSUdOb1lYSUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOTJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXbHViM0lnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRzFoYW05eUlIWmxjbk5wYjI0QVJYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQkRVa3hHSUdGbWRHVnlJSFpsY25OcGIyNEFTVzUyWVd4cFpDQklWRlJRSUhabGNuTnBiMjRBU1c1MllXeHBaQ0JvWldGa1pYSWdkRzlyWlc0QVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MWNtd0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSnpJR2x1SUhWeWJBQlZibVY0Y0dWamRHVmtJSE4wWVhKMElHTm9ZWElnYVc0Z2RYSnNBRVJ2ZFdKc1pTQkFJR2x1SUhWeWJBQkZiWEIwZVNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCRGIyNTBaVzUwTFV4bGJtZDBhQUJFZFhCc2FXTmhkR1VnUTI5dWRHVnVkQzFNWlc1bmRHZ0FTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0J3WVhSb0FFTnZiblJsYm5RdFRHVnVaM1JvSUdOaGJpZDBJR0psSUhCeVpYTmxiblFnZDJsMGFDQlVjbUZ1YzJabGNpMUZibU52WkdsdVp3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QnphWHBsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYM1poYkhWbEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nZG1Gc2RXVUFUV2x6YzJsdVp5QmxlSEJsWTNSbFpDQk1SaUJoWm5SbGNpQm9aV0ZrWlhJZ2RtRnNkV1VBU1c1MllXeHBaQ0JnVkhKaGJuTm1aWEl0Ulc1amIyUnBibWRnSUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJSEYxYjNSbElIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1ZrSUhaaGJIVmxBRkJoZFhObFpDQmllU0J2Ymw5b1pXRmtaWEp6WDJOdmJYQnNaWFJsQUVsdWRtRnNhV1FnUlU5R0lITjBZWFJsQUc5dVgzSmxjMlYwSUhCaGRYTmxBRzl1WDJOb2RXNXJYMmhsWVdSbGNpQndZWFZ6WlFCdmJsOXRaWE56WVdkbFgySmxaMmx1SUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDkyWVd4MVpTQndZWFZ6WlFCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRtVnljMmx2Ymw5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5MWNteGZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZZMmgxYm10ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmFHVmhaR1Z5WDNaaGJIVmxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZiV1YwYUc5a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZibUZ0WlNCd1lYVnpaUUJWYm1WNGNHVmpkR1ZrSUhOd1lXTmxJR0ZtZEdWeUlITjBZWEowSUd4cGJtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUc1aGJXVUFVR0YxYzJVZ2IyNGdRMDlPVGtWRFZDOVZjR2R5WVdSbEFGQmhkWE5sSUc5dUlGQlNTUzlWY0dkeVlXUmxBRVY0Y0dWamRHVmtJRWhVVkZBdk1pQkRiMjV1WldOMGFXOXVJRkJ5WldaaFkyVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXRaWFJvYjJRQVJYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdiV1YwYUc5a0FGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmFHVmhaR1Z5WDJacFpXeGtBRkJoZFhObFpBQkpiblpoYkdsa0lIZHZjbVFnWlc1amIzVnVkR1Z5WldRQVNXNTJZV3hwWkNCdFpYUm9iMlFnWlc1amIzVnVkR1Z5WldRQVZXNWxlSEJsWTNSbFpDQmphR0Z5SUdsdUlIVnliQ0J6WTJobGJXRUFVbVZ4ZFdWemRDQm9ZWE1nYVc1MllXeHBaQ0JnVkhKaGJuTm1aWEl0Ulc1amIyUnBibWRnQUZOWFNWUkRTRjlRVWs5WVdRQlZVMFZmVUZKUFdGa0FUVXRCUTFSSlZrbFVXUUJWVGxCU1QwTkZVMU5CUWt4RlgwVk9WRWxVV1FCRFQxQlpBRTFQVmtWRVgxQkZVazFCVGtWT1ZFeFpBRlJQVDE5RlFWSk1XUUJPVDFSSlJsa0FSa0ZKVEVWRVgwUkZVRVZPUkVWT1Exa0FRa0ZFWDBkQlZFVlhRVmtBVUV4QldRQlFWVlFBUTBoRlEwdFBWVlFBUjBGVVJWZEJXVjlVU1UxRlQxVlVBRkpGVVZWRlUxUmZWRWxOUlU5VlZBQk9SVlJYVDFKTFgwTlBUazVGUTFSZlZFbE5SVTlWVkFCRFQwNU9SVU5VU1U5T1gxUkpUVVZQVlZRQVRFOUhTVTVmVkVsTlJVOVZWQUJPUlZSWFQxSkxYMUpGUVVSZlZFbE5SVTlWVkFCUVQxTlVBRTFKVTBSSlVrVkRWRVZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOVNSVkZWUlZOVUFFTk1TVVZPVkY5RFRFOVRSVVJmVEU5QlJGOUNRVXhCVGtORlJGOVNSVkZWUlZOVUFFSkJSRjlTUlZGVlJWTlVBRWhVVkZCZlVrVlJWVVZUVkY5VFJVNVVYMVJQWDBoVVZGQlRYMUJQVWxRQVVrVlFUMUpVQUVsTlgwRmZWRVZCVUU5VUFGSkZVMFZVWDBOUFRsUkZUbFFBVGs5ZlEwOU9WRVZPVkFCUVFWSlVTVUZNWDBOUFRsUkZUbFFBU0ZCRlgwbE9Wa0ZNU1VSZlEwOU9VMVJCVGxRQVNGQkZYME5DWDFKRlUwVlVBRWRGVkFCSVVFVmZVMVJTU1VOVUFFTlBUa1pNU1VOVUFGUkZUVkJQVWtGU1dWOVNSVVJKVWtWRFZBQlFSVkpOUVU1RlRsUmZVa1ZFU1ZKRlExUUFRMDlPVGtWRFZBQk5WVXhVU1Y5VFZFRlVWVk1BU0ZCRlgwbE9Wa0ZNU1VSZlUxUkJWRlZUQUZSUFQxOU5RVTVaWDFKRlVWVkZVMVJUQUVWQlVreFpYMGhKVGxSVEFGVk9RVlpCU1V4QlFreEZYMFpQVWw5TVJVZEJURjlTUlVGVFQwNVRBRTlRVkVsUFRsTUFVMWRKVkVOSVNVNUhYMUJTVDFSUFEwOU1Vd0JXUVZKSlFVNVVYMEZNVTA5ZlRrVkhUMVJKUVZSRlV3Qk5WVXhVU1ZCTVJWOURTRTlKUTBWVEFFbE9WRVZTVGtGTVgxTkZVbFpGVWw5RlVsSlBVZ0JYUlVKZlUwVlNWa1ZTWDFWT1MwNVBWMDVmUlZKU1QxSUFVa0ZKVEVkVlRsOUZVbEpQVWdCSlJFVk9WRWxVV1Y5UVVrOVdTVVJGVWw5QlZWUklSVTVVU1VOQlZFbFBUbDlGVWxKUFVnQlRVMHhmUTBWU1ZFbEdTVU5CVkVWZlJWSlNUMUlBU1U1V1FVeEpSRjlZWDBaUFVsZEJVa1JGUkY5R1QxSUFVMFZVWDFCQlVrRk5SVlJGVWdCSFJWUmZVRUZTUVUxRlZFVlNBRWhRUlY5VlUwVlNBRk5GUlY5UFZFaEZVZ0JJVUVWZlEwSmZRMGhWVGt0ZlNFVkJSRVZTQUUxTFEwRk1SVTVFUVZJQVUwVlVWVkFBVjBWQ1gxTkZVbFpGVWw5SlUxOUVUMWRPQUZSRlFWSkVUMWRPQUVoUVJWOURURTlUUlVSZlEwOU9Ua1ZEVkVsUFRnQklSVlZTU1ZOVVNVTmZSVmhRU1ZKQlZFbFBUZ0JFU1ZORFQwNU9SVU5VUlVSZlQxQkZVa0ZVU1U5T0FFNVBUbDlCVlZSSVQxSkpWRUZVU1ZaRlgwbE9SazlTVFVGVVNVOU9BRWhRUlY5SlRsWkJURWxFWDFaRlVsTkpUMDRBU0ZCRlgwTkNYMDFGVTFOQlIwVmZRa1ZIU1U0QVUwbFVSVjlKVTE5R1VrOWFSVTRBU0ZCRlgwbE9Wa0ZNU1VSZlNFVkJSRVZTWDFSUFMwVk9BRWxPVmtGTVNVUmZWRTlMUlU0QVJrOVNRa2xFUkVWT0FFVk9TRUZPUTBWZldVOVZVbDlEUVV4TkFFaFFSVjlKVGxaQlRFbEVYMVZTVEFCQ1RFOURTMFZFWDBKWlgxQkJVa1ZPVkVGTVgwTlBUbFJTVDB3QVRVdERUMHdBUVVOTUFFaFFSVjlKVGxSRlVrNUJUQUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRlgxVk9UMFpHU1VOSlFVd0FTRkJGWDA5TEFGVk9URWxPU3dCVlRreFBRMHNBVUZKSkFGSkZWRkpaWDFkSlZFZ0FTRkJGWDBsT1ZrRk1TVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FTRkJGWDFWT1JWaFFSVU5VUlVSZlEwOU9WRVZPVkY5TVJVNUhWRWdBUmt4VlUwZ0FVRkpQVUZCQlZFTklBRTB0VTBWQlVrTklBRlZTU1Y5VVQwOWZURTlPUndCUVVrOURSVk5UU1U1SEFFMUpVME5GVEV4QlRrVlBWVk5mVUVWU1UwbFRWRVZPVkY5WFFWSk9TVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZWMEZTVGtsT1J3QklVRVZmU1U1V1FVeEpSRjlVVWtGT1UwWkZVbDlGVGtOUFJFbE9Sd0JGZUhCbFkzUmxaQ0JEVWt4R0FFaFFSVjlKVGxaQlRFbEVYME5JVlU1TFgxTkpXa1VBVFU5V1JRQkRUMDVVU1U1VlJRQklVRVZmUTBKZlUxUkJWRlZUWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOVdSVkpUU1U5T1gwTlBUVkJNUlZSRkFFaFFSVjlEUWw5VlVreGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZWa0ZNVlVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYMFZZVkVWT1UwbFBUbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDA1QlRVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwMUZVMU5CUjBWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlZFaFBSRjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZTRVZCUkVWU1gwWkpSVXhFWDBOUFRWQk1SVlJGQUVSRlRFVlVSUUJJVUVWZlNVNVdRVXhKUkY5RlQwWmZVMVJCVkVVQVNVNVdRVXhKUkY5VFUweGZRMFZTVkVsR1NVTkJWRVVBVUVGVlUwVUFUazlmVWtWVFVFOU9VMFVBVlU1VFZWQlFUMUpVUlVSZlRVVkVTVUZmVkZsUVJRQkhUMDVGQUU1UFZGOUJRME5GVUZSQlFreEZBRk5GVWxaSlEwVmZWVTVCVmtGSlRFRkNURVVBVWtGT1IwVmZUazlVWDFOQlZFbFRSa2xCUWt4RkFFOVNTVWRKVGw5SlUxOVZUbEpGUVVOSVFVSk1SUUJTUlZOUVQwNVRSVjlKVTE5VFZFRk1SUUJRVlZKSFJRQk5SVkpIUlFCU1JWRlZSVk5VWDBoRlFVUkZVbDlHU1VWTVJGTmZWRTlQWDB4QlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gxUlBUMTlNUVZKSFJRQlFRVmxNVDBGRVgxUlBUMTlNUVZKSFJRQkpUbE5WUmtaSlEwbEZUbFJmVTFSUFVrRkhSUUJJVUVWZlVFRlZVMFZFWDFWUVIxSkJSRVVBU0ZCRlgxQkJWVk5GUkY5SU1sOVZVRWRTUVVSRkFGTlBWVkpEUlFCQlRrNVBWVTVEUlFCVVVrRkRSUUJJVUVWZlZVNUZXRkJGUTFSRlJGOVRVRUZEUlFCRVJWTkRVa2xDUlFCVlRsTlZRbE5EVWtsQ1JRQlNSVU5QVWtRQVNGQkZYMGxPVmtGTVNVUmZUVVZVU0U5RUFFNVBWRjlHVDFWT1JBQlFVazlRUmtsT1JBQlZUa0pKVGtRQVVrVkNTVTVFQUZWT1FWVlVTRTlTU1ZwRlJBQk5SVlJJVDBSZlRrOVVYMEZNVEU5WFJVUUFTRlJVVUY5V1JWSlRTVTlPWDA1UFZGOVRWVkJRVDFKVVJVUUFRVXhTUlVGRVdWOVNSVkJQVWxSRlJBQkJRME5GVUZSRlJBQk9UMVJmU1UxUVRFVk5SVTVVUlVRQVRFOVBVRjlFUlZSRlExUkZSQUJJVUVWZlExSmZSVmhRUlVOVVJVUUFTRkJGWDB4R1gwVllVRVZEVkVWRUFFTlNSVUZVUlVRQVNVMWZWVk5GUkFCSVVFVmZVRUZWVTBWRUFGUkpUVVZQVlZSZlQwTkRWVkpGUkFCUVFWbE5SVTVVWDFKRlVWVkpVa1ZFQUZCU1JVTlBUa1JKVkVsUFRsOVNSVkZWU1ZKRlJBQlFVazlZV1Y5QlZWUklSVTVVU1VOQlZFbFBUbDlTUlZGVlNWSkZSQUJPUlZSWFQxSkxYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFeEZUa2RVU0Y5U1JWRlZTVkpGUkFCVFUweGZRMFZTVkVsR1NVTkJWRVZmVWtWUlZVbFNSVVFBVlZCSFVrRkVSVjlTUlZGVlNWSkZSQUJRUVVkRlgwVllVRWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMFpCU1V4RlJBQkZXRkJGUTFSQlZFbFBUbDlHUVVsTVJVUUFVa1ZXUVV4SlJFRlVTVTlPWDBaQlNVeEZSQUJUVTB4ZlNFRk9SRk5JUVV0RlgwWkJTVXhGUkFCTVQwTkxSVVFBVkZKQlRsTkdUMUpOUVZSSlQwNWZRVkJRVEVsRlJBQk9UMVJmVFU5RVNVWkpSVVFBVGs5VVgwVllWRVZPUkVWRUFFSkJUa1JYU1VSVVNGOU1TVTFKVkY5RldFTkZSVVJGUkFCVFNWUkZYMGxUWDA5V1JWSk1UMEZFUlVRQVNFVkJSQUJGZUhCbFkzUmxaQ0JJVkZSUUx3QUFYaE1BQUNZVEFBQXdFQUFBOEJjQUFKMFRBQUFWRWdBQU9SY0FBUEFTQUFBS0VBQUFkUklBQUswU0FBQ0NFd0FBVHhRQUFIOFFBQUNnRlFBQUl4UUFBSWtTQUFDTEZBQUFUUlVBQU5RUkFBRFBGQUFBRUJnQUFNa1dBQURjRmdBQXdSRUFBT0FYQUFDN0ZBQUFkQlFBQUh3VkFBRGxGQUFBQ0JjQUFCOFFBQUJsRlFBQW94UUFBQ2dWQUFBQ0ZRQUFtUlVBQUN3UUFBQ0xHUUFBVHc4QUFOUU9BQUJxRUFBQXpoQUFBQUlYQUFDSkRnQUFiaE1BQUJ3VEFBQm1GQUFBVmhjQUFNRVRBQURORXdBQWJCTUFBR2dYQUFCbUZ3QUFYeGNBQUNJVEFBRE9Ed0FBYVE0QUFOZ09BQUJqRmdBQXl4TUFBS29PQUFBb0Z3QUFKaGNBQU1VVEFBQmRGZ0FBNkJFQUFHY1RBQUJsRXdBQThoWUFBSE1UQUFBZEZ3QUErUllBQVBNUkFBRFBEZ0FBemhVQUFBd1NBQUN6RVFBQXBSRUFBR0VRQUFBeUZ3QUF1eE1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJREFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQkFBQUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQUlDQWdJQ0FBQUNBZ0FDQWdBQ0FnSUNBZ0lDQWdJQ0FBTUFCQUFBQUFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBZ0FDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWJHOXpaV1ZsY0MxaGJHbDJaUUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFRRUJBUUVCQVFFQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCWTJoMWJtdGxaQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUFBUUVCQVFFQUFBRUJBQUVCQUFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBQUFBQUFBQUFBQUFBQUFBQUFBQnlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFBQUFBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRSUFBUU1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQUFRQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUlBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQk9UMVZPUTBWRlEwdFBWVlJPUlVOVVJWUkZRMUpKUWtWTVZWTklSVlJGUVVSVFJVRlNRMGhTUjBWRFZFbFdTVlJaVEVWT1JFRlNWa1ZQVkVsR1dWQlVTVTlPVTBOSVUwVkJXVk5VUVZSRFNFZEZUMUpFU1ZKRlExUlBVbFJTUTBoUVFWSkJUVVZVUlZKVlVrTkZRbE5EVWtsQ1JVRlNSRTlYVGtGRFJVbE9SRTVMUTB0VlFsTkRVa2xDUlVoVVZGQXZRVVJVVUM4PSdcbiIsICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwgIi8vIEB0cy1jaGVja1xuXG4ndXNlIHN0cmljdCdcblxuLyogZ2xvYmFsIFdlYkFzc2VtYmx5ICovXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuL3RpbWVycycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi9jb3JlL3JlcXVlc3QnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7XG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrU2VydmVyTmFtZSxcbiAga0NsaWVudCxcbiAga0J1c3ksXG4gIGtQYXJzZXIsXG4gIGtDb25uZWN0LFxuICBrQmxvY2tpbmcsXG4gIGtSZXN1bWluZyxcbiAga1J1bm5pbmcsXG4gIGtQZW5kaW5nLFxuICBrU2l6ZSxcbiAga1dyaXRpbmcsXG4gIGtRdWV1ZSxcbiAga0Nvbm5lY3RlZCxcbiAga0Nvbm5lY3RpbmcsXG4gIGtOZWVkRHJhaW4sXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrQ29ubmVjdG9yLFxuICBrTWF4UmVkaXJlY3Rpb25zLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrQ2xvc2UsXG4gIGtEZXN0cm95LFxuICBrRGlzcGF0Y2gsXG4gIGtJbnRlcmNlcHRvcnMsXG4gIGtMb2NhbEFkZHJlc3MsXG4gIGtNYXhSZXNwb25zZVNpemUsXG4gIGtIVFRQQ29ublZlcnNpb24sXG4gIC8vIEhUVFAyXG4gIGtIb3N0LFxuICBrSFRUUDJTZXNzaW9uLFxuICBrSFRUUDJTZXNzaW9uU3RhdGUsXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdCxcbiAga0hUVFAyQ29weUhlYWRlcnMsXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdFxufSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2h0dHAyJyl9ICovXG5sZXQgaHR0cDJcbnRyeSB7XG4gIGh0dHAyID0gcmVxdWlyZSgnaHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbi8vIEV4cGVyaW1lbnRhbFxubGV0IGgyRXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuY29uc3QgRmFzdEJ1ZmZlciA9IEJ1ZmZlcltTeW1ib2wuc3BlY2llc11cblxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2tDbG9zZWRSZXNvbHZlJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuXG50cnkge1xuICBjb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpXG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpiZWZvcmVDb25uZWN0JylcbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdEVycm9yJylcbiAgY2hhbm5lbHMuY29ubmVjdGVkID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdGVkJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5zZW5kSGVhZGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5jb25uZWN0ZWQgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vdHlwZXMvY2xpZW50JykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIGFsbG93SDIsXG4gICAgbWF4Q29uY3VycmVudFN0cmVhbXNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGtlZXBBbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGtlZXBBbGl2ZSwgdXNlIHBpcGVsaW5pbmc9MCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHNvY2tldFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHJlcXVlc3RUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoaWRsZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBpZGxlVGltZW91dCwgdXNlIGtlZXBBbGl2ZVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEtlZXBBbGl2ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBtYXhLZWVwQWxpdmVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlTWF4VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4SGVhZGVyU2l6ZSAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUobWF4SGVhZGVyU2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtYXhIZWFkZXJTaXplJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0UGF0aCAhPSBudWxsICYmIHR5cGVvZiBzb2NrZXRQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHNvY2tldFBhdGgnKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3RUaW1lb3V0KSB8fCBjb25uZWN0VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dCkgfHwga2VlcEFsaXZlVGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVNYXhUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlTWF4VGltZW91dCkgfHwga2VlcEFsaXZlTWF4VGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZU1heFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzVGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keVRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXF1ZXN0c1BlckNsaWVudCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXF1ZXN0c1BlckNsaWVudCkgfHwgbWF4UmVxdWVzdHNQZXJDbGllbnQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXF1ZXN0c1BlckNsaWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobG9jYWxBZGRyZXNzICE9IG51bGwgJiYgKHR5cGVvZiBsb2NhbEFkZHJlc3MgIT09ICdzdHJpbmcnIHx8IG5ldC5pc0lQKGxvY2FsQWRkcmVzcykgPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2xvY2FsQWRkcmVzcyBtdXN0IGJlIHZhbGlkIHN0cmluZyBJUCBhZGRyZXNzJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVzcG9uc2VTaXplICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlc3BvbnNlU2l6ZSkgfHwgbWF4UmVzcG9uc2VTaXplIDwgLTEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlc3BvbnNlU2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgIT0gbnVsbCAmJlxuICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCkgfHwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IDwgLTEpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2F1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICAvLyBoMlxuICAgIGlmIChhbGxvd0gyICE9IG51bGwgJiYgdHlwZW9mIGFsbG93SDIgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhbGxvd0gyIG11c3QgYmUgYSB2YWxpZCBib29sZWFuIHZhbHVlJylcbiAgICB9XG5cbiAgICBpZiAobWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCAmJiAodHlwZW9mIG1heENvbmN1cnJlbnRTdHJlYW1zICE9PSAnbnVtYmVyJyB8fCBtYXhDb25jdXJyZW50U3RyZWFtcyA8IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENvbmN1cnJlbnRTdHJlYW1zIG11c3QgYmUgYSBwb3NzaXRpdmUgaW50ZWdlciwgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLih1dGlsLm5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5ICYmIGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5DbGllbnQgJiYgQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvcnMuQ2xpZW50KVxuICAgICAgPyBpbnRlcmNlcHRvcnMuQ2xpZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKHVybClcbiAgICB0aGlzW2tDb25uZWN0b3JdID0gY29ubmVjdFxuICAgIHRoaXNba1NvY2tldF0gPSBudWxsXG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSBwaXBlbGluaW5nICE9IG51bGwgPyBwaXBlbGluaW5nIDogMVxuICAgIHRoaXNba01heEhlYWRlcnNTaXplXSA9IG1heEhlYWRlclNpemUgfHwgaHR0cC5tYXhIZWFkZXJTaXplXG4gICAgdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdID0ga2VlcEFsaXZlVGltZW91dCA9PSBudWxsID8gNGUzIDoga2VlcEFsaXZlVGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZU1heFRpbWVvdXRdID0ga2VlcEFsaXZlTWF4VGltZW91dCA9PSBudWxsID8gNjAwZTMgOiBrZWVwQWxpdmVNYXhUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0gPSBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkID09IG51bGwgPyAxZTMgOiBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgIHRoaXNba1NlcnZlck5hbWVdID0gbnVsbFxuICAgIHRoaXNba0xvY2FsQWRkcmVzc10gPSBsb2NhbEFkZHJlc3MgIT0gbnVsbCA/IGxvY2FsQWRkcmVzcyA6IG51bGxcbiAgICB0aGlzW2tSZXN1bWluZ10gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba05lZWREcmFpbl0gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba0hvc3RIZWFkZXJdID0gYGhvc3Q6ICR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfVxcclxcbmBcbiAgICB0aGlzW2tCb2R5VGltZW91dF0gPSBib2R5VGltZW91dCAhPSBudWxsID8gYm9keVRpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba0hlYWRlcnNUaW1lb3V0XSA9IGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgPyBoZWFkZXJzVGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trU3RyaWN0Q29udGVudExlbmd0aF0gPSBzdHJpY3RDb250ZW50TGVuZ3RoID09IG51bGwgPyB0cnVlIDogc3RyaWN0Q29udGVudExlbmd0aFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tNYXhSZXF1ZXN0c10gPSBtYXhSZXF1ZXN0c1BlckNsaWVudFxuICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgIHRoaXNba01heFJlc3BvbnNlU2l6ZV0gPSBtYXhSZXNwb25zZVNpemUgPiAtMSA/IG1heFJlc3BvbnNlU2l6ZSA6IC0xXG4gICAgdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9ICdoMSdcblxuICAgIC8vIEhUVFAvMlxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gIWFsbG93SDJcbiAgICAgID8gbnVsbFxuICAgICAgOiB7XG4gICAgICAgIC8vIHN0cmVhbXM6IG51bGwsIC8vIEZpeGVkIHF1ZXVlIG9mIHN0cmVhbXMgLSBGb3IgZnV0dXJlIHN1cHBvcnQgb2YgYHB1c2hgXG4gICAgICAgICAgb3BlblN0cmVhbXM6IDAsIC8vIEtlZXAgdHJhY2sgb2YgdGhlbSB0byBkZWNpZGUgd2V0aGVyIG9yIG5vdCB1bnJlZiB0aGUgc2Vzc2lvblxuICAgICAgICAgIG1heENvbmN1cnJlbnRTdHJlYW1zOiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgICAgICB9XG4gICAgdGhpc1trSG9zdF0gPSBgJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9YFxuXG4gICAgLy8ga1F1ZXVlIGlzIGJ1aWx0IHVwIG9mIDMgc2VjdGlvbnMgc2VwYXJhdGVkIGJ5XG4gICAgLy8gdGhlIGtSdW5uaW5nSWR4IGFuZCBrUGVuZGluZ0lkeCBpbmRpY2VzLlxuICAgIC8vIHwgICBjb21wbGV0ZSAgIHwgICBydW5uaW5nICAgfCAgIHBlbmRpbmcgICB8XG4gICAgLy8gICAgICAgICAgICAgICAgXiBrUnVubmluZ0lkeCBeIGtQZW5kaW5nSWR4IF4ga1F1ZXVlLmxlbmd0aFxuICAgIC8vIGtSdW5uaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcnVubmluZyBlbGVtZW50LlxuICAgIC8vIGtQZW5kaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcGVuZGluZyBlbGVtZW50LlxuICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIGZhc3QgcXVldWUgd2l0aCBhbiBhbW9ydGl6ZWRcbiAgICAvLyB0aW1lIG9mIE8oMSkuXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBbXVxuICAgIHRoaXNba1J1bm5pbmdJZHhdID0gMFxuICAgIHRoaXNba1BlbmRpbmdJZHhdID0gMFxuICB9XG5cbiAgZ2V0IHBpcGVsaW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQaXBlbGluaW5nXVxuICB9XG5cbiAgc2V0IHBpcGVsaW5pbmcgKHZhbHVlKSB7XG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSB2YWx1ZVxuICAgIHJlc3VtZSh0aGlzLCB0cnVlKVxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUGVuZGluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGVuZGluZ0lkeF0gLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiAhIXRoaXNba1NvY2tldF0gJiYgIXRoaXNba0Nvbm5lY3RpbmddICYmICF0aGlzW2tTb2NrZXRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1NvY2tldF1cbiAgICByZXR1cm4gKFxuICAgICAgKHNvY2tldCAmJiAoc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXRba0Jsb2NraW5nXSkpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKHRoaXNba1BpcGVsaW5pbmddIHx8IDEpKSB8fFxuICAgICAgdGhpc1trUGVuZGluZ10gPiAwXG4gICAgKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlOiBvbmx5IHVzZWQgZm9yIHRlc3QgKi9cbiAgW2tDb25uZWN0XSAoY2IpIHtcbiAgICBjb25uZWN0KHRoaXMpXG4gICAgdGhpcy5vbmNlKCdjb25uZWN0JywgY2IpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IG9yaWdpbiA9IG9wdHMub3JpZ2luIHx8IHRoaXNba1VybF0ub3JpZ2luXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICAgICAgPyBSZXF1ZXN0W2tIVFRQMkJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgOiBSZXF1ZXN0W2tIVFRQMUJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trUmVzdW1pbmddICYmIHRoaXNba05lZWREcmFpbl0gIT09IDIgJiYgdGhpc1trQnVzeV0pIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAyXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl0gPCAyXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgLy8gVE9ETzogZm9yIEgyIHdlIG5lZWQgdG8gZ3JhY2VmdWxseSBmbHVzaCB0aGUgcmVtYWluaW5nIGVucXVldWVkXG4gICAgLy8gcmVxdWVzdCBhbmQgY2xvc2UgZWFjaCBzdHJlYW0uXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXRoaXNba1NpemVdKSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gcmVzb2x2ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpc1trUXVldWVdLnNwbGljZSh0aGlzW2tQZW5kaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trSFRUUDJTZXNzaW9uXSwgZXJyKVxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25TdGF0ZV0gPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpc1trU29ja2V0XSkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzW2tTb2NrZXRdLm9uKCdjbG9zZScsIGNhbGxiYWNrKSwgZXJyKVxuICAgICAgfVxuXG4gICAgICByZXN1bWUodGhpcylcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRXJyb3IgKGVycikge1xuICBhc3NlcnQoZXJyLmNvZGUgIT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJylcblxuICB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gPSBlcnJcblxuICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG5cbiAgaWYgKGlkID09PSAwKSB7XG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25IdHRwMlNlc3Npb25FbmQgKCkge1xuICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxufVxuXG5mdW5jdGlvbiBvbkhUVFAyR29Bd2F5IChjb2RlKSB7XG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcIkdPQVdBWVwiIGZyYW1lIHJlY2VpdmVkIHdpdGggY29kZSAke2NvZGV9YClcbiAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQodGhpc1trUGVuZGluZ10gPT09IDApXG5cbiAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAvLyBGYWlsIGhlYWQgb2YgcGlwZWxpbmUuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG5cbiAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLFxuICAgIGNsaWVudFtrVXJsXSxcbiAgICBbY2xpZW50XSxcbiAgICBlcnJcbiAgKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vbGxodHRwL2NvbnN0YW50cycpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IEVNUFRZX0JVRiA9IEJ1ZmZlci5hbGxvYygwKVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykgOiB1bmRlZmluZWRcblxuICBsZXQgbW9kXG4gIHRyeSB7XG4gICAgbW9kID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShCdWZmZXIuZnJvbShyZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20obGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwLXdhc20uanMnKSwgJ2Jhc2U2NCcpKVxuICB9XG5cbiAgcmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZCwge1xuICAgIGVudjoge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5cbiAgICAgIHdhc21fb25fdXJsOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fc3RhdHVzOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uU3RhdHVzKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9iZWdpbjogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VCZWdpbigpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl9maWVsZDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlckZpZWxkKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX3ZhbHVlOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyVmFsdWUobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJzX2NvbXBsZXRlOiAocCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgc2hvdWxkS2VlcEFsaXZlKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJzQ29tcGxldGUoc3RhdHVzQ29kZSwgQm9vbGVhbih1cGdyYWRlKSwgQm9vbGVhbihzaG91bGRLZWVwQWxpdmUpKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9ib2R5OiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uQm9keShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfY29tcGxldGU6IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKSB8fCAwXG4gICAgICB9XG5cbiAgICAgIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG4gICAgfVxuICB9KVxufVxuXG5sZXQgbGxodHRwSW5zdGFuY2UgPSBudWxsXG5sZXQgbGxodHRwUHJvbWlzZSA9IGxhenlsbGh0dHAoKVxubGxodHRwUHJvbWlzZS5jYXRjaCgpXG5cbmxldCBjdXJyZW50UGFyc2VyID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJSZWYgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclNpemUgPSAwXG5sZXQgY3VycmVudEJ1ZmZlclB0ciA9IG51bGxcblxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMVxuY29uc3QgVElNRU9VVF9CT0RZID0gMlxuY29uc3QgVElNRU9VVF9JRExFID0gM1xuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKHZhbHVlLCB0eXBlKSB7XG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IHR5cGVcbiAgICBpZiAodmFsdWUgIT09IHRoaXMudGltZW91dFZhbHVlKSB7XG4gICAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lcnMuc2V0VGltZW91dChvblBhcnNlclRpbWVvdXQsIHZhbHVlLCB0aGlzKVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0LnVucmVmKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy50aW1lb3V0VmFsdWUgPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEX1VQR1JBREUpIHtcbiAgICAgICAgdGhpcy5vblVwZ3JhZGUoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfSBlbHNlIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRUQpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgIHNvY2tldC51bnNoaWZ0KGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgaWYgKHB0cikge1xuICAgICAgICAgIGNvbnN0IGxlbiA9IG5ldyBVaW50OEFycmF5KGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIpLmluZGV4T2YoMClcbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgICdSZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB0aGUgSFRUUC8xLjEgcHJvdG9jb2wgKCcgK1xuICAgICAgICAgICAgQnVmZmVyLmZyb20obGxodHRwLm1lbW9yeS5idWZmZXIsIHB0ciwgbGVuKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICcpJ1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBIVFRQUGFyc2VyRXJyb3IobWVzc2FnZSwgY29uc3RhbnRzLkVSUk9SW3JldF0sIGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX2ZyZWUodGhpcy5wdHIpXG4gICAgdGhpcy5wdHIgPSBudWxsXG5cbiAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgfVxuXG4gIG9uU3RhdHVzIChidWYpIHtcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBidWYudG9TdHJpbmcoKVxuICB9XG5cbiAgb25NZXNzYWdlQmVnaW4gKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjbGllbnQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlckZpZWxkIChidWYpIHtcbiAgICBjb25zdCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAwKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrSGVhZGVyKGJ1Zi5sZW5ndGgpXG4gIH1cblxuICBvbkhlYWRlclZhbHVlIChidWYpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMSkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgICAgbGVuICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRoaXMuaGVhZGVyc1tsZW4gLSAyXVxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRoaXMua2VlcEFsaXZlICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbicpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgdHJhY2tIZWFkZXIgKGxlbikge1xuICAgIHRoaXMuaGVhZGVyc1NpemUgKz0gbGVuXG4gICAgaWYgKHRoaXMuaGVhZGVyc1NpemUgPj0gdGhpcy5oZWFkZXJzTWF4U2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMuc29ja2V0LCBuZXcgSGVhZGVyc092ZXJmbG93RXJyb3IoKSlcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKGhlYWQpIHtcbiAgICBjb25zdCB7IHVwZ3JhZGUsIGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNDb2RlIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQodXBncmFkZSlcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KCFzb2NrZXQuZGVzdHJveWVkKVxuICAgIGFzc2VydChzb2NrZXQgPT09IGNsaWVudFtrU29ja2V0XSlcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIHNvY2tldC51bnNoaWZ0KGhlYWQpXG5cbiAgICBzb2NrZXRba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgc29ja2V0W2tQYXJzZXJdID0gbnVsbFxuXG4gICAgc29ja2V0W2tDbGllbnRdID0gbnVsbFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuICAgIHNvY2tldFxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigndXBncmFkZScpKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgb25IZWFkZXJzQ29tcGxldGUgKHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIGhlYWRlcnMsIHN0YXR1c1RleHQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBhc3NlcnQoIXRoaXMudXBncmFkZSlcbiAgICBhc3NlcnQodGhpcy5zdGF0dXNDb2RlIDwgMjAwKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDEwMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICAvKiB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBzZXJ2ZXIgaXMgbWlzYmVoYXZpbmcgKi9cbiAgICBpZiAodXBncmFkZSAmJiAhcmVxdWVzdC51cGdyYWRlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRoaXMudGltZW91dFR5cGUsIFRJTUVPVVRfSEVBREVSUylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IChcbiAgICAgIHNob3VsZEtlZXBBbGl2ZSB8fFxuICAgICAgLy8gT3ZlcnJpZGUgbGxodHRwIHZhbHVlIHdoaWNoIGRvZXMgbm90IGFsbG93IGtlZXBBbGl2ZSBmb3IgSEVBRC5cbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnICYmICFzb2NrZXRba1Jlc2V0XSAmJiB0aGlzLmNvbm5lY3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKVxuICAgIClcblxuICAgIGlmICh0aGlzLnN0YXR1c0NvZGUgPj0gMjAwKSB7XG4gICAgICBjb25zdCBib2R5VGltZW91dCA9IHJlcXVlc3QuYm9keVRpbWVvdXQgIT0gbnVsbFxuICAgICAgICA/IHJlcXVlc3QuYm9keVRpbWVvdXRcbiAgICAgICAgOiBjbGllbnRba0JvZHlUaW1lb3V0XVxuICAgICAgdGhpcy5zZXRUaW1lb3V0KGJvZHlUaW1lb3V0LCBUSU1FT1VUX0JPRFkpXG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAxKVxuICAgICAgdGhpcy51cGdyYWRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIDJcbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA+PSAxMDApXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogc2hvdWxkIGJlIGhhbmRsZWQgYnkgbGxodHRwPyAqL1xuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoaGVhZGVycylcblxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBpZiAoc29ja2V0W2tXcml0aW5nXSkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNsaWVudFtrUnVubmluZ10sIDApXG4gICAgICAvLyBSZXNwb25zZSBjb21wbGV0ZWQgYmVmb3JlIHJlcXVlc3QuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKCFzaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoc29ja2V0W2tSZXNldF0gJiYgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgLy8gRGVzdHJveSBzb2NrZXQgb25jZSBhbGwgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBhdCB0aGUgdGFpbCBvZiB0aGUgcGlwZWxpbmUgaXMgdGhlIG9uZVxuICAgICAgLy8gdGhhdCByZXF1ZXN0ZWQgcmVzZXQgYW5kIG5vIGZ1cnRoZXIgcmVxdWVzdHMgc2hvdWxkXG4gICAgICAvLyBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZW4uXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUGlwZWxpbmluZ10gPT09IDEpIHtcbiAgICAgIC8vIFdlIG11c3Qgd2FpdCBhIGZ1bGwgZXZlbnQgbG9vcCBjeWNsZSB0byByZXVzZSB0aGlzIHNvY2tldCB0byBtYWtlIHN1cmVcbiAgICAgIC8vIHRoYXQgbm9uLXNwZWMgY29tcGxpYW50IHNlcnZlcnMgYXJlIG5vdCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGV2ZW4gaWYgdGhleVxuICAgICAgLy8gc2FpZCB0aGV5IHdvbid0LlxuICAgICAgc2V0SW1tZWRpYXRlKHJlc3VtZSwgY2xpZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUoY2xpZW50KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvblBhcnNlclRpbWVvdXQgKHBhcnNlcikge1xuICBjb25zdCB7IHNvY2tldCwgdGltZW91dFR5cGUsIGNsaWVudCB9ID0gcGFyc2VyXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhcnNlci5wYXVzZWQsICdjYW5ub3QgYmUgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGhlYWRlcnMnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEhlYWRlcnNUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfQk9EWSkge1xuICAgIGlmICghcGFyc2VyLnBhdXNlZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEJvZHlUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfSURMRSkge1xuICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwICYmIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSlcbiAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdzb2NrZXQgaWRsZSB0aW1lb3V0JykpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRSZWFkYWJsZSAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcbiAgaWYgKHBhcnNlcikge1xuICAgIHBhcnNlci5yZWFkTW9yZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIC8vIE9uIE1hYyBPUywgd2UgZ2V0IGFuIEVDT05OUkVTRVQgZXZlbiBpZiB0aGVyZSBpcyBhIGZ1bGwgYm9keSB0byBiZSBmb3J3YXJkZWRcbiAgICAvLyB0byB0aGUgdXNlci5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZm9yIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uRXJyb3IgKGNsaWVudCwgZXJyKSB7XG4gIGlmIChcbiAgICBjbGllbnRba1J1bm5pbmddID09PSAwICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCdcbiAgKSB7XG4gICAgLy8gRXJyb3IgaXMgbm90IGNhdXNlZCBieSBydW5uaW5nIHJlcXVlc3QgYW5kIG5vdCBhIHJlY292ZXJhYmxlXG4gICAgLy8gc29ja2V0IGVycm9yLlxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ0lkeF0gPT09IGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVuZCAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIsIFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxufVxuXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyBba0NsaWVudF06IGNsaWVudCwgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDEnICYmIHBhcnNlcikge1xuICAgIGlmICghdGhpc1trRXJyb3JdICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmYXIgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgfVxuXG4gICAgdGhpc1trUGFyc2VyXS5kZXN0cm95KClcbiAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICB9XG5cbiAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcblxuICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tTb2NrZXRdKVxuXG4gIGxldCB7IGhvc3QsIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCB9ID0gY2xpZW50W2tVcmxdXG5cbiAgLy8gUmVzb2x2ZSBpcHY2XG4gIGlmIChob3N0bmFtZVswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdG5hbWUuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICBjb25zdCBpcCA9IGhvc3RuYW1lLnN1YnN0cmluZygxLCBpZHgpXG5cbiAgICBhc3NlcnQobmV0LmlzSVAoaXApKVxuICAgIGhvc3RuYW1lID0gaXBcbiAgfVxuXG4gIGNsaWVudFtrQ29ubmVjdGluZ10gPSB0cnVlXG5cbiAgaWYgKGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5iZWZvcmVDb25uZWN0LnB1Ymxpc2goe1xuICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KSwgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICBjb25zdCBpc0gyID0gc29ja2V0LmFscG5Qcm90b2NvbCA9PT0gJ2gyJ1xuICAgIGlmIChpc0gyKSB7XG4gICAgICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICAgIGgyRXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdIMiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICAgICAgY3JlYXRlQ29ubmVjdGlvbjogKCkgPT4gc29ja2V0LFxuICAgICAgICBwZWVyTWF4Q29uY3VycmVudFN0cmVhbXM6IGNsaWVudFtrSFRUUDJTZXNzaW9uU3RhdGVdLm1heENvbmN1cnJlbnRTdHJlYW1zXG4gICAgICB9KVxuXG4gICAgICBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPSAnaDInXG4gICAgICBzZXNzaW9uW2tDbGllbnRdID0gY2xpZW50XG4gICAgICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG4gICAgICBzZXNzaW9uLm9uKCdlcnJvcicsIG9uSHR0cDJTZXNzaW9uRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdlbmQnLCBvbkh0dHAyU2Vzc2lvbkVuZClcbiAgICAgIHNlc3Npb24ub24oJ2dvYXdheScsIG9uSFRUUDJHb0F3YXkpXG4gICAgICBzZXNzaW9uLm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG4gICAgICBzZXNzaW9uLnVucmVmKClcblxuICAgICAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgICAgc29ja2V0W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWxsaHR0cEluc3RhbmNlKSB7XG4gICAgICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgICAgICBsbGh0dHBQcm9taXNlID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gZmFsc2VcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuICAgIH1cblxuICAgIHNvY2tldFtrQ291bnRlcl0gPSAwXG4gICAgc29ja2V0W2tNYXhSZXF1ZXN0c10gPSBjbGllbnRba01heFJlcXVlc3RzXVxuICAgIHNvY2tldFtrQ2xpZW50XSA9IGNsaWVudFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuXG4gICAgc29ja2V0XG4gICAgICAub24oJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcbiAgICAgIC5vbigncmVhZGFibGUnLCBvblNvY2tldFJlYWRhYmxlKVxuICAgICAgLm9uKCdlbmQnLCBvblNvY2tldEVuZClcbiAgICAgIC5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihjbGllbnQsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuICB9XG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuZnVuY3Rpb24gZW1pdERyYWluIChjbGllbnQpIHtcbiAgY2xpZW50W2tOZWVkRHJhaW5dID0gMFxuICBjbGllbnQuZW1pdCgnZHJhaW4nLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxufVxuXG5mdW5jdGlvbiByZXN1bWUgKGNsaWVudCwgc3luYykge1xuICBpZiAoY2xpZW50W2tSZXN1bWluZ10gPT09IDIpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMlxuXG4gIF9yZXN1bWUoY2xpZW50LCBzeW5jKVxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDBcblxuICBpZiAoY2xpZW50W2tSdW5uaW5nSWR4XSA+IDI1Nikge1xuICAgIGNsaWVudFtrUXVldWVdLnNwbGljZSgwLCBjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gLT0gY2xpZW50W2tSdW5uaW5nSWR4XVxuICAgIGNsaWVudFtrUnVubmluZ0lkeF0gPSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gJiYgIWNsaWVudFtrU2l6ZV0pIHtcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0oKVxuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gICAgaWYgKHNvY2tldCAmJiAhc29ja2V0LmRlc3Ryb3llZCAmJiBzb2NrZXQuYWxwblByb3RvY29sICE9PSAnaDInKSB7XG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoIXNvY2tldFtrTm9SZWZdICYmIHNvY2tldC51bnJlZikge1xuICAgICAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnJlZikge1xuICAgICAgICBzb2NrZXQucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0lETEUpIHtcbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0sIFRJTUVPVVRfSURMRSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiBzb2NrZXRba1BhcnNlcl0uc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgICBjb25zdCBoZWFkZXJzVGltZW91dCA9IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXQgIT0gbnVsbFxuICAgICAgICAgICAgPyByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0XG4gICAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoaGVhZGVyc1RpbWVvdXQsIFRJTUVPVVRfSEVBREVSUylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RHJhaW4sIGNsaWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXREcmFpbihjbGllbnQpXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1BlbmRpbmddID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+PSAoY2xpZW50W2tQaXBlbGluaW5nXSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuXG4gICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5zZXJ2ZXJuYW1lICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJykpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXNvY2tldCAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAhcmVxdWVzdC5pZGVtcG90ZW50KSB7XG4gICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpKSB7XG4gICAgICAvLyBEb24ndCBkaXNwYXRjaCBhbiB1cGdyYWRlIHVudGlsIGFsbCBwcmVjZWRpbmcgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAvLyByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICh1dGlsLmlzU3RyZWFtKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0FzeW5jSXRlcmFibGUocmVxdWVzdC5ib2R5KSkpIHtcbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgIC8vIGFyZSBpbmZsaWdodCBhbmQgaW5kaXJlY3RseSBlcnJvciB0aG9zZSBhcyB3ZWxsLlxuICAgICAgLy8gRW5zdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4gYnkgd2FpdGluZyBmb3IgaW5mbGlnaHRcbiAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgLy8gUmVxdWVzdCB3aXRoIHN0cmVhbSBvciBpdGVyYXRvciBib2R5IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdC5hYm9ydGVkICYmIHdyaXRlKGNsaWVudCwgcmVxdWVzdCkpIHtcbiAgICAgIGNsaWVudFtrUGVuZGluZ0lkeF0rK1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tQZW5kaW5nSWR4XSwgMSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuZnVuY3Rpb24gc2hvdWxkU2VuZENvbnRlbnRMZW5ndGggKG1ldGhvZCkge1xuICByZXR1cm4gbWV0aG9kICE9PSAnR0VUJyAmJiBtZXRob2QgIT09ICdIRUFEJyAmJiBtZXRob2QgIT09ICdPUFRJT05TJyAmJiBtZXRob2QgIT09ICdUUkFDRScgJiYgbWV0aG9kICE9PSAnQ09OTkVDVCdcbn1cblxuZnVuY3Rpb24gd3JpdGUgKGNsaWVudCwgcmVxdWVzdCkge1xuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgd3JpdGVIMihjbGllbnQsIGNsaWVudFtrSFRUUDJTZXNzaW9uXSwgcmVxdWVzdClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHsgYm9keSwgbWV0aG9kLCBwYXRoLCBob3N0LCB1cGdyYWRlLCBoZWFkZXJzLCBibG9ja2luZywgcmVzZXQgfSA9IHJlcXVlc3RcblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4xXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuNVxuXG4gIC8vIFNlbmRpbmcgYSBwYXlsb2FkIGJvZHkgb24gYSByZXF1ZXN0IHRoYXQgZG9lcyBub3RcbiAgLy8gZXhwZWN0IGl0IGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZVxuICAvLyBzZXJ2ZXJzIGFuZCBjb3JydXB0IGNvbm5lY3Rpb24gc3RhdGUuIERvIG5vdFxuICAvLyByZS11c2UgdGhlIGNvbm5lY3Rpb24gZm9yIGZ1cnRoZXIgcmVxdWVzdHMuXG5cbiAgY29uc3QgZXhwZWN0c1BheWxvYWQgPSAoXG4gICAgbWV0aG9kID09PSAnUFVUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BPU1QnIHx8XG4gICAgbWV0aG9kID09PSAnUEFUQ0gnXG4gIClcblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSBib2R5TGVuZ3RoXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoID0gcmVxdWVzdC5jb250ZW50TGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gMCAmJiAhZXhwZWN0c1BheWxvYWQpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBOT1Qgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmaWVsZCB3aGVuXG4gICAgLy8gdGhlIHJlcXVlc3QgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGEgcGF5bG9hZCBib2R5IGFuZCB0aGUgbWV0aG9kXG4gICAgLy8gc2VtYW50aWNzIGRvIG5vdCBhbnRpY2lwYXRlIHN1Y2ggYSBib2R5LlxuXG4gICAgY29udGVudExlbmd0aCA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDQ2XG4gIC8vIEEgdXNlciBhZ2VudCBtYXkgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIDAgdmFsdWUsIHRoaXMgc2hvdWxkIGJlIGFsbG93ZWQuXG4gIGlmIChzaG91bGRTZW5kQ29udGVudExlbmd0aChtZXRob2QpICYmIGNvbnRlbnRMZW5ndGggPiAwICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICB0cnkge1xuICAgIHJlcXVlc3Qub25Db25uZWN0KChlcnIpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQgfHwgcmVxdWVzdC5jb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVyciB8fCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdhYm9ydGVkJykpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKGhlYWRlcnMpIHtcbiAgICBoZWFkZXIgKz0gaGVhZGVyc1xuICB9XG5cbiAgaWYgKGNoYW5uZWxzLnNlbmRIZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc2VuZEhlYWRlcnMucHVibGlzaCh7IHJlcXVlc3QsIGhlYWRlcnM6IGhlYWRlciwgc29ja2V0IH0pXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gIGlmICghYm9keSB8fCBib2R5TGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IG51bGwsICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgICBzb2NrZXQuY29yaygpXG4gICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgIHNvY2tldC53cml0ZShib2R5KVxuICAgIHNvY2tldC51bmNvcmsoKVxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChib2R5KVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoeyBib2R5OiBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZUJsb2IoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgd3JpdGVTdHJlYW0oeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgIHdyaXRlSXRlcmFibGUoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDIgKGNsaWVudCwgc2Vzc2lvbiwgcmVxdWVzdCkge1xuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuXG4gIGxldCBoZWFkZXJzXG4gIGlmICh0eXBlb2YgcmVxSGVhZGVycyA9PT0gJ3N0cmluZycpIGhlYWRlcnMgPSBSZXF1ZXN0W2tIVFRQMkNvcHlIZWFkZXJzXShyZXFIZWFkZXJzLnRyaW0oKSlcbiAgZWxzZSBoZWFkZXJzID0gcmVxSGVhZGVyc1xuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IEVycm9yKCdVcGdyYWRlIG5vdCBzdXBwb3J0ZWQgZm9yIEgyJykpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRPRE8oSFRUUC8yKTogU2hvdWxkIHdlIGNhbGwgb25Db25uZWN0IGltbWVkaWF0ZWx5IG9yIG9uIHN0cmVhbSByZWFkeSBldmVudD9cbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHR5cGUge2ltcG9ydCgnbm9kZTpodHRwMicpLkNsaWVudEh0dHAyU3RyZWFtfSAqL1xuICBsZXQgc3RyZWFtXG4gIGNvbnN0IGgyU3RhdGUgPSBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGNsaWVudFtrSG9zdF1cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfTUVUSE9EXSA9IG1ldGhvZFxuXG4gIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIHNlc3Npb24ucmVmKClcbiAgICAvLyB3ZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcsIGZpcnN0IHJlcXVlc3RcbiAgICAvLyB3aWxsIGNyZWF0ZSBhIG5ldyBzdHJlYW0uIFdlIHRyaWdnZXIgYSByZXF1ZXN0IHRvIGNyZWF0ZSB0aGUgc3RyZWFtIGFuZCB3YWl0IHVudGlsXG4gICAgLy8gYHJlYWR5YCBldmVudCBpcyB0cmlnZ2VyZWRcbiAgICAvLyBXZSBkaXNhYmxlZCBlbmRTdHJlYW0gdG8gYWxsb3cgdGhlIHVzZXIgdG8gd3JpdGUgdG8gdGhlIHN0cmVhbVxuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogZmFsc2UsIHNpZ25hbCB9KVxuXG4gICAgaWYgKHN0cmVhbS5pZCAmJiAhc3RyZWFtLnBlbmRpbmcpIHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ub25jZSgncmVhZHknLCAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG4gICAgICB9KVxuICAgIH1cblxuICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGgyU3RhdGUub3BlblN0cmVhbXMgLT0gMVxuICAgICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdGVkIHdoZW4gc2VuZGluZyBDT05ORUNUXG5cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfUEFUSF0gPSBwYXRoXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1NDSEVNRV0gPSAnaHR0cHMnXG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSB1dGlsLmJvZHlMZW5ndGgoYm9keSlcblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KGJvZHksICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0NPTlRFTlRfTEVOR1RIXSA9IGAke2NvbnRlbnRMZW5ndGh9YFxuICB9XG5cbiAgc2Vzc2lvbi5yZWYoKVxuXG4gIGNvbnN0IHNob3VsZEVuZFN0cmVhbSA9IG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCdcbiAgaWYgKGV4cGVjdENvbnRpbnVlKSB7XG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfRVhQRUNUXSA9ICcxMDAtY29udGludWUnXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBzaG91bGRFbmRTdHJlYW0sIHNpZ25hbCB9KVxuXG4gICAgc3RyZWFtLm9uY2UoJ2NvbnRpbnVlJywgd3JpdGVCb2R5SDIpXG4gIH0gZWxzZSB7XG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHtcbiAgICAgIGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLFxuICAgICAgc2lnbmFsXG4gICAgfSlcbiAgICB3cml0ZUJvZHlIMigpXG4gIH1cblxuICAvLyBJbmNyZW1lbnQgY291bnRlciBhcyB3ZSBoYXZlIG5ldyBzZXZlcmFsIHN0cmVhbXMgb3BlblxuICArK2gyU3RhdGUub3BlblN0cmVhbXNcblxuICBzdHJlYW0ub25jZSgncmVzcG9uc2UnLCBoZWFkZXJzID0+IHtcbiAgICBjb25zdCB7IFtIVFRQMl9IRUFERVJfU1RBVFVTXTogc3RhdHVzQ29kZSwgLi4ucmVhbEhlYWRlcnMgfSA9IGhlYWRlcnNcblxuICAgIGlmIChyZXF1ZXN0Lm9uSGVhZGVycyhOdW1iZXIoc3RhdHVzQ29kZSksIHJlYWxIZWFkZXJzLCBzdHJlYW0ucmVzdW1lLmJpbmQoc3RyZWFtKSwgJycpID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAvLyBUT0RPKEhUVFAvMik6IHVucmVmIG9ubHkgaWYgY3VycmVudCBzdHJlYW1zIGNvdW50IGlzIDBcbiAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkge1xuICAgICAgc2Vzc2lvbi51bnJlZigpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcblxuICAgIGlmIChjbGllbnRba0hUVFAyU2Vzc2lvbl0gJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXS5kZXN0cm95ZWQgJiYgIXRoaXMuY2xvc2VkICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgaDJTdGF0ZS5zdHJlYW1zIC09IDFcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG4gIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdhYm9ydGVkJywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCBhYm9ydGVkXG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCB0aW1lb3V0XG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdwdXNoJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3IgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBzdHJlYW0uY29yaygpXG4gICAgICBzdHJlYW0ud3JpdGUoYm9keSlcbiAgICAgIHN0cmVhbS51bmNvcmsoKVxuICAgICAgc3RyZWFtLmVuZCgpXG4gICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGJvZHk6IGJvZHkuc3RyZWFtKCksXG4gICAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVCbG9iKHtcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBoZWFkZXI6ICcnLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICBoZWFkZXI6ICcnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJlYW0gKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ3N0cmVhbSBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICAvLyBGb3IgSFRUUC8yLCBpcyBlbm91Z2ggdG8gcGlwZSB0aGUgc3RyZWFtXG4gICAgY29uc3QgcGlwZSA9IHBpcGVsaW5lKFxuICAgICAgYm9keSxcbiAgICAgIGgyc3RyZWFtLFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgICB1dGlsLmRlc3Ryb3koaDJzdHJlYW0sIGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuXG4gICAgcGlwZS5vbignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgcGlwZS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICBwaXBlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25QaXBlRGF0YSlcbiAgICAgIHV0aWwuZGVzdHJveShwaXBlKVxuICAgIH0pXG5cbiAgICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgQXN5bmNXcml0ZXIoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBvbkZpbmlzaGVkKGVycikpXG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25BYm9ydClcblxuICAgIGlmICghZXJyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB3cml0ZXIuZW5kKClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGVyciA9IGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuXG4gICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nIHx8IGVyci5tZXNzYWdlICE9PSAncmVzZXQnKSkge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHkpXG4gICAgfVxuICB9XG5cbiAgYm9keVxuICAgIC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAub24oJ2VuZCcsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgaWYgKGJvZHkucmVzdW1lKSB7XG4gICAgYm9keS5yZXN1bWUoKVxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQmxvYiAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5zaXplLCAnYmxvYiBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgY29uc3QgaXNIMiA9IGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBpZiAoaXNIMikge1xuICAgICAgaDJzdHJlYW0uY29yaygpXG4gICAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyKVxuICAgICAgc29ja2V0LnVuY29yaygpXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdXRpbC5kZXN0cm95KGlzSDIgPyBoMnN0cmVhbSA6IHNvY2tldCwgZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICBoMnN0cmVhbVxuICAgICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub24oJ2RyYWluJywgb25EcmFpbilcblxuICAgIHRyeSB7XG4gICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGgyc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcbiAgICAgIGgyc3RyZWFtXG4gICAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcbiAgdHJ5IHtcbiAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5lbmQoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB3cml0ZXIuZGVzdHJveShlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgc29ja2V0XG4gICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gIH1cbn1cblxuY2xhc3MgQXN5bmNXcml0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddIDw9IDEsICdwaXBlbGluZSBzaG91bGQgb25seSBjb250YWluIHRoaXMgcmVxdWVzdCcpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yUmVxdWVzdCAoY2xpZW50LCByZXF1ZXN0LCBlcnIpIHtcbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uRXJyb3IoZXJyKVxuICAgIGFzc2VydChyZXF1ZXN0LmFib3J0ZWQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNsaWVudC5lbWl0KCdlcnJvcicsIGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBub2RlL2xpYi9pbnRlcm5hbC9maXhlZF9xdWV1ZS5qc1xuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgdGhpcy5saXN0W3RoaXMudG9wXSA9IGRhdGE7XG4gICAgdGhpcy50b3AgPSAodGhpcy50b3AgKyAxKSAmIGtNYXNrO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmxpc3RbdGhpcy5ib3R0b21dO1xuICAgIGlmIChuZXh0SXRlbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgaWYgKHRoaXMuaGVhZC5pc0Z1bGwoKSkge1xuICAgICAgLy8gSGVhZCBpcyBmdWxsOiBDcmVhdGVzIGEgbmV3IHF1ZXVlLCBzZXRzIHRoZSBvbGQgcXVldWUncyBgLm5leHRgIHRvIGl0LFxuICAgICAgLy8gYW5kIHNldHMgaXQgYXMgdGhlIG5ldyBtYWluIHF1ZXVlLlxuICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICAgIH1cbiAgICB0aGlzLmhlYWQucHVzaChkYXRhKTtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTtcbiAgICBpZiAodGFpbC5pc0VtcHR5KCkgJiYgdGFpbC5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHF1ZXVlLCBpdCBmb3JtcyB0aGUgbmV3IHRhaWwuXG4gICAgICB0aGlzLnRhaWwgPSB0YWlsLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9XG59O1xuIiwgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgRml4ZWRRdWV1ZSA9IHJlcXVpcmUoJy4vbm9kZS9maXhlZC1xdWV1ZScpXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplLCBrUnVubmluZywga1BlbmRpbmcsIGtRdWV1ZWQsIGtCdXN5LCBrRnJlZSwga1VybCwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trUXVldWVdID0gbmV3IEZpeGVkUXVldWUoKVxuICAgIHRoaXNba0NsaWVudHNdID0gW11cbiAgICB0aGlzW2tRdWV1ZWRdID0gMFxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gZnVuY3Rpb24gb25EcmFpbiAob3JpZ2luLCB0YXJnZXRzKSB7XG4gICAgICBjb25zdCBxdWV1ZSA9IHBvb2xba1F1ZXVlXVxuXG4gICAgICBsZXQgbmVlZERyYWluID0gZmFsc2VcblxuICAgICAgd2hpbGUgKCFuZWVkRHJhaW4pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBwb29sW2tRdWV1ZWRdLS1cbiAgICAgICAgbmVlZERyYWluID0gIXRoaXMuZGlzcGF0Y2goaXRlbS5vcHRzLCBpdGVtLmhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSBuZWVkRHJhaW5cblxuICAgICAgaWYgKCF0aGlzW2tOZWVkRHJhaW5dICYmIHBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgcG9vbFtrTmVlZERyYWluXSA9IGZhbHNlXG4gICAgICAgIHBvb2wuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICAgIH1cblxuICAgICAgaWYgKHBvb2xba0Nsb3NlZFJlc29sdmVdICYmIHF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgICBQcm9taXNlXG4gICAgICAgICAgLmFsbChwb29sW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgICAgICAgIC50aGVuKHBvb2xba0Nsb3NlZFJlc29sdmVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Rpc2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba1N0YXRzXSA9IG5ldyBQb29sU3RhdHModGhpcylcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba0ZyZWVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0gJiYgIWNsaWVudFtrTmVlZERyYWluXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tQZW5kaW5nXTogcGVuZGluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcGVuZGluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHsgW2tSdW5uaW5nXTogcnVubmluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcnVubmluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tTaXplXTogc2l6ZSB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gc2l6ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgc3RhdHMgKCkge1xuICAgIHJldHVybiB0aGlzW2tTdGF0c11cbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBpZiAodGhpc1trUXVldWVdLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuZGVzdHJveShlcnIpKSlcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0dldERpc3BhdGNoZXJdKClcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba1F1ZXVlXS5wdXNoKHsgb3B0cywgaGFuZGxlciB9KVxuICAgICAgdGhpc1trUXVldWVkXSsrXG4gICAgfSBlbHNlIGlmICghZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKSkge1xuICAgICAgZGlzcGF0Y2hlcltrTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAhdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuICAgIH1cblxuICAgIHJldHVybiAhdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgW2tBZGRDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnRcbiAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgIC5vbignY29ubmVjdCcsIHRoaXNba09uQ29ubmVjdF0pXG4gICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICB0aGlzW2tDbGllbnRzXS5wdXNoKGNsaWVudClcblxuICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IHsga1VybCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcbmNvbnN0IGtDb25uZWN0aW9ucyA9IFN5bWJvbCgnY29ubmVjdGlvbnMnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgUG9vbCBleHRlbmRzIFBvb2xCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIGNvbm5lY3Rpb25zLFxuICAgIGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSxcbiAgICBjb25uZWN0LFxuICAgIGNvbm5lY3RUaW1lb3V0LFxuICAgIHRscyxcbiAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICBzb2NrZXRQYXRoLFxuICAgIGF1dG9TZWxlY3RGYW1pbHksXG4gICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0LFxuICAgIGFsbG93SDIsXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAoY29ubmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0aW9ucykgfHwgY29ubmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb25zJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLih1dGlsLm5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5ICYmIGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2wpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2xcbiAgICAgIDogW11cbiAgICB0aGlzW2tDb25uZWN0aW9uc10gPSBjb25uZWN0aW9ucyB8fCBudWxsXG4gICAgdGhpc1trVXJsXSA9IHV0aWwucGFyc2VPcmlnaW4ob3JpZ2luKVxuICAgIHRoaXNba09wdGlvbnNdID0geyAuLi51dGlsLmRlZXBDbG9uZShvcHRpb25zKSwgY29ubmVjdCwgYWxsb3dIMiB9XG4gICAgdGhpc1trT3B0aW9uc10uaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnNcbiAgICAgID8geyAuLi5vcHRpb25zLmludGVyY2VwdG9ycyB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgdGhpcy5vbignY29ubmVjdGlvbkVycm9yJywgKG9yaWdpbiwgdGFyZ2V0cywgZXJyb3IpID0+IHtcbiAgICAgIC8vIElmIGEgY29ubmVjdGlvbiBlcnJvciBvY2N1cnMsIHdlIHJlbW92ZSB0aGUgY2xpZW50IGZyb20gdGhlIHBvb2wsXG4gICAgICAvLyBhbmQgZW1pdCBhIGNvbm5lY3Rpb25FcnJvciBldmVudC4gVGhleSB3aWxsIG5vdCBiZSByZS11c2VkLlxuICAgICAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzM4OTVcbiAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgLy8gRG8gbm90IHVzZSBrUmVtb3ZlQ2xpZW50IGhlcmUsIGFzIGl0IHdpbGwgY2xvc2UgdGhlIGNsaWVudCxcbiAgICAgICAgLy8gYnV0IHRoZSBjbGllbnQgY2Fubm90IGJlIGNsb3NlZCBpbiB0aGlzIHN0YXRlLlxuICAgICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKHRhcmdldClcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+ICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dKVxuXG4gICAgaWYgKGRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzW2tDb25uZWN0aW9uc10gfHwgdGhpc1trQ2xpZW50c10ubGVuZ3RoIDwgdGhpc1trQ29ubmVjdGlvbnNdKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0odGhpc1trVXJsXSwgdGhpc1trT3B0aW9uc10pXG4gICAgICB0aGlzW2tBZGRDbGllbnRdKGRpc3BhdGNoZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrUmVtb3ZlQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHBhcnNlT3JpZ2luIH0gPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcbmNvbnN0IGtHcmVhdGVzdENvbW1vbkRpdmlzb3IgPSBTeW1ib2woJ2tHcmVhdGVzdENvbW1vbkRpdmlzb3InKVxuY29uc3Qga0N1cnJlbnRXZWlnaHQgPSBTeW1ib2woJ2tDdXJyZW50V2VpZ2h0JylcbmNvbnN0IGtJbmRleCA9IFN5bWJvbCgna0luZGV4JylcbmNvbnN0IGtXZWlnaHQgPSBTeW1ib2woJ2tXZWlnaHQnKVxuY29uc3Qga01heFdlaWdodFBlclNlcnZlciA9IFN5bWJvbCgna01heFdlaWdodFBlclNlcnZlcicpXG5jb25zdCBrRXJyb3JQZW5hbHR5ID0gU3ltYm9sKCdrRXJyb3JQZW5hbHR5JylcblxuZnVuY3Rpb24gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yIChhLCBiKSB7XG4gIGlmIChiID09PSAwKSByZXR1cm4gYVxuICByZXR1cm4gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yKGIsIGEgJSBiKVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbCBleHRlbmRzIFBvb2xCYXNlIHtcbiAgY29uc3RydWN0b3IgKHVwc3RyZWFtcyA9IFtdLCB7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgLi4ub3B0cyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IG9wdHNcbiAgICB0aGlzW2tJbmRleF0gPSAtMVxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gMFxuXG4gICAgdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSA9IHRoaXNba09wdGlvbnNdLm1heFdlaWdodFBlclNlcnZlciB8fCAxMDBcbiAgICB0aGlzW2tFcnJvclBlbmFsdHldID0gdGhpc1trT3B0aW9uc10uZXJyb3JQZW5hbHR5IHx8IDE1XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXBzdHJlYW1zKSkge1xuICAgICAgdXBzdHJlYW1zID0gW3Vwc3RyZWFtc11cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sKVxuICAgICAgPyBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2xcbiAgICAgIDogW11cbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIGZvciAoY29uc3QgdXBzdHJlYW0gb2YgdXBzdHJlYW1zKSB7XG4gICAgICB0aGlzLmFkZFVwc3RyZWFtKHVwc3RyZWFtKVxuICAgIH1cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gIH1cblxuICBhZGRVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBjb25zdCBwb29sID0gdGhpc1trRmFjdG9yeV0odXBzdHJlYW1PcmlnaW4sIE9iamVjdC5hc3NpZ24oe30sIHRoaXNba09wdGlvbnNdKSlcblxuICAgIHRoaXNba0FkZENsaWVudF0ocG9vbClcbiAgICBwb29sLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWluKHRoaXNba01heFdlaWdodFBlclNlcnZlcl0sIHBvb2xba1dlaWdodF0gKyB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdjb25uZWN0aW9uRXJyb3InLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Rpc2Nvbm5lY3QnLCAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgZXJyID0gYXJnc1syXVxuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ1VORF9FUlJfU09DS0VUJykge1xuICAgICAgICAvLyBkZWNyZWFzZSB0aGUgd2VpZ2h0IG9mIHRoZSBwb29sLlxuICAgICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIGNsaWVudFtrV2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzICgpIHtcbiAgICB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdID0gdGhpc1trQ2xpZW50c10ubWFwKHAgPT4gcFtrV2VpZ2h0XSkucmVkdWNlKGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciwgMClcbiAgfVxuXG4gIHJlbW92ZVVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzW2tSZW1vdmVDbGllbnRdKHBvb2wpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGdldCB1cHN0cmVhbXMgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVxuICAgICAgLmZpbHRlcihkaXNwYXRjaGVyID0+IGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlKVxuICAgICAgLm1hcCgocCkgPT4gcFtrVXJsXS5vcmlnaW4pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICAvLyBXZSB2YWxpZGF0ZSB0aGF0IHBvb2xzIGlzIGdyZWF0ZXIgdGhhbiAwLFxuICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIHdhaXQgdW50aWwgYW4gdXBzdHJlYW1cbiAgICAvLyBpcyBhZGRlZCwgd2hpY2ggbWlnaHQgbmV2ZXIgaGFwcGVuLlxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAoXG4gICAgICAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSAmJlxuICAgICAgZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWxsQ2xpZW50c0J1c3kgPSB0aGlzW2tDbGllbnRzXS5tYXAocG9vbCA9PiBwb29sW2tOZWVkRHJhaW5dKS5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYiwgdHJ1ZSlcblxuICAgIGlmIChhbGxDbGllbnRzQnVzeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGNvdW50ZXIgPSAwXG5cbiAgICBsZXQgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tDbGllbnRzXS5maW5kSW5kZXgocG9vbCA9PiAhcG9vbFtrTmVlZERyYWluXSlcblxuICAgIHdoaWxlIChjb3VudGVyKysgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGgpIHtcbiAgICAgIHRoaXNba0luZGV4XSA9ICh0aGlzW2tJbmRleF0gKyAxKSAlIHRoaXNba0NsaWVudHNdLmxlbmd0aFxuICAgICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdW3RoaXNba0luZGV4XV1cblxuICAgICAgLy8gZmluZCBwb29sIGluZGV4IHdpdGggdGhlIGxhcmdlc3Qgd2VpZ2h0XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XSAmJiAhcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0luZGV4XVxuICAgICAgfVxuXG4gICAgICAvLyBkZWNyZWFzZSB0aGUgY3VycmVudCB3ZWlnaHQgZXZlcnkgYHRoaXNba0NsaWVudHNdLmxlbmd0aGAuXG4gICAgICBpZiAodGhpc1trSW5kZXhdID09PSAwKSB7XG4gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCB3ZWlnaHQgdG8gdGhlIG5leHQgbG93ZXIgd2VpZ2h0LlxuICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0N1cnJlbnRXZWlnaHRdIC0gdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXVxuXG4gICAgICAgIGlmICh0aGlzW2tDdXJyZW50V2VpZ2h0XSA8PSAwKSB7XG4gICAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID49IHRoaXNba0N1cnJlbnRXZWlnaHRdICYmICghcG9vbFtrTmVlZERyYWluXSkpIHtcbiAgICAgICAgcmV0dXJuIHBvb2xcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XVxuICAgIHRoaXNba0luZGV4XSA9IG1heFdlaWdodEluZGV4XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFsYW5jZWRQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IHsgV2Vha1JlZiwgRmluYWxpemF0aW9uUmVnaXN0cnkgfSA9IHJlcXVpcmUoJy4vY29tcGF0L2Rpc3BhdGNoZXItd2Vha3JlZicpKClcblxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtNYXhSZWRpcmVjdGlvbnMgPSBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpXG5jb25zdCBrT25EcmFpbiA9IFN5bWJvbCgnb25EcmFpbicpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5jb25zdCBrRmluYWxpemVyID0gU3ltYm9sKCdmaW5hbGl6ZXInKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSB7IC4uLmNvbm5lY3QgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50KVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cblxuICAgIHRoaXNba09wdGlvbnNdID0geyAuLi51dGlsLmRlZXBDbG9uZShvcHRpb25zKSwgY29ubmVjdCB9XG4gICAgdGhpc1trT3B0aW9uc10uaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnNcbiAgICAgID8geyAuLi5vcHRpb25zLmludGVyY2VwdG9ycyB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcbiAgICB0aGlzW2tDbGllbnRzXSA9IG5ldyBNYXAoKVxuICAgIHRoaXNba0ZpbmFsaXplcl0gPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqLyBrZXkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcbiAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLmRlbGV0ZShrZXkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGFnZW50ID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG5cbiAgICBsZXQgZGlzcGF0Y2hlciA9IHJlZiA/IHJlZi5kZXJlZigpIDogbnVsbFxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgbmV3IFdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gICAgICB0aGlzW2tGaW5hbGl6ZXJdLnJlZ2lzdGVyKGRpc3BhdGNoZXIsIGtleSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcylcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGNvbnN0IGRlc3Ryb3lQcm9taXNlcyA9IFtdXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIGRlc3Ryb3lQcm9taXNlcy5wdXNoKGNsaWVudC5kZXN0cm95KGVycikpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZGVzdHJveVByb21pc2VzKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnRcbiIsICIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzkwN1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IsIE5vdFN1cHBvcnRlZEVycm9yLCBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlYWRhYmxlU3RyZWFtRnJvbSwgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmxldCBCbG9iXG5cbmNvbnN0IGtDb25zdW1lID0gU3ltYm9sKCdrQ29uc3VtZScpXG5jb25zdCBrUmVhZGluZyA9IFN5bWJvbCgna1JlYWRpbmcnKVxuY29uc3Qga0JvZHkgPSBTeW1ib2woJ2tCb2R5JylcbmNvbnN0IGtBYm9ydCA9IFN5bWJvbCgnYWJvcnQnKVxuY29uc3Qga0NvbnRlbnRUeXBlID0gU3ltYm9sKCdrQ29udGVudFR5cGUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCb2R5UmVhZGFibGUgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yICh7XG4gICAgcmVzdW1lLFxuICAgIGFib3J0LFxuICAgIGNvbnRlbnRUeXBlID0gJycsXG4gICAgaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICB9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiByZXN1bWUsXG4gICAgICBoaWdoV2F0ZXJNYXJrXG4gICAgfSlcblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgdGhpc1trQWJvcnRdID0gYWJvcnRcbiAgICB0aGlzW2tDb25zdW1lXSA9IG51bGxcbiAgICB0aGlzW2tCb2R5XSA9IG51bGxcbiAgICB0aGlzW2tDb250ZW50VHlwZV0gPSBjb250ZW50VHlwZVxuXG4gICAgLy8gSXMgc3RyZWFtIGJlaW5nIGNvbnN1bWVkIHRocm91Z2ggUmVhZGFibGUgQVBJP1xuICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgYXZvaWQgY2hlY2tpbmdcbiAgICAvLyBmb3IgJ2RhdGEnIGFuZCAncmVhZGFibGUnIGxpc3RlbmVycyBpbiB0aGUgaG90IHBhdGhcbiAgICAvLyBpbnNpZGUgcHVzaCgpLlxuICAgIHRoaXNba1JlYWRpbmddID0gZmFsc2VcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzW2tBYm9ydF0oKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5kZXN0cm95KGVycilcbiAgfVxuXG4gIGVtaXQgKGV2LCAuLi5hcmdzKSB7XG4gICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgIC8vIE5vZGUgPCAxNi43XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIE5vZGUgPCAxNlxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb24gKGV2LCAuLi5hcmdzKSB7XG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBhZGRMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIG9mZiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXQgPSBzdXBlci5vZmYoZXYsIC4uLmFyZ3MpXG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gKFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDAgfHxcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICByZW1vdmVMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vZmYoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBwdXNoIChjaHVuaykge1xuICAgIGlmICh0aGlzW2tDb25zdW1lXSAmJiBjaHVuayAhPT0gbnVsbCAmJiB0aGlzLnJlYWRhYmxlTGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdW1lUHVzaCh0aGlzW2tDb25zdW1lXSwgY2h1bmspXG4gICAgICByZXR1cm4gdGhpc1trUmVhZGluZ10gPyBzdXBlci5wdXNoKGNodW5rKSA6IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnB1c2goY2h1bmspXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktdGV4dFxuICBhc3luYyB0ZXh0ICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAndGV4dCcpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktanNvblxuICBhc3luYyBqc29uICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnanNvbicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYmxvYlxuICBhc3luYyBibG9iICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYmxvYicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYXJyYXlidWZmZXJcbiAgYXN5bmMgYXJyYXlCdWZmZXIgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdhcnJheUJ1ZmZlcicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktZm9ybWRhdGFcbiAgYXN5bmMgZm9ybURhdGEgKCkge1xuICAgIC8vIFRPRE86IEltcGxlbWVudC5cbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHl1c2VkXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQodGhpcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5XG4gIGdldCBib2R5ICgpIHtcbiAgICBpZiAoIXRoaXNba0JvZHldKSB7XG4gICAgICB0aGlzW2tCb2R5XSA9IFJlYWRhYmxlU3RyZWFtRnJvbSh0aGlzKVxuICAgICAgaWYgKHRoaXNba0NvbnN1bWVdKSB7XG4gICAgICAgIC8vIFRPRE86IElzIHRoaXMgdGhlIGJlc3Qgd2F5IHRvIGZvcmNlIGEgbG9jaz9cbiAgICAgICAgdGhpc1trQm9keV0uZ2V0UmVhZGVyKCkgLy8gRW5zdXJlIHN0cmVhbSBpcyBsb2NrZWQuXG4gICAgICAgIGFzc2VydCh0aGlzW2tCb2R5XS5sb2NrZWQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzW2tCb2R5XVxuICB9XG5cbiAgZHVtcCAob3B0cykge1xuICAgIGxldCBsaW1pdCA9IG9wdHMgJiYgTnVtYmVyLmlzRmluaXRlKG9wdHMubGltaXQpID8gb3B0cy5saW1pdCA6IDI2MjE0NFxuICAgIGNvbnN0IHNpZ25hbCA9IG9wdHMgJiYgb3B0cy5zaWduYWxcblxuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBBYm9ydFNpZ25hbCcpXG4gICAgICAgIH1cbiAgICAgICAgdXRpbC50aHJvd0lmQWJvcnRlZChzaWduYWwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmFsTGlzdGVuZXJDbGVhbnVwID0gc2lnbmFsXG4gICAgICAgID8gdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgIH0pXG4gICAgICAgIDogbm9vcFxuXG4gICAgICB0aGlzXG4gICAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2lnbmFsTGlzdGVuZXJDbGVhbnVwKClcbiAgICAgICAgICBpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbiB8fCBPYmplY3QuYXNzaWduKG5ldyBFcnJvcignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcpLCB7IG5hbWU6ICdBYm9ydEVycm9yJyB9KSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdlcnJvcicsIG5vb3ApXG4gICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICAgIGxpbWl0IC09IGNodW5rLmxlbmd0aFxuICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlc3VtZSgpXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1sb2NrZWRcbmZ1bmN0aW9uIGlzTG9ja2VkIChzZWxmKSB7XG4gIC8vIENvbnN1bWUgaXMgYW4gaW1wbGljaXQgbG9jay5cbiAgcmV0dXJuIChzZWxmW2tCb2R5XSAmJiBzZWxmW2tCb2R5XS5sb2NrZWQgPT09IHRydWUpIHx8IHNlbGZba0NvbnN1bWVdXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBpc1VudXNhYmxlIChzZWxmKSB7XG4gIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHNlbGYpIHx8IGlzTG9ja2VkKHNlbGYpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnN1bWUgKHN0cmVhbSwgdHlwZSkge1xuICBpZiAoaXNVbnVzYWJsZShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICB9XG5cbiAgYXNzZXJ0KCFzdHJlYW1ba0NvbnN1bWVdKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3RyZWFtW2tDb25zdW1lXSA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBzdHJlYW0sXG4gICAgICByZXNvbHZlLFxuICAgICAgcmVqZWN0LFxuICAgICAgbGVuZ3RoOiAwLFxuICAgICAgYm9keTogW11cbiAgICB9XG5cbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpc1trQ29uc3VtZV0uYm9keSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNvbnN1bWVTdGFydCwgc3RyZWFtW2tDb25zdW1lXSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29uc3VtZVN0YXJ0IChjb25zdW1lKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHsgX3JlYWRhYmxlU3RhdGU6IHN0YXRlIH0gPSBjb25zdW1lLnN0cmVhbVxuXG4gIGZvciAoY29uc3QgY2h1bmsgb2Ygc3RhdGUuYnVmZmVyKSB7XG4gICAgY29uc3VtZVB1c2goY29uc3VtZSwgY2h1bmspXG4gIH1cblxuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5zdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN1bWUuc3RyZWFtLnJlc3VtZSgpXG5cbiAgd2hpbGUgKGNvbnN1bWUuc3RyZWFtLnJlYWQoKSAhPSBudWxsKSB7XG4gICAgLy8gTG9vcFxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVFbmQgKGNvbnN1bWUpIHtcbiAgY29uc3QgeyB0eXBlLCBib2R5LCByZXNvbHZlLCBzdHJlYW0sIGxlbmd0aCB9ID0gY29uc3VtZVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmVzb2x2ZSh0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGJvZHkpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdqc29uJykge1xuICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgY29uc3QgZHN0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuXG4gICAgICBsZXQgcG9zID0gMFxuICAgICAgZm9yIChjb25zdCBidWYgb2YgYm9keSkge1xuICAgICAgICBkc3Quc2V0KGJ1ZiwgcG9zKVxuICAgICAgICBwb3MgKz0gYnVmLmJ5dGVMZW5ndGhcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShkc3QuYnVmZmVyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICBpZiAoIUJsb2IpIHtcbiAgICAgICAgQmxvYiA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJsb2JcbiAgICAgIH1cbiAgICAgIHJlc29sdmUobmV3IEJsb2IoYm9keSwgeyB0eXBlOiBzdHJlYW1ba0NvbnRlbnRUeXBlXSB9KSlcbiAgICB9XG5cbiAgICBjb25zdW1lRmluaXNoKGNvbnN1bWUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdW1lUHVzaCAoY29uc3VtZSwgY2h1bmspIHtcbiAgY29uc3VtZS5sZW5ndGggKz0gY2h1bmsubGVuZ3RoXG4gIGNvbnN1bWUuYm9keS5wdXNoKGNodW5rKVxufVxuXG5mdW5jdGlvbiBjb25zdW1lRmluaXNoIChjb25zdW1lLCBlcnIpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGVycikge1xuICAgIGNvbnN1bWUucmVqZWN0KGVycilcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnJlc29sdmUoKVxuICB9XG5cbiAgY29uc3VtZS50eXBlID0gbnVsbFxuICBjb25zdW1lLnN0cmVhbSA9IG51bGxcbiAgY29uc3VtZS5yZXNvbHZlID0gbnVsbFxuICBjb25zdW1lLnJlamVjdCA9IG51bGxcbiAgY29uc3VtZS5sZW5ndGggPSAwXG4gIGNvbnN1bWUuYm9keSA9IG51bGxcbn1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KClcbiAgfSBlbHNlIHtcbiAgICBzZWxmLm9uRXJyb3IobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTaWduYWwgKHNlbGYsIHNpZ25hbCkge1xuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG5cbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIGFib3J0KHNlbGYpXG4gICAgcmV0dXJuXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gc2lnbmFsXG4gIHNlbGZba0xpc3RlbmVyXSA9ICgpID0+IHtcbiAgICBhYm9ydChzZWxmKVxuICB9XG5cbiAgYWRkQWJvcnRMaXN0ZW5lcihzZWxmW2tTaWduYWxdLCBzZWxmW2tMaXN0ZW5lcl0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpZ25hbCAoc2VsZikge1xuICBpZiAoIXNlbGZba1NpZ25hbF0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICgncmVtb3ZlRXZlbnRMaXN0ZW5lcicgaW4gc2VsZltrU2lnbmFsXSkge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH0gZWxzZSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGRTaWduYWwsXG4gIHJlbW92ZVNpZ25hbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgUmVxdWVzdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciwgaGlnaFdhdGVyTWFyayB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZ2hXYXRlck1hcmsgJiYgKHR5cGVvZiBoaWdoV2F0ZXJNYXJrICE9PSAnbnVtYmVyJyB8fCBoaWdoV2F0ZXJNYXJrIDwgMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhpZ2hXYXRlck1hcmsnKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfUkVRVUVTVCcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy50cmFpbGVycyA9IHt9XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvclxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmtcblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICBib2R5Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgYWJvcnQsIGNvbnRleHQsIHJlc3BvbnNlSGVhZGVycywgaGlnaFdhdGVyTWFyayB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlZEhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgY29uc3QgYm9keSA9IG5ldyBSZWFkYWJsZSh7IHJlc3VtZSwgYWJvcnQsIGNvbnRlbnRUeXBlLCBoaWdoV2F0ZXJNYXJrIH0pXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIHRoaXMucmVzID0gYm9keVxuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgICB7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIHRyYWlsZXJzOiB0aGlzLnRyYWlsZXJzLFxuICAgICAgICAgIG9wYXF1ZSxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzLCB0aGlzLnRyYWlsZXJzKVxuXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgYm9keSwgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgLy8gVE9ETzogRG9lcyB0aGlzIG5lZWQgcXVldWVNaWNyb3Rhc2s/XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIC8vIEVuc3VyZSBhbGwgcXVldWVkIGhhbmRsZXJzIGFyZSBpbnZva2VkIGJlZm9yZSBkZXN0cm95aW5nIHJlcy5cbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBSZXF1ZXN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVlc3Rcbm1vZHVsZS5leHBvcnRzLlJlcXVlc3RIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5yZXN1bWUpIHtcbiAgICAgICAgICBib2R5LnJlc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB3cml0ZTogKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgICBpZiAocmVxLnB1c2goY2h1bmssIGVuY29kaW5nKSB8fCByZXEuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcVtrUmVzdW1lXSA9IGNhbGxiYWNrXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiAoZXJyLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IGJvZHksIHJlcSwgcmVzLCByZXQsIGFib3J0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFlcnIgJiYgIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFib3J0ICYmIGVycikge1xuICAgICAgICAgIGFib3J0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXEsIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuXG4gICAgICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICB9KS5vbigncHJlZmluaXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgLy8gTm9kZSA8IDE1IGRvZXMgbm90IGNhbGwgX2ZpbmFsIGluIHNhbWUgdGljay5cbiAgICAgIHJlcS5wdXNoKG51bGwpXG4gICAgfSlcblxuICAgIHRoaXMucmVzID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJldCwgcmVzIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcblxuICAgIGlmIChyZXQuZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUpIHtcbiAgICBjb25zdCB7IG9wYXF1ZSwgaGFuZGxlciwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucmVzID0gbmV3IFBpcGVsaW5lUmVzcG9uc2UocmVzdW1lKVxuXG4gICAgbGV0IGJvZHlcbiAgICB0cnkge1xuICAgICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgIGJvZHkgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShoYW5kbGVyLCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgYm9keTogdGhpcy5yZXMsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJlcy5vbignZXJyb3InLCB1dGlsLm5vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGlmICghYm9keSB8fCB0eXBlb2YgYm9keS5vbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKCdleHBlY3RlZCBSZWFkYWJsZScpXG4gICAgfVxuXG4gICAgYm9keVxuICAgICAgLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0LCBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQucHVzaChjaHVuaykgJiYgYm9keS5wYXVzZSkge1xuICAgICAgICAgIGJvZHkucGF1c2UoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgcmV0LnB1c2gobnVsbClcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZGVkKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXQgfSA9IHRoaXNcbiAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lIChvcHRzLCBoYW5kbGVyKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGlwZWxpbmVIYW5kbGVyID0gbmV3IFBpcGVsaW5lSGFuZGxlcihvcHRzLCBoYW5kbGVyKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBib2R5OiBwaXBlbGluZUhhbmRsZXIucmVxIH0sIHBpcGVsaW5lSGFuZGxlcilcbiAgICByZXR1cm4gcGlwZWxpbmVIYW5kbGVyLnJldFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKCkuZGVzdHJveShlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwaXBlbGluZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNsYXNzIFVwZ3JhZGVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfVVBHUkFERScpXG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdGF0dXNDb2RlLCAxMDEpXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGUgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwZ3JhZGUuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBncmFkZUhhbmRsZXIgPSBuZXcgVXBncmFkZUhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgIHVwZ3JhZGU6IG9wdHMucHJvdG9jb2wgfHwgJ1dlYnNvY2tldCdcbiAgICB9LCB1cGdyYWRlSGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBncmFkZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY2xhc3MgTW9ja05vdE1hdGNoZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vY2tOb3RNYXRjaGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01vY2tOb3RNYXRjaGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIHJlcXVlc3QgZG9lcyBub3QgbWF0Y2ggYW55IHJlZ2lzdGVyZWQgbW9jayBkaXNwYXRjaGVzJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfTU9DS19FUlJfTU9DS19OT1RfTUFUQ0hFRCdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTW9ja05vdE1hdGNoZWRFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwsIG5vcCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5mdW5jdGlvbiBtYXRjaFZhbHVlIChtYXRjaCwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbWF0Y2ggPT09IHZhbHVlXG4gIH1cbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG1hdGNoLnRlc3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXRjaCh2YWx1ZSkgPT09IHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gbG93ZXJDYXNlRW50cmllcyAoaGVhZGVycykge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLm1hcCgoW2hlYWRlck5hbWUsIGhlYWRlclZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIFtoZWFkZXJOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCksIGhlYWRlclZhbHVlXVxuICAgIH0pXG4gIClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vaW5kZXgnKS5IZWFkZXJzfHN0cmluZ1tdfFJlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGVyQnlOYW1lIChoZWFkZXJzLCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmIChoZWFkZXJzW2ldLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSBlbHNlIGlmICh0eXBlb2YgaGVhZGVycy5nZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaGVhZGVycy5nZXQoa2V5KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpW2tleS50b0xvY2FsZUxvd2VyQ2FzZSgpXVxuICB9XG59XG5cbi8qKiBAcGFyYW0ge3N0cmluZ1tdfSBoZWFkZXJzICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnNGcm9tQXJyYXkgKGhlYWRlcnMpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgY29uc3QgY2xvbmUgPSBoZWFkZXJzLnNsaWNlKClcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjbG9uZS5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICBlbnRyaWVzLnB1c2goW2Nsb25lW2luZGV4XSwgY2xvbmVbaW5kZXggKyAxXV0pXG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxufVxuXG5mdW5jdGlvbiBtYXRjaEhlYWRlcnMgKG1vY2tEaXNwYXRjaCwgaGVhZGVycykge1xuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgICAgIGhlYWRlcnMgPSBidWlsZEhlYWRlcnNGcm9tQXJyYXkoaGVhZGVycylcbiAgICB9XG4gICAgcmV0dXJuIG1vY2tEaXNwYXRjaC5oZWFkZXJzKGhlYWRlcnMgPyBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpIDoge30pXG4gIH1cbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh0eXBlb2YgaGVhZGVycyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBbbWF0Y2hIZWFkZXJOYW1lLCBtYXRjaEhlYWRlclZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtb2NrRGlzcGF0Y2guaGVhZGVycykpIHtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IGdldEhlYWRlckJ5TmFtZShoZWFkZXJzLCBtYXRjaEhlYWRlck5hbWUpXG5cbiAgICBpZiAoIW1hdGNoVmFsdWUobWF0Y2hIZWFkZXJWYWx1ZSwgaGVhZGVyVmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gc2FmZVVybCAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJz8nKVxuXG4gIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHFwID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXRoU2VnbWVudHMucG9wKCkpXG4gIHFwLnNvcnQoKVxuICByZXR1cm4gWy4uLnBhdGhTZWdtZW50cywgcXAudG9TdHJpbmcoKV0uam9pbignPycpXG59XG5cbmZ1bmN0aW9uIG1hdGNoS2V5IChtb2NrRGlzcGF0Y2gsIHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzIH0pIHtcbiAgY29uc3QgcGF0aE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gucGF0aCwgcGF0aClcbiAgY29uc3QgbWV0aG9kTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5tZXRob2QsIG1ldGhvZClcbiAgY29uc3QgYm9keU1hdGNoID0gdHlwZW9mIG1vY2tEaXNwYXRjaC5ib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLmJvZHksIGJvZHkpIDogdHJ1ZVxuICBjb25zdCBoZWFkZXJzTWF0Y2ggPSBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKVxuICByZXR1cm4gcGF0aE1hdGNoICYmIG1ldGhvZE1hdGNoICYmIGJvZHlNYXRjaCAmJiBoZWFkZXJzTWF0Y2hcbn1cblxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhIChkYXRhKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgYmFzZVBhdGggPSBrZXkucXVlcnkgPyBidWlsZFVSTChrZXkucGF0aCwga2V5LnF1ZXJ5KSA6IGtleS5wYXRoXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHR5cGVvZiBiYXNlUGF0aCA9PT0gJ3N0cmluZycgPyBzYWZlVXJsKGJhc2VQYXRoKSA6IGJhc2VQYXRoXG5cbiAgLy8gTWF0Y2ggcGF0aFxuICBsZXQgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGNvbnN1bWVkIH0pID0+ICFjb25zdW1lZCkuZmlsdGVyKCh7IHBhdGggfSkgPT4gbWF0Y2hWYWx1ZShzYWZlVXJsKHBhdGgpLCByZXNvbHZlZFBhdGgpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIG1ldGhvZFxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IG1ldGhvZCB9KSA9PiBtYXRjaFZhbHVlKG1ldGhvZCwga2V5Lm1ldGhvZCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIG1ldGhvZCAnJHtrZXkubWV0aG9kfSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggYm9keVxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGJvZHkgfSkgPT4gdHlwZW9mIGJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShib2R5LCBrZXkuYm9keSkgOiB0cnVlKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBib2R5ICcke2tleS5ib2R5fSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgaGVhZGVycyAnJHt0eXBlb2Yga2V5LmhlYWRlcnMgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoa2V5LmhlYWRlcnMpIDoga2V5LmhlYWRlcnN9J2ApXG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzWzBdXG59XG5cbmZ1bmN0aW9uIGFkZE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSwgZGF0YSkge1xuICBjb25zdCBiYXNlRGF0YSA9IHsgdGltZXNJbnZva2VkOiAwLCB0aW1lczogMSwgcGVyc2lzdDogZmFsc2UsIGNvbnN1bWVkOiBmYWxzZSB9XG4gIGNvbnN0IHJlcGx5RGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8geyBjYWxsYmFjazogZGF0YSB9IDogeyAuLi5kYXRhIH1cbiAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0geyAuLi5iYXNlRGF0YSwgLi4ua2V5LCBwZW5kaW5nOiB0cnVlLCBkYXRhOiB7IGVycm9yOiBudWxsLCAuLi5yZXBseURhdGEgfSB9XG4gIG1vY2tEaXNwYXRjaGVzLnB1c2gobmV3TW9ja0Rpc3BhdGNoKVxuICByZXR1cm4gbmV3TW9ja0Rpc3BhdGNoXG59XG5cbmZ1bmN0aW9uIGRlbGV0ZU1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBpbmRleCA9IG1vY2tEaXNwYXRjaGVzLmZpbmRJbmRleChkaXNwYXRjaCA9PiB7XG4gICAgaWYgKCFkaXNwYXRjaC5jb25zdW1lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtYXRjaEtleShkaXNwYXRjaCwga2V5KVxuICB9KVxuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgbW9ja0Rpc3BhdGNoZXMuc3BsaWNlKGluZGV4LCAxKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2V5IChvcHRzKSB7XG4gIGNvbnN0IHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzLCBxdWVyeSB9ID0gb3B0c1xuICByZXR1cm4ge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5VmFsdWVzIChkYXRhKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGtleVZhbHVlUGFpcnMsIFtrZXksIHZhbHVlXSkgPT4gW1xuICAgIC4uLmtleVZhbHVlUGFpcnMsXG4gICAgQnVmZmVyLmZyb20oYCR7a2V5fWApLFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHggPT4gQnVmZmVyLmZyb20oYCR7eH1gKSkgOiBCdWZmZXIuZnJvbShgJHt2YWx1ZX1gKVxuICBdLCBbXSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLmFib3J0ID0gbm9wXG4gICAgaGFuZGxlci5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgcmVzcG9uc2VIZWFkZXJzLCByZXN1bWUsIGdldFN0YXR1c1RleHQoc3RhdHVzQ29kZSkpXG4gICAgaGFuZGxlci5vbkRhdGEoQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGUocmVzcG9uc2VUcmFpbGVycylcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2gobW9ja0Rpc3BhdGNoZXMsIGtleSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZSAoKSB7fVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja0Rpc3BhdGNoICgpIHtcbiAgY29uc3QgYWdlbnQgPSB0aGlzW2tNb2NrQWdlbnRdXG4gIGNvbnN0IG9yaWdpbiA9IHRoaXNba09yaWdpbl1cbiAgY29uc3Qgb3JpZ2luYWxEaXNwYXRjaCA9IHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGFnZW50LmlzTW9ja0FjdGl2ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbW9ja0Rpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1vY2tOb3RNYXRjaGVkRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBuZXRDb25uZWN0ID0gYWdlbnRba0dldE5ldENvbm5lY3RdKClcbiAgICAgICAgICBpZiAobmV0Q29ubmVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGRpc2FibGVkKWApXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGVja05ldENvbm5lY3QobmV0Q29ubmVjdCwgb3JpZ2luKSkge1xuICAgICAgICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIG9yaWdpbilgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja05ldENvbm5lY3QgKG5ldENvbm5lY3QsIG9yaWdpbikge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKG9yaWdpbilcbiAgaWYgKG5ldENvbm5lY3QgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobmV0Q29ubmVjdCkgJiYgbmV0Q29ubmVjdC5zb21lKChtYXRjaGVyKSA9PiBtYXRjaFZhbHVlKG1hdGNoZXIsIHVybC5ob3N0KSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tPcHRpb25zIChvcHRzKSB7XG4gIGlmIChvcHRzKSB7XG4gICAgY29uc3QgeyBhZ2VudCwgLi4ubW9ja09wdGlvbnMgfSA9IG9wdHNcbiAgICByZXR1cm4gbW9ja09wdGlvbnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzcG9uc2VEYXRhLFxuICBnZXRNb2NrRGlzcGF0Y2gsXG4gIGFkZE1vY2tEaXNwYXRjaCxcbiAgZGVsZXRlTW9ja0Rpc3BhdGNoLFxuICBidWlsZEtleSxcbiAgZ2VuZXJhdGVLZXlWYWx1ZXMsXG4gIG1hdGNoVmFsdWUsXG4gIGdldFJlc3BvbnNlLFxuICBnZXRTdGF0dXNUZXh0LFxuICBtb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkTW9ja0Rpc3BhdGNoLFxuICBjaGVja05ldENvbm5lY3QsXG4gIGJ1aWxkTW9ja09wdGlvbnMsXG4gIGdldEhlYWRlckJ5TmFtZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGdldFJlc3BvbnNlRGF0YSwgYnVpbGRLZXksIGFkZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtEaXNwYXRjaEtleSxcbiAga0RlZmF1bHRIZWFkZXJzLFxuICBrRGVmYXVsdFRyYWlsZXJzLFxuICBrQ29udGVudExlbmd0aCxcbiAga01vY2tEaXNwYXRjaFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbi8qKlxuICogRGVmaW5lcyB0aGUgc2NvcGUgQVBJIGZvciBhbiBpbnRlcmNlcHRvciByZXBseVxuICovXG5jbGFzcyBNb2NrU2NvcGUge1xuICBjb25zdHJ1Y3RvciAobW9ja0Rpc3BhdGNoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXSA9IG1vY2tEaXNwYXRjaFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5IGEgcmVwbHkgYnkgYSBzZXQgYW1vdW50IGluIG1zLlxuICAgKi9cbiAgZGVsYXkgKHdhaXRJbk1zKSB7XG4gICAgaWYgKHR5cGVvZiB3YWl0SW5NcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIod2FpdEluTXMpIHx8IHdhaXRJbk1zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignd2FpdEluTXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLmRlbGF5ID0gd2FpdEluTXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBhIGRlZmluZWQgcmVwbHksIG5ldmVyIG1hcmsgYXMgY29uc3VtZWQuXG4gICAqL1xuICBwZXJzaXN0ICgpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnBlcnNpc3QgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBvbmUgdG8gZGVmaW5lIGEgcmVwbHkgZm9yIGEgc2V0IGFtb3VudCBvZiBtYXRjaGluZyByZXF1ZXN0cy5cbiAgICovXG4gIHRpbWVzIChyZXBlYXRUaW1lcykge1xuICAgIGlmICh0eXBlb2YgcmVwZWF0VGltZXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlcGVhdFRpbWVzKSB8fCByZXBlYXRUaW1lcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGVhdFRpbWVzIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS50aW1lcyA9IHJlcGVhdFRpbWVzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG4vKipcbiAqIERlZmluZXMgYW4gaW50ZXJjZXB0b3IgZm9yIGEgTW9ja1xuICovXG5jbGFzcyBNb2NrSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3RvciAob3B0cywgbW9ja0Rpc3BhdGNoZXMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5wYXRoIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTI0NVxuICAgIC8vIEFzIHBlciBSRkMgMzk4NiwgY2xpZW50cyBhcmUgbm90IHN1cHBvc2VkIHRvIHNlbmQgVVJJXG4gICAgLy8gZnJhZ21lbnRzIHRvIHNlcnZlcnMgd2hlbiB0aGV5IHJldHJpZXZlIGEgZG9jdW1lbnQsXG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob3B0cy5xdWVyeSkge1xuICAgICAgICBvcHRzLnBhdGggPSBidWlsZFVSTChvcHRzLnBhdGgsIG9wdHMucXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNYXRjaGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2Jsb2IvbWFpbi9saWIvZmV0Y2gvaW5kZXguanMjTDE4MTFcbiAgICAgICAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTChvcHRzLnBhdGgsICdkYXRhOi8vJylcbiAgICAgICAgb3B0cy5wYXRoID0gcGFyc2VkVVJMLnBhdGhuYW1lICsgcGFyc2VkVVJMLnNlYXJjaFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0cy5tZXRob2QgPSBvcHRzLm1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gICAgfVxuXG4gICAgdGhpc1trRGlzcGF0Y2hLZXldID0gYnVpbGRLZXkob3B0cylcbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IG1vY2tEaXNwYXRjaGVzXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0ge31cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0ge31cbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IGZhbHNlXG4gIH1cblxuICBjcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEgKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGRhdGEpXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXNba0NvbnRlbnRMZW5ndGhdID8geyAnY29udGVudC1sZW5ndGgnOiByZXNwb25zZURhdGEubGVuZ3RoIH0gOiB7fVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRIZWFkZXJzXSwgLi4uY29udGVudExlbmd0aCwgLi4ucmVzcG9uc2VPcHRpb25zLmhlYWRlcnMgfVxuICAgIGNvbnN0IHRyYWlsZXJzID0geyAuLi50aGlzW2tEZWZhdWx0VHJhaWxlcnNdLCAuLi5yZXNwb25zZU9wdGlvbnMudHJhaWxlcnMgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMgfVxuICB9XG5cbiAgdmFsaWRhdGVSZXBseVBhcmFtZXRlcnMgKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzQ29kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc3RhdHVzQ29kZSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2RhdGEgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXNwb25zZU9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Jlc3BvbnNlT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgcmVwbHkuXG4gICAqL1xuICByZXBseSAocmVwbHlEYXRhKSB7XG4gICAgLy8gVmFsdWVzIG9mIHJlcGx5IGFyZW4ndCBhdmFpbGFibGUgcmlnaHQgbm93IGFzIHRoZXlcbiAgICAvLyBjYW4gb25seSBiZSBhdmFpbGFibGUgd2hlbiB0aGUgcmVwbHkgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICBpZiAodHlwZW9mIHJlcGx5RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gV2UnbGwgZmlyc3Qgd3JhcCB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgaW4gYW5vdGhlciBmdW5jdGlvbixcbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm9wZXJseSByZXNvbHZlIHRoZSBkYXRhIGZyb20gdGhlIGNhbGxiYWNrXG4gICAgICAvLyB3aGVuIGludm9rZWQuXG4gICAgICBjb25zdCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjayA9IChvcHRzKSA9PiB7XG4gICAgICAgIC8vIE91ciByZXBseSBvcHRpb25zIGNhbGxiYWNrIGNvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgZm9yIHN0YXR1c0NvZGUsIGRhdGEgYW5kIG9wdGlvbnMuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YSA9IHJlcGx5RGF0YShvcHRzKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIGluIHRoZSByaWdodCBmb3JtYXRcbiAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlZERhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBseSBvcHRpb25zIGNhbGxiYWNrIG11c3QgcmV0dXJuIGFuIG9iamVjdCcpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGRhdGEgPSAnJywgcmVzcG9uc2VPcHRpb25zID0ge30gfSA9IHJlc29sdmVkRGF0YVxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICAgICAgLy8gU2luY2UgdGhlIHZhbHVlcyBjYW4gYmUgb2J0YWluZWQgaW1tZWRpYXRlbHkgd2UgcmV0dXJuIHRoZW1cbiAgICAgICAgLy8gZnJvbSB0aGlzIGhpZ2hlciBvcmRlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgbGF0ZXIuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB1c3VhbCBkaXNwYXRjaCBkYXRhLCBidXQgdGhpcyB0aW1lIHNldCB0aGUgZGF0YSBwYXJhbWV0ZXIgdG8gZnVuY3Rpb24gdGhhdCB3aWxsIGV2ZW50dWFsbHkgcHJvdmlkZSBkYXRhLlxuICAgICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrKVxuICAgICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICAgIH1cblxuICAgIC8vIFdlIGNhbiBoYXZlIGVpdGhlciBvbmUgb3IgdGhyZWUgcGFyYW1ldGVycywgaWYgd2UgZ2V0IGhlcmUsXG4gICAgLy8gd2Ugc2hvdWxkIGhhdmUgMS0zIHBhcmFtZXRlcnMuIFNvIHdlIHNwcmVhZCB0aGUgYXJndW1lbnRzIG9mXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIHBhcmFtZXRlcnMsIHNpbmNlIHJlcGx5RGF0YSB3aWxsIGFsd2F5c1xuICAgIC8vIGp1c3QgYmUgdGhlIHN0YXR1c0NvZGUuXG4gICAgY29uc3QgW3N0YXR1c0NvZGUsIGRhdGEgPSAnJywgcmVzcG9uc2VPcHRpb25zID0ge31dID0gWy4uLmFyZ3VtZW50c11cbiAgICB0aGlzLnZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcblxuICAgIC8vIFNlbmQgaW4tYWxyZWFkeSBwcm92aWRlZCBkYXRhIGxpa2UgdXN1YWxcbiAgICBjb25zdCBkaXNwYXRjaERhdGEgPSB0aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIGRpc3BhdGNoRGF0YSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCBlcnJvci5cbiAgICovXG4gIHJlcGx5V2l0aEVycm9yIChlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Vycm9yIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIHsgZXJyb3IgfSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgaGVhZGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5SGVhZGVycyAoaGVhZGVycykge1xuICAgIGlmICh0eXBlb2YgaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IGhlYWRlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IHRyYWlsZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlUcmFpbGVycyAodHJhaWxlcnMpIHtcbiAgICBpZiAodHlwZW9mIHRyYWlsZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd0cmFpbGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB0cmFpbGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlcGx5IGNvbnRlbnQgbGVuZ3RoIGhlYWRlciBmb3IgcmVwbGllcyBvbiB0aGUgaW50ZXJjZXB0b3JcbiAgICovXG4gIHJlcGx5Q29udGVudExlbmd0aCAoKSB7XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrSW50ZXJjZXB0b3IgPSBNb2NrSW50ZXJjZXB0b3Jcbm1vZHVsZS5leHBvcnRzLk1vY2tTY29wZSA9IE1vY2tTY29wZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi4vcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgc2luZ3VsYXJzID0ge1xuICBwcm9ub3VuOiAnaXQnLFxuICBpczogJ2lzJyxcbiAgd2FzOiAnd2FzJyxcbiAgdGhpczogJ3RoaXMnXG59XG5cbmNvbnN0IHBsdXJhbHMgPSB7XG4gIHByb25vdW46ICd0aGV5JyxcbiAgaXM6ICdhcmUnLFxuICB3YXM6ICd3ZXJlJyxcbiAgdGhpczogJ3RoZXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBsdXJhbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoc2luZ3VsYXIsIHBsdXJhbCkge1xuICAgIHRoaXMuc2luZ3VsYXIgPSBzaW5ndWxhclxuICAgIHRoaXMucGx1cmFsID0gcGx1cmFsXG4gIH1cblxuICBwbHVyYWxpemUgKGNvdW50KSB7XG4gICAgY29uc3Qgb25lID0gY291bnQgPT09IDFcbiAgICBjb25zdCBrZXlzID0gb25lID8gc2luZ3VsYXJzIDogcGx1cmFsc1xuICAgIGNvbnN0IG5vdW4gPSBvbmUgPyB0aGlzLnNpbmd1bGFyIDogdGhpcy5wbHVyYWxcbiAgICByZXR1cm4geyAuLi5rZXlzLCBjb3VudCwgbm91biB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZShcdTIwMjYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ1x1MjcwNScgOiAnXHUyNzRDJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDbGllbnRzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuLi9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXInKVxuY29uc3QgUGx1cmFsaXplciA9IHJlcXVpcmUoJy4vcGx1cmFsaXplcicpXG5jb25zdCBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyID0gcmVxdWlyZSgnLi9wZW5kaW5nLWludGVyY2VwdG9ycy1mb3JtYXR0ZXInKVxuXG5jbGFzcyBGYWtlV2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgTW9ja0FnZW50IGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG5cbiAgICAvLyBJbnN0YW50aWF0ZSBBZ2VudCBhbmQgZW5jYXBzdWxhdGVcbiAgICBpZiAoKG9wdHMgJiYgb3B0cy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cyAmJiBvcHRzLmFnZW50ID8gb3B0cy5hZ2VudCA6IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IGFnZW50XG5cbiAgICB0aGlzW2tDbGllbnRzXSA9IGFnZW50W2tDbGllbnRzXVxuICAgIHRoaXNba09wdGlvbnNdID0gYnVpbGRNb2NrT3B0aW9ucyhvcHRzKVxuICB9XG5cbiAgZ2V0IChvcmlnaW4pIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba01vY2tBZ2VudEdldF0ob3JpZ2luKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgfVxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIC8vIENhbGwgTW9ja0FnZW50LmdldCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgc2V0dXAgYmVmb3JlIGRpc3BhdGNoaW5nIGFzIG5vcm1hbFxuICAgIHRoaXMuZ2V0KG9wdHMub3JpZ2luKVxuICAgIHJldHVybiB0aGlzW2tBZ2VudF0uZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIGNsb3NlICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcbiAgfVxuXG4gIGRlYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSBmYWxzZVxuICB9XG5cbiAgYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG4gIH1cblxuICBlbmFibGVOZXRDb25uZWN0IChtYXRjaGVyKSB7XG4gICAgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF0Y2hlciA9PT0gJ2Z1bmN0aW9uJyB8fCBtYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzW2tOZXRDb25uZWN0XSkpIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0ucHVzaChtYXRjaGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSBbbWF0Y2hlcl1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignVW5zdXBwb3J0ZWQgbWF0Y2hlci4gTXVzdCBiZSBvbmUgb2YgU3RyaW5nfEZ1bmN0aW9ufFJlZ0V4cC4nKVxuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVOZXRDb25uZWN0ICgpIHtcbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IGZhbHNlXG4gIH1cblxuICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIGJ5cGFzcyBpc3N1ZXMgY2F1c2VkIGJ5IHVzaW5nIGdsb2JhbCBzeW1ib2xzIC0gc2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTQ0N1xuICBnZXQgaXNNb2NrQWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpc1trSXNNb2NrQWN0aXZlXVxuICB9XG5cbiAgW2tNb2NrQWdlbnRTZXRdIChvcmlnaW4sIGRpc3BhdGNoZXIpIHtcbiAgICB0aGlzW2tDbGllbnRzXS5zZXQob3JpZ2luLCBuZXcgRmFrZVdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAocmVmKSB7XG4gICAgICByZXR1cm4gcmVmLmRlcmVmKClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb3JpZ2luIGlzIG5vdCBhIHN0cmluZyBjcmVhdGUgYSBkdW1teSBwYXJlbnQgcG9vbCBhbmQgcmV0dXJuIHRvIHVzZXJcbiAgICBpZiAodHlwZW9mIG9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSgnaHR0cDovL2xvY2FsaG9zdDo5OTk5JylcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBtYXRjaCwgY3JlYXRlIGEgcG9vbCBhbmQgYXNzaWduIHRoZSBzYW1lIGRpc3BhdGNoZXNcbiAgICBmb3IgKGNvbnN0IFtrZXlNYXRjaGVyLCBub25FeHBsaWNpdFJlZl0gb2YgQXJyYXkuZnJvbSh0aGlzW2tDbGllbnRzXSkpIHtcbiAgICAgIGNvbnN0IG5vbkV4cGxpY2l0RGlzcGF0Y2hlciA9IG5vbkV4cGxpY2l0UmVmLmRlcmVmKClcbiAgICAgIGlmIChub25FeHBsaWNpdERpc3BhdGNoZXIgJiYgdHlwZW9mIGtleU1hdGNoZXIgIT09ICdzdHJpbmcnICYmIG1hdGNoVmFsdWUoa2V5TWF0Y2hlciwgb3JpZ2luKSkge1xuICAgICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgICAgZGlzcGF0Y2hlcltrRGlzcGF0Y2hlc10gPSBub25FeHBsaWNpdERpc3BhdGNoZXJba0Rpc3BhdGNoZXNdXG4gICAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgW2tHZXROZXRDb25uZWN0XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05ldENvbm5lY3RdXG4gIH1cblxuICBwZW5kaW5nSW50ZXJjZXB0b3JzICgpIHtcbiAgICBjb25zdCBtb2NrQWdlbnRDbGllbnRzID0gdGhpc1trQ2xpZW50c11cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1vY2tBZ2VudENsaWVudHMuZW50cmllcygpKVxuICAgICAgLmZsYXRNYXAoKFtvcmlnaW4sIHNjb3BlXSkgPT4gc2NvcGUuZGVyZWYoKVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1Byb3h5LCBrQ2xvc2UsIGtEZXN0cm95LCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IFVSTCB9ID0gcmVxdWlyZSgndXJsJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga0FnZW50ID0gU3ltYm9sKCdwcm94eSBhZ2VudCcpXG5jb25zdCBrQ2xpZW50ID0gU3ltYm9sKCdwcm94eSBjbGllbnQnKVxuY29uc3Qga1Byb3h5SGVhZGVycyA9IFN5bWJvbCgncHJveHkgaGVhZGVycycpXG5jb25zdCBrUmVxdWVzdFRscyA9IFN5bWJvbCgncmVxdWVzdCB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga1Byb3h5VGxzID0gU3ltYm9sKCdwcm94eSB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga0Nvbm5lY3RFbmRwb2ludCA9IFN5bWJvbCgnY29ubmVjdCBlbmRwb2ludCBmdW5jdGlvbicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm90b2NvbFBvcnQgKHByb3RvY29sKSB7XG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxufVxuXG5mdW5jdGlvbiBidWlsZFByb3h5T3B0aW9ucyAob3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0cyA9IHsgdXJpOiBvcHRzIH1cbiAgfVxuXG4gIGlmICghb3B0cyB8fCAhb3B0cy51cmkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMudXJpIGlzIG1hbmRhdG9yeScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHVyaTogb3B0cy51cmksXG4gICAgcHJvdG9jb2w6IG9wdHMucHJvdG9jb2wgfHwgJ2h0dHBzJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgUHJveHlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXNba1Byb3h5XSA9IGJ1aWxkUHJveHlPcHRpb25zKG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzICYmIG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50KVxuICAgICAgPyBvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50XG4gICAgICA6IFtdXG5cbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICAgIH1cblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy51cmkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGNsaWVudEZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSB9ID0gb3B0c1xuXG4gICAgaWYgKHR5cGVvZiBjbGllbnRGYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMuY2xpZW50RmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICB0aGlzW2tSZXF1ZXN0VGxzXSA9IG9wdHMucmVxdWVzdFRsc1xuICAgIHRoaXNba1Byb3h5VGxzXSA9IG9wdHMucHJveHlUbHNcbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gb3B0cy5oZWFkZXJzIHx8IHt9XG5cbiAgICBjb25zdCByZXNvbHZlZFVybCA9IG5ldyBVUkwob3B0cy51cmkpXG4gICAgY29uc3QgeyBvcmlnaW4sIHBvcnQsIGhvc3QsIHVzZXJuYW1lLCBwYXNzd29yZCB9ID0gcmVzb2x2ZWRVcmxcblxuICAgIGlmIChvcHRzLmF1dGggJiYgb3B0cy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLmF1dGggY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBvcHRzLnRva2VuJylcbiAgICB9IGVsc2UgaWYgKG9wdHMuYXV0aCkge1xuICAgICAgLyogQGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIG9wdHMudG9rZW4gKi9cbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke29wdHMuYXV0aH1gXG4gICAgfSBlbHNlIGlmIChvcHRzLnRva2VuKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBvcHRzLnRva2VuXG4gICAgfSBlbHNlIGlmICh1c2VybmFtZSAmJiBwYXNzd29yZCkge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocGFzc3dvcmQpfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgfVxuXG4gICAgY29uc3QgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5wcm94eVRscyB9KVxuICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0gPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucmVxdWVzdFRscyB9KVxuICAgIHRoaXNba0NsaWVudF0gPSBjbGllbnRGYWN0b3J5KHJlc29sdmVkVXJsLCB7IGNvbm5lY3QgfSlcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGNvbm5lY3Q6IGFzeW5jIChvcHRzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBsZXQgcmVxdWVzdGVkSG9zdCA9IG9wdHMuaG9zdFxuICAgICAgICBpZiAoIW9wdHMucG9ydCkge1xuICAgICAgICAgIHJlcXVlc3RlZEhvc3QgKz0gYDoke2RlZmF1bHRQcm90b2NvbFBvcnQob3B0cy5wcm90b2NvbCl9YFxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBzb2NrZXQsIHN0YXR1c0NvZGUgfSA9IGF3YWl0IHRoaXNba0NsaWVudF0uY29ubmVjdCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICAgICAgcGF0aDogcmVxdWVzdGVkSG9zdCxcbiAgICAgICAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXNba1Byb3h5SGVhZGVyc10sXG4gICAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSkuZGVzdHJveSgpXG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcihgUHJveHkgcmVzcG9uc2UgKCR7c3RhdHVzQ29kZX0pICE9PSAyMDAgd2hlbiBIVFRQIFR1bm5lbGluZ2ApKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0cy5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHNvY2tldClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgc2VydmVybmFtZVxuICAgICAgICAgIGlmICh0aGlzW2tSZXF1ZXN0VGxzXSkge1xuICAgICAgICAgICAgc2VydmVybmFtZSA9IHRoaXNba1JlcXVlc3RUbHNdLnNlcnZlcm5hbWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdKHsgLi4ub3B0cywgc2VydmVybmFtZSwgaHR0cFNvY2tldDogc29ja2V0IH0sIGNhbGxiYWNrKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3B0cy5vcmlnaW4pXG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhvcHRzLmhlYWRlcnMpXG4gICAgdGhyb3dJZlByb3h5QXV0aElzU2VudChoZWFkZXJzKVxuICAgIHJldHVybiB0aGlzW2tBZ2VudF0uZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgICAgIGhvc3RcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXJcbiAgICApXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICBhd2FpdCB0aGlzW2tDbGllbnRdLmNsb3NlKClcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5kZXN0cm95KClcbiAgICBhd2FpdCB0aGlzW2tDbGllbnRdLmRlc3Ryb3koKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgLy8gV2hlbiB1c2luZyB1bmRpY2kuZmV0Y2gsIHRoZSBoZWFkZXJzIGxpc3QgaXMgc3RvcmVkXG4gIC8vIGFzIGFuIGFycmF5LlxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBoZWFkZXJzUGFpciA9IHt9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGhlYWRlcnNQYWlyW2hlYWRlcnNbaV1dID0gaGVhZGVyc1tpICsgMV1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1BhaXJcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKlxuICogUHJldmlvdXMgdmVyc2lvbnMgb2YgUHJveHlBZ2VudCBzdWdnZXN0cyB0aGUgUHJveHktQXV0aG9yaXphdGlvbiBpbiByZXF1ZXN0IGhlYWRlcnNcbiAqIE5ldmVydGhlbGVzcywgaXQgd2FzIGNoYW5nZWQgYW5kIHRvIGF2b2lkIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBieSBlbmQgdXNlcnNcbiAqIHRoaXMgY2hlY2sgd2FzIGNyZWF0ZWQuXG4gKiBJdCBzaG91bGQgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZQcm94eUF1dGhJc1NlbnQgKGhlYWRlcnMpIHtcbiAgY29uc3QgZXhpc3RQcm94eUF1dGggPSBoZWFkZXJzICYmIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLmZpbmQoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJylcbiAgaWYgKGV4aXN0UHJveHlBdXRoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eS1BdXRob3JpemF0aW9uIHNob3VsZCBiZSBzZW50IGluIFByb3h5QWdlbnQgY29uc3RydWN0b3InKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJveHlBZ2VudFxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuLy8gV2UgaW5jbHVkZSBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgRGlzcGF0Y2hlciBBUEkuIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcyxcbi8vIHRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSBpbmNyZWFzZWQgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsRGlzcGF0Y2hlciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxEaXNwYXRjaGVyLjEnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERlY29yYXRvckhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAoaGFuZGxlcikge1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIG9uQ29ubmVjdCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db25uZWN0KC4uLmFyZ3MpXG4gIH1cblxuICBvbkVycm9yICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKC4uLmFyZ3MpXG4gIH1cblxuICBvblVwZ3JhZGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uVXBncmFkZSguLi5hcmdzKVxuICB9XG5cbiAgb25IZWFkZXJzICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoLi4uYXJncylcbiAgfVxuXG4gIG9uRGF0YSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKC4uLmFyZ3MpXG4gIH1cblxuICBvbkNvbXBsZXRlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkJvZHlTZW50ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KC4uLmFyZ3MpXG4gIH1cbn1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlclx1MjAxOXMgZmlyc3QgaXRlbSwgaGVhZGVyXHUyMDE5cyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSBcdTIxOTIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiBcdTAwQUIgXHUwMEJCLlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IHdob3NlIG5hbWUgaXNcbiAgICAvLyAgICBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYFNldC1Db29raWVgLCBpbiBvcmRlci5cblxuICAgIGNvbnN0IGxpc3QgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHJldHVybiBbLi4ubGlzdF1cbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgZ2V0IFtrSGVhZGVyc1NvcnRlZE1hcF0gKCkge1xuICAgIGlmICh0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgIH1cblxuICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgaGVhZGVycyB3aXRoIHRoZSBrZXkgYmVpbmcgdGhlIG5hbWVcbiAgICAvLyAgICBhbmQgdmFsdWUgdGhlIHZhbHVlLlxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXVxuXG4gICAgLy8gMi4gTGV0IG5hbWVzIGJlIHRoZSByZXN1bHQgb2YgY29udmVydCBoZWFkZXIgbmFtZXMgdG8gYSBzb3J0ZWQtbG93ZXJjYXNlXG4gICAgLy8gICAgc2V0IHdpdGggYWxsIHRoZSBuYW1lcyBvZiB0aGUgaGVhZGVycyBpbiBsaXN0LlxuICAgIGNvbnN0IG5hbWVzID0gWy4uLnRoaXNba0hlYWRlcnNMaXN0XV0uc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0gPyAtMSA6IDEpXG4gICAgY29uc3QgY29va2llcyA9IHRoaXNba0hlYWRlcnNMaXN0XS5jb29raWVzXG5cbiAgICAvLyAzLiBGb3IgZWFjaCBuYW1lIG9mIG5hbWVzOlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBuYW1lc1tpXVxuICAgICAgLy8gMS4gSWYgbmFtZSBpcyBgc2V0LWNvb2tpZWAsIHRoZW46XG4gICAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIC8vIDEuIExldCB2YWx1ZXMgYmUgYSBsaXN0IG9mIGFsbCB2YWx1ZXMgb2YgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAgICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsIGluIG9yZGVyLlxuXG4gICAgICAgIC8vIDIuIEZvciBlYWNoIHZhbHVlIG9mIHZhbHVlczpcbiAgICAgICAgLy8gMS4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVycy5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb29raWVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCBjb29raWVzW2pdXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlOlxuXG4gICAgICAgIC8vIDEuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIGxpc3QuXG5cbiAgICAgICAgLy8gMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuXG4gICAgICAgIC8vIDMuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF0gPSBoZWFkZXJzXG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICdrZXknKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ2tleSdcbiAgICApXG4gIH1cblxuICB2YWx1ZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAndmFsdWUnKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5K3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXkrdmFsdWUnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzZWxmOiBIZWFkZXJzKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZm9yRWFjaCcgfSlcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0hlYWRlcnMnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG4gIGFwcGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXRTZXRDb29raWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHZhbHVlczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZW50cmllczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZm9yRWFjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHsgZW51bWVyYWJsZTogZmFsc2UgfSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV06IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChWW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10oVilcbiAgICB9XG5cbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddKFYpXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeDogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaWxsLFxuICBIZWFkZXJzLFxuICBIZWFkZXJzTGlzdFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBmaWxsIH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBleHRyYWN0Qm9keSwgY2xvbmVCb2R5LCBtaXhpbkJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gdXRpbFxuY29uc3Qge1xuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Jsb2JMaWtlLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIGlzRXJyb3JMaWtlLFxuICBpc29tb3JwaGljRW5jb2RlXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5jb25zdCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW0gfHwgcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY2xhc3NcbmNsYXNzIFJlc3BvbnNlIHtcbiAgLy8gQ3JlYXRlcyBuZXR3b3JrIGVycm9yIFJlc3BvbnNlLlxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIC8vIFRPRE9cbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgLy8gVGhlIHN0YXRpYyBlcnJvcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYVxuICAgIC8vIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgbmV0d29yayBlcnJvciwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2UtanNvblxuICBzdGF0aWMganNvbiAoZGF0YSwgaW5pdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1Jlc3BvbnNlLmpzb24nIH0pXG5cbiAgICBpZiAoaW5pdCAhPT0gbnVsbCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuICAgIH1cblxuICAgIC8vIDEuIExldCBieXRlcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2VyaWFsaXplIGEgSmF2YVNjcmlwdCB2YWx1ZSB0byBKU09OIGJ5dGVzIG9uIGRhdGEuXG4gICAgY29uc3QgYnl0ZXMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoXG4gICAgICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcoZGF0YSlcbiAgICApXG5cbiAgICAvLyAyLiBMZXQgYm9keSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYnl0ZXMuXG4gICAgY29uc3QgYm9keSA9IGV4dHJhY3RCb2R5KGJ5dGVzKVxuXG4gICAgLy8gMy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IHJlc3BvbnNlLFxuICAgIC8vICAgIFwicmVzcG9uc2VcIiwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA0LiBQZXJmb3JtIGluaXRpYWxpemUgYSByZXNwb25zZSBnaXZlbiByZXNwb25zZU9iamVjdCwgaW5pdCwgYW5kIChib2R5LCBcImFwcGxpY2F0aW9uL2pzb25cIikuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHJlc3BvbnNlT2JqZWN0LCBpbml0LCB7IGJvZHk6IGJvZHlbMF0sIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gQ3JlYXRlcyBhIHJlZGlyZWN0IFJlc3BvbnNlIHRoYXQgcmVkaXJlY3RzIHRvIHVybCB3aXRoIHN0YXR1cyBzdGF0dXMuXG4gIHN0YXRpYyByZWRpcmVjdCAodXJsLCBzdGF0dXMgPSAzMDIpIHtcbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1Jlc3BvbnNlLnJlZGlyZWN0JyB9KVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBzdGF0dXMgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShzdGF0dXMpXG5cbiAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB1cmwgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgLy8gb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gVE9ETzogYmFzZS1VUkw/XG4gICAgbGV0IHBhcnNlZFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCwgZ2V0R2xvYmFsT3JpZ2luKCkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBVUkwgZnJvbSAnICsgdXJsKSwge1xuICAgICAgICBjYXVzZTogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yLlxuICAgIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlICcgKyBzdGF0dXMpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgdG8gc3RhdHVzLlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uc3RhdHVzID0gc3RhdHVzXG5cbiAgICAvLyA2LiBMZXQgdmFsdWUgYmUgcGFyc2VkVVJMLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgY29uc3QgdmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKFVSTFNlcmlhbGl6ZXIocGFyc2VkVVJMKSlcblxuICAgIC8vIDcuIEFwcGVuZCBgTG9jYXRpb25gL3ZhbHVlIHRvIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2xvY2F0aW9uJywgdmFsdWUpXG5cbiAgICAvLyA4LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlXG4gIGNvbnN0cnVjdG9yIChib2R5ID0gbnVsbCwgaW5pdCA9IHt9KSB7XG4gICAgaWYgKGJvZHkgIT09IG51bGwpIHtcbiAgICAgIGJvZHkgPSB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdChib2R5KVxuICAgIH1cblxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcblxuICAgIC8vIFRPRE9cbiAgICB0aGlzW2tSZWFsbV0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgcmVzcG9uc2UgdG8gYSBuZXcgcmVzcG9uc2UuXG4gICAgdGhpc1trU3RhdGVdID0gbWFrZVJlc3BvbnNlKHt9KVxuXG4gICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkXG4gICAgLy8gaXMgXCJyZXNwb25zZVwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3Jlc3BvbnNlJ1xuICAgIHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSB0aGlzW2tTdGF0ZV0uaGVhZGVyc0xpc3RcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzLiBMZXQgYm9keVdpdGhUeXBlIGJlIG51bGwuXG4gICAgbGV0IGJvZHlXaXRoVHlwZSA9IG51bGxcblxuICAgIC8vIDQuIElmIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IGJvZHlXaXRoVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYm9keS5cbiAgICBpZiAoYm9keSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBbZXh0cmFjdGVkQm9keSwgdHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgICAgYm9keVdpdGhUeXBlID0geyBib2R5OiBleHRyYWN0ZWRCb2R5LCB0eXBlIH1cbiAgICB9XG5cbiAgICAvLyA1LiBQZXJmb3JtIGluaXRpYWxpemUgYSByZXNwb25zZSBnaXZlbiB0aGlzLCBpbml0LCBhbmQgYm9keVdpdGhUeXBlLlxuICAgIGluaXRpYWxpemVSZXNwb25zZSh0aGlzLCBpbml0LCBib2R5V2l0aFR5cGUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyB0eXBlLCBlLmcuLCBcImNvcnNcIi5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHR5cGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHR5cGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBVUkwsIGlmIGl0IGhhcyBvbmU7IG90aGVyd2lzZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIGNvbnN0IHVybExpc3QgPSB0aGlzW2tTdGF0ZV0udXJsTGlzdFxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVzcG9uc2VcdTIwMTlzIFVSTCBpcyBudWxsOyBvdGhlcndpc2UgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIFVSTCxcbiAgICAvLyBzZXJpYWxpemVkIHdpdGggZXhjbHVkZSBmcmFnbWVudCBzZXQgdG8gdHJ1ZS5cbiAgICBjb25zdCB1cmwgPSB1cmxMaXN0W3VybExpc3QubGVuZ3RoIC0gMV0gPz8gbnVsbFxuXG4gICAgaWYgKHVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodXJsLCB0cnVlKVxuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNlIHdhcyBvYnRhaW5lZCB0aHJvdWdoIGEgcmVkaXJlY3QuXG4gIGdldCByZWRpcmVjdGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSByZWRpcmVjdGVkIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIFVSTFxuICAgIC8vIGxpc3QgaGFzIG1vcmUgdGhhbiBvbmUgaXRlbTsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udXJsTGlzdC5sZW5ndGggPiAxXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gIGdldCBzdGF0dXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHN0YXR1cyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhbiBvayBzdGF0dXMuXG4gIGdldCBvayAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgb2sgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuXG4gICAgLy8gb2sgc3RhdHVzOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXMgPj0gMjAwICYmIHRoaXNba1N0YXRlXS5zdGF0dXMgPD0gMjk5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZS5cbiAgZ2V0IHN0YXR1c1RleHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHN0YXR1c1RleHQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1c1xuICAgIC8vIG1lc3NhZ2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJzIGFzIEhlYWRlcnMuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBoZWFkZXJzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuICEhdGhpc1trU3RhdGVdLmJvZHkgJiYgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVzcG9uc2UuXG4gIGNsb25lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHRoaXMuYm9keVVzZWQgfHwgKHRoaXMuYm9keSAmJiB0aGlzLmJvZHkubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXNwb25zZS5jbG9uZScsXG4gICAgICAgIG1lc3NhZ2U6ICdCb2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgY2xvbmVkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXNcdTIwMTlzIHJlc3BvbnNlLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZSh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW5cbiAgICAvLyBjbG9uZWRSZXNwb25zZSwgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IGNsb25lZFJlc3BvbnNlXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gY2xvbmVkUmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba0hlYWRlcnNdW2tSZWFsbV1cblxuICAgIHJldHVybiBjbG9uZWRSZXNwb25zZU9iamVjdFxuICB9XG59XG5cbm1peGluQm9keShSZXNwb25zZSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG4gIHR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvazoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3RlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVzcG9uc2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZSwge1xuICBqc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAvLyBUbyBjbG9uZSBhIHJlc3BvbnNlIHJlc3BvbnNlLCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSwgdGhlbiByZXR1cm4gYSBuZXcgaWRlbnRpY2FsXG4gIC8vIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsIHJlc3BvbnNlIGlzIGEgY2xvbmUgb2YgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLlxuICBpZiAocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHJldHVybiBmaWx0ZXJSZXNwb25zZShcbiAgICAgIGNsb25lUmVzcG9uc2UocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSksXG4gICAgICByZXNwb25zZS50eXBlXG4gICAgKVxuICB9XG5cbiAgLy8gMi4gTGV0IG5ld1Jlc3BvbnNlIGJlIGEgY29weSBvZiByZXNwb25zZSwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyAuLi5yZXNwb25zZSwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBuZXdSZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXNwb25zZS5ib2R5ID0gY2xvbmVCb2R5KHJlc3BvbnNlLmJvZHkpXG4gIH1cblxuICAvLyA0LiBSZXR1cm4gbmV3UmVzcG9uc2UuXG4gIHJldHVybiBuZXdSZXNwb25zZVxufVxuXG5mdW5jdGlvbiBtYWtlUmVzcG9uc2UgKGluaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBhYm9ydGVkOiBmYWxzZSxcbiAgICByYW5nZVJlcXVlc3RlZDogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dQYXNzZWQ6IGZhbHNlLFxuICAgIHJlcXVlc3RJbmNsdWRlc0NyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgc3RhdHVzOiAyMDAsXG4gICAgdGltaW5nSW5mbzogbnVsbCxcbiAgICBjYWNoZVN0YXRlOiAnJyxcbiAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKSxcbiAgICB1cmxMaXN0OiBpbml0LnVybExpc3QgPyBbLi4uaW5pdC51cmxMaXN0XSA6IFtdXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZU5ldHdvcmtFcnJvciAocmVhc29uKSB7XG4gIGNvbnN0IGlzRXJyb3IgPSBpc0Vycm9yTGlrZShyZWFzb24pXG4gIHJldHVybiBtYWtlUmVzcG9uc2Uoe1xuICAgIHR5cGU6ICdlcnJvcicsXG4gICAgc3RhdHVzOiAwLFxuICAgIGVycm9yOiBpc0Vycm9yXG4gICAgICA/IHJlYXNvblxuICAgICAgOiBuZXcgRXJyb3IocmVhc29uID8gU3RyaW5nKHJlYXNvbikgOiByZWFzb24pLFxuICAgIGFib3J0ZWQ6IHJlYXNvbiAmJiByZWFzb24ubmFtZSA9PT0gJ0Fib3J0RXJyb3InXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWx0ZXJlZFJlc3BvbnNlIChyZXNwb25zZSwgc3RhdGUpIHtcbiAgc3RhdGUgPSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgLi4uc3RhdGVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICBnZXQgKHRhcmdldCwgcCkge1xuICAgICAgcmV0dXJuIHAgaW4gc3RhdGUgPyBzdGF0ZVtwXSA6IHRhcmdldFtwXVxuICAgIH0sXG4gICAgc2V0ICh0YXJnZXQsIHAsIHZhbHVlKSB7XG4gICAgICBhc3NlcnQoIShwIGluIHN0YXRlKSlcbiAgICAgIHRhcmdldFtwXSA9IHZhbHVlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZmlsdGVyZWQtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbHRlclJlc3BvbnNlIChyZXNwb25zZSwgdHlwZSkge1xuICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICBpZiAodHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIEEgYmFzaWMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiYmFzaWNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3RcbiAgICAvLyB3aG9zZSBuYW1lIGlzIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnYmFzaWMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29ycycpIHtcbiAgICAvLyBBIENPUlMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiY29yc1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJcbiAgICAvLyBsaXN0IHdob3NlIG5hbWUgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lLCBnaXZlblxuICAgIC8vIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdC5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2NvcnMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlJykge1xuICAgIC8vIEFuIG9wYXF1ZSBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXNcbiAgICAvLyBcIm9wYXF1ZVwiLCBVUkwgbGlzdCBpcyB0aGUgZW1wdHkgbGlzdCwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlXG4gICAgLy8gaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlJyxcbiAgICAgIHVybExpc3Q6IE9iamVjdC5mcmVlemUoW10pLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnKSB7XG4gICAgLy8gQW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZVxuICAgIC8vIGlzIFwib3BhcXVlcmVkaXJlY3RcIiwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlIGlzIHRoZSBlbXB0eSBieXRlXG4gICAgLy8gc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlcmVkaXJlY3QnLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBoZWFkZXJzTGlzdDogW10sXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcHJvcHJpYXRlLW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvciAoZmV0Y2hQYXJhbXMsIGVyciA9IG51bGwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZC5cbiAgYXNzZXJ0KGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSlcblxuICAvLyAyLiBSZXR1cm4gYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yIGlmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQ7XG4gIC8vIG90aGVyd2lzZSByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICByZXR1cm4gaXNBYm9ydGVkKGZldGNoUGFyYW1zKVxuICAgID8gbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSwgeyBjYXVzZTogZXJyIH0pKVxuICAgIDogbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1JlcXVlc3Qgd2FzIGNhbmNlbGxlZC4nKSwgeyBjYXVzZTogZXJyIH0pKVxufVxuXG4vLyBodHRwczovL3doYXRwci5vcmcvZmV0Y2gvMTM5Mi5odG1sI2luaXRpYWxpemUtYS1yZXNwb25zZVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlc3BvbnNlIChyZXNwb25zZSwgaW5pdCwgYm9keSkge1xuICAvLyAxLiBJZiBpbml0W1wic3RhdHVzXCJdIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLCB0aGVuXG4gIC8vICAgIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgaWYgKGluaXQuc3RhdHVzICE9PSBudWxsICYmIChpbml0LnN0YXR1cyA8IDIwMCB8fCBpbml0LnN0YXR1cyA+IDU5OSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5pdFtcInN0YXR1c1wiXSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAyMDAgdG8gNTk5LCBpbmNsdXNpdmUuJylcbiAgfVxuXG4gIC8vIDIuIElmIGluaXRbXCJzdGF0dXNUZXh0XCJdIGRvZXMgbm90IG1hdGNoIHRoZSByZWFzb24tcGhyYXNlIHRva2VuIHByb2R1Y3Rpb24sXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIC8vIFNlZSwgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4xLjI6XG4gICAgLy8gICByZWFzb24tcGhyYXNlICA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICAgIGlmICghaXNWYWxpZFJlYXNvblBocmFzZShTdHJpbmcoaW5pdC5zdGF0dXNUZXh0KSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RhdHVzVGV4dCcpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIGluaXRbXCJzdGF0dXNcIl0uXG4gIGlmICgnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1cyA9IGluaXQuc3RhdHVzXG4gIH1cblxuICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBpbml0W1wic3RhdHVzVGV4dFwiXS5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXNUZXh0ID0gaW5pdC5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyA1LiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gZmlsbCByZXNwb25zZVx1MjAxOXMgaGVhZGVycyB3aXRoIGluaXRbXCJoZWFkZXJzXCJdLlxuICBpZiAoJ2hlYWRlcnMnIGluIGluaXQgJiYgaW5pdC5oZWFkZXJzICE9IG51bGwpIHtcbiAgICBmaWxsKHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5pdC5oZWFkZXJzKVxuICB9XG5cbiAgLy8gNi4gSWYgYm9keSB3YXMgZ2l2ZW4sIHRoZW46XG4gIGlmIChib2R5KSB7XG4gICAgLy8gMS4gSWYgcmVzcG9uc2UncyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UncyBib2R5IHRvIGJvZHkncyBib2R5LlxuICAgIHJlc3BvbnNlW2tTdGF0ZV0uYm9keSA9IGJvZHkuYm9keVxuXG4gICAgLy8gMy4gSWYgYm9keSdzIHR5cGUgaXMgbm9uLW51bGwgYW5kIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpblxuICAgIC8vICAgIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtVHlwZWAsIGJvZHkncyB0eXBlKSB0byByZXNwb25zZSdzIGhlYWRlciBsaXN0LlxuICAgIGlmIChib2R5LnR5cGUgIT0gbnVsbCAmJiAhcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5jb250YWlucygnQ29udGVudC1UeXBlJykpIHtcbiAgICAgIHJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LXR5cGUnLCBib2R5LnR5cGUpXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVhZGFibGVTdHJlYW1cbilcblxud2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBGb3JtRGF0YVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBVUkxTZWFyY2hQYXJhbXNcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3R5cGVkZWZkZWYteG1saHR0cHJlcXVlc3Rib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG4gIH1cblxuICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoVikgfHwgdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8IHR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYpXG4gIH1cblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YShWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyhWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKFYgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbShWKVxuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBpbmNsdWRlIGFzeW5jIGl0ZXJhYmxlcyxcbiAgLy8gdGhpcyBpcyBhbiB1bmRpY2kgZXh0ZW5zaW9uLlxuICBpZiAoVj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHJldHVybiBWXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdChWKVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdzdGF0dXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAyMDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3N0YXR1c1RleHQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlUmVzcG9uc2UsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIFJlc3BvbnNlLFxuICBjbG9uZVJlc3BvbnNlXG59XG4iLCAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV0XHUyMDE5cyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dFx1MjAxOXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdFx1MjAxOXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgdG8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0IHRvIFx1MDBBQiByZXF1ZXN0XHUyMDE5cyBVUkwgXHUwMEJCLlxuICAgICAgcmVxdWVzdC51cmxMaXN0ID0gW3JlcXVlc3QudXJsXVxuICAgIH1cblxuICAgIC8vIDE0LiBJZiBpbml0W1wicmVmZXJyZXJcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0LnJlZmVycmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWZlcnJlciBiZSBpbml0W1wicmVmZXJyZXJcIl0uXG4gICAgICBjb25zdCByZWZlcnJlciA9IGluaXQucmVmZXJyZXJcblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJuby1yZWZlcnJlclwiLlxuICAgICAgaWYgKHJlZmVycmVyID09PSAnJykge1xuICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ25vLXJlZmVycmVyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gTGV0IHBhcnNlZFJlZmVycmVyIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyByZWZlcnJlciB3aXRoXG4gICAgICAgIC8vIGJhc2VVUkwuXG4gICAgICAgIC8vIDIuIElmIHBhcnNlZFJlZmVycmVyIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIGxldCBwYXJzZWRSZWZlcnJlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZFJlZmVycmVyID0gbmV3IFVSTChyZWZlcnJlciwgYmFzZVVybClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVmZXJyZXIgXCIke3JlZmVycmVyfVwiIGlzIG5vdCBhIHZhbGlkIFVSTC5gLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgc2NoZW1lIGlzIFwiYWJvdXRcIiBhbmQgcGF0aCBpcyB0aGUgc3RyaW5nIFwiY2xpZW50XCJcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpblxuICAgICAgICAvLyB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcnNlZFJlZmVycmVyLnByb3RvY29sID09PSAnYWJvdXQ6JyAmJiBwYXJzZWRSZWZlcnJlci5ob3N0bmFtZSA9PT0gJ2NsaWVudCcpIHx8XG4gICAgICAgICAgKG9yaWdpbiAmJiAhc2FtZU9yaWdpbihwYXJzZWRSZWZlcnJlciwgdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmwpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyA0LiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBwYXJzZWRSZWZlcnJlci5cbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDE1LiBJZiBpbml0W1wicmVmZXJyZXJQb2xpY3lcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3lcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWZlcnJlclBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gaW5pdC5yZWZlcnJlclBvbGljeVxuICAgIH1cblxuICAgIC8vIDE2LiBMZXQgbW9kZSBiZSBpbml0W1wibW9kZVwiXSBpZiBpdCBleGlzdHMsIGFuZCBmYWxsYmFja01vZGUgb3RoZXJ3aXNlLlxuICAgIGxldCBtb2RlXG4gICAgaWYgKGluaXQubW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtb2RlID0gaW5pdC5tb2RlXG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGUgPSBmYWxsYmFja01vZGVcbiAgICB9XG5cbiAgICAvLyAxNy4gSWYgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVxdWVzdCBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHJlcXVlc3QgbW9kZSBuYXZpZ2F0ZS4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDE4LiBJZiBtb2RlIGlzIG5vbi1udWxsLCBzZXQgcmVxdWVzdFx1MjAxOXMgbW9kZSB0byBtb2RlLlxuICAgIGlmIChtb2RlICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QubW9kZSA9IG1vZGVcbiAgICB9XG5cbiAgICAvLyAxOS4gSWYgaW5pdFtcImNyZWRlbnRpYWxzXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LmNyZWRlbnRpYWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPSBpbml0LmNyZWRlbnRpYWxzXG4gICAgfVxuXG4gICAgLy8gMTguIElmIGluaXRbXCJjYWNoZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQuY2FjaGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jYWNoZSA9IGluaXQuY2FjaGVcbiAgICB9XG5cbiAgICAvLyAyMS4gSWYgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm9ubHktaWYtY2FjaGVkXCIgYW5kIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXNcbiAgICAvLyBub3QgXCJzYW1lLW9yaWdpblwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChyZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnICYmIHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCInb25seS1pZi1jYWNoZWQnIGNhbiBiZSBzZXQgb25seSB3aXRoICdzYW1lLW9yaWdpbicgbW9kZVwiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMjIuIElmIGluaXRbXCJyZWRpcmVjdFwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQucmVkaXJlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWRpcmVjdCA9IGluaXQucmVkaXJlY3RcbiAgICB9XG5cbiAgICAvLyAyMy4gSWYgaW5pdFtcImludGVncml0eVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSB0byBpdC5cbiAgICBpZiAoaW5pdC5pbnRlZ3JpdHkgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5pbnRlZ3JpdHkgPSBTdHJpbmcoaW5pdC5pbnRlZ3JpdHkpXG4gICAgfVxuXG4gICAgLy8gMjQuIElmIGluaXRbXCJrZWVwYWxpdmVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUgdG8gaXQuXG4gICAgaWYgKGluaXQua2VlcGFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3Qua2VlcGFsaXZlID0gQm9vbGVhbihpbml0LmtlZXBhbGl2ZSlcbiAgICB9XG5cbiAgICAvLyAyNS4gSWYgaW5pdFtcIm1ldGhvZFwiXSBleGlzdHMsIHRoZW46XG4gICAgaWYgKGluaXQubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCBtZXRob2QgYmUgaW5pdFtcIm1ldGhvZFwiXS5cbiAgICAgIGxldCBtZXRob2QgPSBpbml0Lm1ldGhvZFxuXG4gICAgICAvLyAyLiBJZiBtZXRob2QgaXMgbm90IGEgbWV0aG9kIG9yIG1ldGhvZCBpcyBhIGZvcmJpZGRlbiBtZXRob2QsIHRoZW5cbiAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKCFpc1ZhbGlkSFRUUFRva2VuKG1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgaXMgbm90IGEgdmFsaWQgSFRUUCBtZXRob2QuYClcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmJpZGRlbk1ldGhvZHNTZXQuaGFzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHttZXRob2R9JyBIVFRQIG1ldGhvZCBpcyB1bnN1cHBvcnRlZC5gKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBOb3JtYWxpemUgbWV0aG9kLlxuICAgICAgbWV0aG9kID0gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZF0gPz8gbm9ybWFsaXplTWV0aG9kKG1ldGhvZClcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1ldGhvZFxuICAgIH1cblxuICAgIC8vIDI2LiBJZiBpbml0W1wic2lnbmFsXCJdIGV4aXN0cywgdGhlbiBzZXQgc2lnbmFsIHRvIGl0LlxuICAgIGlmIChpbml0LnNpZ25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduYWwgPSBpbml0LnNpZ25hbFxuICAgIH1cblxuICAgIC8vIDI3LiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdCB0byByZXF1ZXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHJlcXVlc3RcblxuICAgIC8vIDI4LiBTZXQgdGhpc1x1MjAxOXMgc2lnbmFsIHRvIGEgbmV3IEFib3J0U2lnbmFsIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0uXG4gICAgLy8gVE9ETzogY291bGQgdGhpcyBiZSBzaW1wbGlmaWVkIHdpdGggQWJvcnRTaWduYWwuYW55XG4gICAgLy8gKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWFib3J0c2lnbmFsLWFueSlcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHRoaXNba1NpZ25hbF0gPSBhYy5zaWduYWxcbiAgICB0aGlzW2tTaWduYWxdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDI5LiBJZiBzaWduYWwgaXMgbm90IG51bGwsIHRoZW4gbWFrZSB0aGlzXHUyMDE5cyBzaWduYWwgZm9sbG93IHNpZ25hbC5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXNpZ25hbCB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFib3J0ZWQgIT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVxdWVzdCc6IG1lbWJlciBzaWduYWwgaXMgbm90IG9mIHR5cGUgQWJvcnRTaWduYWwuXCJcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgYWMuYWJvcnQoc2lnbmFsLnJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEtlZXAgYSBzdHJvbmcgcmVmIHRvIGFjIHdoaWxlIHJlcXVlc3Qgb2JqZWN0XG4gICAgICAgIC8vIGlzIGFsaXZlLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IEFib3J0Q29udHJvbGxlclxuICAgICAgICAvLyBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGdhcmJhZ2UgY29sbGVjdGVkLlxuICAgICAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xOTI2LlxuICAgICAgICB0aGlzW2tBYm9ydENvbnRyb2xsZXJdID0gYWNcblxuICAgICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgICBjb25zdCBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICAgICAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWMuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcmQtcGFydHkgQWJvcnRDb250cm9sbGVycyBtYXkgbm90IHdvcmsgd2l0aCB0aGVzZS5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzE5MTAjaXNzdWVjb21tZW50LTE0NjQ0OTU2MTkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSWYgdGhlIG1heCBhbW91bnQgb2YgbGlzdGVuZXJzIGlzIGVxdWFsIHRvIHRoZSBkZWZhdWx0LCBpbmNyZWFzZSBpdFxuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgaW4gbm9kZSA+PSB2MTkuOS4wXG4gICAgICAgICAgaWYgKHR5cGVvZiBnZXRNYXhMaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicgJiYgZ2V0TWF4TGlzdGVuZXJzKHNpZ25hbCkgPT09IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9IGVsc2UgaWYgKGdldEV2ZW50TGlzdGVuZXJzKHNpZ25hbCwgJ2Fib3J0JykubGVuZ3RoID49IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgcmVxdWVzdEZpbmFsaXplci5yZWdpc3RlcihhYywgeyBzaWduYWwsIGFib3J0IH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzAuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkIGlzXG4gICAgLy8gXCJyZXF1ZXN0XCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0J1xuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibm8tY29yc1wiLCB0aGVuOlxuICAgIGlmIChtb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LmhhcyhyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJyR7cmVxdWVzdC5tZXRob2R9IGlzIHVuc3VwcG9ydGVkIGluIG5vLWNvcnMgbW9kZS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkIHRvIFwicmVxdWVzdC1uby1jb3JzXCIuXG4gICAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3JlcXVlc3Qtbm8tY29ycydcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF1cbiAgICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGEgY29weSBvZiB0aGlzXHUyMDE5cyBoZWFkZXJzIGFuZCBpdHMgYXNzb2NpYXRlZCBoZWFkZXJcbiAgICAgIC8vIGxpc3QuXG4gICAgICAvLyAyLiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gc2V0IGhlYWRlcnMgdG8gaW5pdFtcImhlYWRlcnNcIl0uXG4gICAgICBjb25zdCBoZWFkZXJzID0gaW5pdC5oZWFkZXJzICE9PSB1bmRlZmluZWQgPyBpbml0LmhlYWRlcnMgOiBuZXcgSGVhZGVyc0xpc3QoaGVhZGVyc0xpc3QpXG5cbiAgICAgIC8vIDMuIEVtcHR5IHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgaGVhZGVyc0xpc3QuY2xlYXIoKVxuXG4gICAgICAvLyA0LiBJZiBoZWFkZXJzIGlzIGEgSGVhZGVycyBvYmplY3QsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIGl0cyBoZWFkZXJcbiAgICAgIC8vIGxpc3QsIGFwcGVuZCBoZWFkZXJcdTIwMTlzIG5hbWUvaGVhZGVyXHUyMDE5cyB2YWx1ZSB0byB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgaGVhZGVycykge1xuICAgICAgICAgIGhlYWRlcnNMaXN0LmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBDb3B5IHRoZSBgc2V0LWNvb2tpZWAgbWV0YS1kYXRhLlxuICAgICAgICBoZWFkZXJzTGlzdC5jb29raWVzID0gaGVhZGVycy5jb29raWVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGZpbGwgdGhpc1x1MjAxOXMgaGVhZGVycyB3aXRoIGhlYWRlcnMuXG4gICAgICAgIGZpbGxIZWFkZXJzKHRoaXNba0hlYWRlcnNdLCBoZWFkZXJzKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMzLiBMZXQgaW5wdXRCb2R5IGJlIGlucHV0XHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBib2R5IGlmIGlucHV0IGlzIGEgUmVxdWVzdFxuICAgIC8vIG9iamVjdDsgb3RoZXJ3aXNlIG51bGwuXG4gICAgY29uc3QgaW5wdXRCb2R5ID0gaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXRba1N0YXRlXS5ib2R5IDogbnVsbFxuXG4gICAgLy8gMzQuIElmIGVpdGhlciBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsIG9yIGlucHV0Qm9keSBpc1xuICAgIC8vIG5vbi1udWxsLCBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBHRVRgIG9yIGBIRUFEYCwgdGhlbiB0aHJvdyBhXG4gICAgLy8gVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIChpbml0LmJvZHkgIT0gbnVsbCB8fCBpbnB1dEJvZHkgIT0gbnVsbCkgJiZcbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keS4nKVxuICAgIH1cblxuICAgIC8vIDM1LiBMZXQgaW5pdEJvZHkgYmUgbnVsbC5cbiAgICBsZXQgaW5pdEJvZHkgPSBudWxsXG5cbiAgICAvLyAzNi4gSWYgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5pdC5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIExldCBDb250ZW50LVR5cGUgYmUgbnVsbC5cbiAgICAgIC8vIDIuIFNldCBpbml0Qm9keSBhbmQgQ29udGVudC1UeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZ1xuICAgICAgLy8gaW5pdFtcImJvZHlcIl0sIHdpdGgga2VlcGFsaXZlIHNldCB0byByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgICBjb25zdCBbZXh0cmFjdGVkQm9keSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoXG4gICAgICAgIGluaXQuYm9keSxcbiAgICAgICAgcmVxdWVzdC5rZWVwYWxpdmVcbiAgICAgIClcbiAgICAgIGluaXRCb2R5ID0gZXh0cmFjdGVkQm9keVxuXG4gICAgICAvLyAzLCBJZiBDb250ZW50LVR5cGUgaXMgbm9uLW51bGwgYW5kIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXNcbiAgICAgIC8vIG5vdCBjb250YWluIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCBgQ29udGVudC1UeXBlYC9Db250ZW50LVR5cGUgdG9cbiAgICAgIC8vIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoY29udGVudFR5cGUgJiYgIXRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0uY29udGFpbnMoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIHRoaXNba0hlYWRlcnNdLmFwcGVuZCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzcuIExldCBpbnB1dE9ySW5pdEJvZHkgYmUgaW5pdEJvZHkgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZVxuICAgIC8vIGlucHV0Qm9keS5cbiAgICBjb25zdCBpbnB1dE9ySW5pdEJvZHkgPSBpbml0Qm9keSA/PyBpbnB1dEJvZHlcblxuICAgIC8vIDM4LiBJZiBpbnB1dE9ySW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGlucHV0T3JJbml0Qm9keVx1MjAxOXMgc291cmNlIGlzXG4gICAgLy8gbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5wdXRPckluaXRCb2R5ICE9IG51bGwgJiYgaW5wdXRPckluaXRCb2R5LnNvdXJjZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbml0Qm9keSBpcyBub24tbnVsbCBhbmQgaW5pdFtcImR1cGxleFwiXSBkb2VzIG5vdCBleGlzdCxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaW5pdEJvZHkgIT0gbnVsbCAmJiBpbml0LmR1cGxleCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3RJbml0OiBkdXBsZXggb3B0aW9uIGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyBhIGJvZHkuJylcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBuZWl0aGVyIFwic2FtZS1vcmlnaW5cIiBub3IgXCJjb3JzXCIsXG4gICAgICAvLyB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdjb3JzJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdJZiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBSZWFkYWJsZVN0cmVhbSwgbW9kZSBzaG91bGQgYmUgXCJzYW1lLW9yaWdpblwiIG9yIFwiY29yc1wiJ1xuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZy5cbiAgICAgIHJlcXVlc3QudXNlQ09SU1ByZWZsaWdodEZsYWcgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gMzkuIExldCBmaW5hbEJvZHkgYmUgaW5wdXRPckluaXRCb2R5LlxuICAgIGxldCBmaW5hbEJvZHkgPSBpbnB1dE9ySW5pdEJvZHlcblxuICAgIC8vIDQwLiBJZiBpbml0Qm9keSBpcyBudWxsIGFuZCBpbnB1dEJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXRCb2R5ID09IG51bGwgJiYgaW5wdXRCb2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIElmIGlucHV0IGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQoaW5wdXRCb2R5LnN0cmVhbSkgfHwgaW5wdXRCb2R5LnN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IGNvbnN0cnVjdCBhIFJlcXVlc3Qgd2l0aCBhIFJlcXVlc3Qgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkLidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgZmluYWxCb2R5IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBwcm94eSBmb3IgaW5wdXRCb2R5LlxuICAgICAgaWYgKCFUcmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlRyYW5zZm9ybVN0cmVhbVxuICAgICAgfVxuXG4gICAgICAvLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1jcmVhdGUtYS1wcm94eVxuICAgICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKClcbiAgICAgIGlucHV0Qm9keS5zdHJlYW0ucGlwZVRocm91Z2goaWRlbnRpdHlUcmFuc2Zvcm0pXG4gICAgICBmaW5hbEJvZHkgPSB7XG4gICAgICAgIHNvdXJjZTogaW5wdXRCb2R5LnNvdXJjZSxcbiAgICAgICAgbGVuZ3RoOiBpbnB1dEJvZHkubGVuZ3RoLFxuICAgICAgICBzdHJlYW06IGlkZW50aXR5VHJhbnNmb3JtLnJlYWRhYmxlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNDEuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIGZpbmFsQm9keS5cbiAgICB0aGlzW2tTdGF0ZV0uYm9keSA9IGZpbmFsQm9keVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN0XHUyMDE5cyBIVFRQIG1ldGhvZCwgd2hpY2ggaXMgXCJHRVRcIiBieSBkZWZhdWx0LlxuICBnZXQgbWV0aG9kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1ldGhvZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tZXRob2RcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIFVSTCBvZiByZXF1ZXN0IGFzIGEgc3RyaW5nLlxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trU3RhdGVdLnVybClcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBIZWFkZXJzIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBoZWFkZXJzIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBOb3RlIHRoYXQgaGVhZGVycyBhZGRlZCBpbiB0aGUgbmV0d29yayBsYXllciBieSB0aGUgdXNlciBhZ2VudCB3aWxsIG5vdFxuICAvLyBiZSBhY2NvdW50ZWQgZm9yIGluIHRoaXMgb2JqZWN0LCBlLmcuLCB0aGUgXCJIb3N0XCIgaGVhZGVyLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBoZWFkZXJzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNdXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBraW5kIG9mIHJlc291cmNlIHJlcXVlc3RlZCBieSByZXF1ZXN0LCBlLmcuLCBcImRvY3VtZW50XCJcbiAgLy8gb3IgXCJzY3JpcHRcIi5cbiAgZ2V0IGRlc3RpbmF0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGRlc3RpbmF0aW9uIGdldHRlciBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uZGVzdGluYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIG9mIHJlcXVlc3QuIEl0cyB2YWx1ZSBjYW4gYmUgYSBzYW1lLW9yaWdpbiBVUkwgaWZcbiAgLy8gZXhwbGljaXRseSBzZXQgaW4gaW5pdCwgdGhlIGVtcHR5IHN0cmluZyB0byBpbmRpY2F0ZSBubyByZWZlcnJlciwgYW5kXG4gIC8vIFwiYWJvdXQ6Y2xpZW50XCIgd2hlbiBkZWZhdWx0aW5nIHRvIHRoZSBnbG9iYWxcdTIwMTlzIGRlZmF1bHQuIFRoaXMgaXMgdXNlZFxuICAvLyBkdXJpbmcgZmV0Y2hpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgYFJlZmVyZXJgIGhlYWRlciBvZiB0aGVcbiAgLy8gcmVxdWVzdCBiZWluZyBtYWRlLlxuICBnZXQgcmVmZXJyZXIgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIHRoZW4gcmV0dXJuIHRoZVxuICAgIC8vIGVtcHR5IHN0cmluZy5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBcImNsaWVudFwiLCB0aGVuIHJldHVyblxuICAgIC8vIFwiYWJvdXQ6Y2xpZW50XCIuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHJldHVybiAnYWJvdXQ6Y2xpZW50J1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gVGhpcyBpcyB1c2VkIGR1cmluZyBmZXRjaGluZyB0byBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIuXG4gIGdldCByZWZlcnJlclBvbGljeSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWZlcnJlclBvbGljeSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZ1xuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IHdpbGwgdXNlIENPUlMsIG9yIHdpbGwgYmUgcmVzdHJpY3RlZCB0byBzYW1lLW9yaWdpblxuICAvLyBVUkxzLlxuICBnZXQgbW9kZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtb2RlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tb2RlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjcmVkZW50aWFscyBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlXG4gIC8vIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gIGdldCBjcmVkZW50aWFscyAoKSB7XG4gICAgLy8gVGhlIGNyZWRlbnRpYWxzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jcmVkZW50aWFsc1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY2FjaGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgdGhlIHJlcXVlc3Qgd2lsbFxuICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2VyXHUyMDE5cyBjYWNoZSB3aGVuIGZldGNoaW5nLlxuICBnZXQgY2FjaGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgY2FjaGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNhY2hlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWRpcmVjdCBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyByZWRpcmVjdHMgZm9yIHRoZVxuICAvLyByZXF1ZXN0IHdpbGwgYmUgaGFuZGxlZCBkdXJpbmcgZmV0Y2hpbmcuIEEgcmVxdWVzdFxuICAvLyB3aWxsIGZvbGxvdyByZWRpcmVjdHMgYnkgZGVmYXVsdC5cbiAgZ2V0IHJlZGlyZWN0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWRpcmVjdFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN0XHUyMDE5cyBzdWJyZXNvdXJjZSBpbnRlZ3JpdHkgbWV0YWRhdGEsIHdoaWNoIGlzIGFcbiAgLy8gY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSByZXNvdXJjZSBiZWluZyBmZXRjaGVkLiBJdHMgdmFsdWVcbiAgLy8gY29uc2lzdHMgb2YgbXVsdGlwbGUgaGFzaGVzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiBbU1JJXVxuICBnZXQgaW50ZWdyaXR5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGludGVncml0eSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHlcbiAgICAvLyBtZXRhZGF0YS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmludGVncml0eVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGNhbiBvdXRsaXZlIHRoZVxuICAvLyBnbG9iYWwgaW4gd2hpY2ggaXQgd2FzIGNyZWF0ZWQuXG4gIGdldCBrZWVwYWxpdmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUga2VlcGFsaXZlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmtlZXBhbGl2ZVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIHJlbG9hZFxuICAvLyBuYXZpZ2F0aW9uLlxuICBnZXQgaXNSZWxvYWROYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzUmVsb2FkTmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZyBpcyBzZXQ7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlbG9hZE5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSBoaXN0b3J5XG4gIC8vIG5hdmlnYXRpb24gKGEuay5hLiBiYWNrLWZvd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHRoaXMuYm9keVVzZWQgfHwgdGhpcy5ib2R5Py5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgY2xvbmVkUmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVxdWVzdC5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0ID0gY2xvbmVSZXF1ZXN0KHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIExldCBjbG9uZWRSZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXF1ZXN0IG9iamVjdCxcbiAgICAvLyBnaXZlbiBjbG9uZWRSZXF1ZXN0LCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IGNsb25lZFJlcXVlc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICAvLyA0LiBNYWtlIGNsb25lZFJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbCBmb2xsb3cgdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKFxuICAgICAgICB0aGlzLnNpZ25hbCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdCAoaW5pdCkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbiAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGxvY2FsVVJMc09ubHk6IGZhbHNlLFxuICAgIHVuc2FmZVJlcXVlc3Q6IGZhbHNlLFxuICAgIGJvZHk6IG51bGwsXG4gICAgY2xpZW50OiBudWxsLFxuICAgIHJlc2VydmVkQ2xpZW50OiBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6ICcnLFxuICAgIHdpbmRvdzogJ2NsaWVudCcsXG4gICAga2VlcGFsaXZlOiBmYWxzZSxcbiAgICBzZXJ2aWNlV29ya2VyczogJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiAnJyxcbiAgICBkZXN0aW5hdGlvbjogJycsXG4gICAgcHJpb3JpdHk6IG51bGwsXG4gICAgb3JpZ2luOiAnY2xpZW50JyxcbiAgICBwb2xpY3lDb250YWluZXI6ICdjbGllbnQnLFxuICAgIHJlZmVycmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogJycsXG4gICAgbW9kZTogJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBmYWxzZSxcbiAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICB1c2VDcmVkZW50aWFsczogZmFsc2UsXG4gICAgY2FjaGU6ICdkZWZhdWx0JyxcbiAgICByZWRpcmVjdDogJ2ZvbGxvdycsXG4gICAgaW50ZWdyaXR5OiAnJyxcbiAgICBjcnlwdG9HcmFwaGljc05vbmNlTWV0YWRhdGE6ICcnLFxuICAgIHBhcnNlck1ldGFkYXRhOiAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICBoaXN0b3J5TmF2aWdhdGlvbjogZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGZhbHNlLFxuICAgIHRhaW50ZWRPcmlnaW46IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IDAsXG4gICAgcmVzcG9uc2VUYWludGluZzogJ2Jhc2ljJyxcbiAgICBwcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbjogZmFsc2UsXG4gICAgZG9uZTogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dGYWlsZWQ6IGZhbHNlLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbiAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbMF1cbiAgcmV0dXJuIHJlcXVlc3Rcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdFx1MjAxOXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuICBtZXRob2Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzaWduYWw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGR1cGxleDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVzdGluYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc1JlbG9hZE5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtlZXBhbGl2ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW50ZWdyaXR5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjYWNoZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY3JlZGVudGlhbHM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGF0dHJpYnV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXJQb2xpY3k6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtb2RlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVxdWVzdCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZXF1ZXN0XG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5mb1xud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8gPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBBYm9ydFNpZ25hbFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfSxcbiAge1xuICAgIGtleTogJ2JvZHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXRcbiAgICApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyUG9saWN5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWN5XG4gICAgYWxsb3dlZFZhbHVlczogcmVmZXJyZXJQb2xpY3lcbiAgfSxcbiAge1xuICAgIGtleTogJ21vZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtbW9kZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RNb2RlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjcmVkZW50aWFsc1xuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDcmVkZW50aWFsc1xuICB9LFxuICB7XG4gICAga2V5OiAnY2FjaGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y2FjaGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q2FjaGVcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZGlyZWN0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHJlZGlyZWN0XG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdFJlZGlyZWN0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpbnRlZ3JpdHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdrZWVwYWxpdmUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhblxuICB9LFxuICB7XG4gICAga2V5OiAnc2lnbmFsJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIChzaWduYWwpID0+IHdlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsKFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9XG4iLCAiLy8gaHR0cHM6Ly9naXRodWIuY29tL0V0aGFuLUFycm93b29kL3VuZGljaS1mZXRjaFxuXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBSZXNwb25zZSxcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgbWFrZVJlc3BvbnNlXG59ID0gcmVxdWlyZSgnLi9yZXNwb25zZScpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IFJlcXVlc3QsIG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuL3JlcXVlc3QnKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKVxuY29uc3Qge1xuICBieXRlc01hdGNoLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIFRBT0NoZWNrLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgaXNCbG9iTGlrZSxcbiAgc2FtZU9yaWdpbixcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICB1cmxIYXNIdHRwc1NjaGVtZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgc2FmZWx5RXh0cmFjdEJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICBzdWJyZXNvdXJjZVNldCxcbiAgRE9NRXhjZXB0aW9uXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCB7IFJlYWRhYmxlLCBwaXBlbGluZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciwgaXNFcnJvcmVkLCBpc1JlYWRhYmxlLCBub2RlTWFqb3IsIG5vZGVNaW5vciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZGF0YVVSTFByb2Nlc3Nvciwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBUcmFuc2Zvcm1TdHJlYW0gfSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IEdFVF9PUl9IRUFEID0gWydHRVQnLCAnSEVBRCddXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdidWZmZXInKS5yZXNvbHZlT2JqZWN0VVJMfSAqL1xubGV0IHJlc29sdmVPYmplY3RVUkxcbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuY2xhc3MgRmV0Y2ggZXh0ZW5kcyBFRSB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaGVyKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlclxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGxcbiAgICB0aGlzLmR1bXAgPSBmYWxzZVxuICAgIHRoaXMuc3RhdGUgPSAnb25nb2luZydcbiAgICAvLyAyIHRlcm1pbmF0ZWQgbGlzdGVuZXJzIGdldCBhZGRlZCBwZXIgcmVxdWVzdCxcbiAgICAvLyBidXQgb25seSAxIGdldHMgcmVtb3ZlZC4gSWYgdGhlcmUgYXJlIDIwIHJlZGlyZWN0cyxcbiAgICAvLyAyMSBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3MTFcbiAgICAvLyBUT0RPIChmaXgpOiBGaW5kIGFuZCBmaXggcm9vdCBjYXVzZSBmb3IgbGVha2VkIGxpc3RlbmVyLlxuICAgIHRoaXMuc2V0TWF4TGlzdGVuZXJzKDIxKVxuICB9XG5cbiAgdGVybWluYXRlIChyZWFzb24pIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29uZ29pbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ3Rlcm1pbmF0ZWQnXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KHJlYXNvbilcbiAgICB0aGlzLmVtaXQoJ3Rlcm1pbmF0ZWQnLCByZWFzb24pXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtY29udHJvbGxlci1hYm9ydFxuICBhYm9ydCAoZXJyb3IpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29uZ29pbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAxLiBTZXQgY29udHJvbGxlclx1MjAxOXMgc3RhdGUgdG8gXCJhYm9ydGVkXCIuXG4gICAgdGhpcy5zdGF0ZSA9ICdhYm9ydGVkJ1xuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrRXJyb3IgYmUgYW4gXCJBYm9ydEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIC8vIDMuIFNldCBlcnJvciB0byBmYWxsYmFja0Vycm9yIGlmIGl0IGlzIG5vdCBnaXZlbi5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBlcnJvciA9IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDQuIExldCBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShlcnJvcikuXG4gICAgLy8gICAgSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIGNhdGNoIGl0LCBhbmQgbGV0XG4gICAgLy8gICAgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZmFsbGJhY2tFcnJvcikuXG5cbiAgICAvLyA1LiBTZXQgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gdG8gc2VyaWFsaXplZEVycm9yLlxuICAgIHRoaXMuc2VyaWFsaXplZEFib3J0UmVhc29uID0gZXJyb3JcblxuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShlcnJvcilcbiAgICB0aGlzLmVtaXQoJ3Rlcm1pbmF0ZWQnLCBlcnJvcilcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtbWV0aG9kXG5mdW5jdGlvbiBmZXRjaCAoaW5wdXQsIGluaXQgPSB7fSkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2xvYmFsVGhpcy5mZXRjaCcgfSlcblxuICAvLyAxLiBMZXQgcCBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAyLiBMZXQgcmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBpbml0aWFsIHZhbHVlIG9mXG4gIC8vIFJlcXVlc3QgYXMgY29uc3RydWN0b3Igd2l0aCBpbnB1dCBhbmQgaW5pdCBhcyBhcmd1bWVudHMuIElmIHRoaXMgdGhyb3dzXG4gIC8vIGFuIGV4Y2VwdGlvbiwgcmVqZWN0IHAgd2l0aCBpdCBhbmQgcmV0dXJuIHAuXG4gIGxldCByZXF1ZXN0T2JqZWN0XG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwLnJlamVjdChlKVxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDMuIExldCByZXF1ZXN0IGJlIHJlcXVlc3RPYmplY3RcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0T2JqZWN0W2tTdGF0ZV1cblxuICAvLyA0LiBJZiByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gIGlmIChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gMS4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIG51bGwsIGFuZFxuICAgIC8vICAgIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgbnVsbCwgcmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgLy8gMi4gUmV0dXJuIHAuXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gNS4gTGV0IGdsb2JhbE9iamVjdCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QuXG4gIGNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gIC8vIDYuIElmIGdsb2JhbE9iamVjdCBpcyBhIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSBvYmplY3QsIHRoZW4gc2V0XG4gIC8vIHJlcXVlc3RcdTIwMTlzIHNlcnZpY2Utd29ya2VycyBtb2RlIHRvIFwibm9uZVwiLlxuICBpZiAoZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZScpIHtcbiAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gIH1cblxuICAvLyA3LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlT2JqZWN0ID0gbnVsbFxuXG4gIC8vIDguIExldCByZWxldmFudFJlYWxtIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICBjb25zdCByZWxldmFudFJlYWxtID0gbnVsbFxuXG4gIC8vIDkuIExldCBsb2NhbGx5QWJvcnRlZCBiZSBmYWxzZS5cbiAgbGV0IGxvY2FsbHlBYm9ydGVkID0gZmFsc2VcblxuICAvLyAxMC4gTGV0IGNvbnRyb2xsZXIgYmUgbnVsbC5cbiAgbGV0IGNvbnRyb2xsZXIgPSBudWxsXG5cbiAgLy8gMTEuIEFkZCB0aGUgZm9sbG93aW5nIGFib3J0IHN0ZXBzIHRvIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbDpcbiAgYWRkQWJvcnRMaXN0ZW5lcihcbiAgICByZXF1ZXN0T2JqZWN0LnNpZ25hbCxcbiAgICAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgbG9jYWxseUFib3J0ZWQgdG8gdHJ1ZS5cbiAgICAgIGxvY2FsbHlBYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBBc3NlcnQ6IGNvbnRyb2xsZXIgaXMgbm9uLW51bGwuXG4gICAgICBhc3NlcnQoY29udHJvbGxlciAhPSBudWxsKVxuXG4gICAgICAvLyAzLiBBYm9ydCBjb250cm9sbGVyIHdpdGggcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgICBjb250cm9sbGVyLmFib3J0KHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgICAgLy8gNC4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LFxuICAgICAgLy8gICAgYW5kIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgcmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuICAgIH1cbiAgKVxuXG4gIC8vIDEyLiBMZXQgaGFuZGxlRmV0Y2hEb25lIGdpdmVuIHJlc3BvbnNlIHJlc3BvbnNlIGJlIHRvIGZpbmFsaXplIGFuZFxuICAvLyByZXBvcnQgdGltaW5nIHdpdGggcmVzcG9uc2UsIGdsb2JhbE9iamVjdCwgYW5kIFwiZmV0Y2hcIi5cbiAgY29uc3QgaGFuZGxlRmV0Y2hEb25lID0gKHJlc3BvbnNlKSA9PlxuICAgIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nKHJlc3BvbnNlLCAnZmV0Y2gnKVxuXG4gIC8vIDEzLiBTZXQgY29udHJvbGxlciB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZmV0Y2ggZ2l2ZW4gcmVxdWVzdCxcbiAgLy8gd2l0aCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgc2V0IHRvIGhhbmRsZUZldGNoRG9uZSwgYW5kIHByb2Nlc3NSZXNwb25zZVxuICAvLyBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdWJzdGVwczpcblxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvLyAxLiBJZiBsb2NhbGx5QWJvcnRlZCBpcyB0cnVlLCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKGxvY2FsbHlBYm9ydGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiByZXNwb25zZVx1MjAxOXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgLy8gMS4gTGV0IGRlc2VyaWFsaXplZEVycm9yIGJlIHRoZSByZXN1bHQgb2YgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkXG4gICAgICAvLyAgICBhYm9ydCByZWFzb24gZ2l2ZW4gY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kXG4gICAgICAvLyAgICByZWxldmFudFJlYWxtLlxuXG4gICAgICAvLyAyLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGFuZFxuICAgICAgLy8gICAgZGVzZXJpYWxpemVkRXJyb3IuXG5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlamVjdCBwIHdpdGggYSBUeXBlRXJyb3JcbiAgICAvLyBhbmQgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICBwLnJlamVjdChcbiAgICAgICAgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCdmZXRjaCBmYWlsZWQnKSwgeyBjYXVzZTogcmVzcG9uc2UuZXJyb3IgfSlcbiAgICAgIClcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDQuIFNldCByZXNwb25zZU9iamVjdCB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LFxuICAgIC8vIGdpdmVuIHJlc3BvbnNlLCBcImltbXV0YWJsZVwiLCBhbmQgcmVsZXZhbnRSZWFsbS5cbiAgICByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IHJlc3BvbnNlXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNS4gUmVzb2x2ZSBwIHdpdGggcmVzcG9uc2VPYmplY3QuXG4gICAgcC5yZXNvbHZlKHJlc3BvbnNlT2JqZWN0KVxuICB9XG5cbiAgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keTogaGFuZGxlRmV0Y2hEb25lLFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBkaXNwYXRjaGVyOiBpbml0LmRpc3BhdGNoZXIgPz8gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIC8vIHVuZGljaVxuICB9KVxuXG4gIC8vIDE0LiBSZXR1cm4gcC5cbiAgcmV0dXJuIHAucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtYW5kLXJlcG9ydC10aW1pbmdcbmZ1bmN0aW9uIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nIChyZXNwb25zZSwgaW5pdGlhdG9yVHlwZSA9ICdvdGhlcicpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgcmVzcG9uc2UuYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIG51bGwgb3IgZW1wdHksIHRoZW4gcmV0dXJuLlxuICBpZiAoIXJlc3BvbnNlLnVybExpc3Q/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMy4gTGV0IG9yaWdpbmFsVVJMIGJlIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdFswXS5cbiAgY29uc3Qgb3JpZ2luYWxVUkwgPSByZXNwb25zZS51cmxMaXN0WzBdXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBsZXQgdGltaW5nSW5mbyA9IHJlc3BvbnNlLnRpbWluZ0luZm9cblxuICAvLyA1LiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gIC8vIDYuIElmIG9yaWdpbmFsVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShvcmlnaW5hbFVSTCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDcuIElmIHRpbWluZ0luZm8gaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmICh0aW1pbmdJbmZvID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA4LiBJZiByZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnIGlzIG5vdCBzZXQsIHRoZW46XG4gIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAvLyAgMS4gU2V0IHRpbWluZ0luZm8gdG8gYSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mby5cbiAgICB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcblxuICAgIC8vICAyLiBTZXQgY2FjaGVTdGF0ZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIGNhY2hlU3RhdGUgPSAnJ1xuICB9XG5cbiAgLy8gOS4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZVxuICAvLyBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIC8vIFRPRE86IGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eT9cbiAgdGltaW5nSW5mby5lbmRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoKVxuXG4gIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTEuIE1hcmsgcmVzb3VyY2UgdGltaW5nIGZvciB0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSxcbiAgLy8gZ2xvYmFsLCBhbmQgY2FjaGVTdGF0ZS5cbiAgbWFya1Jlc291cmNlVGltaW5nKFxuICAgIHRpbWluZ0luZm8sXG4gICAgb3JpZ2luYWxVUkwsXG4gICAgaW5pdGlhdG9yVHlwZSxcbiAgICBnbG9iYWxUaGlzLFxuICAgIGNhY2hlU3RhdGVcbiAgKVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vcmVzb3VyY2UtdGltaW5nLyNkZm4tbWFyay1yZXNvdXJjZS10aW1pbmdcbmZ1bmN0aW9uIG1hcmtSZXNvdXJjZVRpbWluZyAodGltaW5nSW5mbywgb3JpZ2luYWxVUkwsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpIHtcbiAgaWYgKG5vZGVNYWpvciA+IDE4IHx8IChub2RlTWFqb3IgPT09IDE4ICYmIG5vZGVNaW5vciA+PSAyKSkge1xuICAgIHBlcmZvcm1hbmNlLm1hcmtSZXNvdXJjZVRpbWluZyh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTC5ocmVmLCBpbml0aWF0b3JUeXBlLCBnbG9iYWxUaGlzLCBjYWNoZVN0YXRlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhYm9ydC1mZXRjaFxuZnVuY3Rpb24gYWJvcnRGZXRjaCAocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGVycm9yKSB7XG4gIC8vIE5vdGU6IEFib3J0U2lnbmFsLnJlYXNvbiB3YXMgYWRkZWQgaW4gbm9kZSB2MTcuMi4wXG4gIC8vIHdoaWNoIHdvdWxkIGdpdmUgdXMgYW4gdW5kZWZpbmVkIGVycm9yIHRvIHJlamVjdCB3aXRoLlxuICAvLyBSZW1vdmUgdGhpcyBvbmNlIG5vZGUgdjE2IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXG4gIGlmICghZXJyb3IpIHtcbiAgICBlcnJvciA9IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG5cbiAgLy8gMS4gUmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgcC5yZWplY3QoZXJyb3IpXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gY2FuY2VsIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVxdWVzdC5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVxdWVzdC5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgcmVzcG9uc2VPYmplY3QgaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZU9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlLlxuICBjb25zdCByZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV1cblxuICAvLyA1LiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gZXJyb3IgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlc3BvbnNlLmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXNwb25zZS5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaGluZ1xuZnVuY3Rpb24gZmV0Y2hpbmcgKHtcbiAgcmVxdWVzdCxcbiAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2UsXG4gIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIHVzZVBhcmFsbGVsUXVldWUgPSBmYWxzZSxcbiAgZGlzcGF0Y2hlciAvLyB1bmRpY2lcbn0pIHtcbiAgLy8gMS4gTGV0IHRhc2tEZXN0aW5hdGlvbiBiZSBudWxsLlxuICBsZXQgdGFza0Rlc3RpbmF0aW9uID0gbnVsbFxuXG4gIC8vIDIuIExldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSBiZSBmYWxzZS5cbiAgbGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5ID0gZmFsc2VcblxuICAvLyAzLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW46XG4gIGlmIChyZXF1ZXN0LmNsaWVudCAhPSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IHRhc2tEZXN0aW5hdGlvbiB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QuXG4gICAgdGFza0Rlc3RpbmF0aW9uID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgICAvLyAyLiBTZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgdG8gcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBjcm9zcy1vcmlnaW5cbiAgICAvLyBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50LmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA0LiBJZiB1c2VQYXJhbGxlbFF1ZXVlIGlzIHRydWUsIHRoZW4gc2V0IHRhc2tEZXN0aW5hdGlvbiB0byB0aGUgcmVzdWx0IG9mXG4gIC8vIHN0YXJ0aW5nIGEgbmV3IHBhcmFsbGVsIHF1ZXVlLlxuICAvLyBUT0RPXG5cbiAgLy8gNS4gTGV0IHRpbWluZ0luZm8gYmUgYSBuZXcgZmV0Y2ggdGltaW5nIGluZm8gd2hvc2Ugc3RhcnQgdGltZSBhbmRcbiAgLy8gcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIGFyZSB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW5cbiAgLy8gY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGN1cnJlblRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbiAgY29uc3QgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgIHN0YXJ0VGltZTogY3VycmVuVGltZVxuICB9KVxuXG4gIC8vIDYuIExldCBmZXRjaFBhcmFtcyBiZSBhIG5ldyBmZXRjaCBwYXJhbXMgd2hvc2VcbiAgLy8gcmVxdWVzdCBpcyByZXF1ZXN0LFxuICAvLyB0aW1pbmcgaW5mbyBpcyB0aW1pbmdJbmZvLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgYm9keSBjaHVuayBsZW5ndGggaXMgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBpcyBwcm9jZXNzUmVzcG9uc2UsXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGlzIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgLy8gdGFzayBkZXN0aW5hdGlvbiBpcyB0YXNrRGVzdGluYXRpb24sXG4gIC8vIGFuZCBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSBpcyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgY29udHJvbGxlcjogbmV3IEZldGNoKGRpc3BhdGNoZXIpLFxuICAgIHJlcXVlc3QsXG4gICAgdGltaW5nSW5mbyxcbiAgICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAgIHRhc2tEZXN0aW5hdGlvbixcbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG9cbiAgLy8gICAgcmVxdWVzdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gIC8vIE5PVEU6IFNpbmNlIGZldGNoaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gZmV0Y2gsIGJvZHkgc2hvdWxkIGFscmVhZHkgYmVcbiAgLy8gZXh0cmFjdGVkLlxuICBhc3NlcnQoIXJlcXVlc3QuYm9keSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gY2xpZW50LCBpZiByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QgaXMgYSBXaW5kb3cgb2JqZWN0OyBvdGhlcndpc2VcbiAgLy8gXCJuby13aW5kb3dcIi5cbiAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0LndpbmRvdyA9XG4gICAgICByZXF1ZXN0LmNsaWVudD8uZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1dpbmRvdydcbiAgICAgICAgPyByZXF1ZXN0LmNsaWVudFxuICAgICAgICA6ICduby13aW5kb3cnXG4gIH1cblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudFx1MjAxOXMgb3JpZ2luLlxuICBpZiAocmVxdWVzdC5vcmlnaW4gPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qub3JpZ2luID0gcmVxdWVzdC5jbGllbnQ/Lm9yaWdpblxuICB9XG5cbiAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHRydWU6XG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lciBpcyBcImNsaWVudFwiLCB0aGVuOlxuICBpZiAocmVxdWVzdC5wb2xpY3lDb250YWluZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3lcbiAgICAvLyBjb250YWluZXIgdG8gYSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIHBvbGljeSBjb250YWluZXIuIFtIVE1MXVxuICAgIGlmIChyZXF1ZXN0LmNsaWVudCAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IGNsb25lUG9saWN5Q29udGFpbmVyKFxuICAgICAgICByZXF1ZXN0LmNsaWVudC5wb2xpY3lDb250YWluZXJcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lciB0byBhIG5ldyBwb2xpY3lcbiAgICAgIC8vIGNvbnRhaW5lci5cbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gbWFrZVBvbGljeUNvbnRhaW5lcigpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEFjY2VwdGAsIHRoZW46XG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0JykpIHtcbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgYCovKmAuXG4gICAgY29uc3QgdmFsdWUgPSAnKi8qJ1xuXG4gICAgLy8gMi4gQSB1c2VyIGFnZW50IHNob3VsZCBzZXQgdmFsdWUgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudCwgaWZcbiAgICAvLyBhbnksIHN3aXRjaGluZyBvbiByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbjpcbiAgICAvLyBcImRvY3VtZW50XCJcbiAgICAvLyBcImZyYW1lXCJcbiAgICAvLyBcImlmcmFtZVwiXG4gICAgLy8gYHRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOGBcbiAgICAvLyBcImltYWdlXCJcbiAgICAvLyBgaW1hZ2UvcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKjtxPTAuOCwqLyo7cT0wLjVgXG4gICAgLy8gXCJzdHlsZVwiXG4gICAgLy8gYHRleHQvY3NzLCovKjtxPTAuMWBcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAzLiBBcHBlbmQgYEFjY2VwdGAvdmFsdWUgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdCcsIHZhbHVlKVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEFjY2VwdC1MYW5ndWFnZWAsIHRoZW5cbiAgLy8gdXNlciBhZ2VudHMgc2hvdWxkIGFwcGVuZCBgQWNjZXB0LUxhbmd1YWdlYC9hbiBhcHByb3ByaWF0ZSB2YWx1ZSB0b1xuICAvLyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtbGFuZ3VhZ2UnKSkge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtbGFuZ3VhZ2UnLCAnKicpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkgaXMgbnVsbCwgdGhlbiB1c2UgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIGFuZFxuICAvLyBkZXN0aW5hdGlvbiBhcHByb3ByaWF0ZWx5IGluIHNldHRpbmcgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkgdG8gYVxuICAvLyB1c2VyLWFnZW50LWRlZmluZWQgb2JqZWN0LlxuICBpZiAocmVxdWVzdC5wcmlvcml0eSA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE1LiBJZiByZXF1ZXN0IGlzIGEgc3VicmVzb3VyY2UgcmVxdWVzdCwgdGhlbjpcbiAgaWYgKHN1YnJlc291cmNlU2V0LmhhcyhyZXF1ZXN0LmRlc3RpbmF0aW9uKSkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE2LiBSdW4gbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgbWFpbkZldGNoKGZldGNoUGFyYW1zKVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyKVxuICAgIH0pXG5cbiAgLy8gMTcuIFJldHVybiBmZXRjaFBhcmFtJ3MgY29udHJvbGxlclxuICByZXR1cm4gZmV0Y2hQYXJhbXMuY29udHJvbGxlclxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1tYWluLWZldGNoXG5hc3luYyBmdW5jdGlvbiBtYWluRmV0Y2ggKGZldGNoUGFyYW1zLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGxvY2FsLVVSTHMtb25seSBmbGFnIGlzIHNldCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXNcbiAgLy8gbm90IGxvY2FsLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmxvY2FsVVJMc09ubHkgJiYgIXVybElzTG9jYWwocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdsb2NhbCBVUkxzIG9ubHknKVxuICB9XG5cbiAgLy8gNC4gUnVuIHJlcG9ydCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB2aW9sYXRpb25zIGZvciByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNS4gVXBncmFkZSByZXF1ZXN0IHRvIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLCBpZiBhcHByb3ByaWF0ZS5cbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMKHJlcXVlc3QpXG5cbiAgLy8gNi4gSWYgc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gYSBiYWQgcG9ydCwgc2hvdWxkIGZldGNoaW5nIHJlcXVlc3RcbiAgLy8gYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50LCBvciBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnRcbiAgLy8gU2VjdXJpdHkgUG9saWN5IHJldHVybnMgYmxvY2tlZCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdEJhZFBvcnQocmVxdWVzdCkgPT09ICdibG9ja2VkJykge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignYmFkIHBvcnQnKVxuICB9XG4gIC8vIFRPRE86IHNob3VsZCBmZXRjaGluZyByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudD9cbiAgLy8gVE9ETzogc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeT9cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIgcG9saWN5IHRvIHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXJcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgaWYgKHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPT09ICcnKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IHJlcXVlc3QucG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBub3QgXCJuby1yZWZlcnJlclwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciB0byB0aGUgcmVzdWx0IG9mIGludm9raW5nIGRldGVybWluZSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgIT09ICduby1yZWZlcnJlcicpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyID0gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcihyZXF1ZXN0KVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgdG8gXCJodHRwc1wiIGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgYXJlIHRydWU6XG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBcIlxuICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBob3N0IGlzIGEgZG9tYWluXG4gIC8vIC0gTWF0Y2hpbmcgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgcGVyIEtub3duIEhTVFMgSG9zdCBEb21haW4gTmFtZVxuICAvLyAgIE1hdGNoaW5nIHJlc3VsdHMgaW4gZWl0aGVyIGEgc3VwZXJkb21haW4gbWF0Y2ggd2l0aCBhbiBhc3NlcnRlZFxuICAvLyAgIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSBvciBhIGNvbmdydWVudCBtYXRjaCAod2l0aCBvciB3aXRob3V0IGFuXG4gIC8vICAgYXNzZXJ0ZWQgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlKS4gW0hTVFNdXG4gIC8vIFRPRE9cblxuICAvLyAxMC4gSWYgcmVjdXJzaXZlIGlzIGZhbHNlLCB0aGVuIHJ1biB0aGUgcmVtYWluaW5nIHN0ZXBzIGluIHBhcmFsbGVsLlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAvLyB0aGUgc3RlcHMgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50OlxuICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICByZXNwb25zZSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgaWYgKFxuICAgICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4gaXMgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBvcmlnaW4sXG4gICAgICAgIC8vICAgYW5kIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiYmFzaWNcIlxuICAgICAgICAoc2FtZU9yaWdpbihjdXJyZW50VVJMLCByZXF1ZXN0LnVybCkgJiYgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKSB8fFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiZGF0YVwiXG4gICAgICAgIChjdXJyZW50VVJMLnByb3RvY29sID09PSAnZGF0YTonKSB8fFxuICAgICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiIG9yIFwid2Vic29ja2V0XCJcbiAgICAgICAgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJyB8fCByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKVxuICAgICAgKSB7XG4gICAgICAgIC8vIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImJhc2ljXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdiYXNpYydcblxuICAgICAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwic2FtZS1vcmlnaW5cIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3NhbWUtb3JpZ2luJykge1xuICAgICAgICAvLyAxLiBSZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncmVxdWVzdCBtb2RlIGNhbm5vdCBiZSBcInNhbWUtb3JpZ2luXCInKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibm8tY29yc1wiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpcyBub3QgXCJmb2xsb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gICAgICAgIC8vIGVycm9yLlxuICAgICAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ2ZvbGxvdycpIHtcbiAgICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcihcbiAgICAgICAgICAgICdyZWRpcmVjdCBtb2RlIGNhbm5vdCBiZSBcImZvbGxvd1wiIGZvciBcIm5vLWNvcnNcIiByZXF1ZXN0J1xuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcIm9wYXF1ZVwiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnb3BhcXVlJ1xuXG4gICAgICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAvLyBSZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKVxuICAgICAgfVxuXG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVzZS1DT1JTLXByZWZsaWdodCBmbGFnIGlzIHNldFxuICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyB1bnNhZmUtcmVxdWVzdCBmbGFnIGlzIHNldCBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAgICAgLy8gICBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kIG9yIENPUlMtdW5zYWZlIHJlcXVlc3QtaGVhZGVyIG5hbWVzIHdpdGhcbiAgICAgIC8vICAgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgaXMgbm90IGVtcHR5XG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICAvLyAgICAyLiBMZXQgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaFxuICAgICAgLy8gICAgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHRydWUuXG4gICAgICAvLyAgICAzLiBJZiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiBjbGVhciBjYWNoZVxuICAgICAgLy8gICAgZW50cmllcyB1c2luZyByZXF1ZXN0LlxuICAgICAgLy8gICAgNC4gUmV0dXJuIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UuXG4gICAgICAvLyBUT0RPXG5cbiAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2NvcnMnXG5cbiAgICAgIC8vICAgIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgIHJldHVybiBhd2FpdCBodHRwRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgfSkoKVxuICB9XG5cbiAgLy8gMTIuIElmIHJlY3Vyc2l2ZSBpcyB0cnVlLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgLy8gMTMuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkXG4gIC8vIHJlc3BvbnNlLCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAwICYmICFyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIsIHRoZW46XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICAvLyAxLiBMZXQgaGVhZGVyTmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgLy8gZ2l2ZW4gYEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZSBpcyBub3QgXCJpbmNsdWRlXCIgYW5kIGhlYWRlck5hbWVzXG4gICAgICAvLyBjb250YWlucyBgKmAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0b1xuICAgICAgLy8gYWxsIHVuaXF1ZSBoZWFkZXIgbmFtZXMgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJOYW1lcyBpcyBub3QgbnVsbCBvciBmYWlsdXJlLCB0aGVuIHNldFxuICAgICAgLy8gcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvIGhlYWRlck5hbWVzLlxuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2UsIGRlcGVuZGluZyBvbiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZzpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnYmFzaWMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdjb3JzJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdvcGFxdWUnKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gMTQuIExldCBpbnRlcm5hbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsXG4gIC8vIGFuZCByZXNwb25zZVx1MjAxOXMgaW50ZXJuYWwgcmVzcG9uc2Ugb3RoZXJ3aXNlLlxuICBsZXQgaW50ZXJuYWxSZXNwb25zZSA9XG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSAwID8gcmVzcG9uc2UgOiByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG5cbiAgLy8gMTUuIElmIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIGVtcHR5LCB0aGVuIHNldCBpdCB0byBhIGNsb25lIG9mXG4gIC8vIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICBpZiAoaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5wdXNoKC4uLnJlcXVlc3QudXJsTGlzdClcbiAgfVxuXG4gIC8vIDE2LiBJZiByZXF1ZXN0XHUyMDE5cyB0aW1pbmcgYWxsb3cgZmFpbGVkIGZsYWcgaXMgdW5zZXQsIHRoZW4gc2V0XG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZy5cbiAgaWYgKCFyZXF1ZXN0LnRpbWluZ0FsbG93RmFpbGVkKSB7XG4gICAgcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxNy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgYW55IG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJuc1xuICAvLyBibG9ja2VkXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3lcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGl0cyBNSU1FIHR5cGVcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIG5vc25pZmZcbiAgLy8gVE9ET1xuXG4gIC8vIDE4LiBJZiByZXNwb25zZVx1MjAxOXMgdHlwZSBpcyBcIm9wYXF1ZVwiLCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMjA2LFxuICAvLyBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyByYW5nZS1yZXF1ZXN0ZWQgZmxhZyBpcyBzZXQsIGFuZCByZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gbGlzdCBkb2VzIG5vdCBjb250YWluIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlIGFuZCBpbnRlcm5hbFJlc3BvbnNlXG4gIC8vIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnR5cGUgPT09ICdvcGFxdWUnICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMgPT09IDIwNiAmJlxuICAgIGludGVybmFsUmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgJiZcbiAgICAhcmVxdWVzdC5oZWFkZXJzLmNvbnRhaW5zKCdyYW5nZScpXG4gICkge1xuICAgIHJlc3BvbnNlID0gaW50ZXJuYWxSZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICB9XG5cbiAgLy8gMTkuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGVpdGhlciByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXNcbiAgLy8gYEhFQURgIG9yIGBDT05ORUNUYCwgb3IgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGEgbnVsbCBib2R5IHN0YXR1cyxcbiAgLy8gc2V0IGludGVybmFsUmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gbnVsbCBhbmQgZGlzcmVnYXJkIGFueSBlbnF1ZXVpbmcgdG93YXJkXG4gIC8vIGl0IChpZiBhbnkpLlxuICBpZiAoXG4gICAgcmVzcG9uc2Uuc3RhdHVzICE9PSAwICYmXG4gICAgKHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgfHxcbiAgICAgIHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcgfHxcbiAgICAgIG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKGludGVybmFsUmVzcG9uc2Uuc3RhdHVzKSlcbiAgKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS5ib2R5ID0gbnVsbFxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZHVtcCA9IHRydWVcbiAgfVxuXG4gIC8vIDIwLiBJZiByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW46XG4gIGlmIChyZXF1ZXN0LmludGVncml0eSkge1xuICAgIC8vIDEuIExldCBwcm9jZXNzQm9keUVycm9yIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtc1xuICAgIC8vIGFuZCBhIG5ldHdvcmsgZXJyb3IuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChyZWFzb24pID0+XG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgbWFrZU5ldHdvcmtFcnJvcihyZWFzb24pKVxuXG4gICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJvcGFxdWVcIiwgb3IgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCxcbiAgICAvLyB0aGVuIHJ1biBwcm9jZXNzQm9keUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICAgIHByb2Nlc3NCb2R5RXJyb3IocmVzcG9uc2UuZXJyb3IpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHkgPSAoYnl0ZXMpID0+IHtcbiAgICAgIC8vIDEuIElmIGJ5dGVzIGRvIG5vdCBtYXRjaCByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEsXG4gICAgICAvLyB0aGVuIHJ1biBwcm9jZXNzQm9keUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4gW1NSSV1cbiAgICAgIGlmICghYnl0ZXNNYXRjaChieXRlcywgcmVxdWVzdC5pbnRlZ3JpdHkpKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoJ2ludGVncml0eSBtaXNtYXRjaCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYnl0ZXMgYXMgYSBib2R5LlxuICAgICAgcmVzcG9uc2UuYm9keSA9IHNhZmVseUV4dHJhY3RCb2R5KGJ5dGVzKVswXVxuXG4gICAgICAvLyAzLiBSdW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyA0LiBGdWxseSByZWFkIHJlc3BvbnNlXHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5IGFuZCBwcm9jZXNzQm9keUVycm9yLlxuICAgIGF3YWl0IGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gIH0gZWxzZSB7XG4gICAgLy8gMjEuIE90aGVyd2lzZSwgcnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXNjaGVtZS1mZXRjaFxuLy8gZ2l2ZW4gYSBmZXRjaCBwYXJhbXMgZmV0Y2hQYXJhbXNcbmZ1bmN0aW9uIHNjaGVtZUZldGNoIChmZXRjaFBhcmFtcykge1xuICAvLyBOb3RlOiBzaW5jZSB0aGUgY29ubmVjdGlvbiBpcyBkZXN0cm95ZWQgb24gcmVkaXJlY3QsIHdoaWNoIHNldHMgZmV0Y2hQYXJhbXMgdG8gYVxuICAvLyBjYW5jZWxsZWQgc3RhdGUsIHdlIGRvIG5vdCB3YW50IHRoaXMgY29uZGl0aW9uIHRvIHRyaWdnZXIgKnVubGVzcyogdGhlcmUgaGF2ZSBiZWVuXG4gIC8vIG5vIHJlZGlyZWN0cy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzc2XG4gIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykgJiYgZmV0Y2hQYXJhbXMucmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpKVxuICB9XG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHsgcmVxdWVzdCB9ID0gZmV0Y2hQYXJhbXNcblxuICBjb25zdCB7IHByb3RvY29sOiBzY2hlbWUgfSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgYW5kIHJ1biB0aGUgYXNzb2NpYXRlZCBzdGVwczpcbiAgc3dpdGNoIChzY2hlbWUpIHtcbiAgICBjYXNlICdhYm91dDonOiB7XG4gICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgcGF0aCBpcyB0aGUgc3RyaW5nIFwiYmxhbmtcIiwgdGhlbiByZXR1cm4gYSBuZXcgcmVzcG9uc2VcbiAgICAgIC8vIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsIGhlYWRlciBsaXN0IGlzIFx1MDBBQiAoYENvbnRlbnQtVHlwZWAsIGB0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOGApIFx1MDBCQixcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeVx1MjAxOXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeVx1MjAxOXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGVcdTIwMTlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keVx1MjAxOXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZVx1MjAxOXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIFx1MDBBQiAoYENvbnRlbnQtTGVuZ3RoYCwgbGVuZ3RoKSwgKGBDb250ZW50LVR5cGVgLCB0eXBlKSBcdTAwQkIsIGFuZCBib2R5IGlzIGJvZHkuXG4gICAgICBjb25zdCByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LWxlbmd0aCcsIHsgbmFtZTogJ0NvbnRlbnQtTGVuZ3RoJywgdmFsdWU6IGxlbmd0aCB9XSxcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiB0eXBlIH1dXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBib2R5XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgXHUwMEJCLFxuICAgICAgLy8gICAgYW5kIGJvZHkgaXMgZGF0YVVSTFN0cnVjdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogbWltZVR5cGUgfV1cbiAgICAgICAgXSxcbiAgICAgICAgYm9keTogc2FmZWx5RXh0cmFjdEJvZHkoZGF0YVVSTFN0cnVjdC5ib2R5KVswXVxuICAgICAgfSkpXG4gICAgfVxuICAgIGNhc2UgJ2ZpbGU6Jzoge1xuICAgICAgLy8gRm9yIG5vdywgdW5mb3J0dW5hdGUgYXMgaXQgaXMsIGZpbGUgVVJMcyBhcmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ25vdCBpbXBsZW1lbnRlZC4uLiB5ZXQuLi4nKSlcbiAgICB9XG4gICAgY2FzZSAnaHR0cDonOlxuICAgIGNhc2UgJ2h0dHBzOic6IHtcbiAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cblxuICAgICAgcmV0dXJuIGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCd1bmtub3duIHNjaGVtZScpKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbmFsaXplUmVzcG9uc2UgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gIC8vIDIsIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgaXMgbm90IG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaFxuICAvLyB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGdpdmVuIHJlc3BvbnNlLCB3aXRoXG4gIC8vIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZShyZXNwb25zZSkpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWZpbmFsZVxuZnVuY3Rpb24gZmV0Y2hGaW5hbGUgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW46XG4gIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0WzBdIFx1MDBCQi5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNlXHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2VcdTIwMTlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLCByZXF1ZXN0XHUyMDE5cyBjbGllbnQsIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnRcbiAgLy8gVVJMXHUyMDE5cyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTFx1MjAxOXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb1x1MjAxOXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdFx1MjAxOXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlclx1MjAxOXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZVx1MjAxOXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb25cdTIwMTlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZvXHUyMDE5cyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3RcdTIwMTlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVyXHUyMDE5cyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudFx1MjAxOXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN0XHUyMDE5cyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN0XHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNlXHUyMDE5cyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc25cdTIwMTl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNlXHUyMDE5c1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZvXHUyMDE5cyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1N0YXRlOiBTeW1ib2woJ0ZpbGVSZWFkZXIgc3RhdGUnKSxcbiAga1Jlc3VsdDogU3ltYm9sKCdGaWxlUmVhZGVyIHJlc3VsdCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnRmlsZVJlYWRlciBlcnJvcicpLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZDogU3ltYm9sKCdGaWxlUmVhZGVyIGxhc3QgcHJvZ3Jlc3MgZXZlbnQgZmlyZWQgdGltZXN0YW1wJyksXG4gIGtFdmVudHM6IFN5bWJvbCgnRmlsZVJlYWRlciBldmVudHMnKSxcbiAga0Fib3J0ZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBhYm9ydGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5cbmNvbnN0IGtTdGF0ZSA9IFN5bWJvbCgnUHJvZ3Jlc3NFdmVudCBzdGF0ZScpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3Byb2dyZXNzZXZlbnRcbiAqL1xuY2xhc3MgUHJvZ3Jlc3NFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUHJvZ3Jlc3NFdmVudEluaXQoZXZlbnRJbml0RGljdCA/PyB7fSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiBldmVudEluaXREaWN0Lmxlbmd0aENvbXB1dGFibGUsXG4gICAgICBsb2FkZWQ6IGV2ZW50SW5pdERpY3QubG9hZGVkLFxuICAgICAgdG90YWw6IGV2ZW50SW5pdERpY3QudG90YWxcbiAgICB9XG4gIH1cblxuICBnZXQgbGVuZ3RoQ29tcHV0YWJsZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGVuZ3RoQ29tcHV0YWJsZVxuICB9XG5cbiAgZ2V0IGxvYWRlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubG9hZGVkXG4gIH1cblxuICBnZXQgdG90YWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnRvdGFsXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUHJvZ3Jlc3NFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsZW5ndGhDb21wdXRhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnbG9hZGVkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3RvdGFsJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQcm9ncmVzc0V2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtBYm9ydGVkLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IFByb2dyZXNzRXZlbnQgfSA9IHJlcXVpcmUoJy4vcHJvZ3Jlc3NldmVudCcpXG5jb25zdCB7IGdldEVuY29kaW5nIH0gPSByZXF1aXJlKCcuL2VuY29kaW5nJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9jb25zdGFudHMnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkT3BlcmF0aW9uXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gZnJcbiAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcmVhZE9wZXJhdGlvbiAoZnIsIGJsb2IsIHR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgXCJsb2FkaW5nXCIsIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yXG4gIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgaWYgKGZyW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgc3RhdGUnLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICB9XG5cbiAgLy8gMi4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImxvYWRpbmdcIi5cbiAgZnJba1N0YXRlXSA9ICdsb2FkaW5nJ1xuXG4gIC8vIDMuIFNldCBmclx1MjAxOXMgcmVzdWx0IHRvIG51bGwuXG4gIGZyW2tSZXN1bHRdID0gbnVsbFxuXG4gIC8vIDQuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gbnVsbC5cbiAgZnJba0Vycm9yXSA9IG51bGxcblxuICAvLyA1LiBMZXQgc3RyZWFtIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBnZXQgc3RyZWFtIG9uIGJsb2IuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW19ICovXG4gIGNvbnN0IHN0cmVhbSA9IGJsb2Iuc3RyZWFtKClcblxuICAvLyA2LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmcm9tIHN0cmVhbS5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgLy8gNy4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7VWludDhBcnJheVtdfSAqL1xuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgLy8gOC4gTGV0IGNodW5rUHJvbWlzZSBiZSB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYSBjaHVuayBmcm9tXG4gIC8vICAgIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgbGV0IGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcblxuICAvLyA5LiBMZXQgaXNGaXJzdENodW5rIGJlIHRydWUuXG4gIGxldCBpc0ZpcnN0Q2h1bmsgPSB0cnVlXG5cbiAgLy8gMTAuIEluIHBhcmFsbGVsLCB3aGlsZSB0cnVlOlxuICAvLyBOb3RlOiBcIkluIHBhcmFsbGVsXCIganVzdCBtZWFucyBub24tYmxvY2tpbmdcbiAgLy8gTm90ZSAyOiByZWFkT3BlcmF0aW9uIGl0c2VsZiBjYW5ub3QgYmUgYXN5bmMgYXMgZG91YmxlXG4gIC8vIHJlYWRpbmcgdGhlIGJvZHkgd291bGQgdGhlbiByZWplY3QgdGhlIHByb21pc2UsIGluc3RlYWRcbiAgLy8gb2YgdGhyb3dpbmcgYW4gZXJyb3IuXG4gIDsoYXN5bmMgKCkgPT4ge1xuICAgIHdoaWxlICghZnJba0Fib3J0ZWRdKSB7XG4gICAgICAvLyAxLiBXYWl0IGZvciBjaHVua1Byb21pc2UgdG8gYmUgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgY2h1bmtQcm9taXNlXG5cbiAgICAgICAgLy8gMi4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCwgYW5kIGlzRmlyc3RDaHVuayBpc1xuICAgICAgICAvLyAgICB0cnVlLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZFxuICAgICAgICAvLyAgICBsb2Fkc3RhcnQgYXQgZnIuXG4gICAgICAgIGlmIChpc0ZpcnN0Q2h1bmsgJiYgIWZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZHN0YXJ0JywgZnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFNldCBpc0ZpcnN0Q2h1bmsgdG8gZmFsc2UuXG4gICAgICAgIGlzRmlyc3RDaHVuayA9IGZhbHNlXG5cbiAgICAgICAgLy8gNC4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIG9iamVjdCB3aG9zZVxuICAgICAgICAvLyAgICBkb25lIHByb3BlcnR5IGlzIGZhbHNlIGFuZCB3aG9zZSB2YWx1ZSBwcm9wZXJ0eSBpc1xuICAgICAgICAvLyAgICBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG4gICAgICAgIGlmICghZG9uZSAmJiB0eXBlcy5pc1VpbnQ4QXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gMS4gTGV0IGJzIGJlIHRoZSBieXRlIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoZVxuICAgICAgICAgIC8vICAgIFVpbnQ4QXJyYXkgb2JqZWN0LlxuXG4gICAgICAgICAgLy8gMi4gQXBwZW5kIGJzIHRvIGJ5dGVzLlxuICAgICAgICAgIGJ5dGVzLnB1c2godmFsdWUpXG5cbiAgICAgICAgICAvLyAzLiBJZiByb3VnaGx5IDUwbXMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlc2Ugc3RlcHNcbiAgICAgICAgICAvLyAgICB3ZXJlIGxhc3QgaW52b2tlZCwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYVxuICAgICAgICAgIC8vICAgIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBwcm9ncmVzcyBhdCBmci5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIERhdGUubm93KCkgLSBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPj0gNTBcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICFmcltrQWJvcnRlZF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9IERhdGUubm93KClcbiAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdwcm9ncmVzcycsIGZyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LiBTZXQgY2h1bmtQcm9taXNlIHRvIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhXG4gICAgICAgICAgLy8gICAgY2h1bmsgZnJvbSBzdHJlYW0gd2l0aCByZWFkZXIuXG4gICAgICAgICAgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuICAgICAgICB9IGVsc2UgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhblxuICAgICAgICAgIC8vICAgIG9iamVjdCB3aG9zZSBkb25lIHByb3BlcnR5IGlzIHRydWUsIHF1ZXVlIGEgdGFza1xuICAgICAgICAgIC8vICAgIHRvIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIHRoZSByZXN1bHQgb2YgcGFja2FnZSBkYXRhIGdpdmVuXG4gICAgICAgICAgICAvLyAgICBieXRlcywgdHlwZSwgYmxvYlx1MjAxOXMgdHlwZSwgYW5kIGVuY29kaW5nTmFtZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhY2thZ2VEYXRhKGJ5dGVzLCB0eXBlLCBibG9iLnR5cGUsIGVuY29kaW5nTmFtZSlcblxuICAgICAgICAgICAgICAvLyA0LiBFbHNlOlxuXG4gICAgICAgICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgcmVzdWx0IHRvIHJlc3VsdC5cbiAgICAgICAgICAgICAgZnJba1Jlc3VsdF0gPSByZXN1bHRcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGxvYWQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWQnLCBmcilcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIDMuIElmIHBhY2thZ2UgZGF0YSB0aHJldyBhbiBleGNlcHRpb24gZXJyb3I6XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyA1LiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoZSBmci5cbiAgICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIHJlamVjdGVkIHdpdGggYW5cbiAgICAgICAgLy8gICAgZXJyb3IgZXJyb3IsIHF1ZXVlIGEgdGFzayB0byBydW4gdGhlIGZvbGxvd2luZ1xuICAgICAgICAvLyAgICBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgIC8vIDIuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAvLyAzLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcblxuICAgICAgICAgIC8vIDQuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IGZyLlxuICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfSkoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2ZpcmUtYS1wcm9ncmVzcy1ldmVudFxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gcmVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpcmVBUHJvZ3Jlc3NFdmVudCAoZSwgcmVhZGVyKSB7XG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGRvZXMgbm90IGJ1YmJsZS4gZS5idWJibGVzIG11c3QgYmUgZmFsc2VcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgaXMgTk9UIGNhbmNlbGFibGUuIGUuY2FuY2VsYWJsZSBtdXN0IGJlIGZhbHNlXG4gIGNvbnN0IGV2ZW50ID0gbmV3IFByb2dyZXNzRXZlbnQoZSwge1xuICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gIH0pXG5cbiAgcmVhZGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jYmxvYi1wYWNrYWdlLWRhdGFcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gbWltZVR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHBhY2thZ2VEYXRhIChieXRlcywgdHlwZSwgbWltZVR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBBIEJsb2IgaGFzIGFuIGFzc29jaWF0ZWQgcGFja2FnZSBkYXRhIGFsZ29yaXRobSwgZ2l2ZW5cbiAgLy8gICAgYnl0ZXMsIGEgdHlwZSwgYSBvcHRpb25hbCBtaW1lVHlwZSwgYW5kIGEgb3B0aW9uYWxcbiAgLy8gICAgZW5jb2RpbmdOYW1lLCB3aGljaCBzd2l0Y2hlcyBvbiB0eXBlIGFuZCBydW5zIHRoZVxuICAvLyAgICBhc3NvY2lhdGVkIHN0ZXBzOlxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ0RhdGFVUkwnOiB7XG4gICAgICAvLyAxLiBSZXR1cm4gYnl0ZXMgYXMgYSBEYXRhVVJMIFtSRkMyMzk3XSBzdWJqZWN0IHRvXG4gICAgICAvLyAgICB0aGUgY29uc2lkZXJhdGlvbnMgYmVsb3c6XG4gICAgICAvLyAgKiBVc2UgbWltZVR5cGUgYXMgcGFydCBvZiB0aGUgRGF0YSBVUkwgaWYgaXQgaXNcbiAgICAgIC8vICAgIGF2YWlsYWJsZSBpbiBrZWVwaW5nIHdpdGggdGhlIERhdGEgVVJMXG4gICAgICAvLyAgICBzcGVjaWZpY2F0aW9uIFtSRkMyMzk3XS5cbiAgICAgIC8vICAqIElmIG1pbWVUeXBlIGlzIG5vdCBhdmFpbGFibGUgcmV0dXJuIGEgRGF0YSBVUkxcbiAgICAgIC8vICAgIHdpdGhvdXQgYSBtZWRpYS10eXBlLiBbUkZDMjM5N10uXG5cbiAgICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTNcbiAgICAgIC8vIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAgICAgIC8vIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICAgICAgLy8gZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICAgICAgLy8gcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAgICAgIGxldCBkYXRhVVJMID0gJ2RhdGE6J1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKVxuXG4gICAgICBpZiAocGFyc2VkICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZGF0YVVSTCArPSBzZXJpYWxpemVBTWltZVR5cGUocGFyc2VkKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9ICc7YmFzZTY0LCdcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLndyaXRlKGNodW5rKSlcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIuZW5kKCkpXG5cbiAgICAgIHJldHVybiBkYXRhVVJMXG4gICAgfVxuICAgIGNhc2UgJ1RleHQnOiB7XG4gICAgICAvLyAxLiBMZXQgZW5jb2RpbmcgYmUgZmFpbHVyZVxuICAgICAgbGV0IGVuY29kaW5nID0gJ2ZhaWx1cmUnXG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmNvZGluZ05hbWUgaXMgcHJlc2VudCwgc2V0IGVuY29kaW5nIHRvIHRoZVxuICAgICAgLy8gICAgcmVzdWx0IG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSBlbmNvZGluZ05hbWUuXG4gICAgICBpZiAoZW5jb2RpbmdOYW1lKSB7XG4gICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoZW5jb2RpbmdOYW1lKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCBhbmQgbWltZVR5cGUgaXMgcHJlc2VudDpcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnICYmIG1pbWVUeXBlKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgcGFyc2UgYSBNSU1FIHR5cGVcbiAgICAgICAgLy8gICAgZ2l2ZW4gbWltZVR5cGUuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gICAgICAgIC8vIDIuIElmIHR5cGUgaXMgbm90IGZhaWx1cmUsIHNldCBlbmNvZGluZyB0byB0aGUgcmVzdWx0XG4gICAgICAgIC8vICAgIG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSB0eXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXS5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcodHlwZS5wYXJhbWV0ZXJzLmdldCgnY2hhcnNldCcpKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIHRoZW4gc2V0IGVuY29kaW5nIHRvIFVURi04LlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZW5jb2RpbmcgPSAnVVRGLTgnXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIERlY29kZSBieXRlcyB1c2luZyBmYWxsYmFjayBlbmNvZGluZyBlbmNvZGluZywgYW5kXG4gICAgICAvLyAgICByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgIHJldHVybiBkZWNvZGUoYnl0ZXMsIGVuY29kaW5nKVxuICAgIH1cbiAgICBjYXNlICdBcnJheUJ1ZmZlcic6IHtcbiAgICAgIC8vIFJldHVybiBhIG5ldyBBcnJheUJ1ZmZlciB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICBjb25zdCBzZXF1ZW5jZSA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGJ5dGVzKVxuXG4gICAgICByZXR1cm4gc2VxdWVuY2UuYnVmZmVyXG4gICAgfVxuICAgIGNhc2UgJ0JpbmFyeVN0cmluZyc6IHtcbiAgICAgIC8vIFJldHVybiBieXRlcyBhcyBhIGJpbmFyeSBzdHJpbmcsIGluIHdoaWNoIGV2ZXJ5IGJ5dGVcbiAgICAgIC8vICBpcyByZXByZXNlbnRlZCBieSBhIGNvZGUgdW5pdCBvZiBlcXVhbCB2YWx1ZSBbMC4uMjU1XS5cbiAgICAgIGxldCBiaW5hcnlTdHJpbmcgPSAnJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgICB9XG5cbiAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLmVuZCgpXG5cbiAgICAgIHJldHVybiBiaW5hcnlTdHJpbmdcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNkZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBpb1F1ZXVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlIChpb1F1ZXVlLCBlbmNvZGluZykge1xuICBjb25zdCBieXRlcyA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGlvUXVldWUpXG5cbiAgLy8gMS4gTGV0IEJPTUVuY29kaW5nIGJlIHRoZSByZXN1bHQgb2YgQk9NIHNuaWZmaW5nIGlvUXVldWUuXG4gIGNvbnN0IEJPTUVuY29kaW5nID0gQk9NU25pZmZpbmcoYnl0ZXMpXG5cbiAgbGV0IHNsaWNlID0gMFxuXG4gIC8vIDIuIElmIEJPTUVuY29kaW5nIGlzIG5vbi1udWxsOlxuICBpZiAoQk9NRW5jb2RpbmcgIT09IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgZW5jb2RpbmcgdG8gQk9NRW5jb2RpbmcuXG4gICAgZW5jb2RpbmcgPSBCT01FbmNvZGluZ1xuXG4gICAgLy8gMi4gUmVhZCB0aHJlZSBieXRlcyBmcm9tIGlvUXVldWUsIGlmIEJPTUVuY29kaW5nIGlzXG4gICAgLy8gICAgVVRGLTg7IG90aGVyd2lzZSByZWFkIHR3byBieXRlcy5cbiAgICAvLyAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBzbGljZSA9IEJPTUVuY29kaW5nID09PSAnVVRGLTgnID8gMyA6IDJcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIGVuY29kaW5nXHUyMDE5c1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cblxuICBjb25zdCBzbGljZWQgPSBieXRlcy5zbGljZShzbGljZSlcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZykuZGVjb2RlKHNsaWNlZClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNib20tc25pZmZcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW9RdWV1ZVxuICovXG5mdW5jdGlvbiBCT01TbmlmZmluZyAoaW9RdWV1ZSkge1xuICAvLyAxLiBMZXQgQk9NIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyAzIGJ5dGVzIGZyb20gaW9RdWV1ZSxcbiAgLy8gICAgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cbiAgY29uc3QgW2EsIGIsIGNdID0gaW9RdWV1ZVxuXG4gIC8vIDIuIEZvciBlYWNoIG9mIHRoZSByb3dzIGluIHRoZSB0YWJsZSBiZWxvdywgc3RhcnRpbmcgd2l0aFxuICAvLyAgICB0aGUgZmlyc3Qgb25lIGFuZCBnb2luZyBkb3duLCBpZiBCT00gc3RhcnRzIHdpdGggdGhlXG4gIC8vICAgIGJ5dGVzIGdpdmVuIGluIHRoZSBmaXJzdCBjb2x1bW4sIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBlbmNvZGluZyBnaXZlbiBpbiB0aGUgY2VsbCBpbiB0aGUgc2Vjb25kIGNvbHVtbiBvZiB0aGF0XG4gIC8vICAgIHJvdy4gT3RoZXJ3aXNlLCByZXR1cm4gbnVsbC5cbiAgaWYgKGEgPT09IDB4RUYgJiYgYiA9PT0gMHhCQiAmJiBjID09PSAweEJGKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfSBlbHNlIGlmIChhID09PSAweEZFICYmIGIgPT09IDB4RkYpIHtcbiAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkYgJiYgYiA9PT0gMHhGRSkge1xuICAgIHJldHVybiAnVVRGLTE2TEUnXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBzZXF1ZW5jZXNcbiAqL1xuZnVuY3Rpb24gY29tYmluZUJ5dGVTZXF1ZW5jZXMgKHNlcXVlbmNlcykge1xuICBjb25zdCBzaXplID0gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIHJldHVybiBhICsgYi5ieXRlTGVuZ3RoXG4gIH0sIDApXG5cbiAgbGV0IG9mZnNldCA9IDBcblxuICByZXR1cm4gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIGEuc2V0KGIsIG9mZnNldClcbiAgICBvZmZzZXQgKz0gYi5ieXRlTGVuZ3RoXG4gICAgcmV0dXJuIGFcbiAgfSwgbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkT3BlcmF0aW9uLFxuICBmaXJlQVByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkT3BlcmF0aW9uLFxuICBmaXJlQVByb2dyZXNzRXZlbnRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0V2ZW50cyxcbiAga0Fib3J0ZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIEZpbGVSZWFkZXIgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSAnZW1wdHknXG4gICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB0aGlzW2tFcnJvcl0gPSBudWxsXG4gICAgdGhpc1trRXZlbnRzXSA9IHtcbiAgICAgIGxvYWRlbmQ6IG51bGwsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGFib3J0OiBudWxsLFxuICAgICAgbG9hZDogbnVsbCxcbiAgICAgIHByb2dyZXNzOiBudWxsLFxuICAgICAgbG9hZHN0YXJ0OiBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNBcnJheUJ1ZmZlclxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQXJyYXlCdWZmZXIgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXInIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNBcnJheUJ1ZmZlcihibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBBcnJheUJ1ZmZlci5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdBcnJheUJ1ZmZlcicpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzQmluYXJ5U3RyaW5nXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNCaW5hcnlTdHJpbmcgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEJpbmFyeVN0cmluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdCaW5hcnlTdHJpbmcnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0RhdGFUZXh0XG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdcbiAgICovXG4gIHJlYWRBc1RleHQgKGJsb2IsIGVuY29kaW5nID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc1RleHQnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGluZyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhlbmNvZGluZylcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggVGV4dCBhbmQgZW5jb2RpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnVGV4dCcsIGVuY29kaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNEYXRhVVJMXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNEYXRhVVJMIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNEYXRhVVJMKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLCBtdXN0XG4gICAgLy8gaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIERhdGFVUkwuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnRGF0YVVSTCcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLWFib3J0XG4gICAqL1xuICBhYm9ydCAoKSB7XG4gICAgLy8gMS4gSWYgdGhpcydzIHN0YXRlIGlzIFwiZW1wdHlcIiBvciBpZiB0aGlzJ3Mgc3RhdGUgaXNcbiAgICAvLyAgICBcImRvbmVcIiBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsIGFuZCB0ZXJtaW5hdGVcbiAgICAvLyAgICB0aGlzIGFsZ29yaXRobS5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnZW1wdHknIHx8IHRoaXNba1N0YXRlXSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpcydzIHN0YXRlIGlzIFwibG9hZGluZ1wiIHNldCB0aGlzJ3Mgc3RhdGUgdG9cbiAgICAvLyAgICBcImRvbmVcIiBhbmQgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbC5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9ICdkb25lJ1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgYW55IHRhc2tzIGZyb20gdGhpcyBvbiB0aGUgZmlsZSByZWFkaW5nXG4gICAgLy8gICAgdGFzayBzb3VyY2UgaW4gYW4gYWZmaWxpYXRlZCB0YXNrIHF1ZXVlLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHRob3NlIHRhc2tzIGZyb20gdGhhdCB0YXNrIHF1ZXVlLlxuICAgIHRoaXNba0Fib3J0ZWRdID0gdHJ1ZVxuXG4gICAgLy8gNC4gVGVybWluYXRlIHRoZSBhbGdvcml0aG0gZm9yIHRoZSByZWFkIG1ldGhvZCBiZWluZyBwcm9jZXNzZWQuXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gNS4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGlzLlxuICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnYWJvcnQnLCB0aGlzKVxuXG4gICAgLy8gNi4gSWYgdGhpcydzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhpcy5cbiAgICBpZiAodGhpc1trU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlYWR5c3RhdGVcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgc3dpdGNoICh0aGlzW2tTdGF0ZV0pIHtcbiAgICAgIGNhc2UgJ2VtcHR5JzogcmV0dXJuIHRoaXMuRU1QVFlcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOiByZXR1cm4gdGhpcy5MT0FESU5HXG4gICAgICBjYXNlICdkb25lJzogcmV0dXJuIHRoaXMuRE9ORVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZXN1bHRcbiAgICovXG4gIGdldCByZXN1bHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgcmVzdWx0IGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIHJlc3VsdC5cbiAgICByZXR1cm4gdGhpc1trUmVzdWx0XVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVycm9yXG4gICAqL1xuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgZXJyb3IgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgZXJyb3IuXG4gICAgcmV0dXJuIHRoaXNba0Vycm9yXVxuICB9XG5cbiAgZ2V0IG9ubG9hZGVuZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRlbmRcbiAgfVxuXG4gIHNldCBvbmxvYWRlbmQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRlbmQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIHRoaXNba0V2ZW50c10ubG9hZGVuZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzW2tFdmVudHNdLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWRzdGFydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRzdGFydFxuICB9XG5cbiAgc2V0IG9ubG9hZHN0YXJ0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ucHJvZ3Jlc3MgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5wcm9ncmVzc1xuICB9XG5cbiAgc2V0IG9ucHJvZ3Jlc3MgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLnByb2dyZXNzKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpc1trRXZlbnRzXS5wcm9ncmVzcylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2FkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZFxuICB9XG5cbiAgc2V0IG9ubG9hZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpc1trRXZlbnRzXS5sb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmFib3J0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uYWJvcnRcbiAgfVxuXG4gIHNldCBvbmFib3J0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5hYm9ydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXNba0V2ZW50c10uYWJvcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lbXB0eVxuRmlsZVJlYWRlci5FTVBUWSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkVNUFRZID0gMFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWxvYWRpbmdcbkZpbGVSZWFkZXIuTE9BRElORyA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkxPQURJTkcgPSAxXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZG9uZVxuRmlsZVJlYWRlci5ET05FID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRE9ORSA9IDJcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlci5wcm90b3R5cGUsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRBc0FycmF5QnVmZmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNCaW5hcnlTdHJpbmc6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0RhdGFVUkw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZXN1bHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRzdGFydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25wcm9ncmVzczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlUmVhZGVyJyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlUmVhZGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlck5hbWUodmFsdWUpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBmaWVsZFZhbHVlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHVybEVxdWFscywgZmllbGRWYWx1ZXM6IGdldEZpZWxkVmFsdWVzIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Rpc3R1cmJlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFJlc3BvbnNlLCBjbG9uZVJlc3BvbnNlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXNwb25zZScpXG5jb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3JlcXVlc3QnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvc3ltYm9scycpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IHVybElzSHR0cEh0dHBzU2NoZW1lLCBjcmVhdGVEZWZlcnJlZFByb21pc2UsIHJlYWRBbGxCeXRlcyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1jYWNoZS1iYXRjaC1vcGVyYXRpb25cbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhY2hlQmF0Y2hPcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7J2RlbGV0ZScgfCAncHV0J30gdHlwZVxuICogQHByb3BlcnR5IHthbnl9IHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXNwb25zZVxuICogQHByb3BlcnR5IHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAqIEB0eXBlZGVmIHtbYW55LCBhbnldW119IHJlcXVlc3RSZXNwb25zZUxpc3RcbiAqL1xuXG5jbGFzcyBDYWNoZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gICAqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSBrQ29uc3RydWN0KSB7XG4gICAgICB3ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yKClcbiAgICB9XG5cbiAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBhcmd1bWVudHNbMV1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUubWF0Y2gnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLm1hdGNoQWxsKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICBpZiAocC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJldHVybiBwWzBdXG4gIH1cblxuICBhc3luYyBtYXRjaEFsbCAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgLy8gV2UgZG9uJ3QgaW1wbGVtZW50IENPUnMgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgdGhlIHJlc3BvbnNlcywgeWF5IVxuXG4gICAgLy8gNS41LjFcbiAgICBjb25zdCByZXNwb25zZUxpc3QgPSBbXVxuXG4gICAgLy8gNS41LjJcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNS41LjIuMVxuICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UocmVzcG9uc2UuYm9keT8uc291cmNlID8/IG51bGwpXG4gICAgICBjb25zdCBib2R5ID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5XG4gICAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uYm9keSA9IGJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcblxuICAgICAgcmVzcG9uc2VMaXN0LnB1c2gocmVzcG9uc2VPYmplY3QpXG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXNwb25zZUxpc3QpXG4gIH1cblxuICBhc3luYyBhZGQgKHJlcXVlc3QpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuYWRkJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gW3JlcXVlc3RdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlc3BvbnNlQXJyYXlQcm9taXNlID0gdGhpcy5hZGRBbGwocmVxdWVzdHMpXG5cbiAgICAvLyAzLlxuICAgIHJldHVybiBhd2FpdCByZXNwb25zZUFycmF5UHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgYWRkQWxsIChyZXF1ZXN0cykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnIH0pXG5cbiAgICByZXF1ZXN0cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXShyZXF1ZXN0cylcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVzcG9uc2VQcm9taXNlcyA9IFtdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgIC8vIDMuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDMuMVxuICAgICAgY29uc3QgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAvLyAzLjJcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpIHx8IHIubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VULidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIC8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hpbmc+W119ICovXG4gICAgY29uc3QgZmV0Y2hDb250cm9sbGVycyA9IFtdXG5cbiAgICAvLyA1LlxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgLy8gNS4xXG4gICAgICBjb25zdCByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuXG4gICAgICAvLyA1LjJcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lLidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gNS40XG4gICAgICByLmluaXRpYXRvciA9ICdmZXRjaCdcbiAgICAgIHIuZGVzdGluYXRpb24gPSAnc3VicmVzb3VyY2UnXG5cbiAgICAgIC8vIDUuNVxuICAgICAgcmVxdWVzdExpc3QucHVzaChyKVxuXG4gICAgICAvLyA1LjZcbiAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAgIC8vIDUuN1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5wdXNoKGZldGNoaW5nKHtcbiAgICAgICAgcmVxdWVzdDogcixcbiAgICAgICAgZGlzcGF0Y2hlcjogZ2V0R2xvYmFsRGlzcGF0Y2hlcigpLFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwNiB8fCByZXNwb25zZS5zdGF0dXMgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID4gMjk5KSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1JlY2VpdmVkIGFuIGludmFsaWQgc3RhdHVzIGNvZGUgb3IgdGhlIHJlcXVlc3QgZmFpbGVkLidcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKSkgeyAvLyAyLlxuICAgICAgICAgICAgLy8gMi4xXG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgICAgICAgICAvLyAyLjJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAgICAgICAvLyAyLjIuMVxuICAgICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiBmZXRjaENvbnRyb2xsZXJzKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3QobmV3IERPTUV4Y2VwdGlvbignYWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAyLlxuICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgICB9XG4gICAgICB9KSlcblxuICAgICAgLy8gNS44XG4gICAgICByZXNwb25zZVByb21pc2VzLnB1c2gocmVzcG9uc2VQcm9taXNlLnByb21pc2UpXG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICBjb25zdCBwID0gUHJvbWlzZS5hbGwocmVzcG9uc2VQcm9taXNlcylcblxuICAgIC8vIDcuXG4gICAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgcFxuXG4gICAgLy8gNy4xXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyA3LjJcbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyA3LjNcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNy4zLjFcbiAgICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgICAgdHlwZTogJ3B1dCcsIC8vIDcuMy4yXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RMaXN0W2luZGV4XSwgLy8gNy4zLjNcbiAgICAgICAgcmVzcG9uc2UgLy8gNy4zLjRcbiAgICAgIH1cblxuICAgICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbikgLy8gNy4zLjVcblxuICAgICAgaW5kZXgrKyAvLyA3LjMuNlxuICAgIH1cblxuICAgIC8vIDcuNVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA3LjYuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyA3LjYuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyA3LjYuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDcuNi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNy42LjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gNy43XG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBwdXQgKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0NhY2hlLnB1dCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIHJlc3BvbnNlID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UocmVzcG9uc2UpXG5cbiAgICAvLyAxLlxuICAgIGxldCBpbm5lclJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaW5uZXJSZXF1ZXN0ID0gcmVxdWVzdFtrU3RhdGVdXG4gICAgfSBlbHNlIHsgLy8gMy5cbiAgICAgIGlubmVyUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoaW5uZXJSZXF1ZXN0LnVybCkgfHwgaW5uZXJSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGFuIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICBjb25zdCBpbm5lclJlc3BvbnNlID0gcmVzcG9uc2Vba1N0YXRlXVxuXG4gICAgLy8gNi5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5zdGF0dXMgPT09IDIwNikge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnR290IDIwNiBzdGF0dXMnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDcuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKSkge1xuICAgICAgLy8gNy4xLlxuICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgICAvLyA3LjIuXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgLy8gNy4yLjFcbiAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgICAgICBtZXNzYWdlOiAnR290ICogdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICYmIChpc0Rpc3R1cmJlZChpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSB8fCBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtLmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3BvbnNlIGJvZHkgaXMgbG9ja2VkIG9yIGRpc3R1cmJlZCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gOS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UoaW5uZXJSZXNwb25zZSlcblxuICAgIC8vIDEwLlxuICAgIGNvbnN0IGJvZHlSZWFkUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxMS5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDExLjFcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW1cblxuICAgICAgLy8gMTEuMlxuICAgICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgICAgIC8vIDExLjNcbiAgICAgIHJlYWRBbGxCeXRlcyhyZWFkZXIpLnRoZW4oYm9keVJlYWRQcm9taXNlLnJlc29sdmUsIGJvZHlSZWFkUHJvbWlzZS5yZWplY3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICAvLyAxMi5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDEzLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAncHV0JywgLy8gMTQuXG4gICAgICByZXF1ZXN0OiBpbm5lclJlcXVlc3QsIC8vIDE1LlxuICAgICAgcmVzcG9uc2U6IGNsb25lZFJlc3BvbnNlIC8vIDE2LlxuICAgIH1cblxuICAgIC8vIDE3LlxuICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pXG5cbiAgICAvLyAxOS5cbiAgICBjb25zdCBieXRlcyA9IGF3YWl0IGJvZHlSZWFkUHJvbWlzZS5wcm9taXNlXG5cbiAgICBpZiAoY2xvbmVkUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICBjbG9uZWRSZXNwb25zZS5ib2R5LnNvdXJjZSA9IGJ5dGVzXG4gICAgfVxuXG4gICAgLy8gMTkuMVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxOS4yLjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gMTkuMi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDE5LjIuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDE5LjIuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIH0gZWxzZSB7IC8vIDE5LjIuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmRlbGV0ZScgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlcXVlc3R9XG4gICAgICovXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpXG5cbiAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICByZXF1ZXN0OiByLFxuICAgICAgb3B0aW9uc1xuICAgIH1cblxuICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pXG5cbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcbiAgICBsZXQgcmVxdWVzdFJlc3BvbnNlc1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKCEhcmVxdWVzdFJlc3BvbnNlcz8ubGVuZ3RoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZS1rZXlzXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtyZWFkb25seSBSZXF1ZXN0W119XG4gICAqL1xuICBhc3luYyBrZXlzIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMi4xXG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7IC8vIDIuMlxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlcXVlc3RzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgLy8gNS4yLjEuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAvLyA1LjMuMi4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDUuNC4xXG4gICAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAgIC8vIDUuNC4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KCdodHRwczovL2EnKVxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgICAgIHJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgICAgICByZXF1ZXN0T2JqZWN0W2tSZWFsbV0gPSByZXF1ZXN0LmNsaWVudFxuXG4gICAgICAgIC8vIDUuNC4yLjFcbiAgICAgICAgcmVxdWVzdExpc3QucHVzaChyZXF1ZXN0T2JqZWN0KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjQuM1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKE9iamVjdC5mcmVlemUocmVxdWVzdExpc3QpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jYmF0Y2gtY2FjaGUtb3BlcmF0aW9ucy1hbGdvcml0aG1cbiAgICogQHBhcmFtIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119IG9wZXJhdGlvbnNcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjYmF0Y2hDYWNoZU9wZXJhdGlvbnMgKG9wZXJhdGlvbnMpIHtcbiAgICAvLyAxLlxuICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IGJhY2t1cENhY2hlID0gWy4uLmNhY2hlXVxuXG4gICAgLy8gMy5cbiAgICBjb25zdCBhZGRlZEl0ZW1zID0gW11cblxuICAgIC8vIDQuMVxuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDQuMlxuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgICAvLyA0LjIuMVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgIT09ICdkZWxldGUnICYmIG9wZXJhdGlvbi50eXBlICE9PSAncHV0Jykge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnb3BlcmF0aW9uIHR5cGUgZG9lcyBub3QgbWF0Y2ggXCJkZWxldGVcIiBvciBcInB1dFwiJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuMlxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnICYmIG9wZXJhdGlvbi5yZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdkZWxldGUgb3BlcmF0aW9uIHNob3VsZCBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHJlc3BvbnNlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuM1xuICAgICAgICBpZiAodGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMsIGFkZGVkSXRlbXMpLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJz8/PycsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuNFxuICAgICAgICBsZXQgcmVxdWVzdFJlc3BvbnNlc1xuXG4gICAgICAgIC8vIDQuMi41XG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAvLyA0LjIuNS4xXG4gICAgICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zKVxuXG4gICAgICAgICAgLy8gVE9ETzogdGhlIHNwZWMgaXMgd3JvbmcsIHRoaXMgaXMgbmVlZGVkIHRvIHBhc3MgV1BUc1xuICAgICAgICAgIGlmIChyZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjUuMlxuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi41LjIuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdwdXQnKSB7IC8vIDQuMi42XG4gICAgICAgICAgLy8gNC4yLjYuMVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ucmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAncHV0IG9wZXJhdGlvbiBzaG91bGQgaGF2ZSBhbiBhc3NvY2lhdGVkIHJlc3BvbnNlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi4yXG4gICAgICAgICAgY29uc3QgciA9IG9wZXJhdGlvbi5yZXF1ZXN0XG5cbiAgICAgICAgICAvLyA0LjIuNi4zXG4gICAgICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ2V4cGVjdGVkIGh0dHAgb3IgaHR0cHMgc2NoZW1lJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi40XG4gICAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnbm90IGdldCBtZXRob2QnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjVcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLm9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnb3B0aW9ucyBtdXN0IG5vdCBiZSBkZWZpbmVkJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi42XG4gICAgICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QpXG5cbiAgICAgICAgICAvLyA0LjIuNi43XG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjYuNy4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjhcbiAgICAgICAgICBjYWNoZS5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcblxuICAgICAgICAgIC8vIDQuMi42LjEwXG4gICAgICAgICAgYWRkZWRJdGVtcy5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi43XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICB9XG5cbiAgICAgIC8vIDQuM1xuICAgICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgICB9IGNhdGNoIChlKSB7IC8vIDUuXG4gICAgICAvLyA1LjFcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdC5sZW5ndGggPSAwXG5cbiAgICAgIC8vIDUuMlxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0ID0gYmFja3VwQ2FjaGVcblxuICAgICAgLy8gNS4zXG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3F1ZXJ5LWNhY2hlXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSB0YXJnZXRTdG9yYWdlXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI3F1ZXJ5Q2FjaGUgKHJlcXVlc3RRdWVyeSwgb3B0aW9ucywgdGFyZ2V0U3RvcmFnZSkge1xuICAgIC8qKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gKi9cbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIGNvbnN0IHN0b3JhZ2UgPSB0YXJnZXRTdG9yYWdlID8/IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2Ygc3RvcmFnZSkge1xuICAgICAgY29uc3QgW2NhY2hlZFJlcXVlc3QsIGNhY2hlZFJlc3BvbnNlXSA9IHJlcXVlc3RSZXNwb25zZVxuICAgICAgaWYgKHRoaXMuI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbShyZXF1ZXN0UXVlcnksIGNhY2hlZFJlcXVlc3QsIGNhY2hlZFJlc3BvbnNlLCBvcHRpb25zKSkge1xuICAgICAgICByZXN1bHRMaXN0LnB1c2gocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRMaXN0XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcmVxdWVzdC1tYXRjaGVzLWNhY2hlZC1pdGVtLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7YW55IHwgbnVsbH0gcmVzcG9uc2VcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnMgfCB1bmRlZmluZWR9IG9wdGlvbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICAjcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtIChyZXF1ZXN0UXVlcnksIHJlcXVlc3QsIHJlc3BvbnNlID0gbnVsbCwgb3B0aW9ucykge1xuICAgIC8vIGlmIChvcHRpb25zPy5pZ25vcmVNZXRob2QgPT09IGZhbHNlICYmIHJlcXVlc3QubWV0aG9kID09PSAnR0VUJykge1xuICAgIC8vICAgcmV0dXJuIGZhbHNlXG4gICAgLy8gfVxuXG4gICAgY29uc3QgcXVlcnlVUkwgPSBuZXcgVVJMKHJlcXVlc3RRdWVyeS51cmwpXG5cbiAgICBjb25zdCBjYWNoZWRVUkwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKVxuXG4gICAgaWYgKG9wdGlvbnM/Lmlnbm9yZVNlYXJjaCkge1xuICAgICAgY2FjaGVkVVJMLnNlYXJjaCA9ICcnXG5cbiAgICAgIHF1ZXJ5VVJMLnNlYXJjaCA9ICcnXG4gICAgfVxuXG4gICAgaWYgKCF1cmxFcXVhbHMocXVlcnlVUkwsIGNhY2hlZFVSTCwgdHJ1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHJlc3BvbnNlID09IG51bGwgfHxcbiAgICAgIG9wdGlvbnM/Lmlnbm9yZVZhcnkgfHxcbiAgICAgICFyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RWYWx1ZSA9IHJlcXVlc3QuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG4gICAgICBjb25zdCBxdWVyeVZhbHVlID0gcmVxdWVzdFF1ZXJ5LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuXG4gICAgICAvLyBJZiBvbmUgaGFzIHRoZSBoZWFkZXIgYW5kIHRoZSBvdGhlciBkb2Vzbid0LCBvciBvbmUgaGFzXG4gICAgICAvLyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBvdGhlciwgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAocmVxdWVzdFZhbHVlICE9PSBxdWVyeVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtYXRjaEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGRBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHB1dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5jb25zdCBjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyA9IFtcbiAge1xuICAgIGtleTogJ2lnbm9yZVNlYXJjaCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZU1ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZVZhcnknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycylcblxud2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMsXG4gIHtcbiAgICBrZXk6ICdjYWNoZU5hbWUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihSZXNwb25zZSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mb1xuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tYXR0cmlidXRlLXZhbHVlLXNpemVcbmNvbnN0IG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSA9IDEwMjRcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLW5hbWUtdmFsdWUtcGFpci1zaXplXG5jb25zdCBtYXhOYW1lVmFsdWVQYWlyU2l6ZSA9IDQwOTZcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSxcbiAgbWF4TmFtZVZhbHVlUGFpclNpemVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0NUTEV4Y2x1ZGluZ0h0YWIgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhciBvZiB2YWx1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlID49IDB4MDAgfHwgY29kZSA8PSAweDA4KSB8fFxuICAgICAgKGNvZGUgPj0gMHgwQSB8fCBjb2RlIDw9IDB4MUYpIHx8XG4gICAgICBjb2RlID09PSAweDdGXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gQ0hBUiAgICAgICAgICAgPSA8YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpPlxuIHRva2VuICAgICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU5hbWUgKG5hbWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIG5hbWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA8PSAweDIwIHx8IGNvZGUgPiAweDdGKSB8fFxuICAgICAgY2hhciA9PT0gJygnIHx8XG4gICAgICBjaGFyID09PSAnKScgfHxcbiAgICAgIGNoYXIgPT09ICc+JyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnQCcgfHxcbiAgICAgIGNoYXIgPT09ICcsJyB8fFxuICAgICAgY2hhciA9PT0gJzsnIHx8XG4gICAgICBjaGFyID09PSAnOicgfHxcbiAgICAgIGNoYXIgPT09ICdcXFxcJyB8fFxuICAgICAgY2hhciA9PT0gJ1wiJyB8fFxuICAgICAgY2hhciA9PT0gJy8nIHx8XG4gICAgICBjaGFyID09PSAnWycgfHxcbiAgICAgIGNoYXIgPT09ICddJyB8fFxuICAgICAgY2hhciA9PT0gJz8nIHx8XG4gICAgICBjaGFyID09PSAnPScgfHxcbiAgICAgIGNoYXIgPT09ICd7JyB8fFxuICAgICAgY2hhciA9PT0gJ30nXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG5hbWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBjb29raWUtdmFsdWUgICAgICA9ICpjb29raWUtb2N0ZXQgLyAoIERRVU9URSAqY29va2llLW9jdGV0IERRVU9URSApXG4gY29va2llLW9jdGV0ICAgICAgPSAleDIxIC8gJXgyMy0yQiAvICV4MkQtM0EgLyAleDNDLTVCIC8gJXg1RC03RVxuICAgICAgICAgICAgICAgICAgICAgICA7IFVTLUFTQ0lJIGNoYXJhY3RlcnMgZXhjbHVkaW5nIENUTHMsXG4gICAgICAgICAgICAgICAgICAgICAgIDsgd2hpdGVzcGFjZSBEUVVPVEUsIGNvbW1hLCBzZW1pY29sb24sXG4gICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIGJhY2tzbGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llVmFsdWUgKHZhbHVlKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiB2YWx1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSlcbiAgICAgIGNvZGUgPT09IDB4MjIgfHxcbiAgICAgIGNvZGUgPT09IDB4MkMgfHxcbiAgICAgIGNvZGUgPT09IDB4M0IgfHxcbiAgICAgIGNvZGUgPT09IDB4NUMgfHxcbiAgICAgIGNvZGUgPiAweDdFIC8vIG5vbi1hc2NpaVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhlYWRlciB2YWx1ZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcGF0aC12YWx1ZSAgICAgICAgPSA8YW55IENIQVIgZXhjZXB0IENUTHMgb3IgXCI7XCI+XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVBhdGggKHBhdGgpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHBhdGgpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoY29kZSA8IDB4MjEgfHwgY2hhciA9PT0gJzsnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHBhdGgnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGVzZSB2YWx1ZXMgYXJlbid0IGFsbG93ZWQgdG8gYmUgaG9uZXN0LFxuICogYnV0IERlbm8gdGVzdHMgdGhlc2UuIC0gS2hhZnJhXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9tYWluXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llRG9tYWluIChkb21haW4pIHtcbiAgaWYgKFxuICAgIGRvbWFpbi5zdGFydHNXaXRoKCctJykgfHxcbiAgICBkb21haW4uZW5kc1dpdGgoJy4nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLScpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi03LjEuMS4xXG4gKiBAcGFyYW0ge251bWJlcnxEYXRlfSBkYXRlXG4gIElNRi1maXhkYXRlICA9IGRheS1uYW1lIFwiLFwiIFNQIGRhdGUxIFNQIHRpbWUtb2YtZGF5IFNQIEdNVFxuICA7IGZpeGVkIGxlbmd0aC96b25lL2NhcGl0YWxpemF0aW9uIHN1YnNldCBvZiB0aGUgZm9ybWF0XG4gIDsgc2VlIFNlY3Rpb24gMy4zIG9mIFtSRkM1MzIyXVxuXG4gIGRheS1uYW1lICAgICA9ICV4NEQuNkYuNkUgOyBcIk1vblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTQuNzUuNjUgOyBcIlR1ZVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTcuNjUuNjQgOyBcIldlZFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTQuNjguNzUgOyBcIlRodVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNzIuNjkgOyBcIkZyaVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjEuNzQgOyBcIlNhdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNzUuNkUgOyBcIlN1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICBkYXRlMSAgICAgICAgPSBkYXkgU1AgbW9udGggU1AgeWVhclxuICAgICAgICAgICAgICAgICAgOyBlLmcuLCAwMiBKdW4gMTk4MlxuXG4gIGRheSAgICAgICAgICA9IDJESUdJVFxuICBtb250aCAgICAgICAgPSAleDRBLjYxLjZFIDsgXCJKYW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjY1LjYyIDsgXCJGZWJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRELjYxLjcyIDsgXCJNYXJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQxLjcwLjcyIDsgXCJBcHJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRELjYxLjc5IDsgXCJNYXlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRBLjc1LjZFIDsgXCJKdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRBLjc1LjZDIDsgXCJKdWxcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQxLjc1LjY3IDsgXCJBdWdcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjY1LjcwIDsgXCJTZXBcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRGLjYzLjc0IDsgXCJPY3RcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRFLjZGLjc2IDsgXCJOb3ZcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ0LjY1LjYzIDsgXCJEZWNcIiwgY2FzZS1zZW5zaXRpdmVcbiAgeWVhciAgICAgICAgID0gNERJR0lUXG5cbiAgR01UICAgICAgICAgID0gJXg0Ny40RC41NCA7IFwiR01UXCIsIGNhc2Utc2Vuc2l0aXZlXG5cbiAgdGltZS1vZi1kYXkgID0gaG91ciBcIjpcIiBtaW51dGUgXCI6XCIgc2Vjb25kXG4gICAgICAgICAgICAgIDsgMDA6MDA6MDAgLSAyMzo1OTo2MCAobGVhcCBzZWNvbmQpXG5cbiAgaG91ciAgICAgICAgID0gMkRJR0lUXG4gIG1pbnV0ZSAgICAgICA9IDJESUdJVFxuICBzZWNvbmQgICAgICAgPSAyRElHSVRcbiAqL1xuZnVuY3Rpb24gdG9JTUZEYXRlIChkYXRlKSB7XG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicpIHtcbiAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSlcbiAgfVxuXG4gIGNvbnN0IGRheXMgPSBbXG4gICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsXG4gICAgJ1RodScsICdGcmknLCAnU2F0J1xuICBdXG5cbiAgY29uc3QgbW9udGhzID0gW1xuICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXG4gICAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuICBdXG5cbiAgY29uc3QgZGF5TmFtZSA9IGRheXNbZGF0ZS5nZXRVVENEYXkoKV1cbiAgY29uc3QgZGF5ID0gZGF0ZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1vbnRoID0gbW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV1cbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICBjb25zdCBob3VyID0gZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtaW51dGUgPSBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3Qgc2Vjb25kID0gZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG5cbiAgcmV0dXJuIGAke2RheU5hbWV9LCAke2RheX0gJHttb250aH0gJHt5ZWFyfSAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBvdXQucHVzaChgJHtrZXkudHJpbSgpfT0ke3ZhbHVlLmpvaW4oJz0nKX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICAvLyAxLiBMZXQgZW5mb3JjZW1lbnQgYmUgXCJEZWZhdWx0XCIuXG4gICAgbGV0IGVuZm9yY2VtZW50ID0gJ0RlZmF1bHQnXG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAvLyAyLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiTm9uZVwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdub25lJykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ05vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIlN0cmljdFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJTdHJpY3RcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ3N0cmljdCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdTdHJpY3QnXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIkxheFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJMYXhcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ2xheCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdMYXgnXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgIC8vICAgIGVuZm9yY2VtZW50LlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSBlbmZvcmNlbWVudFxuICB9IGVsc2Uge1xuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQgPz89IFtdXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkLnB1c2goYCR7YXR0cmlidXRlTmFtZX09JHthdHRyaWJ1dGVWYWx1ZX1gKVxuICB9XG5cbiAgLy8gOC4gUmV0dXJuIHRvIFN0ZXAgMSBvZiB0aGlzIGFsZ29yaXRobS5cbiAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlU2V0Q29va2llLFxuICBwYXJzZVVucGFyc2VkQXR0cmlidXRlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBhcnNlU2V0Q29va2llIH0gPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gaGVhZGVycy5nZXRTZXRDb29raWUoKVxuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIGNvb2tpZXMubWFwKChwYWlyKSA9PiBwYXJzZVNldENvb2tpZShwYWlyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7Q29va2llfSBjb29raWVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzZXRDb29raWUgKGhlYWRlcnMsIGNvb2tpZSkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnc2V0Q29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvb2tpZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZShjb29raWUpXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGNvb2tpZSlcblxuICBpZiAoc3RyKSB7XG4gICAgaGVhZGVycy5hcHBlbmQoJ1NldC1Db29raWUnLCBzdHJpbmdpZnkoY29va2llKSlcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQ29va2llID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAnbmFtZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ3ZhbHVlJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddKHZhbHVlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpXG4gICAgfSksXG4gICAga2V5OiAnZXhwaXJlcycsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10pLFxuICAgIGtleTogJ21heEFnZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnc2VjdXJlJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ2h0dHBPbmx5JyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGtleTogJ3NhbWVTaXRlJyxcbiAgICBhbGxvd2VkVmFsdWVzOiBbJ1N0cmljdCcsICdMYXgnLCAnTm9uZSddXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3VucGFyc2VkJyxcbiAgICBkZWZhdWx0VmFsdWU6IFtdXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUaGlzIGlzIGEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgdW5pcXVlIHVzZWRcbi8vIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVuZHBvaW50IGFjY2VwdHMgd2Vic29ja2V0XG4vLyBjb25uZWN0aW9ucy5cbi8vIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tMS4zXG5jb25zdCB1aWQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJ1xuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG5jb25zdCBzdGF0ZXMgPSB7XG4gIENPTk5FQ1RJTkc6IDAsXG4gIE9QRU46IDEsXG4gIENMT1NJTkc6IDIsXG4gIENMT1NFRDogM1xufVxuXG5jb25zdCBvcGNvZGVzID0ge1xuICBDT05USU5VQVRJT046IDB4MCxcbiAgVEVYVDogMHgxLFxuICBCSU5BUlk6IDB4MixcbiAgQ0xPU0U6IDB4OCxcbiAgUElORzogMHg5LFxuICBQT05HOiAweEFcbn1cblxuY29uc3QgbWF4VW5zaWduZWQxNkJpdCA9IDIgKiogMTYgLSAxIC8vIDY1NTM1XG5cbmNvbnN0IHBhcnNlclN0YXRlcyA9IHtcbiAgSU5GTzogMCxcbiAgUEFZTE9BRExFTkdUSF8xNjogMixcbiAgUEFZTE9BRExFTkdUSF82NDogMyxcbiAgUkVBRF9EQVRBOiA0XG59XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1aWQsXG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHN0YXRlcyxcbiAgb3Bjb2RlcyxcbiAgbWF4VW5zaWduZWQxNkJpdCxcbiAgcGFyc2VyU3RhdGVzLFxuICBlbXB0eUJ1ZmZlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IE1lc3NhZ2VQb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jb21tcy5odG1sI21lc3NhZ2VldmVudFxuICovXG5jbGFzcyBNZXNzYWdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnTWVzc2FnZUV2ZW50LmluaXRNZXNzYWdlRXZlbnQnIH0pXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jdGhlLWNsb3NlZXZlbnQtaW50ZXJmYWNlXG4gKi9cbmNsYXNzIENsb3NlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Nsb3NlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0KGV2ZW50SW5pdERpY3QpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IHdhc0NsZWFuICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC53YXNDbGVhblxuICB9XG5cbiAgZ2V0IGNvZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvZGVcbiAgfVxuXG4gIGdldCByZWFzb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnJlYXNvblxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtZXJyb3JldmVudC1pbnRlcmZhY2VcbmNsYXNzIEVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdFcnJvckV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQoZXZlbnRJbml0RGljdCA/PyB7fSlcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBtZXNzYWdlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5tZXNzYWdlXG4gIH1cblxuICBnZXQgZmlsZW5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmZpbGVuYW1lXG4gIH1cblxuICBnZXQgbGluZW5vICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5saW5lbm9cbiAgfVxuXG4gIGdldCBjb2xubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuY29sbm9cbiAgfVxuXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZXJyb3JcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzYWdlRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdNZXNzYWdlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBkYXRhOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcmlnaW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RFdmVudElkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzb3VyY2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHBvcnRzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbml0TWVzc2FnZUV2ZW50OiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDbG9zZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2xvc2VFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIHJlYXNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgd2FzQ2xlYW46IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVycm9yRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdFcnJvckV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZmlsZW5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxpbmVubzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29sbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoTWVzc2FnZVBvcnQpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxNZXNzYWdlUG9ydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnRcbilcblxuY29uc3QgZXZlbnRJbml0ID0gW1xuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdkYXRhJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGtleTogJ29yaWdpbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGFzdEV2ZW50SWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ3NvdXJjZScsXG4gICAgLy8gTm9kZSBkb2Vzbid0IGltcGxlbWVudCBXaW5kb3dQcm94eSBvciBTZXJ2aWNlV29ya2VyLCBzbyB0aGUgb25seVxuICAgIC8vIHZhbGlkIHZhbHVlIGZvciBzb3VyY2UgaXMgYSBNZXNzYWdlUG9ydC5cbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdwb3J0cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrQ29udHJvbGxlciwga1Jlc3BvbnNlLCBrQmluYXJ5VHlwZSwga1dlYlNvY2tldFVSTCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgc3RhdGVzLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IE1lc3NhZ2VFdmVudCwgRXJyb3JFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuXG4vKiBnbG9iYWxzIEJsb2IgKi9cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzRXN0YWJsaXNoZWQgKHdzKSB7XG4gIC8vIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpcyB2YWxpZGF0ZWQgYXMgcHJvdmlkZWQgZm9yIGFib3ZlLCBpdCBpc1xuICAvLyBzYWlkIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBFc3RhYmxpc2hlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIGluIHRoZSBPUEVOIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuT1BFTlxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNDbG9zaW5nICh3cykge1xuICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NlZCAod3MpIHtcbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NFRFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7RXZlbnRJbml0IHwgdW5kZWZpbmVkfSBldmVudEluaXREaWN0XG4gKi9cbmZ1bmN0aW9uIGZpcmVFdmVudCAoZSwgdGFyZ2V0LCBldmVudENvbnN0cnVjdG9yID0gRXZlbnQsIGV2ZW50SW5pdERpY3QpIHtcbiAgLy8gMS4gSWYgZXZlbnRDb25zdHJ1Y3RvciBpcyBub3QgZ2l2ZW4sIHRoZW4gbGV0IGV2ZW50Q29uc3RydWN0b3IgYmUgRXZlbnQuXG5cbiAgLy8gMi4gTGV0IGV2ZW50IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZXZlbnQgZ2l2ZW4gZXZlbnRDb25zdHJ1Y3RvcixcbiAgLy8gICAgaW4gdGhlIHJlbGV2YW50IHJlYWxtIG9mIHRhcmdldC5cbiAgLy8gMy4gSW5pdGlhbGl6ZSBldmVudFx1MjAxOXMgdHlwZSBhdHRyaWJ1dGUgdG8gZS5cbiAgY29uc3QgZXZlbnQgPSBuZXcgZXZlbnRDb25zdHJ1Y3RvcihlLCBldmVudEluaXREaWN0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblxuICAvLyA0LiBJbml0aWFsaXplIGFueSBvdGhlciBJREwgYXR0cmlidXRlcyBvZiBldmVudCBhcyBkZXNjcmliZWQgaW4gdGhlXG4gIC8vICAgIGludm9jYXRpb24gb2YgdGhpcyBhbGdvcml0aG0uXG5cbiAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgZGlzcGF0Y2hpbmcgZXZlbnQgYXQgdGFyZ2V0LCB3aXRoIGxlZ2FjeSB0YXJnZXRcbiAgLy8gICAgb3ZlcnJpZGUgZmxhZyBzZXQgaWYgc2V0LlxuICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBPcGNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIGFwcGxpY2F0aW9uIGRhdGFcbiAqL1xuZnVuY3Rpb24gd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkICh3cywgdHlwZSwgZGF0YSkge1xuICAvLyAxLiBJZiByZWFkeSBzdGF0ZSBpcyBub3QgT1BFTiAoMSksIHRoZW4gcmV0dXJuLlxuICBpZiAod3Nba1JlYWR5U3RhdGVdICE9PSBzdGF0ZXMuT1BFTikge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gTGV0IGRhdGFGb3JFdmVudCBiZSBkZXRlcm1pbmVkIGJ5IHN3aXRjaGluZyBvbiB0eXBlIGFuZCBiaW5hcnkgdHlwZTpcbiAgbGV0IGRhdGFGb3JFdmVudFxuXG4gIGlmICh0eXBlID09PSBvcGNvZGVzLlRFWFQpIHtcbiAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIFRleHRcbiAgICAvLyAgICAgIGEgbmV3IERPTVN0cmluZyBjb250YWluaW5nIGRhdGFcbiAgICB0cnkge1xuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IHRydWUgfSkuZGVjb2RlKGRhdGEpXG4gICAgfSBjYXRjaCB7XG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGludmFsaWQgVVRGLTggaW4gdGV4dCBmcmFtZS4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IG9wY29kZXMuQklOQVJZKSB7XG4gICAgaWYgKHdzW2tCaW5hcnlUeXBlXSA9PT0gJ2Jsb2InKSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJibG9iXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQmxvYiBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgICAgb2JqZWN0LCB0aGF0IHJlcHJlc2VudHMgZGF0YSBhcyBpdHMgcmF3IGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBCbG9iKFtkYXRhXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYXJyYXlidWZmZXJcIlxuICAgICAgLy8gICAgICBhIG5ldyBBcnJheUJ1ZmZlciBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZVxuICAgICAgLy8gICAgICBXZWJTb2NrZXQgb2JqZWN0LCB3aG9zZSBjb250ZW50cyBhcmUgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSkuYnVmZmVyXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBtZXNzYWdlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LCB1c2luZyBNZXNzYWdlRXZlbnQsXG4gIC8vICAgIHdpdGggdGhlIG9yaWdpbiBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIFdlYlNvY2tldFxuICAvLyAgICBvYmplY3RcdTIwMTlzIHVybCdzIG9yaWdpbiwgYW5kIHRoZSBkYXRhIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byBkYXRhRm9yRXZlbnQuXG4gIGZpcmVFdmVudCgnbWVzc2FnZScsIHdzLCBNZXNzYWdlRXZlbnQsIHtcbiAgICBvcmlnaW46IHdzW2tXZWJTb2NrZXRVUkxdLm9yaWdpbixcbiAgICBkYXRhOiBkYXRhRm9yRXZlbnRcbiAgfSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzI2MTZcbiAqIEBzZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzk4NDA3XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvdG9jb2xcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN1YnByb3RvY29sIChwcm90b2NvbCkge1xuICAvLyBJZiBwcmVzZW50LCB0aGlzIHZhbHVlIGluZGljYXRlcyBvbmVcbiAgLy8gb3IgbW9yZSBjb21tYS1zZXBhcmF0ZWQgc3VicHJvdG9jb2wgdGhlIGNsaWVudCB3aXNoZXMgdG8gc3BlYWssXG4gIC8vIG9yZGVyZWQgYnkgcHJlZmVyZW5jZS4gIFRoZSBlbGVtZW50cyB0aGF0IGNvbXByaXNlIHRoaXMgdmFsdWVcbiAgLy8gTVVTVCBiZSBub24tZW1wdHkgc3RyaW5ncyB3aXRoIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMSB0b1xuICAvLyBVKzAwN0Ugbm90IGluY2x1ZGluZyBzZXBhcmF0b3IgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGluXG4gIC8vIFtSRkMyNjE2XSBhbmQgTVVTVCBhbGwgYmUgdW5pcXVlIHN0cmluZ3MuXG4gIGlmIChwcm90b2NvbC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhciBvZiBwcm90b2NvbCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8XG4gICAgICBjb2RlID4gMHg3RSB8fFxuICAgICAgY2hhciA9PT0gJygnIHx8XG4gICAgICBjaGFyID09PSAnKScgfHxcbiAgICAgIGNoYXIgPT09ICc8JyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnQCcgfHxcbiAgICAgIGNoYXIgPT09ICcsJyB8fFxuICAgICAgY2hhciA9PT0gJzsnIHx8XG4gICAgICBjaGFyID09PSAnOicgfHxcbiAgICAgIGNoYXIgPT09ICdcXFxcJyB8fFxuICAgICAgY2hhciA9PT0gJ1wiJyB8fFxuICAgICAgY2hhciA9PT0gJy8nIHx8XG4gICAgICBjaGFyID09PSAnWycgfHxcbiAgICAgIGNoYXIgPT09ICddJyB8fFxuICAgICAgY2hhciA9PT0gJz8nIHx8XG4gICAgICBjaGFyID09PSAnPScgfHxcbiAgICAgIGNoYXIgPT09ICd7JyB8fFxuICAgICAgY2hhciA9PT0gJ30nIHx8XG4gICAgICBjb2RlID09PSAzMiB8fCAvLyBTUFxuICAgICAgY29kZSA9PT0gOSAvLyBIVFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTctNFxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN0YXR1c0NvZGUgKGNvZGUpIHtcbiAgaWYgKGNvZGUgPj0gMTAwMCAmJiBjb2RlIDwgMTAxNSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb2RlICE9PSAxMDA0ICYmIC8vIHJlc2VydmVkXG4gICAgICBjb2RlICE9PSAxMDA1ICYmIC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgICAgY29kZSAhPT0gMTAwNiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gKi9cbmZ1bmN0aW9uIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uICh3cywgcmVhc29uKSB7XG4gIGNvbnN0IHsgW2tDb250cm9sbGVyXTogY29udHJvbGxlciwgW2tSZXNwb25zZV06IHJlc3BvbnNlIH0gPSB3c1xuXG4gIGNvbnRyb2xsZXIuYWJvcnQoKVxuXG4gIGlmIChyZXNwb25zZT8uc29ja2V0ICYmICFyZXNwb25zZS5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3koKVxuICB9XG5cbiAgaWYgKHJlYXNvbikge1xuICAgIGZpcmVFdmVudCgnZXJyb3InLCB3cywgRXJyb3JFdmVudCwge1xuICAgICAgZXJyb3I6IG5ldyBFcnJvcihyZWFzb24pXG4gICAgfSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJsXHUyMDE5c1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbWF4VW5zaWduZWQxNkJpdCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuY2xhc3MgV2Vic29ja2V0RnJhbWVTZW5kIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfHVuZGVmaW5lZH0gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLmZyYW1lRGF0YSA9IGRhdGFcbiAgICB0aGlzLm1hc2tLZXkgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoNClcbiAgfVxuXG4gIGNyZWF0ZUZyYW1lIChvcGNvZGUpIHtcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gdGhpcy5mcmFtZURhdGE/LmJ5dGVMZW5ndGggPz8gMFxuXG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgbGV0IHBheWxvYWRMZW5ndGggPSBib2R5TGVuZ3RoIC8vIDAtMTI1XG4gICAgbGV0IG9mZnNldCA9IDZcblxuICAgIGlmIChib2R5TGVuZ3RoID4gbWF4VW5zaWduZWQxNkJpdCkge1xuICAgICAgb2Zmc2V0ICs9IDggLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCA4IGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI3XG4gICAgfSBlbHNlIGlmIChib2R5TGVuZ3RoID4gMTI1KSB7XG4gICAgICBvZmZzZXQgKz0gMiAvLyBwYXlsb2FkIGxlbmd0aCBpcyBuZXh0IDIgYnl0ZXNcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjZcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYm9keUxlbmd0aCArIG9mZnNldClcblxuICAgIC8vIENsZWFyIGZpcnN0IDIgYnl0ZXMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBvdmVyd3JpdHRlblxuICAgIGJ1ZmZlclswXSA9IGJ1ZmZlclsxXSA9IDBcbiAgICBidWZmZXJbMF0gfD0gMHg4MCAvLyBGSU5cbiAgICBidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHhGMCkgKyBvcGNvZGUgLy8gb3Bjb2RlXG5cbiAgICAvKiEgd3MuIE1JVCBMaWNlbnNlLiBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT4gKi9cbiAgICBidWZmZXJbb2Zmc2V0IC0gNF0gPSB0aGlzLm1hc2tLZXlbMF1cbiAgICBidWZmZXJbb2Zmc2V0IC0gM10gPSB0aGlzLm1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSB0aGlzLm1hc2tLZXlbMl1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMV0gPSB0aGlzLm1hc2tLZXlbM11cblxuICAgIGJ1ZmZlclsxXSA9IHBheWxvYWRMZW5ndGhcblxuICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKGJvZHlMZW5ndGgsIDIpXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgIC8vIENsZWFyIGV4dGVuZGVkIHBheWxvYWQgbGVuZ3RoXG4gICAgICBidWZmZXJbMl0gPSBidWZmZXJbM10gPSAwXG4gICAgICBidWZmZXIud3JpdGVVSW50QkUoYm9keUxlbmd0aCwgNCwgNilcbiAgICB9XG5cbiAgICBidWZmZXJbMV0gfD0gMHg4MCAvLyBNQVNLXG5cbiAgICAvLyBtYXNrIGJvZHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgYnVmZmVyW29mZnNldCArIGldID0gdGhpcy5mcmFtZURhdGFbaV0gXiB0aGlzLm1hc2tLZXlbaSAlIDRdXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJzb2NrZXRGcmFtZVNlbmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBXcml0YWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyBwYXJzZXJTdGF0ZXMsIG9wY29kZXMsIHN0YXRlcywgZW1wdHlCdWZmZXIgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtTZW50Q2xvc2UsIGtSZXNwb25zZSwga1JlY2VpdmVkQ2xvc2UgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzVmFsaWRTdGF0dXNDb2RlLCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiwgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuXG4vLyBUaGlzIGNvZGUgd2FzIGluZmx1ZW5jZWQgYnkgd3MgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPlxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFybm91dCBLYXplbWllciBhbmQgY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYgTHVpZ2kgUGluY2EgYW5kIGNvbnRyaWJ1dG9yc1xuXG5jb25zdCBjaGFubmVscyA9IHt9XG5jaGFubmVscy5waW5nID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpXG5jaGFubmVscy5wb25nID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cG9uZycpXG5cbmNsYXNzIEJ5dGVQYXJzZXIgZXh0ZW5kcyBXcml0YWJsZSB7XG4gICNidWZmZXJzID0gW11cbiAgI2J5dGVPZmZzZXQgPSAwXG5cbiAgI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cblxuICAjaW5mbyA9IHt9XG4gICNmcmFnbWVudHMgPSBbXVxuXG4gIGNvbnN0cnVjdG9yICh3cykge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMud3MgPSB3c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBjaHVua1xuICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrXG4gICAqL1xuICBfd3JpdGUgKGNodW5rLCBfLCBjYWxsYmFjaykge1xuICAgIHRoaXMuI2J1ZmZlcnMucHVzaChjaHVuaylcbiAgICB0aGlzLiNieXRlT2Zmc2V0ICs9IGNodW5rLmxlbmd0aFxuXG4gICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVuZXZlciBhIG5ldyBjaHVuayBpcyByZWNlaXZlZC5cbiAgICogQ2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBidWZmZXJpbmcsXG4gICAqIG9yIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIGJ1ZmZlcmVkIHRvIHBhcnNlLlxuICAgKi9cbiAgcnVuIChjYWxsYmFjaykge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5JTkZPKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBlbm91Z2ggYnl0ZXMgdG8gcGFyc2UgdGhlIHBheWxvYWQgbGVuZ3RoLCBldGMuXG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcblxuICAgICAgICB0aGlzLiNpbmZvLmZpbiA9IChidWZmZXJbMF0gJiAweDgwKSAhPT0gMFxuICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9IGJ1ZmZlclswXSAmIDB4MEZcblxuICAgICAgICAvLyBJZiB3ZSByZWNlaXZlIGEgZnJhZ21lbnRlZCBtZXNzYWdlLCB3ZSB1c2UgdGhlIHR5cGUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIGZyYW1lIHRvIHBhcnNlIHRoZSBmdWxsIG1lc3NhZ2UgYXMgYmluYXJ5L3RleHQsIHdoZW4gaXQncyB0ZXJtaW5hdGVkXG4gICAgICAgIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUgPz89IHRoaXMuI2luZm8ub3Bjb2RlXG5cbiAgICAgICAgdGhpcy4jaW5mby5mcmFnbWVudGVkID0gIXRoaXMuI2luZm8uZmluICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxuXG4gICAgICAgIGlmICh0aGlzLiNpbmZvLmZyYWdtZW50ZWQgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQklOQVJZICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLlRFWFQpIHtcbiAgICAgICAgICAvLyBPbmx5IHRleHQgYW5kIGJpbmFyeSBmcmFtZXMgY2FuIGJlIGZyYWdtZW50ZWRcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnSW52YWxpZCBmcmFtZSB0eXBlIHdhcyBmcmFnbWVudGVkLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gYnVmZmVyWzFdICYgMHg3RlxuXG4gICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoIDw9IDEyNSkge1xuICAgICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGhcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2XG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiBwYXlsb2FkTGVuZ3RoID4gMTI1KSB7XG4gICAgICAgICAgLy8gQSBmcmFnbWVudGVkIGZyYW1lIGNhbid0IGJlIGZyYWdtZW50ZWQgaXRzZWxmXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYWdtZW50ZWQgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBJTkcgfHxcbiAgICAgICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBPTkcgfHxcbiAgICAgICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFKSAmJlxuICAgICAgICAgIHBheWxvYWRMZW5ndGggPiAxMjVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ29udHJvbCBmcmFtZXMgY2FuIGhhdmUgYSBwYXlsb2FkIGxlbmd0aCBvZiAxMjUgYnl0ZXMgTUFYXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1BheWxvYWQgbGVuZ3RoIGZvciBjb250cm9sIGZyYW1lIGV4Y2VlZGVkIDEyNSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFKSB7XG4gICAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBjbG9zZSBmcmFtZSB3aXRoIGEgMS1ieXRlIGJvZHkuJylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIHRoaXMuI2luZm8uY2xvc2VJbmZvID0gdGhpcy5wYXJzZUNsb3NlQm9keShmYWxzZSwgYm9keSlcblxuICAgICAgICAgIGlmICghdGhpcy53c1trU2VudENsb3NlXSkge1xuICAgICAgICAgICAgLy8gSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYSBDbG9zZSBmcmFtZSBhbmQgZGlkIG5vdCBwcmV2aW91c2x5IHNlbmQgYVxuICAgICAgICAgICAgLy8gQ2xvc2UgZnJhbWUsIHRoZSBlbmRwb2ludCBNVVNUIHNlbmQgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZS4gIChXaGVuXG4gICAgICAgICAgICAvLyBzZW5kaW5nIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UsIHRoZSBlbmRwb2ludCB0eXBpY2FsbHkgZWNob3MgdGhlXG4gICAgICAgICAgICAvLyBzdGF0dXMgY29kZSBpdCByZWNlaXZlZC4pXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgICAgICBib2R5LndyaXRlVUludDE2QkUodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSwgMClcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlRnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoXG4gICAgICAgICAgICAgIGNsb3NlRnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksXG4gICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgdGhpcy53c1trU2VudENsb3NlXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgICAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgICAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgICAgIHRoaXMud3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICAgICAgICB0aGlzLndzW2tSZWNlaXZlZENsb3NlXSA9IHRydWVcblxuICAgICAgICAgIHRoaXMuZW5kKClcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBJTkcpIHtcbiAgICAgICAgICAvLyBVcG9uIHJlY2VpcHQgb2YgYSBQaW5nIGZyYW1lLCBhbiBlbmRwb2ludCBNVVNUIHNlbmQgYSBQb25nIGZyYW1lIGluXG4gICAgICAgICAgLy8gcmVzcG9uc2UsIHVubGVzcyBpdCBhbHJlYWR5IHJlY2VpdmVkIGEgQ2xvc2UgZnJhbWUuXG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBQaW5nIGZyYW1lIG11c3QgaGF2ZSBpZGVudGljYWxcbiAgICAgICAgICAvLyBcIkFwcGxpY2F0aW9uIGRhdGFcIlxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tSZWNlaXZlZENsb3NlXSkge1xuICAgICAgICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5QT05HKSlcblxuICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnBpbmcuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgICAgY2hhbm5lbHMucGluZy5wdWJsaXNoKHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORykge1xuICAgICAgICAgIC8vIEEgUG9uZyBmcmFtZSBNQVkgYmUgc2VudCB1bnNvbGljaXRlZC4gIFRoaXMgc2VydmVzIGFzIGFcbiAgICAgICAgICAvLyB1bmlkaXJlY3Rpb25hbCBoZWFydGJlYXQuICBBIHJlc3BvbnNlIHRvIGFuIHVuc29saWNpdGVkIFBvbmcgZnJhbWUgaXNcbiAgICAgICAgICAvLyBub3QgZXhwZWN0ZWQuXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoY2hhbm5lbHMucG9uZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgY2hhbm5lbHMucG9uZy5wdWJsaXNoKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTYpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGJ1ZmZlci5yZWFkVUludDE2QkUoMClcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NCkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDgpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDgpXG4gICAgICAgIGNvbnN0IHVwcGVyID0gYnVmZmVyLnJlYWRVSW50MzJCRSgwKVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGluaW11bSBieXRlcyBhbiBhcnJheWJ1ZmZlciBjYW4gY29udGFpblxuICAgICAgICAvLyBvbiAzMi1iaXQgc3lzdGVtcy4gQWx0aG91Z2gsIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGlzIGlzXG4gICAgICAgIC8vIDJeNTMtMSBieXRlcy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvRXJyb3JzL0ludmFsaWRfYXJyYXlfbGVuZ3RoXG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9jb21tb24vZ2xvYmFscy5oO2RyYz0xOTQ2MjEyYWMwMTAwNjY4ZjE0ZWI5ZTI4NDNiZGQ4NDZlNTEwYTFlO2Jwdj0xO2JwdD0xO2w9MTI3NVxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvb2JqZWN0cy9qcy1hcnJheS1idWZmZXIuaDtsPTM0O2RyYz0xOTQ2MjEyYWMwMTAwNjY4ZjE0ZWI5ZTI4NDNiZGQ4NDZlNTEwYTFlXG4gICAgICAgIGlmICh1cHBlciA+IDIgKiogMzEgLSAxKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIHBheWxvYWQgbGVuZ3RoID4gMl4zMSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG93ZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDQpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gKHVwcGVyIDw8IDgpICsgbG93ZXJcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBKSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgc3RpbGwgbW9yZSBkYXRhIGluIHRoaXMgY2h1bmsgdGhhdCBuZWVkcyB0byBiZSByZWFkXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNieXRlT2Zmc2V0ID49IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc2VudCBtdWx0aXBsZSBmcmFtZXMgaW4gYSBzaW5nbGUgY2h1bmtcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUodGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLnB1c2goYm9keSlcblxuICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyB1bmZyYWdtZW50ZWQsIG9yIGEgZnJhZ21lbnRlZCBmcmFtZSB3YXMgdGVybWluYXRlZCxcbiAgICAgICAgICAvLyBhIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkXG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmZyYWdtZW50ZWQgfHwgKHRoaXMuI2luZm8uZmluICYmIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNPTlRJTlVBVElPTikpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gQnVmZmVyLmNvbmNhdCh0aGlzLiNmcmFnbWVudHMpXG5cbiAgICAgICAgICAgIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCh0aGlzLndzLCB0aGlzLiNpbmZvLm9yaWdpbmFsT3Bjb2RlLCBmdWxsTWVzc2FnZSlcblxuICAgICAgICAgICAgdGhpcy4jaW5mbyA9IHt9XG4gICAgICAgICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID0gMFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGFrZSBuIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlcmVkIEJ1ZmZlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5cbiAgICogQHJldHVybnMge0J1ZmZlcnxudWxsfVxuICAgKi9cbiAgY29uc3VtZSAobikge1xuICAgIGlmIChuID4gdGhpcy4jYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIGlmICh0aGlzLiNidWZmZXJzWzBdLmxlbmd0aCA9PT0gbikge1xuICAgICAgdGhpcy4jYnl0ZU9mZnNldCAtPSB0aGlzLiNidWZmZXJzWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlcnMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB3aGlsZSAob2Zmc2V0ICE9PSBuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy4jYnVmZmVyc1swXVxuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5leHRcblxuICAgICAgaWYgKGxlbmd0aCArIG9mZnNldCA9PT0gbikge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggKyBvZmZzZXQgPiBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQobmV4dC5zdWJhcnJheSgwLCBuIC0gb2Zmc2V0KSwgb2Zmc2V0KVxuICAgICAgICB0aGlzLiNidWZmZXJzWzBdID0gbmV4dC5zdWJhcnJheShuIC0gb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgb2Zmc2V0ICs9IG5leHQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jYnl0ZU9mZnNldCAtPSBuXG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICBwYXJzZUNsb3NlQm9keSAob25seUNvZGUsIGRhdGEpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXNcbiAgICAgIC8vIGRlZmluZWQgYXMgdGhlIHN0YXR1cyBjb2RlIChTZWN0aW9uIDcuNCkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBDbG9zZVxuICAgICAgLy8gY29udHJvbCBmcmFtZSByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb25cbiAgICAgIGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKVxuICAgIH1cblxuICAgIGlmIChvbmx5Q29kZSkge1xuICAgICAgaWYgKCFpc1ZhbGlkU3RhdHVzQ29kZShjb2RlKSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBjb2RlIH1cbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNlxuICAgIC8qKiBAdHlwZSB7QnVmZmVyfSAqL1xuICAgIGxldCByZWFzb24gPSBkYXRhLnN1YmFycmF5KDIpXG5cbiAgICAvLyBSZW1vdmUgQk9NXG4gICAgaWYgKHJlYXNvblswXSA9PT0gMHhFRiAmJiByZWFzb25bMV0gPT09IDB4QkIgJiYgcmVhc29uWzJdID09PSAweEJGKSB7XG4gICAgICByZWFzb24gPSByZWFzb24uc3ViYXJyYXkoMylcbiAgICB9XG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkU3RhdHVzQ29kZShjb2RlKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVE9ETzogb3B0aW1pemUgdGhpc1xuICAgICAgcmVhc29uID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IHRydWUgfSkuZGVjb2RlKHJlYXNvbilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmVhc29uIH1cbiAgfVxuXG4gIGdldCBjbG9zaW5nSW5mbyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2luZm8uY2xvc2VJbmZvXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJ5dGVQYXJzZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3JkXHUyMDE5cyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YVx1MjAxOXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3RcdTIwMTlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvY2xpZW50JylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyJylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL2xpYi9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2JhbGFuY2VkLXBvb2wnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9hZ2VudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9saWIvY29yZS91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IGVycm9yc1xuY29uc3QgYXBpID0gcmVxdWlyZSgnLi9saWIvYXBpJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9saWIvY29yZS9jb25uZWN0JylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tBZ2VudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1hZ2VudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1wb29sJylcbmNvbnN0IG1vY2tFcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stZXJyb3JzJylcbmNvbnN0IFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9wcm94eS1hZ2VudCcpXG5jb25zdCBSZXRyeUhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlcicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIsIHNldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4vbGliL2dsb2JhbCcpXG5jb25zdCBEZWNvcmF0b3JIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcblxubGV0IGhhc0NyeXB0b1xudHJ5IHtcbiAgcmVxdWlyZSgnY3J5cHRvJylcbiAgaGFzQ3J5cHRvID0gdHJ1ZVxufSBjYXRjaCB7XG4gIGhhc0NyeXB0byA9IGZhbHNlXG59XG5cbk9iamVjdC5hc3NpZ24oRGlzcGF0Y2hlci5wcm90b3R5cGUsIGFwaSlcblxubW9kdWxlLmV4cG9ydHMuRGlzcGF0Y2hlciA9IERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLkNsaWVudCA9IENsaWVudFxubW9kdWxlLmV4cG9ydHMuUG9vbCA9IFBvb2xcbm1vZHVsZS5leHBvcnRzLkJhbGFuY2VkUG9vbCA9IEJhbGFuY2VkUG9vbFxubW9kdWxlLmV4cG9ydHMuQWdlbnQgPSBBZ2VudFxubW9kdWxlLmV4cG9ydHMuUHJveHlBZ2VudCA9IFByb3h5QWdlbnRcbm1vZHVsZS5leHBvcnRzLlJldHJ5SGFuZGxlciA9IFJldHJ5SGFuZGxlclxuXG5tb2R1bGUuZXhwb3J0cy5EZWNvcmF0b3JIYW5kbGVyID0gRGVjb3JhdG9ySGFuZGxlclxubW9kdWxlLmV4cG9ydHMuUmVkaXJlY3RIYW5kbGVyID0gUmVkaXJlY3RIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuXG5tb2R1bGUuZXhwb3J0cy5idWlsZENvbm5lY3RvciA9IGJ1aWxkQ29ubmVjdG9yXG5tb2R1bGUuZXhwb3J0cy5lcnJvcnMgPSBlcnJvcnNcblxuZnVuY3Rpb24gbWFrZURpc3BhdGNoZXIgKGZuKSB7XG4gIHJldHVybiAodXJsLCBvcHRzLCBoYW5kbGVyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyID0gb3B0c1xuICAgICAgb3B0cyA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIXVybCB8fCAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcgJiYgISh1cmwgaW5zdGFuY2VvZiBVUkwpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgIT0gbnVsbCAmJiB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAmJiBvcHRzLnBhdGggIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzLnBhdGgnKVxuICAgICAgfVxuXG4gICAgICBsZXQgcGF0aCA9IG9wdHMucGF0aFxuICAgICAgaWYgKCFvcHRzLnBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgICB9XG5cbiAgICAgIHVybCA9IG5ldyBVUkwodXRpbC5wYXJzZU9yaWdpbih1cmwpLm9yaWdpbiArIHBhdGgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghb3B0cykge1xuICAgICAgICBvcHRzID0gdHlwZW9mIHVybCA9PT0gJ29iamVjdCcgPyB1cmwgOiB7fVxuICAgICAgfVxuXG4gICAgICB1cmwgPSB1dGlsLnBhcnNlVVJMKHVybClcbiAgICB9XG5cbiAgICBjb25zdCB7IGFnZW50LCBkaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIH0gPSBvcHRzXG5cbiAgICBpZiAoYWdlbnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgb3B0cy5hZ2VudC4gRGlkIHlvdSBtZWFuIG9wdHMuY2xpZW50PycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmNhbGwoZGlzcGF0Y2hlciwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgIHBhdGg6IHVybC5zZWFyY2ggPyBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWAgOiB1cmwucGF0aG5hbWUsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8IChvcHRzLmJvZHkgPyAnUFVUJyA6ICdHRVQnKVxuICAgIH0sIGhhbmRsZXIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsRGlzcGF0Y2hlciA9IHNldEdsb2JhbERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLmdldEdsb2JhbERpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyXG5cbmlmICh1dGlsLm5vZGVNYWpvciA+IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPj0gOCkpIHtcbiAgbGV0IGZldGNoSW1wbCA9IG51bGxcbiAgbW9kdWxlLmV4cG9ydHMuZmV0Y2ggPSBhc3luYyBmdW5jdGlvbiBmZXRjaCAocmVzb3VyY2UpIHtcbiAgICBpZiAoIWZldGNoSW1wbCkge1xuICAgICAgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gnKS5mZXRjaFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKC4uLmFyZ3VtZW50cylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHRoaXMpXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5IZWFkZXJzID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvaGVhZGVycycpLkhlYWRlcnNcbiAgbW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXNwb25zZScpLlJlc3BvbnNlXG4gIG1vZHVsZS5leHBvcnRzLlJlcXVlc3QgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxuICBtb2R1bGUuZXhwb3J0cy5Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2Zvcm1kYXRhJykuRm9ybURhdGFcbiAgbW9kdWxlLmV4cG9ydHMuRmlsZSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2ZpbGUnKS5GaWxlXG4gIG1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyXG5cbiAgY29uc3QgeyBzZXRHbG9iYWxPcmlnaW4sIGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZ2xvYmFsJylcblxuICBtb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxPcmlnaW4gPSBzZXRHbG9iYWxPcmlnaW5cbiAgbW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luXG5cbiAgY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL2NhY2hlc3RvcmFnZScpXG4gIGNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9saWIvY2FjaGUvc3ltYm9scycpXG5cbiAgLy8gQ2FjaGUgJiBDYWNoZVN0b3JhZ2UgYXJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIGZldGNoLiBFdmVuIGlmIGl0IG1heSBydW5cbiAgLy8gaW4gYW4gb2xkZXIgdmVyc2lvbiBvZiBOb2RlLCBpdCBkb2Vzbid0IGhhdmUgYW55IHVzZSB3aXRob3V0IGZldGNoLlxuICBtb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG59XG5cbmlmICh1dGlsLm5vZGVNYWpvciA+PSAxNikge1xuICBjb25zdCB7IGRlbGV0ZUNvb2tpZSwgZ2V0Q29va2llcywgZ2V0U2V0Q29va2llcywgc2V0Q29va2llIH0gPSByZXF1aXJlKCcuL2xpYi9jb29raWVzJylcblxuICBtb2R1bGUuZXhwb3J0cy5kZWxldGVDb29raWUgPSBkZWxldGVDb29raWVcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0Q29va2llcyA9IGdldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuc2V0Q29va2llID0gc2V0Q29va2llXG5cbiAgY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2RhdGFVUkwnKVxuXG4gIG1vZHVsZS5leHBvcnRzLnBhcnNlTUlNRVR5cGUgPSBwYXJzZU1JTUVUeXBlXG4gIG1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTggJiYgaGFzQ3J5cHRvKSB7XG4gIGNvbnN0IHsgV2ViU29ja2V0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWJzb2NrZXQvd2Vic29ja2V0JylcblxuICBtb2R1bGUuZXhwb3J0cy5XZWJTb2NrZXQgPSBXZWJTb2NrZXRcbn1cblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5yZXF1ZXN0KVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gbWFrZURpc3BhdGNoZXIoYXBpLnN0cmVhbSlcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gbWFrZURpc3BhdGNoZXIoYXBpLnBpcGVsaW5lKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5jb25uZWN0KVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS51cGdyYWRlKVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrQ2xpZW50ID0gTW9ja0NsaWVudFxubW9kdWxlLmV4cG9ydHMuTW9ja1Bvb2wgPSBNb2NrUG9vbFxubW9kdWxlLmV4cG9ydHMuTW9ja0FnZW50ID0gTW9ja0FnZW50XG5tb2R1bGUuZXhwb3J0cy5tb2NrRXJyb3JzID0gbW9ja0Vycm9yc1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBOdWxsT2JqZWN0ID0gZnVuY3Rpb24gTnVsbE9iamVjdCAoKSB7IH1cbk51bGxPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCAqKCBcIjtcIiBwYXJhbWV0ZXIgKSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIHBhcmFtZXRlciAgICAgPSB0b2tlbiBcIj1cIiAoIHRva2VuIC8gcXVvdGVkLXN0cmluZyApXG4gKiB0b2tlbiAgICAgICAgID0gMSp0Y2hhclxuICogdGNoYXIgICAgICAgICA9IFwiIVwiIC8gXCIjXCIgLyBcIiRcIiAvIFwiJVwiIC8gXCImXCIgLyBcIidcIiAvIFwiKlwiXG4gKiAgICAgICAgICAgICAgIC8gXCIrXCIgLyBcIi1cIiAvIFwiLlwiIC8gXCJeXCIgLyBcIl9cIiAvIFwiYFwiIC8gXCJ8XCIgLyBcIn5cIlxuICogICAgICAgICAgICAgICAvIERJR0lUIC8gQUxQSEFcbiAqICAgICAgICAgICAgICAgOyBhbnkgVkNIQVIsIGV4Y2VwdCBkZWxpbWl0ZXJzXG4gKiBxdW90ZWQtc3RyaW5nID0gRFFVT1RFICooIHFkdGV4dCAvIHF1b3RlZC1wYWlyICkgRFFVT1RFXG4gKiBxZHRleHQgICAgICAgID0gSFRBQiAvIFNQIC8gJXgyMSAvICV4MjMtNUIgLyAleDVELTdFIC8gb2JzLXRleHRcbiAqIG9icy10ZXh0ICAgICAgPSAleDgwLUZGXG4gKiBxdW90ZWQtcGFpciAgID0gXCJcXFwiICggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gKi9cbmNvbnN0IHBhcmFtUkUgPSAvOyAqKFshIyQlJicqKy5eXFx3YHx+LV0rKT0oXCIoPzpbXFx2XFx1MDAyMFxcdTAwMjFcXHUwMDIzLVxcdTAwNWJcXHUwMDVkLVxcdTAwN2VcXHUwMDgwLVxcdTAwZmZdfFxcXFxbXFx2XFx1MDAyMC1cXHUwMGZmXSkqXCJ8WyEjJCUmJyorLl5cXHdgfH4tXSspICovZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggcXVvdGVkLXBhaXIgaW4gUkZDIDcyMzAgc2VjIDMuMi42XG4gKlxuICogcXVvdGVkLXBhaXIgPSBcIlxcXCIgKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAqIG9icy10ZXh0ICAgID0gJXg4MC1GRlxuICovXG5jb25zdCBxdW90ZWRQYWlyUkUgPSAvXFxcXChbXFx2XFx1MDAyMC1cXHUwMGZmXSkvZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggdHlwZSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIG1lZGlhLXR5cGUgPSB0eXBlIFwiL1wiIHN1YnR5cGVcbiAqIHR5cGUgICAgICAgPSB0b2tlblxuICogc3VidHlwZSAgICA9IHRva2VuXG4gKi9cbmNvbnN0IG1lZGlhVHlwZVJFID0gL15bISMkJSYnKisuXlxcd3x+LV0rXFwvWyEjJCUmJyorLl5cXHd8fi1dKyQvdVxuXG4vLyBkZWZhdWx0IENvbnRlbnRUeXBlIHRvIHByZXZlbnQgcmVwZWF0ZWQgb2JqZWN0IGNyZWF0aW9uXG5jb25zdCBkZWZhdWx0Q29udGVudFR5cGUgPSB7IHR5cGU6ICcnLCBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpIH1cbk9iamVjdC5mcmVlemUoZGVmYXVsdENvbnRlbnRUeXBlLnBhcmFtZXRlcnMpXG5PYmplY3QuZnJlZXplKGRlZmF1bHRDb250ZW50VHlwZSlcblxuLyoqXG4gKiBQYXJzZSBtZWRpYSB0eXBlIHRvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlIChoZWFkZXIpIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgaGVhZGVyIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIG1lZGlhIHR5cGUnKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpXG4gIH1cblxuICAvLyBwYXJzZSBwYXJhbWV0ZXJzXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsZXQga2V5XG4gIGxldCBtYXRjaFxuICBsZXQgdmFsdWVcblxuICBwYXJhbVJFLmxhc3RJbmRleCA9IGluZGV4XG5cbiAgd2hpbGUgKChtYXRjaCA9IHBhcmFtUkUuZXhlYyhoZWFkZXIpKSkge1xuICAgIGlmIChtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gICAgfVxuXG4gICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAga2V5ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuICAgIHZhbHVlID0gbWF0Y2hbMl1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc2xpY2UoMSwgdmFsdWUubGVuZ3RoIC0gMSlcblxuICAgICAgcXVvdGVkUGFpclJFLnRlc3QodmFsdWUpICYmICh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocXVvdGVkUGFpclJFLCAnJDEnKSlcbiAgICB9XG5cbiAgICByZXN1bHQucGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHNhZmVQYXJzZSAoaGVhZGVyKSB7XG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogdHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KClcbiAgfVxuXG4gIC8vIHBhcnNlIHBhcmFtZXRlcnNcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxldCBrZXlcbiAgbGV0IG1hdGNoXG4gIGxldCB2YWx1ZVxuXG4gIHBhcmFtUkUubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAoKG1hdGNoID0gcGFyYW1SRS5leGVjKGhlYWRlcikpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICAgIH1cblxuICAgIGluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aFxuICAgIGtleSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIC8vIHJlbW92ZSBxdW90ZXMgYW5kIGVzY2FwZXNcbiAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnNsaWNlKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG5cbiAgICAgIHF1b3RlZFBhaXJSRS50ZXN0KHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHF1b3RlZFBhaXJSRSwgJyQxJykpXG4gICAgfVxuXG4gICAgcmVzdWx0LnBhcmFtZXRlcnNba2V5XSA9IHZhbHVlXG4gIH1cblxuICBpZiAoaW5kZXggIT09IGhlYWRlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSB7IHBhcnNlLCBzYWZlUGFyc2UgfVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuc2FmZVBhcnNlID0gc2FmZVBhcnNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0Q29udGVudFR5cGUgPSBkZWZhdWx0Q29udGVudFR5cGVcbiIsICJpbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCIgYXNzZXJ0IHsgdHlwZTogXCJqc29uXCIgfTtcblxuaW1wb3J0IHsgcmVhZFNlcnZlckluZm8gfSBmcm9tIFwiLi9yZWFkU2VydmVySW5mb1wiO1xuaW1wb3J0IHtcbiAgU2FuZGJveE1vZGUsXG4gIE91dHB1dFNjaGVtYVNvdXJjZSxcbiAgUHJvbXB0U291cmNlLFxuICBydW5Db2RleEV4ZWMsXG4gIFNhZmV0eVN0cmF0ZWd5LFxufSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGRyb3BTdWRvIH0gZnJvbSBcIi4vZHJvcFN1ZG9cIjtcbmltcG9ydCB7IGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MgfSBmcm9tIFwiLi9jaGVja0FjdG9yUGVybWlzc2lvbnNcIjtcbmltcG9ydCBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgZnJvbSBcInN0cmluZy1hcmd2XCI7XG5pbXBvcnQgeyB3cml0ZVByb3h5Q29uZmlnIH0gZnJvbSBcIi4vd3JpdGVQcm94eUNvbmZpZ1wiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5uYW1lKFwiY29kZXgtYWN0aW9uXCIpXG4gICAgLnZlcnNpb24ocGtnLnZlcnNpb24pXG4gICAgLmRlc2NyaXB0aW9uKFwiTXVsdGl0b29sIHRvIHN1cHBvcnQgb3BlbmFpL2NvZGV4LWFjdGlvbi5cIik7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicmVhZC1zZXJ2ZXItaW5mb1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIlJlYWQgc2VydmVyIGluZm8gZnJvbSB0aGUgcmVzcG9uc2VzIEFQSSBwcm94eVwiKVxuICAgIC5hcmd1bWVudChcIjxzZXJ2ZXJJbmZvRmlsZT5cIiwgXCJQYXRoIHRvIHRoZSBzZXJ2ZXIgaW5mbyBmaWxlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoc2VydmVySW5mb0ZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGUpO1xuICAgIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlc29sdmUtY29kZXgtaG9tZVwiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiUmVzb2x2ZSB0aGUgQ29kZXggaG9tZSBkaXJlY3Rvcnkgd2l0aCBwcmVjZWRlbmNlOiBpbnB1dCwgZW52LCBkZWZhdWx0ICh+Ly5jb2RleClcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtaG9tZS1vdmVycmlkZSA8RElSRUNUT1JZPlwiLFxuICAgICAgXCJPcHRpb25hbCBjb2RleC1ob21lIGlucHV0IHZhbHVlIChtYXkgYmUgZW1wdHkpXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhZmV0eS1zdHJhdGVneSA8c3RyYXRlZ3k+XCIsXG4gICAgICBcIlNhZmV0eSBzdHJhdGVneSB0byB0YWtlIGludG8gYWNjb3VudCB3aGVuIHBpY2tpbmcgZGVmYXVsdHNcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiQ29kZXggdXNlciB0byBjb25zaWRlciB3aGVuIHNhZmV0eSBzdHJhdGVneSBpcyAndW5wcml2aWxlZ2VkLXVzZXInXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1naXRodWItcnVuLWlkIDxpZD5cIiwgXCJHaXRIdWIgcnVuIElEXCIpXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZU92ZXJyaWRlOiBzdHJpbmc7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICAgIGNvZGV4VXNlcjogc3RyaW5nO1xuICAgICAgICBnaXRodWJSdW5JZDogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZldHlTdHJhdGVneSA9IHRvU2FmZXR5U3RyYXRlZ3kob3B0aW9ucy5zYWZldHlTdHJhdGVneSk7XG4gICAgICAgIGNvbnN0IGNvZGV4VXNlciA9IGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhVc2VyKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlQ29kZXhIb21lKFxuICAgICAgICAgIGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhIb21lT3ZlcnJpZGUpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5LFxuICAgICAgICAgIGNvZGV4VXNlcixcbiAgICAgICAgICBvcHRpb25zLmdpdGh1YlJ1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRPdXRwdXQgfSA9IGF3YWl0IGltcG9ydChcIkBhY3Rpb25zL2NvcmVcIik7XG4gICAgICAgIHNldE91dHB1dChcImNvZGV4LWhvbWVcIiwgcmVzb2x2ZWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2ZWQgQ29kZXggaG9tZTogJHtyZXNvbHZlZH1gKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcIndyaXRlLXByb3h5LWNvbmZpZ1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiV3JpdGUgdGhlIE9wZW5BSSBQcm94eSBtb2RlbCBwcm92aWRlciBjb25maWcgaW50byBDT0RFWF9IT01FL2NvbmZpZy50b21sXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsIFwiUGF0aCB0byBDb2RleCBob21lIGRpcmVjdG9yeVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tcG9ydCA8cG9ydD5cIiwgXCJQcm94eSBzZXJ2ZXIgcG9ydFwiLCBwYXJzZUludFN0cmljdClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBwb3J0OiBudW1iZXI7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmV0eVN0cmF0ZWd5ID0gdG9TYWZldHlTdHJhdGVneShvcHRpb25zLnNhZmV0eVN0cmF0ZWd5KTtcbiAgICAgICAgYXdhaXQgd3JpdGVQcm94eUNvbmZpZyhvcHRpb25zLmNvZGV4SG9tZSwgb3B0aW9ucy5wb3J0LCBzYWZldHlTdHJhdGVneSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkcm9wLXN1ZG9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEcm9wcyBzdWRvIHByaXZpbGVnZXMgZm9yIHRoZSBjb25maWd1cmVkIHVzZXIuXCIpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS11c2VyIDx1c2VyPlwiLCBcIlVzZXIgdG8gbW9kaWZ5XCIpLmRlZmF1bHQoXCJydW5uZXJcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXCItLWdyb3VwIDxncm91cD5cIiwgXCJHcm91cCBncmFudGluZyBzdWRvIHByaXZpbGVnZXNcIikuZGVmYXVsdChcbiAgICAgICAgXCJzdWRvXCJcbiAgICAgIClcbiAgICApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS1yb290LXBoYXNlXCIsIFwiaW50ZXJuYWxcIikuZGVmYXVsdChmYWxzZSkuaGlkZUhlbHAoKSlcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHsgdXNlcjogc3RyaW5nOyBncm91cDogc3RyaW5nOyByb290UGhhc2U6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICBhd2FpdCBkcm9wU3Vkbyh7XG4gICAgICAgICAgdXNlcjogb3B0aW9ucy51c2VyLFxuICAgICAgICAgIGdyb3VwOiBvcHRpb25zLmdyb3VwLFxuICAgICAgICAgIHJvb3RQaGFzZTogb3B0aW9ucy5yb290UGhhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicnVuLWNvZGV4LWV4ZWNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnZva2VzIGBjb2RleCBleGVjYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHNcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLXByb21wdCA8cHJvbXB0PlwiLCBcIlByb21wdCB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tcHJvbXB0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIkZpbGUgY29udGFpbmluZyB0aGUgcHJvbXB0IHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsXG4gICAgICBcIlBhdGggdG8gdGhlIENvZGV4IENMSSBob21lIGRpcmVjdG9yeSAod2hlcmUgY29uZmlnIGZpbGVzIGFyZSBzdG9yZWQpLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tY2QgPERJUkVDVE9SWT5cIiwgXCJXb3JraW5nIGRpcmVjdG9yeSBmb3IgQ29kZXhcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tZXh0cmEtYXJncyA8YXJncz5cIixcbiAgICAgIFwiQWRkaXRpb25hbCBhcmdzIHRvIHBhc3MgdGhyb3VnaCB0byBgY29kZXggZXhlY2AgYXMgSlNPTiBhcnJheSBvciBzaGVsbCBzdHJpbmcuXCIsXG4gICAgICBwYXJzZUV4dHJhQXJnc1xuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tb3V0cHV0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIlBhdGggd2hlcmUgdGhlIGZpbmFsIG1lc3NhZ2UgZnJvbSBgY29kZXggZXhlY2Agd2lsbCBiZSB3cml0dGVuLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1vdXRwdXQtc2NoZW1hLWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIlBhdGggdG8gYSBzY2hlbWEgZmlsZSB0byBwYXNzIHRvIGBjb2RleCBleGVjIC0tb3V0cHV0LXNjaGVtYWAuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1zY2hlbWEgPFNDSEVNQT5cIixcbiAgICAgIFwiSW5saW5lIHNjaGVtYSBjb250ZW50cyB0byBwYXNzIHRvIGBjb2RleCBleGVjIC0tb3V0cHV0LXNjaGVtYWAuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhbmRib3ggPFNBTkRCT1g+XCIsXG4gICAgICBcIkxlZ2FjeSBzYW5kYm94IG1vZGUgb3ZlcnJpZGUgdG8gcGFzcyB0byBgY29kZXggZXhlY2AgKG1heSBiZSBlbXB0eSkuXCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1wZXJtaXNzaW9uLXByb2ZpbGUgPFBST0ZJTEU+XCIsXG4gICAgICBcIlBlcm1pc3Npb24gcHJvZmlsZSB0byBzZWxlY3QgdGhyb3VnaCBgZGVmYXVsdF9wZXJtaXNzaW9uc2AgKG1heSBiZSBlbXB0eSkuXCIsXG4gICAgICBcIlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tbW9kZWwgPG1vZGVsPlwiLCBcIk1vZGVsIHRoZSBhZ2VudCBzaG91bGQgdXNlXCIpXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1lZmZvcnQgPGVmZm9ydD5cIiwgXCJSZWFzb25pbmcgZWZmb3J0IHRoZSBhZ2VudCBzaG91bGQgdXNlXCIpXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhZmV0eS1zdHJhdGVneSA8c3RyYXRlZ3k+XCIsXG4gICAgICBcIlNhZmV0eSBzdHJhdGVneSB0byB1c2UuIE9uZSBvZiAnZHJvcC1zdWRvJywgJ3JlYWQtb25seScsICd1bnByaXZpbGVnZWQtdXNlcicsIG9yICd1bnNhZmUnLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1jb2RleC11c2VyIDx1c2VyPlwiLFxuICAgICAgXCJVc2VyIHRvIHJ1biBjb2RleCBleGVjIGFzIHdoZW4gdXNpbmcgdGhlICd1bnByaXZpbGVnZWQtdXNlcicgc2FmZXR5IHN0cmF0ZWd5LlwiXG4gICAgKVxuICAgIC5hY3Rpb24oXG4gICAgICBhc3luYyAob3B0aW9uczoge1xuICAgICAgICBwcm9tcHQ6IHN0cmluZztcbiAgICAgICAgcHJvbXB0RmlsZTogc3RyaW5nO1xuICAgICAgICBjb2RleEhvbWU6IHN0cmluZztcbiAgICAgICAgY2Q6IHN0cmluZztcbiAgICAgICAgZXh0cmFBcmdzOiBBcnJheTxzdHJpbmc+O1xuICAgICAgICBvdXRwdXRGaWxlOiBzdHJpbmc7XG4gICAgICAgIG91dHB1dFNjaGVtYUZpbGU6IHN0cmluZztcbiAgICAgICAgb3V0cHV0U2NoZW1hOiBzdHJpbmc7XG4gICAgICAgIHNhbmRib3g6IHN0cmluZztcbiAgICAgICAgcGVybWlzc2lvblByb2ZpbGU6IHN0cmluZztcbiAgICAgICAgbW9kZWw6IHN0cmluZztcbiAgICAgICAgZWZmb3J0OiBzdHJpbmc7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICAgIGNvZGV4VXNlcjogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcHJvbXB0LFxuICAgICAgICAgIHByb21wdEZpbGUsXG4gICAgICAgICAgb3V0cHV0RmlsZSxcbiAgICAgICAgICBjb2RleEhvbWUsXG4gICAgICAgICAgY2QsXG4gICAgICAgICAgZXh0cmFBcmdzLFxuICAgICAgICAgIG91dHB1dFNjaGVtYSxcbiAgICAgICAgICBvdXRwdXRTY2hlbWFGaWxlLFxuICAgICAgICAgIHNhbmRib3gsXG4gICAgICAgICAgcGVybWlzc2lvblByb2ZpbGUsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgZWZmb3J0LFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5LFxuICAgICAgICAgIGNvZGV4VXNlcixcbiAgICAgICAgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFByb21wdCA9IGVtcHR5QXNOdWxsKHByb21wdCk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9tcHRGaWxlID0gZW1wdHlBc051bGwocHJvbXB0RmlsZSk7XG4gICAgICAgIGlmIChub3JtYWxpemVkUHJvbXB0ICE9IG51bGwgJiYgbm9ybWFsaXplZFByb21wdEZpbGUgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiT25seSBvbmUgb2YgYHByb21wdGAgb3IgYHByb21wdC1maWxlYCBtYXkgYmUgc3BlY2lmaWVkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9tcHRTb3VyY2U6IFByb21wdFNvdXJjZTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9tcHQgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21wdFNvdXJjZSA9IHsgdHlwZTogXCJpbmxpbmVcIiwgY29udGVudDogbm9ybWFsaXplZFByb21wdCB9O1xuICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRQcm9tcHRGaWxlICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9tcHRTb3VyY2UgPSB7IHR5cGU6IFwiZmlsZVwiLCBwYXRoOiBub3JtYWxpemVkUHJvbXB0RmlsZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiRWl0aGVyIGBwcm9tcHRgIG9yIGBwcm9tcHQtZmlsZWAgbXVzdCBiZSBzcGVjaWZpZWQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3VzdG9tIG9wdGlvbiBwcm9jZXNzaW5nIHRvIGNvZXJjZXMgdG8gbnVsbCBkb2VzIG5vdCB3b3JrIHdpdGhcbiAgICAgICAgLy8gQ29tbWFuZGVyLmpzJ3MgcmVxdWlyZWRPcHRpb24sIHNvIHdlIGhhdmUgdG8gcG9zdC1wcm9jZXNzIGhlcmUuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWFGaWxlID0gZW1wdHlBc051bGwob3V0cHV0U2NoZW1hRmlsZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEgPSBlbXB0eUFzTnVsbChvdXRwdXRTY2hlbWEpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSAhPSBudWxsICYmXG4gICAgICAgICAgbm9ybWFsaXplZE91dHB1dFNjaGVtYSAhPSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiT25seSBvbmUgb2YgYG91dHB1dC1zY2hlbWFgIG9yIGBvdXRwdXQtc2NoZW1hLWZpbGVgIG1heSBiZSBzcGVjaWZpZWQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG91dHB1dFNjaGVtYVNvdXJjZTogT3V0cHV0U2NoZW1hU291cmNlIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmIChub3JtYWxpemVkT3V0cHV0U2NoZW1hICE9IG51bGwpIHtcbiAgICAgICAgICBvdXRwdXRTY2hlbWFTb3VyY2UgPSB7XG4gICAgICAgICAgICB0eXBlOiBcImlubGluZVwiLFxuICAgICAgICAgICAgY29udGVudDogbm9ybWFsaXplZE91dHB1dFNjaGVtYSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWFGaWxlICE9IG51bGwpIHtcbiAgICAgICAgICBvdXRwdXRTY2hlbWFTb3VyY2UgPSB7XG4gICAgICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgICAgIHBhdGg6IG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWFGaWxlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBydW5Db2RleEV4ZWMoe1xuICAgICAgICAgIHByb21wdDogcHJvbXB0U291cmNlLFxuICAgICAgICAgIGNvZGV4SG9tZTogZW1wdHlBc051bGwoY29kZXhIb21lKSxcbiAgICAgICAgICBjZCxcbiAgICAgICAgICBleHRyYUFyZ3MsXG4gICAgICAgICAgZXhwbGljaXRPdXRwdXRGaWxlOiBlbXB0eUFzTnVsbChvdXRwdXRGaWxlKSxcbiAgICAgICAgICBvdXRwdXRTY2hlbWE6IG91dHB1dFNjaGVtYVNvdXJjZSxcbiAgICAgICAgICBzYW5kYm94OiB0b09wdGlvbmFsU2FuZGJveE1vZGUoc2FuZGJveCksXG4gICAgICAgICAgcGVybWlzc2lvblByb2ZpbGU6IGVtcHR5QXNOdWxsKHBlcm1pc3Npb25Qcm9maWxlKSxcbiAgICAgICAgICBtb2RlbDogZW1wdHlBc051bGwobW9kZWwpLFxuICAgICAgICAgIGVmZm9ydDogZW1wdHlBc051bGwoZWZmb3J0KSxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneTogdG9TYWZldHlTdHJhdGVneShzYWZldHlTdHJhdGVneSksXG4gICAgICAgICAgY29kZXhVc2VyOiBlbXB0eUFzTnVsbChjb2RleFVzZXIpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImNoZWNrLXdyaXRlLWFjY2Vzc1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiQ2hlY2tzIHRoYXQgdGhlIHRyaWdnZXJpbmcgYWN0b3IgaGFzIHdyaXRlIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeVwiXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tYWxsb3ctYm90cyA8Ym9vbGVhbj5cIixcbiAgICAgIFwiQWxsb3cgdHJ1c3RlZCBHaXRIdWIgYm90IGFjdG9ycyB0byBieXBhc3MgdGhlIHdyaXRlLWFjY2VzcyBjaGVjayAoZGVmYXVsdDogZmFsc2UpLlwiLFxuICAgICAgcGFyc2VCb29sZWFuLFxuICAgICAgZmFsc2VcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1hbGxvdy11c2VycyA8dXNlcnM+XCIsXG4gICAgICBcIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIEdpdEh1YiB1c2VybmFtZXMgd2hvIGNhbiBydW4gdGhpcyBhY3Rpb24sIG9yICcqJyB0byBhbGxvdyBhbGwgdXNlcnMuXCIsXG4gICAgICBcIlwiXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tYWxsb3ctYm90LXVzZXJzIDx1c2Vycz5cIixcbiAgICAgIFwiQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgR2l0SHViIGJvdCB1c2VybmFtZXMgdGhhdCBjYW4gYnlwYXNzIHRoZSB3cml0ZS1hY2Nlc3MgY2hlY2suICcqJyBpcyBub3Qgc3VwcG9ydGVkLlwiLFxuICAgICAgXCJcIlxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKHtcbiAgICAgICAgYWxsb3dCb3RzLFxuICAgICAgICBhbGxvd1VzZXJzLFxuICAgICAgICBhbGxvd0JvdFVzZXJzLFxuICAgICAgfToge1xuICAgICAgICBhbGxvd0JvdHM6IGJvb2xlYW47XG4gICAgICAgIGFsbG93VXNlcnM6IHN0cmluZztcbiAgICAgICAgYWxsb3dCb3RVc2Vyczogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnN1cmVBY3Rvckhhc1dyaXRlQWNjZXNzKHtcbiAgICAgICAgICBhbGxvd0JvdEFjdG9yczogYWxsb3dCb3RzLFxuICAgICAgICAgIGFsbG93VXNlcnMsXG4gICAgICAgICAgYWxsb3dCb3RVc2VycyxcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXRjaCAocmVzdWx0LnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgXCJhcHByb3ZlZFwiOiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQWN0b3IgJyR7cmVzdWx0LmFjdG9yfScgaXMgcGVybWl0dGVkIHRvIGNvbnRpbnVlLmApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOiB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYEFjdG9yICcke3Jlc3VsdC5hY3Rvcn0nIGlzIG5vdCBwZXJtaXR0ZWQgdG8gcnVuIHRoaXMgYWN0aW9uOiAke3Jlc3VsdC5yZWFzb259YDtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtLnBhcnNlKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW50U3RyaWN0KHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICBpZiAoaXNOYU4ocGFyc2VkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnRlZ2VyOiAke3ZhbHVlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0cmFBcmdzKHZhbHVlOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiW1wiKSkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VBcmdzU3RyaW5nVG9Bcmd2KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1NhZmV0eVN0cmF0ZWd5KHZhbHVlOiBzdHJpbmcpOiBTYWZldHlTdHJhdGVneSB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlIFwiZHJvcC1zdWRvXCI6XG4gICAgY2FzZSBcInJlYWQtb25seVwiOlxuICAgIGNhc2UgXCJ1bnByaXZpbGVnZWQtdXNlclwiOlxuICAgIGNhc2UgXCJ1bnNhZmVcIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzYWZldHkgc3RyYXRlZ3k6ICR7dmFsdWV9LiBNdXN0IGJlIG9uZSBvZiAnZHJvcC1zdWRvJywgJ3JlYWQtb25seScsICd1bnByaXZpbGVnZWQtdXNlcicsIG9yICd1bnNhZmUnLmBcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9PcHRpb25hbFNhbmRib3hNb2RlKHZhbHVlOiBzdHJpbmcpOiBTYW5kYm94TW9kZSB8IG51bGwge1xuICBjb25zdCBub3JtYWxpemVkID0gZW1wdHlBc051bGwodmFsdWUpO1xuICBzd2l0Y2ggKG5vcm1hbGl6ZWQpIHtcbiAgICBjYXNlIG51bGw6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlIFwicmVhZC1vbmx5XCI6XG4gICAgY2FzZSBcIndvcmtzcGFjZS13cml0ZVwiOlxuICAgIGNhc2UgXCJkYW5nZXItZnVsbC1hY2Nlc3NcIjpcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNhbmRib3g6ICR7bm9ybWFsaXplZH0uIE11c3QgYmUgb25lIG9mICdyZWFkLW9ubHknLCAnd29ya3NwYWNlLXdyaXRlJywgb3IgJ2Rhbmdlci1mdWxsLWFjY2VzcycuYFxuICAgICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbXB0eUFzTnVsbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID09IDAgPyBudWxsIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFtcInRydWVcIiwgXCIxXCIsIFwieWVzXCIsIFwieVwiXS5pbmNsdWRlcyhub3JtYWxpemVkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChbXCJmYWxzZVwiLCBcIjBcIiwgXCJub1wiLCBcIm5cIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICR7dmFsdWV9YCk7XG59XG5cbm1haW4oKTtcblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUNvZGV4SG9tZShcbiAgaW5wdXRDb2RleEhvbWU6IHN0cmluZyB8IG51bGwsXG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneSxcbiAgY29kZXhVc2VyOiBzdHJpbmcgfCBudWxsLFxuICBnaXRodWJSdW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoaW5wdXRDb2RleEhvbWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBleHBhbmRUaWxkZShpbnB1dENvZGV4SG9tZSk7XG4gIH1cbiAgY29uc3QgZW52SG9tZSA9IGVtcHR5QXNOdWxsKHByb2Nlc3MuZW52LkNPREVYX0hPTUUgPz8gXCJcIik7XG4gIGlmIChlbnZIb21lICE9IG51bGwpIHtcbiAgICByZXR1cm4gZW52SG9tZTtcbiAgfVxuXG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWQtdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXgtdXNlciBpbnB1dCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gdXNpbmcgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kgYW5kIG5vIGNvZGV4LWhvbWUgaXMgc3BlY2lmaWVkLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBkZXJpdmVTaGFyZWRDb2RleEhvbWVGb3JVbnByaXZpbGVnZWRVc2VyKFxuICAgICAgY29kZXhVc2VyLFxuICAgICAgZ2l0aHViUnVuSWRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvZGV4SG9tZSA9IHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNvZGV4XCIpO1xuICAgIC8vIEVuc3VyZSBkaXJlY3RvcnkgZXhpc3RzIGZvciBkb3duc3RyZWFtIHN0ZXBzIHRoYXQgd2lsbCB3cml0ZSBmaWxlcyBoZXJlLlxuICAgIGF3YWl0IGZzLm1rZGlyKGNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgcmV0dXJuIGNvZGV4SG9tZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZXJpdmVTaGFyZWRDb2RleEhvbWVGb3JVbnByaXZpbGVnZWRVc2VyKFxuICB1c2VyOiBzdHJpbmcsXG4gIGdpdGh1YlJ1bklkOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhvbWUgPSAoXG4gICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcIi11XCIsIHVzZXIsIFwiLS1cIiwgXCJwcmludGVudlwiLCBcIkhPTUVcIl0pXG4gICkudHJpbSgpO1xuICBpZiAoIWhvbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgaG9tZSBkaXJlY3RvcnkgZm9yIHVzZXIgJyR7dXNlcn0nLmApO1xuICB9XG4gIGNvbnN0IGNvZGV4SG9tZSA9IHBhdGguam9pbihob21lLCBcIi5jb2RleFwiKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0ID0gYXdhaXQgZnMuc3RhdChjb2RleEhvbWUpO1xuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIERpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBhbmQgbWF5IGNvbnRhaW4gYSBjb25maWcudG9tbCBjcmVhdGVkIGJ5IHRoZVxuICAgICAgLy8gdXNlciAob3IgYSBwcmV2aW91cyBpbnZvY2F0aW9uIG9mIGNvZGV4LWFjdGlvbiksIHNvIGFzc3VtZSBpdCdzXG4gICAgICAvLyBjb3JyZWN0bHkgcGVybWlzc2lvbmVkLlxuICAgICAgcmV0dXJuIGNvZGV4SG9tZTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBzdGF0IGVycm9ycyBhbmQgdHJ5IHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5LlxuICB9XG5cbiAgLy8gV2UgbXVzdCB1c2Ugc3VkbyBmb3IgdGhlIGZvbGxvd2luZyBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIGJlY2F1c2Ugd2VcbiAgLy8gYXJlIHdyaXRpbmcgdG8gdGhlIGhvbWUgZGlyZWN0b3J5IG9mIGEgZGlmZmVyZW50IHVzZXIuXG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJta2RpclwiLCBjb2RleEhvbWVdKTtcbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcImNob3duXCIsIGAke3VzZXJ9YCwgY29kZXhIb21lXSk7XG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJjaG1vZFwiLCBcIjc1NVwiLCBjb2RleEhvbWVdKTtcblxuICAvLyBjb2RleC1yZXNwb25zZXMtYXBpLXByb3h5IHdpbGwgbmVlZCB0byB3cml0ZSB0aGUgc2VydmVyIGluZm8gZmlsZS5cbiAgY29uc3Qgc2VydmVySW5mb0ZpbGUgPSBwYXRoLmpvaW4oY29kZXhIb21lLCBgJHtnaXRodWJSdW5JZH0uanNvbmApO1xuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwidG91Y2hcIiwgc2VydmVySW5mb0ZpbGVdKTtcbiAgLy8gTWFrZSB0aGUgZmlsZSB3b3JsZC13cml0YWJsZSBmb3IgdGhlIG1vbWVudCwgYnV0IHRoaXMgd2lsbCBiZSBsb2NrZWQgZG93blxuICAvLyB0byByZWFkLW9ubHkgYnkgcm9vdCBiZWZvcmUgdGhlIGFjdGlvbiBjb21wbGV0ZXMuXG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJjaG1vZFwiLCBcIjY2NlwiLCBzZXJ2ZXJJbmZvRmlsZV0pO1xuXG4gIHJldHVybiBjb2RleEhvbWU7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRpbGRlKHA6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwID09PSBcIn5cIikge1xuICAgIHJldHVybiBvcy5ob21lZGlyKCk7XG4gIH1cbiAgaWYgKHAuc3RhcnRzV2l0aChcIn4vXCIpIHx8IHAuc3RhcnRzV2l0aChcIn5cXFxcXCIpKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbihvcy5ob21lZGlyKCksIHAuc2xpY2UoMikpO1xuICB9XG4gIHJldHVybiBwO1xufVxuIiwgImltcG9ydCBjb21tYW5kZXIgZnJvbSAnLi9pbmRleC5qcyc7XG5cbi8vIHdyYXBwZXIgdG8gcHJvdmlkZSBuYW1lZCBleHBvcnRzIGZvciBFU00uXG5leHBvcnQgY29uc3Qge1xuICBwcm9ncmFtLFxuICBjcmVhdGVDb21tYW5kLFxuICBjcmVhdGVBcmd1bWVudCxcbiAgY3JlYXRlT3B0aW9uLFxuICBDb21tYW5kZXJFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yLCAvLyBkZXByZWNhdGVkIG9sZCBuYW1lXG4gIENvbW1hbmQsXG4gIEFyZ3VtZW50LFxuICBPcHRpb24sXG4gIEhlbHAsXG59ID0gY29tbWFuZGVyO1xuIiwgIntcbiAgXCJuYW1lXCI6IFwiQG9wZW5haS9jb2RleC1hY3Rpb25cIixcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4wLjBcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIkdpdEh1YiBBY3Rpb24gdG8gcnVuIGNvZGV4IGV4ZWMgdmlhIHRoZSBDb2RleCBDTEkgd2l0aCBhY2NvbXBhbnlpbmcgaGVscGVyIHN0ZXBzXCIsXG4gIFwicHJpdmF0ZVwiOiB0cnVlLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwiYnVpbGRcIjogXCJlc2J1aWxkIHNyYy9tYWluLnRzIC0tc291cmNlbWFwPWlubGluZSAtLWZvcm1hdD1janMgLS1idW5kbGUgLS1wbGF0Zm9ybT1ub2RlIC0tdGFyZ2V0PW5vZGUyMCAtLW91dGRpcj1kaXN0XCIsXG4gICAgXCJjaGVja1wiOiBcInRzYyAtLW5vRW1pdFwiLFxuICAgIFwidGVzdFwiOiBcInBucG0gcnVuIGJ1aWxkICYmIG5vZGUgLS10ZXN0IHRlc3QvKi50ZXN0Lm1qc1wiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBhY3Rpb25zL2NvcmVcIjogXCJeMS4xMS4xXCIsXG4gICAgXCJAb2N0b2tpdC9ncmFwaHFsXCI6IFwiXjguMi4yXCIsXG4gICAgXCJAb2N0b2tpdC9yZXN0XCI6IFwiXjIxLjEuMVwiLFxuICAgIFwiY29tbWFuZGVyXCI6IFwiMTQuMC4xXCIsXG4gICAgXCJzdHJpbmctYXJndlwiOiBcIjAuMy4yXCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQHR5cGVzL25vZGVcIjogXCJeMjAuMTIuN1wiLFxuICAgIFwiZXNidWlsZFwiOiBcIl4wLjIzLjBcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCJeNS40LjVcIlxuICB9LFxuICBcInBhY2thZ2VNYW5hZ2VyXCI6IFwicG5wbUAxMC4zMy4wK3NoYTUxMi4xMDU2OGJiNGE2YWZiNThjOWViMzYzMGRhOTBjYzk1MTY0MTdhYmViZDNmYWJiZTY3MzlmMGFlNzk1NzI4ZGExNDkxZTlkYjVhNTQ0Yzc2YWQ4ZWI3NTcwZjVjNGJiM2Q2YzYzN2IyY2I0MWJmZGNkYjQ3ZmE4MjNjODY0OTMxOVwiXG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5cbi8qKlxuICogSW4gdGhlb3J5LCB0aGlzIGlzIG5vdCBjYWxsZWQgdW50aWwgYHNlcnZlckluZm9GaWxlYCBpcyBub24tZW1wdHksIGJ1dCB3ZVxuICogd2lsbCBwb2xsIGluIHRoZSByYXJlIGNhc2UgdGhhdCBpdCB3YXMgYSBwYXJ0aWFsIHdyaXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDEwMDsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUoc2VydmVySW5mb0ZpbGUsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pO1xuICAgICAgY29uc3QgeyBwb3J0IH0gPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgIGlmICh0eXBlb2YgcG9ydCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29yZS5zZXRPdXRwdXQoXCJwb3J0XCIsIHBvcnQudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlYWRpbmcgc2VydmVyIGluZm86ICR7ZXJyb3J9YCk7XG4gICAgICBhd2FpdCBzbGVlcCgxMDApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IEVycm9yKGBGYWlsZWQgdG8gcmVhZCBzZXJ2ZXIgaW5mbyBmcm9tICR7c2VydmVySW5mb0ZpbGV9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY2htb2QsIG1rZHRlbXAsIHJlYWRGaWxlLCBybSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHsgc2V0T3V0cHV0IH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcbmltcG9ydCB7IGNoZWNrT3V0cHV0IH0gZnJvbSBcIi4vY2hlY2tPdXRwdXRcIjtcblxuZXhwb3J0IHR5cGUgUHJvbXB0U291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImlubGluZVwiO1xuICAgICAgY29udGVudDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTYWZldHlTdHJhdGVneSA9XG4gIHwgXCJkcm9wLXN1ZG9cIlxuICB8IFwicmVhZC1vbmx5XCJcbiAgfCBcInVucHJpdmlsZWdlZC11c2VyXCJcbiAgfCBcInVuc2FmZVwiO1xuXG5leHBvcnQgdHlwZSBTYW5kYm94TW9kZSA9XG4gIHwgXCJyZWFkLW9ubHlcIlxuICB8IFwid29ya3NwYWNlLXdyaXRlXCJcbiAgfCBcImRhbmdlci1mdWxsLWFjY2Vzc1wiO1xuXG50eXBlIFBlcm1pc3Npb25TZWxlY3Rpb24gPVxuICB8IHsgdHlwZTogXCJzYW5kYm94XCI7IG1vZGU6IFNhbmRib3hNb2RlIH1cbiAgfCB7IHR5cGU6IFwicHJvZmlsZVwiOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgT3V0cHV0U2NoZW1hU291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9O1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcnVucyBhIGBjb2RleCBleGVjYCBjb21tYW5kLCB3cml0ZXMgdGhlIHByb21wdCB0byBpdHMgc3RhbmRhcmQgaW5wdXQsIGFuZCBwdWJsaXNoZXNcbiAqIHRoZSBjb21tYW5kJ3MgZmluYWwgbWVzc2FnZSBhcyB0aGUgYWN0aW9uIG91dHB1dC5cbiAqXG4gKiBBdXRoZW50aWNhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG91dHNpZGUgdGhpcyBmdW5jdGlvbi4gVGhlIGNvbXBvc2l0ZSBhY3Rpb24gc3RhcnRzIG9yIHJldXNlc1xuICogdGhlIFJlc3BvbnNlcyBBUEkgcHJveHkgYW5kIHdyaXRlcyB0aGUgY29ycmVzcG9uZGluZyBDb2RleCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbnZva2luZyB0aGlzXG4gKiBjb21tYW5kLiBLZWVwaW5nIHRoYXQgc2V0dXAgc2VwYXJhdGUgYWxzbyBsZXRzIHRlc3RzIHB1dCBhIGZha2UgYGNvZGV4YCBleGVjdXRhYmxlIG9uIGBQQVRIYCB0b1xuICogdmVyaWZ5IGNvbW1hbmQgY29uc3RydWN0aW9uIGFuZCBvdXRwdXQgaGFuZGxpbmcgd2l0aG91dCBhbiBBUEkga2V5IG9yIG5ldHdvcmsgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvZGV4RXhlYyh7XG4gIHByb21wdCxcbiAgY29kZXhIb21lLFxuICBjZCxcbiAgZXh0cmFBcmdzLFxuICBleHBsaWNpdE91dHB1dEZpbGUsXG4gIG91dHB1dFNjaGVtYSxcbiAgbW9kZWwsXG4gIGVmZm9ydCxcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIGNvZGV4VXNlcixcbiAgc2FuZGJveCxcbiAgcGVybWlzc2lvblByb2ZpbGUsXG59OiB7XG4gIHByb21wdDogUHJvbXB0U291cmNlO1xuICBjb2RleEhvbWU6IHN0cmluZyB8IG51bGw7XG4gIGNkOiBzdHJpbmc7XG4gIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgZXhwbGljaXRPdXRwdXRGaWxlOiBzdHJpbmcgfCBudWxsO1xuICBvdXRwdXRTY2hlbWE6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGw7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBlZmZvcnQ6IHN0cmluZyB8IG51bGw7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgY29kZXhVc2VyOiBzdHJpbmcgfCBudWxsO1xuICBzYW5kYm94OiBTYW5kYm94TW9kZSB8IG51bGw7XG4gIHBlcm1pc3Npb25Qcm9maWxlOiBzdHJpbmcgfCBudWxsO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgaW5wdXQ6IHN0cmluZztcbiAgc3dpdGNoIChwcm9tcHQudHlwZSkge1xuICAgIGNhc2UgXCJpbmxpbmVcIjpcbiAgICAgIGlucHV0ID0gcHJvbXB0LmNvbnRlbnQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgaW5wdXQgPSBhd2FpdCByZWFkRmlsZShwcm9tcHQucGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGwgPVxuICAgIHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIgPyBjb2RleFVzZXIgOiBudWxsO1xuXG4gIGxldCBvdXRwdXRGaWxlOiBPdXRwdXRGaWxlO1xuICBpZiAoZXhwbGljaXRPdXRwdXRGaWxlICE9IG51bGwpIHtcbiAgICBvdXRwdXRGaWxlID0geyB0eXBlOiBcImV4cGxpY2l0XCIsIGZpbGU6IGV4cGxpY2l0T3V0cHV0RmlsZSB9O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dEZpbGUgPSBhd2FpdCBjcmVhdGVUZW1wT3V0cHV0RmlsZSh7IHJ1bkFzVXNlciB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3V0cHV0U2NoZW1hID0gYXdhaXQgcmVzb2x2ZU91dHB1dFNjaGVtYShcbiAgICBvdXRwdXRTY2hlbWEsXG4gICAgcnVuQXNVc2VyXG4gICk7XG4gIGNvbnN0IHBlcm1pc3Npb25TZWxlY3Rpb24gPSBkZXRlcm1pbmVQZXJtaXNzaW9uU2VsZWN0aW9uKHtcbiAgICBzYWZldHlTdHJhdGVneSxcbiAgICByZXF1ZXN0ZWRTYW5kYm94OiBzYW5kYm94LFxuICAgIHBlcm1pc3Npb25Qcm9maWxlLFxuICAgIGV4dHJhQXJncyxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGxldCBwYXRoVG9Db2RleCA9IFwiY29kZXhcIjtcbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICBpZiAoY29kZXhVc2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjb2RleFVzZXIgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyB0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInRoZSAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneSBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gV2UgYXJlIGN1cnJlbnRseSBydW5uaW5nIGFzIGEgcHJpdmlsZWdlZCB1c2VyLCBidXQgYGNvZGV4VXNlcmAgd2lsbCBydW5cbiAgICAvLyB3aXRoIGEgZGlmZmVyZW50ICRQQVRIIHZhcmlhYmxlLCBzbyB3ZSBuZWVkIHRvIGZpbmQgdGhlIGZ1bGwgcGF0aCB0b1xuICAgIC8vIGBjb2RleGAuXG4gICAgcGF0aFRvQ29kZXggPSAoYXdhaXQgY2hlY2tPdXRwdXQoW1wid2hpY2hcIiwgXCJjb2RleFwiXSkpLnRyaW0oKTtcbiAgICBpZiAoIXBhdGhUb0NvZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZmluZCAnY29kZXgnIGluIFBBVEhcIik7XG4gICAgfVxuXG4gICAgY29tbWFuZC5wdXNoKFwic3Vkb1wiLCBcIi11XCIsIGNvZGV4VXNlciwgXCItLVwiKTtcbiAgfVxuXG4gIGNvbW1hbmQucHVzaChcbiAgICBwYXRoVG9Db2RleCxcbiAgICBcImV4ZWNcIixcbiAgICBcIi0tc2tpcC1naXQtcmVwby1jaGVja1wiLFxuICAgIFwiLS1jZFwiLFxuICAgIGNkLFxuICAgIFwiLS1vdXRwdXQtbGFzdC1tZXNzYWdlXCIsXG4gICAgb3V0cHV0RmlsZS5maWxlXG4gICk7XG5cbiAgaWYgKHJlc29sdmVkT3V0cHV0U2NoZW1hICE9IG51bGwpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLW91dHB1dC1zY2hlbWFcIiwgcmVzb2x2ZWRPdXRwdXRTY2hlbWEuZmlsZSk7XG4gIH1cblxuICBpZiAobW9kZWwgIT0gbnVsbCkge1xuICAgIGNvbW1hbmQucHVzaChcIi0tbW9kZWxcIiwgbW9kZWwpO1xuICB9XG5cbiAgaWYgKGVmZm9ydCAhPSBudWxsKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjY29uZmlnXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjbW9kZWxfcmVhc29uaW5nX2VmZm9ydFxuICAgIGNvbW1hbmQucHVzaChcIi0tY29uZmlnXCIsIGBtb2RlbF9yZWFzb25pbmdfZWZmb3J0PVwiJHtlZmZvcnR9XCJgKTtcbiAgfVxuXG4gIGNvbW1hbmQucHVzaCguLi5leHRyYUFyZ3MpO1xuXG4gIHN3aXRjaCAocGVybWlzc2lvblNlbGVjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBcInNhbmRib3hcIjpcbiAgICAgIGNvbW1hbmQucHVzaChcIi0tc2FuZGJveFwiLCBwZXJtaXNzaW9uU2VsZWN0aW9uLm1vZGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInByb2ZpbGVcIjpcbiAgICAgIGNvbW1hbmQucHVzaChcbiAgICAgICAgXCItLWNvbmZpZ1wiLFxuICAgICAgICBgZGVmYXVsdF9wZXJtaXNzaW9ucz0ke0pTT04uc3RyaW5naWZ5KHBlcm1pc3Npb25TZWxlY3Rpb24ubmFtZSl9YFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgZW52ID0geyAuLi5wcm9jZXNzLmVudiB9O1xuICBpZiAoIWVudi5DT0RFWF9JTlRFUk5BTF9PUklHSU5BVE9SX09WRVJSSURFKSB7XG4gICAgZW52LkNPREVYX0lOVEVSTkFMX09SSUdJTkFUT1JfT1ZFUlJJREUgPSBcImNvZGV4X2dpdGh1Yl9hY3Rpb25cIjtcbiAgfVxuICBsZXQgZXh0cmFFbnYgPSBcIlwiO1xuICBpZiAoY29kZXhIb21lICE9IG51bGwpIHtcbiAgICBlbnYuQ09ERVhfSE9NRSA9IGNvZGV4SG9tZTtcbiAgICBleHRyYUVudiA9IGBDT0RFWF9IT01FPSR7Y29kZXhIb21lfSBgO1xuICB9XG5cbiAgLy8gU3BsaXQgdGhlIGBwcm9ncmFtYCBmcm9tIHRoZSBgYXJnc2AgZm9yIGBzcGF3bigpYC5cbiAgY29uc3QgcHJvZ3JhbSA9IGNvbW1hbmQuc2hpZnQoKSE7XG4gIGNvbnNvbGUubG9nKFxuICAgIGBSdW5uaW5nOiAke2V4dHJhRW52fSR7cHJvZ3JhbX0gJHtjb21tYW5kXG4gICAgICAubWFwKChhKSA9PiBKU09OLnN0cmluZ2lmeShhKSlcbiAgICAgIC5qb2luKFwiIFwiKX1gXG4gICk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGQgPSBzcGF3bihwcm9ncmFtLCBjb21tYW5kLCB7XG4gICAgICAgIGVudixcbiAgICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgIH0pO1xuICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoaW5wdXQpO1xuICAgICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCR7cHJvZ3JhbX0gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmluYWxpemVFeGVjdXRpb24ob3V0cHV0RmlsZSwgcnVuQXNVc2VyKTtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwT3V0cHV0U2NoZW1hKHJlc29sdmVkT3V0cHV0U2NoZW1hKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZUV4ZWN1dGlvbihcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgbGFzdE1lc3NhZ2U6IHN0cmluZztcbiAgICBpZiAocnVuQXNVc2VyID09IG51bGwpIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgcmVhZEZpbGUob3V0cHV0RmlsZS5maWxlLCBcInV0ZjhcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwiY2F0XCIsXG4gICAgICAgIG91dHB1dEZpbGUuZmlsZSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBzZXRPdXRwdXQoXCJmaW5hbC1tZXNzYWdlXCIsIGxhc3RNZXNzYWdlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwVGVtcE91dHB1dChvdXRwdXRGaWxlLCBydW5Bc1VzZXIpO1xuICB9XG59XG5cbnR5cGUgT3V0cHV0RmlsZSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJleHBsaWNpdFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRlbXBcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICB9O1xuXG50eXBlIFJlc29sdmVkT3V0cHV0U2NoZW1hID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImV4cGxpY2l0XCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwidGVtcFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgICAgZGlyOiBzdHJpbmc7XG4gICAgfTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcE91dHB1dEZpbGUoe1xuICBydW5Bc1VzZXIsXG59OiB7XG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbDtcbn0pOiBQcm9taXNlPE91dHB1dEZpbGU+IHtcbiAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LWV4ZWMtXCIsIHJ1bkFzVXNlcik7XG4gIHJldHVybiB7IHR5cGU6IFwidGVtcFwiLCBmaWxlOiBwYXRoLmpvaW4oZGlyLCBcIm91dHB1dC5tZFwiKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwVGVtcE91dHB1dChcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgc3dpdGNoIChvdXRwdXRGaWxlLnR5cGUpIHtcbiAgICBjYXNlIFwiZXhwbGljaXRcIjpcbiAgICAgIC8vIERvIG5vdCBkZWxldGUgdXNlci1zcGVjaWZpZWQgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6IHtcbiAgICAgIGNvbnN0IHsgZmlsZSB9ID0gb3V0cHV0RmlsZTtcbiAgICAgIGlmIChydW5Bc1VzZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSk7XG4gICAgICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcInJtXCIsIFwiLXJmXCIsIHBhdGguZGlybmFtZShmaWxlKV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogT3V0cHV0U2NoZW1hU291cmNlIHwgbnVsbCxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPFJlc29sdmVkT3V0cHV0U2NoZW1hIHwgbnVsbD4ge1xuICBpZiAoc2NoZW1hID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIHsgdHlwZTogXCJleHBsaWNpdFwiLCBmaWxlOiBzY2hlbWEucGF0aCB9O1xuICAgIGNhc2UgXCJpbmxpbmVcIjoge1xuICAgICAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LW91dHB1dC1zY2hlbWEtXCIsIHJ1bkFzVXNlcik7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5qb2luKGRpciwgXCJzY2hlbWEuanNvblwiKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlLCBzY2hlbWEuY29udGVudCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRlbXBcIiwgZmlsZSwgZGlyIH07XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogUmVzb2x2ZWRPdXRwdXRTY2hlbWEgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHNjaGVtYSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgIGNhc2UgXCJleHBsaWNpdFwiOlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6XG4gICAgICBhd2FpdCBybShzY2hlbWEuZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcERpcihcbiAgcHJlZml4OiBzdHJpbmcsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHJ1bkFzVXNlciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGF3YWl0IG1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCBwcmVmaXgpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwibWt0ZW1wXCIsXG4gICAgICAgIFwiLWRcIixcbiAgICAgICAgXCItdFwiLFxuICAgICAgICBgJHtwcmVmaXh9LlhYWFhYWGAsXG4gICAgICBdKVxuICAgICkudHJpbSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZVBlcm1pc3Npb25TZWxlY3Rpb24oe1xuICBzYWZldHlTdHJhdGVneSxcbiAgcmVxdWVzdGVkU2FuZGJveCxcbiAgcGVybWlzc2lvblByb2ZpbGUsXG4gIGV4dHJhQXJncyxcbn06IHtcbiAgc2FmZXR5U3RyYXRlZ3k6IFNhZmV0eVN0cmF0ZWd5O1xuICByZXF1ZXN0ZWRTYW5kYm94OiBTYW5kYm94TW9kZSB8IG51bGw7XG4gIHBlcm1pc3Npb25Qcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBleHRyYUFyZ3M6IEFycmF5PHN0cmluZz47XG59KTogUGVybWlzc2lvblNlbGVjdGlvbiB7XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsICYmIHJlcXVlc3RlZFNhbmRib3ggIT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYHBlcm1pc3Npb24tcHJvZmlsZWAgYW5kIGBzYW5kYm94YCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBQZXJtaXNzaW9uIHByb2ZpbGVzIGRvIG5vdCBjb21wb3NlIHdpdGggbGVnYWN5IHNhbmRib3ggc2V0dGluZ3MuXCJcbiAgICApO1xuICB9XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsICYmIHNhZmV0eVN0cmF0ZWd5ID09PSBcInJlYWQtb25seVwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJgcGVybWlzc2lvbi1wcm9maWxlYCBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCB0aGUgYHJlYWQtb25seWAgc2FmZXR5IHN0cmF0ZWd5IGJlY2F1c2UgdGhhdCBzdHJhdGVneSBmb3JjZXMgdGhlIGxlZ2FjeSByZWFkLW9ubHkgc2FuZGJveC5cIlxuICAgICk7XG4gIH1cbiAgaWYgKHBlcm1pc3Npb25Qcm9maWxlICE9IG51bGwgJiYgZXh0cmFBcmdzU2VsZWN0U2FuZGJveChleHRyYUFyZ3MpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJgcGVybWlzc2lvbi1wcm9maWxlYCBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhIHNhbmRib3ggb3ZlcnJpZGUgaW4gYGNvZGV4LWFyZ3NgLlwiXG4gICAgKTtcbiAgfVxuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwicmVhZC1vbmx5XCIpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcInNhbmRib3hcIiwgbW9kZTogXCJyZWFkLW9ubHlcIiB9O1xuICB9XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJwcm9maWxlXCIsIG5hbWU6IHBlcm1pc3Npb25Qcm9maWxlIH07XG4gIH1cbiAgcmV0dXJuIHsgdHlwZTogXCJzYW5kYm94XCIsIG1vZGU6IHJlcXVlc3RlZFNhbmRib3ggPz8gXCJ3b3Jrc3BhY2Utd3JpdGVcIiB9O1xufVxuXG5mdW5jdGlvbiBleHRyYUFyZ3NTZWxlY3RTYW5kYm94KGFyZ3M6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGFyZ3Muc29tZSgoYXJnLCBpbmRleCkgPT4ge1xuICAgIGlmIChcbiAgICAgIGFyZyA9PT0gXCItLXNhbmRib3hcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItLXNhbmRib3g9XCIpIHx8XG4gICAgICBhcmcgPT09IFwiLXNcIiB8fFxuICAgICAgYXJnLnN0YXJ0c1dpdGgoXCItcz1cIilcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoYXJnID09PSBcIi0tY29uZmlnXCIgfHwgYXJnID09PSBcIi1jXCIpIHtcbiAgICAgIHJldHVybiBjb25maWdPdmVycmlkZVNlbGVjdHNTYW5kYm94KGFyZ3NbaW5kZXggKyAxXSk7XG4gICAgfVxuICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tY29uZmlnPVwiKSkge1xuICAgICAgcmV0dXJuIGNvbmZpZ092ZXJyaWRlU2VsZWN0c1NhbmRib3goYXJnLnNsaWNlKFwiLS1jb25maWc9XCIubGVuZ3RoKSk7XG4gICAgfVxuICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi1jPVwiKSkge1xuICAgICAgcmV0dXJuIGNvbmZpZ092ZXJyaWRlU2VsZWN0c1NhbmRib3goYXJnLnNsaWNlKFwiLWM9XCIubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ092ZXJyaWRlU2VsZWN0c1NhbmRib3gob3ZlcnJpZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBjb25zdCBrZXkgPSBvdmVycmlkZT8udHJpbVN0YXJ0KCkuc3BsaXQoL1s9Ll0vLCAxKVswXTtcbiAgcmV0dXJuIGtleSA9PT0gXCJzYW5kYm94X21vZGVcIiB8fCBrZXkgPT09IFwic2FuZGJveF93b3Jrc3BhY2Vfd3JpdGVcIjtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja091dHB1dChjb21tYW5kOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW3Byb2csIC4uLmFyZ3NdID0gY29tbWFuZDtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihwcm9nLCBhcmdzLCB7XG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJpbmhlcml0XCJdLFxuICAgIH0pO1xuXG4gICAgcHJvYy5vbihcImVycm9yXCIsIHJlamVjdCk7XG5cbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcbiAgICBwcm9jLnN0ZG91dC5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBvdXRwdXQgKz0gY2h1bmsudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIHByb2Mub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgJHtwcm9nfSBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbnRlcmZhY2UgRXhlY09wdGlvbnMge1xuICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgaWdub3JlRmFpbHVyZT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBFeGVjUmVzdWx0IHtcbiAgY29kZTogbnVtYmVyO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFN1ZG9PcHRpb25zIHtcbiAgdXNlcjogc3RyaW5nO1xuICBncm91cDogc3RyaW5nO1xuICByb290UGhhc2U6IGJvb2xlYW47XG59XG5cbmNvbnN0IExJTlVYX1BMQVRGT1JNID0gXCJsaW51eFwiO1xuY29uc3QgTUFDT1NfUExBVEZPUk0gPSBcImRhcndpblwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJvcFN1ZG8ob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybTtcbiAgaWYgKCFbTElOVVhfUExBVEZPUk0sIE1BQ09TX1BMQVRGT1JNXS5pbmNsdWRlcyhwbGF0Zm9ybSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgT1MgZm9yIGRyb3Atc3VkbyBzYWZldHkgc3RyYXRlZ3k6ICR7cGxhdGZvcm19YFxuICAgICk7XG4gIH1cblxuICBjb25zdCB7IHJvb3RQaGFzZSB9ID0gb3B0aW9ucztcbiAgaWYgKHJvb3RQaGFzZSkge1xuICAgIGF3YWl0IGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9ucyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpO1xuICAvLyBgc3VkbyAtS2AgaW52YWxpZGF0ZXMgY2FjaGVkIGNyZWRlbnRpYWxzIGJ1dCBleGl0cyBub24temVybyB3aGVuIG5vIHRpY2tldFxuICAvLyBleGlzdHMgeWV0LiBJZ25vcmUgdGhhdCBmYWlsdXJlIHNvIGZyZXNoIHJ1bm5lcnMgZG9uJ3QgYmxvdyB1cC5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG5cbiAgY29uc3QgZXhlY0FyZ3MgPSBbLi4ucHJvY2Vzcy5leGVjQXJndl07XG4gIGNvbnN0IHNjcmlwdFBhdGggPSBwcm9jZXNzLmFyZ3ZbMV07XG4gIC8vIFJlLWVudGVyIHRoaXMgY29tbWFuZCB1bmRlciBzdWRvIHNvIHRoZSBwcml2aWxlZ2UtZHJvcHBpbmcgd29yayBoYXBwZW5zIGluIGFcbiAgLy8gc2luZ2xlIHBsYWNlIHJlZ2FyZGxlc3Mgb2YgdGhlIGhvc3QgcGxhdGZvcm0uXG4gIGF3YWl0IGV4ZWNDb21tYW5kKFwic3Vkb1wiLCBbXG4gICAgXCItblwiLFxuICAgIFwibm9kZVwiLFxuICAgIC4uLmV4ZWNBcmdzLFxuICAgIHNjcmlwdFBhdGgsXG4gICAgXCJkcm9wLXN1ZG9cIixcbiAgICBcIi0tcm9vdC1waGFzZVwiLFxuICAgIFwiLS11c2VyXCIsXG4gICAgb3B0aW9ucy51c2VyLFxuICAgIFwiLS1ncm91cFwiLFxuICAgIG9wdGlvbnMuZ3JvdXAsXG4gIF0pO1xuXG4gIC8vIEludmFsaWRhdGUgdGhlIHN1ZG8gdGlja2V0IGFnYWluOyBpZ25vcmUgZmFpbHVyZXMgZm9yIHRoZSBzYW1lIHJlYXNvbiBhc1xuICAvLyBhYm92ZSAoc29tZSBlbnZpcm9ubWVudHMgcmV0dXJuIGFuIGVycm9yIHdoZW4gbm8gdGltZXN0YW1wIGV4aXN0cykuXG4gIGF3YWl0IGV4ZWNDb21tYW5kKFwic3Vkb1wiLCBbXCItS1wiXSwgeyBpZ25vcmVGYWlsdXJlOiB0cnVlIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkcm9wU3Vkb1dpdGhQcml2aWxlZ2VzKG9wdGlvbnM6IERyb3BTdWRvT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAodHlwZW9mIHByb2Nlc3MuZ2V0dWlkID09PSBcImZ1bmN0aW9uXCIgJiYgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Atc3VkbyByb290IHBoYXNlIG11c3QgcnVuIGFzIHJvb3QuXCIpO1xuICB9XG5cbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICBzd2l0Y2ggKHByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICBjYXNlIExJTlVYX1BMQVRGT1JNOiB7XG4gICAgICBpZiAoYXdhaXQgaXNVc2VySW5Hcm91cChvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXApKSB7XG4gICAgICAgIGlmIChhd2FpdCBjb21tYW5kRXhpc3RzKFwiZGVsdXNlclwiKSkge1xuICAgICAgICAgIGF3YWl0IGV4ZWNDb21tYW5kKFwiZGVsdXNlclwiLCBbb3B0aW9ucy51c2VyLCBvcHRpb25zLmdyb3VwXSk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgVXNlZCAnZGVsdXNlciAke29wdGlvbnMudXNlcn0gJHtvcHRpb25zLmdyb3VwfScgdG8gZHJvcCBzdWRvIHByaXZpbGVnZS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChhd2FpdCBjb21tYW5kRXhpc3RzKFwiZ3Bhc3N3ZFwiKSkge1xuICAgICAgICAgIGF3YWl0IGV4ZWNDb21tYW5kKFwiZ3Bhc3N3ZFwiLCBbXCItZFwiLCBvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXBdKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBVc2VkICdncGFzc3dkIC1kICR7b3B0aW9ucy51c2VyfSAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5laXRoZXIgZGVsdXNlciBub3IgZ3Bhc3N3ZCBhdmFpbGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7b3B0aW9ucy51c2VyfSBpcyBub3QgYSBtZW1iZXIgb2YgdGhlICR7b3B0aW9ucy5ncm91cH0gZ3JvdXAuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgTUFDT1NfUExBVEZPUk06IHtcbiAgICAgIGlmIChhd2FpdCBpc1VzZXJJbkdyb3VwKG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cCkpIHtcbiAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkc2VkaXRncm91cFwiLCBbXG4gICAgICAgICAgXCItb1wiLFxuICAgICAgICAgIFwiZWRpdFwiLFxuICAgICAgICAgIFwiLWRcIixcbiAgICAgICAgICBvcHRpb25zLnVzZXIsXG4gICAgICAgICAgXCItdFwiLFxuICAgICAgICAgIFwidXNlclwiLFxuICAgICAgICAgIG9wdGlvbnMuZ3JvdXAsXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgVXNlZCAnZHNlZGl0Z3JvdXAgLW8gZWRpdCAtZCAke29wdGlvbnMudXNlcn0gLXQgdXNlciAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgKTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtvcHRpb25zLnVzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtvcHRpb25zLmdyb3VwfSBncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5zdXBwb3J0ZWQgT1MgZm9yIGRyb3Atc3VkbyBzYWZldHkgc3RyYXRlZ3k6ICR7cHJvY2Vzcy5wbGF0Zm9ybX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcmVtb3ZlVXNlckZyb21TdWRvZXJzRChvcHRpb25zLnVzZXIpO1xuICBpZiAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xuICAgICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG4gICAgfVxuICAgIGNoYW5nZWQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYE5vICR7b3B0aW9ucy51c2VyfSBlbnRyaWVzIGZvdW5kIGluIC9ldGMvc3Vkb2Vycy5kIHJlcXVpcmluZyBjaGFuZ2VzLmBcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc3Vkb2Vyc01lc3NhZ2UgPSBhd2FpdCBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoXG4gICAgXCIvZXRjL3N1ZG9lcnNcIixcbiAgICBvcHRpb25zLnVzZXJcbiAgKTtcbiAgaWYgKHN1ZG9lcnNNZXNzYWdlKSB7XG4gICAgY29uc29sZS5sb2coc3Vkb2Vyc01lc3NhZ2UpO1xuICAgIGNoYW5nZWQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYE5vICR7b3B0aW9ucy51c2VyfSBlbnRyaWVzIGZvdW5kIGluIC9ldGMvc3Vkb2VycyByZXF1aXJpbmcgY2hhbmdlcy5gXG4gICAgKTtcbiAgfVxuXG4gIGlmICghY2hhbmdlZCkge1xuICAgIGNvbnNvbGUubG9nKGAke29wdGlvbnMudXNlcn0gYWxyZWFkeSBsYWNrcyBzdWRvIHByaXZpbGVnZXMuYCk7XG4gIH1cblxuICBjb25zdCBncm91cHNBZnRlciA9IGF3YWl0IGV4ZWNDb21tYW5kKFwiaWRcIiwgW1wiLUduXCIsIG9wdGlvbnMudXNlcl0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICB9KTtcbiAgY29uc29sZS5sb2coXG4gICAgYEdyb3VwcyBmb3IgJHtvcHRpb25zLnVzZXJ9IGFmdGVyIGNsZWFudXA6ICR7Z3JvdXBzQWZ0ZXIuc3Rkb3V0LnRyaW0oKX1gXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVBhc3N3b3JkbGVzc1N1ZG8oKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1uXCIsIFwidHJ1ZVwiXSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQ6IHBhc3N3b3JkbGVzcyBzdWRvIG5vdCBhdmFpbGFibGUuXCIpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzVXNlckluR3JvdXAodXNlcjogc3RyaW5nLCBncm91cDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNDb21tYW5kKFwiaWRcIiwgW1wiLW5HXCIsIHVzZXJdLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBpZ25vcmVGYWlsdXJlOiB0cnVlLFxuICB9KTtcbiAgaWYgKHJlc3VsdC5jb2RlICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGdyb3VwcyA9IHJlc3VsdC5zdGRvdXRcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUubGVuZ3RoID4gMCk7XG4gIHJldHVybiBncm91cHMuaW5jbHVkZXMoZ3JvdXApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kRXhpc3RzKGJpbmFyeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNDb21tYW5kKFwic2hcIiwgW1wiLWNcIiwgYGNvbW1hbmQgLXYgJHtiaW5hcnl9YF0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gIH0pO1xuICByZXR1cm4gcmVzdWx0LmNvZGUgPT09IDA7XG59XG5cbi8qKlxuICogU3RyaXBzIG5vbi1jb21tZW50IGVudHJpZXMgZ3JhbnRpbmcgc3VkbyB0byBgdXNlcmAgYWNyb3NzIGAvZXRjL3N1ZG9lcnMuZGBcbiAqIGZpbGVzLlxuICpcbiAqIFN0cmF0ZWd5OlxuICogICAtIGVudW1lcmF0ZSByZWd1bGFyIGZpbGVzIHVuZGVyIGAvZXRjL3N1ZG9lcnMuZGBcbiAqICAgLSByZW1vdmUgbGluZXMgd2hvc2UgZmlyc3QgdG9rZW4gbWF0Y2hlcyB0aGUgdGFyZ2V0IHVzZXIgd2hpbGUga2VlcGluZ1xuICogICAgIGNvbW1lbnRzL2JsYW5rIGxpbmVzIGludGFjdFxuICogICAtIHJld3JpdGUgZmlsZXMgaW4tcGxhY2Ugd2l0aCBvcmlnaW5hbCBuZXdsaW5lIHN0eWxlIGFuZCBwZXJtaXNzaW9uc1xuICogICAtIHJlcG9ydCB3aGljaCBmaWxlcyB3ZXJlIGNoYW5nZWQgc28gY2FsbGVycyBjYW4gc3VyZmFjZSB1c2VmdWwgbG9nc1xuICovXG5hc3luYyBmdW5jdGlvbiByZW1vdmVVc2VyRnJvbVN1ZG9lcnNEKHVzZXI6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICBjb25zdCBzdWRvZXJzRGlyID0gXCIvZXRjL3N1ZG9lcnMuZFwiO1xuICBsZXQgZW50cmllczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IGRpckVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHN1ZG9lcnNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBlbnRyaWVzID0gZGlyRW50cmllc1xuICAgICAgLmZpbHRlcigoZGlyZW50KSA9PiBkaXJlbnQuaXNGaWxlKCkpXG4gICAgICAubWFwKChkaXJlbnQpID0+IHBhdGguam9pbihzdWRvZXJzRGlyLCBkaXJlbnQubmFtZSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5UGF0aCBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShlbnRyeVBhdGgsIHVzZXIpO1xuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXNzYWdlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICB1c2VyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBsZXQgc3RhdHM7XG4gIGxldCBvcmlnaW5hbDogc3RyaW5nO1xuICB0cnkge1xuICAgIHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gICAgb3JpZ2luYWwgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld2xpbmUgPSBvcmlnaW5hbC5pbmNsdWRlcyhcIlxcclxcblwiKSA/IFwiXFxyXFxuXCIgOiBcIlxcblwiO1xuICBjb25zdCBlbmRzV2l0aE5ld2xpbmUgPVxuICAgIG9yaWdpbmFsLmVuZHNXaXRoKFwiXFxuXCIpIHx8IG9yaWdpbmFsLmVuZHNXaXRoKFwiXFxyXFxuXCIpO1xuICBjb25zdCByYXdMaW5lcyA9IG9yaWdpbmFsLnNwbGl0KC9cXHI/XFxuLyk7XG4gIGlmIChyYXdMaW5lcy5sZW5ndGggPiAwICYmIHJhd0xpbmVzW3Jhd0xpbmVzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XG4gICAgcmF3TGluZXMucG9wKCk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZExpbmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhd0xpbmVzKSB7XG4gICAgY29uc3QgdHJpbW1lZExlYWRpbmcgPSBsaW5lLnRyaW1TdGFydCgpO1xuICAgIGlmICh0cmltbWVkTGVhZGluZy5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0cmltbWVkTGVhZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZpbHRlcmVkTGluZXMucHVzaChsaW5lKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbnMgPSB0cmltbWVkTGVhZGluZy5zcGxpdCgvXFxzKy8pO1xuICAgIGlmICh0b2tlbnNbMF0gPT09IHVzZXIpIHtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZpbHRlcmVkTGluZXMucHVzaChsaW5lKTtcbiAgfVxuXG4gIGlmICghY2hhbmdlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVidWlsdCA9IGZpbHRlcmVkTGluZXMuam9pbihuZXdsaW5lKSArIChlbmRzV2l0aE5ld2xpbmUgPyBuZXdsaW5lIDogXCJcIik7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCByZWJ1aWx0LCBcInV0ZjhcIik7XG4gICAgYXdhaXQgZnMuY2htb2QoZmlsZVBhdGgsIHN0YXRzLm1vZGUgJiAwbzc3Nyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGBSZW1vdmVkICR7dXNlcn0gZW50cnkgZnJvbSAke2ZpbGVQYXRofWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNDb21tYW5kKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IEFycmF5PHN0cmluZz4sXG4gIG9wdGlvbnM6IEV4ZWNPcHRpb25zID0ge31cbik6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICBjb25zdCBjYXB0dXJlID0gb3B0aW9ucy5jYXB0dXJlID8/IGZhbHNlO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogY2FwdHVyZSA/IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdIDogXCJpbmhlcml0XCIsXG4gIH0pO1xuXG4gIGxldCBzdGRvdXQgPSBcIlwiO1xuICBsZXQgc3RkZXJyID0gXCJcIjtcblxuICBpZiAoY2FwdHVyZSAmJiBjaGlsZC5zdGRvdXQpIHtcbiAgICBjaGlsZC5zdGRvdXQuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gY2h1bms7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY2FwdHVyZSAmJiBjaGlsZC5zdGRlcnIpIHtcbiAgICBjaGlsZC5zdGRlcnIuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBzdGRlcnIgKz0gY2h1bms7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8RXhlY1Jlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgY29uc3QgZXhpdENvZGUgPSBjb2RlID8/IDA7XG4gICAgICBpZiAoZXhpdENvZGUgIT09IDAgJiYgIW9wdGlvbnMuaWdub3JlRmFpbHVyZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXCIgXCIpfSAoZXhpdCBjb2RlICR7ZXhpdENvZGV9KWBcbiAgICAgICAgKTtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuY29kZSA9IGV4aXRDb2RlO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5zdGRvdXQgPSBzdGRvdXQ7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZGVyciA9IHN0ZGVycjtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7IGNvZGU6IGV4aXRDb2RlLCBzdGRvdXQsIHN0ZGVyciB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmludGVyZmFjZSBFeGVjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcbmltcG9ydCB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvcmVzdFwiO1xuXG5leHBvcnQgdHlwZSBXcml0ZUFjY2Vzc0NoZWNrID1cbiAgfCB7XG4gICAgICBzdGF0dXM6IFwiYXBwcm92ZWRcIjtcbiAgICAgIGFjdG9yOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiO1xuICAgICAgYWN0b3I6IHN0cmluZztcbiAgICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIH07XG5cbnR5cGUgRW5zdXJlV3JpdGVBY2Nlc3NPcHRpb25zID0ge1xuICBvY3Rva2l0PzogT2N0b2tpdDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGFjdG9yPzogc3RyaW5nO1xuICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0cnVzdGVkIEdpdEh1YiBib3QgYWN0b3JzIGFyZSBhbGxvd2VkIHdpdGhvdXQgY2hlY2tpbmdcbiAgICogY29sbGFib3JhdG9yIHBlcm1pc3Npb25zLiBPdGhlciBib3RzIG11c3QgcGFzcyB0aGUgc2FtZSBjaGVja3MgYXMgaHVtYW5cbiAgICogdXNlcnMuXG4gICAqL1xuICBhbGxvd0JvdEFjdG9ycz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIEdpdEh1YiB1c2VybmFtZXMgb3IgJyonIHRvIGFsbG93IGFsbCB1c2Vycy5cbiAgICogQ2FzZS1pbnNlbnNpdGl2ZTsgZW1wdHkgc3RyaW5nIG9yIHVuZGVmaW5lZCBkaXNhYmxlcyB0aGlzIG92ZXJyaWRlLlxuICAgKi9cbiAgYWxsb3dVc2Vycz86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgR2l0SHViIGJvdCB1c2VybmFtZXMuICcqJyBpcyBub3Qgc3VwcG9ydGVkLlxuICAgKiBFbnRyaWVzIG1heSBpbmNsdWRlIG9yIG9taXQgdGhlIHRyYWlsaW5nIFtib3RdIHN1ZmZpeC5cbiAgICovXG4gIGFsbG93Qm90VXNlcnM/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IHRoZSBHaXRIdWIgYWN0b3Igd2hpY2ggdHJpZ2dlcmVkIHRoZSBjdXJyZW50IHdvcmtmbG93IGhhcyB3cml0ZVxuICogYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2VzcyhcbiAgb3B0aW9uczogRW5zdXJlV3JpdGVBY2Nlc3NPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFdyaXRlQWNjZXNzQ2hlY2s+IHtcbiAgY29uc3QgYWN0b3IgPSBvcHRpb25zLmFjdG9yID8/IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgY29uc3QgcmVwb3NpdG9yeSA9IG9wdGlvbnMucmVwb3NpdG9yeSA/PyBwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWTtcbiAgY29uc3QgYWxsb3dCb3RBY3RvcnMgPSBvcHRpb25zLmFsbG93Qm90QWN0b3JzID8/IGZhbHNlO1xuXG4gIGlmICghYWN0b3IgfHwgYWN0b3IudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yOiBhY3RvciA/PyBcIjx1bmtub3duPlwiLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9BQ1RPUiBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRyaWdnZXJpbmcgdXNlci5cIixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFyZXBvc2l0b3J5IHx8IHJlcG9zaXRvcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9SRVBPU0lUT1JZIGlzIG5vdCBzZXQ7IGNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHJlcG9zaXRvcnkuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFtvd25lciwgcmVwb10gPSByZXBvc2l0b3J5LnNwbGl0KFwiL1wiKTtcbiAgaWYgKCFvd25lciB8fCAhcmVwbykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgR0lUSFVCX1JFUE9TSVRPUlkgbXVzdCBiZSBpbiB0aGUgZm9ybWF0ICdvd25lci9yZXBvJywgcmVjZWl2ZWQ6ICcke3JlcG9zaXRvcnl9Jy5gLFxuICAgIH07XG4gIH1cblxuICAvLyBHaXRIdWItYnVpbHQgd29ya2Zsb3dzIGRvIG5vdCBoYXZlIGEgbWVhbmluZ2Z1bCBjb2xsYWJvcmF0b3IgcGVybWlzc2lvblxuICAvLyBsZXZlbC4gT25seSB0cnVzdCB0aGUgYnVpbHQtaW4gYm90IGFjdG9ycyBHaXRIdWIgb3ducy5cbiAgaWYgKGFsbG93Qm90QWN0b3JzICYmIGlzVHJ1c3RlZEdpdEh1YkJvdEFjdG9yKGFjdG9yKSkge1xuICAgIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBpcyBhIHRydXN0ZWQgR2l0SHViIGJvdCBhY2NvdW50OyBza2lwcGluZyBleHBsaWNpdCBwZXJtaXNzaW9uIGNoZWNrLmApO1xuICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICB9XG5cbiAgY29uc3QgYWxsb3dlZEJvdEFjdG9ycyA9IHBhcnNlQWxsb3dlZEJvdEFjdG9ycyhvcHRpb25zLmFsbG93Qm90VXNlcnMgPz8gXCJcIik7XG4gIGlmIChhbGxvd2VkQm90QWN0b3JzIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYWxsb3dlZEJvdEFjdG9ycy5tZXNzYWdlLFxuICAgIH07XG4gIH1cbiAgaWYgKGlzQm90QWN0b3IoYWN0b3IpICYmIGFsbG93ZWRCb3RBY3RvcnMuaGFzKG5vcm1hbGl6ZUJvdEFjdG9yKGFjdG9yKSkpIHtcbiAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgZXhwbGljaXRseSBhbGxvd2VkIHZpYSBhbGxvdy1ib3QtdXNlcnMuYCk7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICAvLyBBbGxvdy1saXN0IG92ZXJyaWRlOiBpZiBhbGxvd1VzZXJzIGlzICcqJyBhbGxvdyBhbGwgdXNlcnMuIElmIGl0IGlzIGFcbiAgLy8gY29tbWEtc2VwYXJhdGVkIGxpc3QsIGFsbG93IGxpc3RlZCB1c2VycyAoY2FzZS1pbnNlbnNpdGl2ZSkgd2l0aG91dCBjaGVja2luZ1xuICAvLyBjb2xsYWJvcmF0b3IgcGVybWlzc2lvbnMuXG4gIGNvbnN0IGFsbG93VXNlcnNTcGVjID0gKG9wdGlvbnMuYWxsb3dVc2VycyA/PyBcIlwiKS50cmltKCk7XG4gIGlmIChhbGxvd1VzZXJzU3BlYy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGFsbG93VXNlcnNTcGVjID09PSBcIipcIikge1xuICAgICAgY29yZS5pbmZvKFwiYWxsb3ctdXNlcnM9JyonIHNwZWNpZmllZDsgYWxsb3dpbmcgYWxsIHVzZXJzIHRvIHByb2NlZWQuXCIpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gICAgfVxuICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgYWxsb3dVc2Vyc1NwZWNcbiAgICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApLFxuICAgICk7XG4gICAgaWYgKGFsbG93ZWQuaGFzKGFjdG9yLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgZXhwbGljaXRseSBhbGxvd2VkIHZpYSBhbGxvdy11c2Vycy5gKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlbiA/PyBnZXRUb2tlbkZyb21FbnYoKTtcbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkEgR2l0SHViIHRva2VuIGlzIHJlcXVpcmVkIHRvIGNoZWNrIHBlcm1pc3Npb25zIChzZXQgR0lUSFVCX1RPS0VOIG9yIEdIX1RPS0VOKS5cIixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYmFzZVVybCA9IHByb2Nlc3MuZW52LkdJVEhVQl9BUElfVVJMPy50cmltKCk7XG4gIGNvbnN0IG9jdG9raXQgPVxuICAgIG9wdGlvbnMub2N0b2tpdCA/P1xuICAgIG5ldyBPY3Rva2l0KHtcbiAgICAgIGF1dGg6IHRva2VuLFxuICAgICAgLi4uKGJhc2VVcmwgPyB7IGJhc2VVcmwgfSA6IHt9KSxcbiAgICB9KTtcblxuICBjb3JlLmluZm8oYENoZWNraW5nIHdyaXRlIGFjY2VzcyBmb3IgYWN0b3IgJyR7YWN0b3J9JyBvbiAke293bmVyfS8ke3JlcG99YCk7XG5cbiAgbGV0IHBlcm1pc3Npb246IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9jdG9raXQucmVwb3MuZ2V0Q29sbGFib3JhdG9yUGVybWlzc2lvbkxldmVsKHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICAgIHVzZXJuYW1lOiBhY3RvcixcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uID0gcmVzcG9uc2UuZGF0YS5wZXJtaXNzaW9uID8/IFwibm9uZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgICAgYWN0b3IsXG4gICAgICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgaXMgbm90IGEgY29sbGFib3JhdG9yIG9uICR7b3duZXJ9LyR7cmVwb307IHdyaXRlIGFjY2VzcyBpcyByZXF1aXJlZC5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgIDogXCJGYWlsZWQgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIGZvciBhY3RvciBkdWUgdG8gdW5rbm93biBlcnJvci5cIjtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgRmFpbGVkIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyBmb3IgJyR7YWN0b3J9JzogJHttZXNzYWdlfWAsXG4gICAgfTtcbiAgfVxuXG4gIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBoYXMgcGVybWlzc2lvbiBsZXZlbCAnJHtwZXJtaXNzaW9ufScuYCk7XG5cbiAgaWYgKHBlcm1pc3Npb24gPT09IFwiYWRtaW5cIiB8fCBwZXJtaXNzaW9uID09PSBcIndyaXRlXCIgfHwgcGVybWlzc2lvbiA9PT0gXCJtYWludGFpblwiKSB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgIGFjdG9yLFxuICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgbXVzdCBoYXZlIHdyaXRlIGFjY2VzcyB0byAke293bmVyfS8ke3JlcG99LiBEZXRlY3RlZCBwZXJtaXNzaW9uOiAnJHtwZXJtaXNzaW9ufScuYCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tRW52KCk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOID8/IHByb2Nlc3MuZW52LkdIX1RPS0VOO1xuICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHJpbSgpLmxlbmd0aCA+IDAgPyB0b2tlbiA6IFwiXCI7XG59XG5cbmNvbnN0IFRSVVNURURfR0lUSFVCX0JPVF9BQ1RPUlMgPSBuZXcgU2V0KFtcImdpdGh1Yi1hY3Rpb25zW2JvdF1cIl0pO1xuXG5mdW5jdGlvbiBpc1RydXN0ZWRHaXRIdWJCb3RBY3RvcihhY3Rvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0JvdEFjdG9yKGFjdG9yKSAmJiBUUlVTVEVEX0dJVEhVQl9CT1RfQUNUT1JTLmhhcyhub3JtYWxpemVCb3RBY3RvcihhY3RvcikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFsbG93ZWRCb3RBY3RvcnMoYWxsb3dCb3RVc2Vyczogc3RyaW5nKTogU2V0PHN0cmluZz4gfCBFcnJvciB7XG4gIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBhbGxvd0JvdFVzZXJzLnNwbGl0KFwiLFwiKSkge1xuICAgIGNvbnN0IGJvdCA9IGVudHJ5LnRyaW0oKTtcbiAgICBpZiAoYm90Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChib3QuaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiYWxsb3ctYm90LXVzZXJzIGRvZXMgbm90IHN1cHBvcnQgJyonOyBsaXN0IHRydXN0ZWQgYm90IHVzZXJuYW1lcyBleHBsaWNpdGx5LlwiKTtcbiAgICB9XG4gICAgYWxsb3dlZC5hZGQobm9ybWFsaXplQm90QWN0b3IoYm90KSk7XG4gIH1cbiAgcmV0dXJuIGFsbG93ZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQm90QWN0b3IoYWN0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gYWN0b3IudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcIltib3RdXCIpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVCb3RBY3RvcihhY3Rvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGFjdG9yLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBpc0JvdEFjdG9yKG5vcm1hbGl6ZWQpID8gbm9ybWFsaXplZCA6IGAke25vcm1hbGl6ZWR9W2JvdF1gO1xufVxuXG5mdW5jdGlvbiBpc05vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzXCIgaW4gZXJyb3IgJiYgKGVycm9yIGFzIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDA0LFxuICApO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtcbiAgICAgIHByb2Nlc3MuYXJjaFxuICAgIH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZSgoY2FsbGJhY2ssIG5hbWUpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZSgobWV0aG9kLCByZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICBjb25zdCBvcmlnID0gaG9vaztcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHN0YXRlLnJlZ2lzdHJ5W25hbWVdID0gW107XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJiZWZvcmVcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4ob3JpZy5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImFmdGVyXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdF8pID0+IHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHRfO1xuICAgICAgICAgIHJldHVybiBvcmlnKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiZXJyb3JcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JpZyhlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5wdXNoKHtcbiAgICBob29rOiBob29rLFxuICAgIG9yaWc6IG9yaWcsXG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcCgocmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4vbGliL3JlZ2lzdGVyLmpzXCI7XG5pbXBvcnQgeyBhZGRIb29rIH0gZnJvbSBcIi4vbGliL2FkZC5qc1wiO1xuaW1wb3J0IHsgcmVtb3ZlSG9vayB9IGZyb20gXCIuL2xpYi9yZW1vdmUuanNcIjtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG5jb25zdCBiaW5kID0gRnVuY3Rpb24uYmluZDtcbmNvbnN0IGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIGNvbnN0IHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaCgoa2luZCkgPT4ge1xuICAgIGNvbnN0IGFyZ3MgPSBuYW1lID8gW3N0YXRlLCBraW5kLCBuYW1lXSA6IFtzdGF0ZSwga2luZF07XG4gICAgaG9va1traW5kXSA9IGhvb2suYXBpW2tpbmRdID0gYmluZGFibGUoYWRkSG9vaywgbnVsbCkuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBTaW5ndWxhcigpIHtcbiAgY29uc3Qgc2luZ3VsYXJIb29rTmFtZSA9IFN5bWJvbChcIlNpbmd1bGFyXCIpO1xuICBjb25zdCBzaW5ndWxhckhvb2tTdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG4gIGNvbnN0IHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBDb2xsZWN0aW9uKCkge1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG5cbiAgY29uc3QgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBTaW5ndWxhciwgQ29sbGVjdGlvbiB9O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W157fX1dK1xcfS9nO1xuZnVuY3Rpb24gcmVtb3ZlTm9uQ2hhcnModmFyaWFibGVOYW1lKSB7XG4gIHJldHVybiB2YXJpYWJsZU5hbWUucmVwbGFjZSgvKD86XlxcVyspfCg/Oig/PCFcXFcpXFxXKyQpL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgZGVmYXVsdHNfZGVmYXVsdCA9IHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tIFwiZmFzdC1jb250ZW50LXR5cGUtcGFyc2VcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpIDogcmVxdWVzdE9wdGlvbnMuYm9keTtcbiAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmVxdWVzdE9wdGlvbnMuaGVhZGVycykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbXG4gICAgICBuYW1lLFxuICAgICAgU3RyaW5nKHZhbHVlKVxuICAgIF0pXG4gICk7XG4gIGxldCBmZXRjaFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGZldGNoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgICAgYm9keSxcbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5yZWRpcmVjdCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgc2lnbmFsOiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5zaWduYWwsXG4gICAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAgIC8vIFNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3Rpbml0LWR1cGxleC5cbiAgICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsZXQgbWVzc2FnZSA9IFwiVW5rbm93biBFcnJvclwiO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gNTAwO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiVHlwZUVycm9yXCIgJiYgXCJjYXVzZVwiIGluIGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yLmNhdXNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RFcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICAgIHJlcXVlc3RFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIHRocm93IHJlcXVlc3RFcnJvcjtcbiAgfVxuICBjb25zdCBzdGF0dXMgPSBmZXRjaFJlc3BvbnNlLnN0YXR1cztcbiAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZS51cmw7XG4gIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmZXRjaFJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICByZXNwb25zZUhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG4gIGNvbnN0IG9jdG9raXRSZXNwb25zZSA9IHtcbiAgICB1cmwsXG4gICAgc3RhdHVzLFxuICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICBkYXRhOiBcIlwiXG4gIH07XG4gIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gcmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlc3BvbnNlSGVhZGVycy5saW5rICYmIHJlc3BvbnNlSGVhZGVycy5saW5rLm1hdGNoKC88KFtePD5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgIGxvZy53YXJuKFxuICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke3Jlc3BvbnNlSGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgfVxuICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoZmV0Y2hSZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICByZXNwb25zZTogb2N0b2tpdFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2Uob2N0b2tpdFJlc3BvbnNlLmRhdGEpLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIG9jdG9raXRSZXNwb25zZS5kYXRhID0gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpIDogZmV0Y2hSZXNwb25zZS5ib2R5O1xuICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gIGlmICghY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGNvbnN0IG1pbWV0eXBlID0gc2FmZVBhcnNlKGNvbnRlbnRUeXBlKTtcbiAgaWYgKGlzSlNPTlJlc3BvbnNlKG1pbWV0eXBlKSkge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaCgoKSA9PiBuZXcgQXJyYXlCdWZmZXIoMCkpO1xuICB9XG59XG5mdW5jdGlvbiBpc0pTT05SZXNwb25zZShtaW1ldHlwZSkge1xuICByZXR1cm4gbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIgfHwgbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9zY2ltK2pzb25cIjtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBcIlVua25vd24gZXJyb3JcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBkYXRhID8gYCAtICR7ZGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykgPyBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4iLCAiY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYW1lO1xuICAvKipcbiAgICogaHR0cCBzdGF0dXMgY29kZVxuICAgKi9cbiAgc3RhdHVzO1xuICAvKipcbiAgICogUmVxdWVzdCBvcHRpb25zIHRoYXQgbGVhZCB0byB0aGUgZXJyb3IuXG4gICAqL1xuICByZXF1ZXN0O1xuICAvKipcbiAgICogUmVzcG9uc2Ugb2JqZWN0IGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkXG4gICAqL1xuICByZXNwb25zZTtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8oPzwhICkgLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgUmVxdWVzdEVycm9yXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0MiB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZXJyb3IuanNcbmZ1bmN0aW9uIF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhkYXRhKSB7XG4gIHJldHVybiBgUmVxdWVzdCBmYWlsZWQgZHVlIHRvIGZvbGxvd2luZyByZXNwb25zZSBlcnJvcnM6XG5gICsgZGF0YS5lcnJvcnMubWFwKChlKSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cbnZhciBHcmFwaHFsUmVzcG9uc2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0MiwgaGVhZGVycywgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMocmVzcG9uc2UpKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0MjtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG4gIG5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7XG4gIGVycm9ycztcbiAgZGF0YTtcbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIixcbiAgXCJvcGVyYXRpb25OYW1lXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKHJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbmV4cG9ydCB7XG4gIEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsMiBhcyBncmFwaHFsLFxuICB3aXRoQ3VzdG9tUmVxdWVzdFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaXMtand0LmpzXG52YXIgYjY0dXJsID0gXCIoPzpbYS16QS1aMC05Xy1dKylcIjtcbnZhciBzZXAgPSBcIlxcXFwuXCI7XG52YXIgand0UkUgPSBuZXcgUmVnRXhwKGBeJHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JGApO1xudmFyIGlzSldUID0gand0UkUudGVzdC5iaW5kKGp3dFJFKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2F1dGguanNcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSBpc0pXVCh0b2tlbik7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gdG9rZW4uc3RhcnRzV2l0aChcInYxLlwiKSB8fCB0b2tlbi5zdGFydHNXaXRoKFwiZ2hzX1wiKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSB0b2tlbi5zdGFydHNXaXRoKFwiZ2h1X1wiKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuLFxuICAgIHRva2VuVHlwZVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1hdXRob3JpemF0aW9uLXByZWZpeC5qc1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cbiAgcmV0dXJuIGB0b2tlbiAke3Rva2VufWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9ob29rLmpzXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2UoXG4gICAgcm91dGUsXG4gICAgcGFyYW1ldGVyc1xuICApO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoMih0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCJcbiAgICApO1xuICB9XG4gIHRva2VuID0gdG9rZW4ucmVwbGFjZSgvXih0b2tlbnxiZWFyZXIpICsvaSwgXCJcIik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGF1dGguYmluZChudWxsLCB0b2tlbiksIHtcbiAgICBob29rOiBob29rLmJpbmQobnVsbCwgdG9rZW4pXG4gIH0pO1xufTtcbmV4cG9ydCB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI2LjEuNlwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcbmltcG9ydCBIb29rIGZyb20gXCJiZWZvcmUtYWZ0ZXItaG9va1wiO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyB3aXRoQ3VzdG9tUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9ncmFwaHFsXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbkF1dGggfSBmcm9tIFwiQG9jdG9raXQvYXV0aC10b2tlblwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihsb2dnZXIgPSB7fSkge1xuICBpZiAodHlwZW9mIGxvZ2dlci5kZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmRlYnVnID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuaW5mbyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIud2FybiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLndhcm4gPSBjb25zb2xlV2FybjtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5lcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmVycm9yID0gY29uc29sZUVycm9yO1xuICB9XG4gIHJldHVybiBsb2dnZXI7XG59XG5jb25zdCB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG5jbGFzcyBPY3Rva2l0IHtcbiAgc3RhdGljIFZFUlNJT04gPSBWRVJTSU9OO1xuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyBwbHVnaW5zID0gW107XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBzdGF0aWMgcGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgbmV3UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpXG4gICAgICApO1xuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBIb29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiByZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IHdpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgLy8gYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdG9yXG4gIHJlcXVlc3Q7XG4gIGdyYXBocWw7XG4gIGxvZztcbiAgaG9vaztcbiAgLy8gVE9ETzogdHlwZSBgb2N0b2tpdC5hdXRoYCBiYXNlZCBvbiBwYXNzZWQgb3B0aW9ucy5hdXRoU3RyYXRlZ3lcbiAgYXV0aDtcbn1cbmV4cG9ydCB7XG4gIE9jdG9raXRcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNS4zLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSByZXNwb25zZS5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXTtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oXG4gICAgICAgIGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7cmVzcG9uc2Uuc3RhdHVzfSB3aXRoIGlkICR7cmVxdWVzdElkfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSBlcnJvci5yZXNwb25zZT8uaGVhZGVyc1tcIngtZ2l0aHViLXJlcXVlc3QtaWRcIl0gfHwgXCJVTktOT1dOXCI7XG4gICAgICBvY3Rva2l0LmxvZy5lcnJvcihcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtlcnJvci5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICByZXF1ZXN0TG9nXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG4gIGlmICh0eXBlb2YgcmVwb3NpdG9yeVNlbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb24gPSByZXBvc2l0b3J5U2VsZWN0aW9uO1xuICB9XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pdGVyYXRvci5qc1xuZnVuY3Rpb24gaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUuZW5kcG9pbnQocGFyYW1ldGVycykgOiBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQocm91dGUsIHBhcmFtZXRlcnMpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZSA6IG9jdG9raXQucmVxdWVzdDtcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gIGxldCB1cmwgPSBvcHRpb25zLnVybDtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiAoe1xuICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePD5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9yb3V0ZS1zdGF0cy97YWN0b3JfdHlwZX0ve2FjdG9yX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvc3ViamVjdC1zdGF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvdXNlci1zdGF0cy97dXNlcl9pZH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQsXG4gIHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50c1xufTtcbiIsICJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMTMuNS4wXCI7XG4iLCAiaW1wb3J0IHR5cGUgeyBFbmRwb2ludHNEZWZhdWx0c0FuZERlY29yYXRpb25zIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5jb25zdCBFbmRwb2ludHM6IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZFJlcG9BY2Nlc3NUb1NlbGZIb3N0ZWRSdW5uZXJHcm91cEluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FwcHJvdmVcIixcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXN7P2tleSxyZWZ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1ZhcmlhYmxlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNhYmxlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9lbmFibGVcIixcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL2dlbmVyYXRlLWppdGNvbmZpZ1wiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1VzYWdlUmVwb3J0T3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCIsXG4gICAgXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICAgIHVzYWdlTWV0cmljc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC91c2FnZVwiXSxcbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl0sXG4gIH0sXG4gIGhvc3RlZENvbXB1dGU6IHtcbiAgICBjcmVhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZU5ldHdvcmtDb25maWd1cmF0aW9uRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtTZXR0aW5nc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1zZXR0aW5ncy97bmV0d29ya19zZXR0aW5nc19pZH1cIixcbiAgICBdLFxuICAgIGxpc3ROZXR3b3JrQ29uZmlndXJhdGlvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIGFkZExhYmVsczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBhZGRTdWJJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxpc3RTdWJJc3N1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVMYWJlbDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdWJJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVcIixcbiAgICBdLFxuICAgIHJlcHJpb3JpdGl6ZVN1Yklzc3VlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlcy9wcmlvcml0eVwiLFxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdLFxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfSxcbiAgICBdLFxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl0sXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjYWRkLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUlzc3VlVHlwZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3M6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS97c2VjdXJpdHlfcHJvZHVjdH0ve2VuYWJsZW1lbnR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3MoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL29yZ3MjZW5hYmxlLW9yLWRpc2FibGUtYS1zZWN1cml0eS1mZWF0dXJlLWZvci1hbi1vcmdhbml6YXRpb25cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIl0sXG4gICAgbGlzdEN1c3RvbVByb3BlcnRpZXNWYWx1ZXNGb3JSZXBvczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MucmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjcmVtb3ZlLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIixcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgcmV2b2tlT3JnUm9sZVVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZUlzc3VlVHlwZTogW1wiUFVUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICB1cGRhdGVNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICByZW5hbWVkOiBbXG4gICAgICAgICAgXCJwYWNrYWdlc1wiLFxuICAgICAgICAgIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICB9LFxuICBwcml2YXRlUmVnaXN0cmllczoge1xuICAgIGNyZWF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgZGVsZXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0T3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3B1YmxpYy1rZXlcIl0sXG4gICAgbGlzdE9yZ1ByaXZhdGVSZWdpc3RyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIHVwZGF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuYWRkQ29sbGFib3JhdG9yKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNhZGQtcHJvamVjdC1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNjcmVhdGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjY3JlYXRlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hLXVzZXItcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYW4tb3JnYW5pemF0aW9uLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtcmVwb3NpdG9yeS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGUoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNkZWxldGUtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ2FyZDogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZGVsZXRlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZGVsZXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNkZWxldGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjZ2V0LWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENhcmQ6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2dldC1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENvbHVtbjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmdldENvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjZ2V0LWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0UGVybWlzc2lvbkZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2dldC1wcm9qZWN0LXBlcm1pc3Npb24tZm9yLWEtdXNlclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDYXJkczogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDYXJkcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2xpc3QtcHJvamVjdC1jYXJkc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2xsYWJvcmF0b3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNsaXN0LXByb2plY3QtY29sbGFib3JhdG9yc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2x1bW5zOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2x1bW5zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNsaXN0LXByb2plY3QtY29sdW1uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1vcmdhbml6YXRpb24tcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yUmVwbygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtcmVwb3NpdG9yeS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdEZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LXVzZXItcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ2FyZDogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfS9tb3Zlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubW92ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNtb3ZlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbW92ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNtb3ZlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5yZW1vdmVDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI3JlbW92ZS11c2VyLWFzLWEtY29sbGFib3JhdG9yXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI3VwZGF0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDYXJkOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI3VwZGF0ZS1hbi1leGlzdGluZy1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZpbGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGRlbGV0ZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvUnVsZXNldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXSB9LFxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCIsXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGVuYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCIsXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICBdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgIF0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXG4gICAgICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Quc2VhcmNoLmlzc3Vlc0FuZFB1bGxSZXF1ZXN0cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3NlYXJjaC9zZWFyY2gjc2VhcmNoLWlzc3Vlcy1hbmQtcHVsbC1yZXF1ZXN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdLFxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGNyZWF0ZVB1c2hQcm90ZWN0aW9uQnlwYXNzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9wdXNoLXByb3RlY3Rpb24tYnlwYXNzZXNcIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0U2Nhbkhpc3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3NjYW4taGlzdG9yeVwiXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RMb2NhdGlvbnNGb3JBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5hZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0xlZ2FjeTogW1xuICAgICAgXCJQVVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNjaGVjay10ZWFtLXBlcm1pc3Npb25zLWZvci1hLXByb2plY3QtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclJlcG9Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2xpc3QtdGVhbS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0xlZ2FjeTogW1xuICAgICAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMubGlzdFByb2plY3RzTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzLWxlZ2FjeVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLnJlbW92ZVByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkRFTEVURSAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW0tbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiLFxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5SWQ6IFtcIkdFVCAvdXNlci97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0U3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRW5kcG9pbnRzO1xuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50T3B0aW9ucywgUmVxdWVzdFBhcmFtZXRlcnMsIFJvdXRlIH0gZnJvbSBcIkBvY3Rva2l0L3R5cGVzXCI7XG5pbXBvcnQgRU5EUE9JTlRTIGZyb20gXCIuL2dlbmVyYXRlZC9lbmRwb2ludHMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9tZXRob2QtdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnREZWNvcmF0aW9ucyB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgcmVmYWN0b3JlZCBpbjogaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy5qcy9wdWxsLzYyMlxuLy8gdG8gb3B0aW1pc2UgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2Ugb2YgT2N0b2tpdCBpbml0aWFsaXphdGlvbi5cbi8vXG4vLyBUaGlzIG9wdGltaXphdGlvbiBpbnZvbHZlcyB0d28ga2V5IGNoYW5nZXM6XG4vLyAxLiBQcmUtQ29tcHV0YXRpb246IFRoZSBlbmRwb2ludCBtZXRob2RzIGFyZSBwcmUtY29tcHV0ZWQgb25jZSBhdCBtb2R1bGUgbG9hZFxuLy8gICAgdGltZSBpbnN0ZWFkIG9mIGVhY2ggaW52b2NhdGlvbiBvZiBgZW5kcG9pbnRzVG9NZXRob2RzKClgLlxuLy8gMi4gTGF6eSBpbml0aWFsaXphdGlvbiBhbmQgY2FjaGluZzogV2UgdXNlIGEgUHJveHkgZm9yIGVhY2ggc2NvcGUgdG8gb25seVxuLy8gICAgaW5pdGlhbGl6ZSBtZXRob2RzIHRoYXQgYXJlIGFjdHVhbGx5IGNhbGxlZC4gVGhpcyByZWR1Y2VzIHJ1bnRpbWUgb3ZlcmhlYWRcbi8vICAgIGFzIHRoZSBpbml0aWFsaXphdGlvbiBpbnZvbHZlcyBkZWVwIG1lcmdpbmcgb2Ygb2JqZWN0cy4gVGhlIGluaXRpYWxpemVkXG4vLyAgICBtZXRob2RzIGFyZSB0aGVuIGNhY2hlZCBmb3IgZnV0dXJlIHVzZS5cblxuY29uc3QgZW5kcG9pbnRNZXRob2RzTWFwID0gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoRU5EUE9JTlRTKSkge1xuICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgIGNvbnN0IFtyb3V0ZSwgZGVmYXVsdHMsIGRlY29yYXRpb25zXSA9IGVuZHBvaW50O1xuICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0cyxcbiAgICApO1xuXG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbnR5cGUgUHJveHlUYXJnZXQgPSB7XG4gIG9jdG9raXQ6IE9jdG9raXQ7XG4gIHNjb3BlOiBzdHJpbmc7XG4gIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55W10pID0+IGFueT47XG59O1xuXG5jb25zdCBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSwgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkoXG4gICAgdGFyZ2V0OiBQcm94eVRhcmdldCxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yLFxuICApIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuICh0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZSk7XG4gIH0sXG4gIGdldCh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNhY2hlW21ldGhvZE5hbWVdKSB7XG4gICAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcblxuICAgIGlmIChkZWNvcmF0aW9ucykge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBkZWNvcmF0ZShcbiAgICAgICAgb2N0b2tpdCxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICAgIGRlY29yYXRpb25zLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogUmVzdEVuZHBvaW50TWV0aG9kcyB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB9O1xuXG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdNZXRob2RzIGFzIFJlc3RFbmRwb2ludE1ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKFxuICBvY3Rva2l0OiBPY3Rva2l0LFxuICBzY29wZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGRlZmF1bHRzOiBFbmRwb2ludE9wdGlvbnMsXG4gIGRlY29yYXRpb25zOiBFbmRwb2ludERlY29yYXRpb25zLFxuKSB7XG4gIGNvbnN0IHJlcXVlc3RXaXRoRGVmYXVsdHMgPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZGVmYXVsdHMpO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyhcbiAgICAuLi5hcmdzOiBbUm91dGUsIFJlcXVlc3RQYXJhbWV0ZXJzP10gfCBbRW5kcG9pbnRPcHRpb25zXVxuICApIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAvLyBUaGVyZSBhcmUgY3VycmVudGx5IG5vIG90aGVyIGRlY29yYXRpb25zIHRoYW4gYC5tYXBUb0RhdGFgXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMsXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9uc1thbGlhc10gPSBvcHRpb25zW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuXG5leHBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZFR5cGVzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL3BhcmFtZXRlcnMtYW5kLXJlc3BvbnNlLXR5cGVzLmpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGkgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgZW5kcG9pbnRzVG9NZXRob2RzIH0gZnJvbSBcIi4vZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcIjtcblxuLy8gRXhwb3J0IHRoZSB0eXBlIGZvciBkb3duc3RyZWFtIHVzZXJzIGluIG9yZGVyIHRvIGZpeCBhIFR5cGVTY3JpcHQgZXJyb3Jcbi8vIFRoZSBpbmZlcnJlZCB0eXBlIG9mICdPY3Rva2l0JyBjYW5ub3QgYmUgbmFtZWQgd2l0aG91dCBhIHJlZmVyZW5jZSB0byAnLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC10eXBlcy90eXBlcy5qcycuIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LlxuZXhwb3J0IHR5cGUgeyBBcGkgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpW1wicmVzdFwiXSAmIEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbiIsICJjb25zdCBWRVJTSU9OID0gXCIyMS4xLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgT2N0b2tpdCBhcyBDb3JlIH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2cgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCI7XG5pbXBvcnQge1xuICBwYWdpbmF0ZVJlc3Rcbn0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCI7XG5pbXBvcnQgeyBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBPY3Rva2l0ID0gQ29yZS5wbHVnaW4ocmVxdWVzdExvZywgbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcywgcGFnaW5hdGVSZXN0KS5kZWZhdWx0cyhcbiAge1xuICAgIHVzZXJBZ2VudDogYG9jdG9raXQtcmVzdC5qcy8ke1ZFUlNJT059YFxuICB9XG4pO1xuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJleHBvcnQgeyBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgfTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlQXJnc1N0cmluZ1RvQXJndih2YWx1ZSwgZW52LCBmaWxlKSB7XG4gICAgLy8gKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopIE1hdGNoZXMgbmVzdGVkIHF1b3RlcyB1bnRpbCB0aGUgZmlyc3Qgc3BhY2Ugb3V0c2lkZSBvZiBxdW90ZXNcbiAgICAvLyBbXlxccydcIl0rIG9yIE1hdGNoIGlmIG5vdCBhIHNwYWNlICcgb3IgXCJcbiAgICAvLyAoWydcIl0pKFteXFw1XSo/KVxcNSBvciBNYXRjaCBcInF1b3RlZCB0ZXh0XCIgd2l0aG91dCBxdW90ZXNcbiAgICAvLyBgXFwzYCBhbmQgYFxcNWAgYXJlIGEgYmFja3JlZmVyZW5jZSB0byB0aGUgcXVvdGUgc3R5bGUgKCcgb3IgXCIpIGNhcHR1cmVkXG4gICAgdmFyIG15UmVnZXhwID0gLyhbXlxccydcIl0oW15cXHMnXCJdKihbJ1wiXSkoW15cXDNdKj8pXFwzKStbXlxccydcIl0qKXxbXlxccydcIl0rfChbJ1wiXSkoW15cXDVdKj8pXFw1L2dpO1xuICAgIHZhciBteVN0cmluZyA9IHZhbHVlO1xuICAgIHZhciBteUFycmF5ID0gW107XG4gICAgaWYgKGVudikge1xuICAgICAgICBteUFycmF5LnB1c2goZW52KTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgbXlBcnJheS5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICB2YXIgbWF0Y2g7XG4gICAgZG8ge1xuICAgICAgICAvLyBFYWNoIGNhbGwgdG8gZXhlYyByZXR1cm5zIHRoZSBuZXh0IHJlZ2V4IG1hdGNoIGFzIGFuIGFycmF5XG4gICAgICAgIG1hdGNoID0gbXlSZWdleHAuZXhlYyhteVN0cmluZyk7XG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSW5kZXggMSBpbiB0aGUgYXJyYXkgaXMgdGhlIGNhcHR1cmVkIGdyb3VwIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgLy8gSW5kZXggMCBpcyB0aGUgbWF0Y2hlZCB0ZXh0LCB3aGljaCB3ZSB1c2UgaWYgbm8gY2FwdHVyZWQgZ3JvdXAgZXhpc3RzXG4gICAgICAgICAgICBteUFycmF5LnB1c2goZmlyc3RTdHJpbmcobWF0Y2hbMV0sIG1hdGNoWzZdLCBtYXRjaFswXSkpO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAobWF0Y2ggIT09IG51bGwpO1xuICAgIHJldHVybiBteUFycmF5O1xufVxuLy8gQWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cywgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIGEgc3RyaW5nXG4vLyAoZXZlbiBhbiBlbXB0eSBzdHJpbmcpXG5mdW5jdGlvbiBmaXJzdFN0cmluZygpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgU2FmZXR5U3RyYXRlZ3kgfSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGNoZWNrT3V0cHV0IH0gZnJvbSBcIi4vY2hlY2tPdXRwdXRcIjtcblxuY29uc3QgTU9ERUxfUFJPVklERVIgPSBcImNvZGV4LWFjdGlvbi1yZXNwb25zZXMtcHJveHlcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUHJveHlDb25maWcoXG4gIGNvZGV4SG9tZTogc3RyaW5nLFxuICBwb3J0OiBudW1iZXIsXG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4oY29kZXhIb21lLCBcImNvbmZpZy50b21sXCIpO1xuXG4gIGxldCBleGlzdGluZyA9IFwiXCI7XG4gIHRyeSB7XG4gICAgZXhpc3RpbmcgPSBhd2FpdCBmcy5yZWFkRmlsZShjb25maWdQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIGV4aXN0aW5nID0gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlciA9IGAjIEFkZGVkIGJ5IGNvZGV4LWFjdGlvbi5cbm1vZGVsX3Byb3ZpZGVyID0gXCIke01PREVMX1BST1ZJREVSfVwiXG5cblxuYDtcbiAgY29uc3QgdGFibGUgPSBgXG5cbiMgQWRkZWQgYnkgY29kZXgtYWN0aW9uLlxuW21vZGVsX3Byb3ZpZGVycy4ke01PREVMX1BST1ZJREVSfV1cbm5hbWUgPSBcIkNvZGV4IEFjdGlvbiBSZXNwb25zZXMgUHJveHlcIlxuYmFzZV91cmwgPSBcImh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fS92MVwiXG53aXJlX2FwaSA9IFwicmVzcG9uc2VzXCJcbmA7XG5cbiAgLy8gUHJlcGVuZCBtb2RlbF9wcm92aWRlciBhdCB0aGUgdmVyeSB0b3AuXG4gIGxldCBvdXRwdXQgPSBgJHtoZWFkZXJ9JHtleGlzdGluZ30ke3RhYmxlfWA7XG5cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICAvLyBXZSBrbm93IHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBDT0RFWF9IT01FIGRpcmVjdG9yeSwgYnV0IGl0IGlzIG93bmVkXG4gICAgLy8gYnkgYW5vdGhlciB1c2VyLCBzbyB3ZSBuZWVkIHRvIHVzZSBzdWRvIHRvIHdyaXRlIHRoZSBmaWxlLlxuICAgIGNvbnN0IHRlbXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjb2RleC1jb25maWdcIikpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZW1wQ29uZmlnUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCBcImNvbmZpZy50b21sXCIpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDb25maWdQYXRoLCBvdXRwdXQsIFwidXRmOFwiKTtcbiAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJtdlwiLCB0ZW1wQ29uZmlnUGF0aCwgY29uZmlnUGF0aF0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5ybSh0ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IGZzLm1rZGlyKGNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGNvbmZpZ1BhdGgsIG91dHB1dCwgXCJ1dGY4XCIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDRFQUFBQSxVQUFBO0FBR0EsUUFBTUMsa0JBQU4sY0FBNkIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BT2pDLFlBQVksVUFBVSxNQUFNLFNBQVM7QUFDbkMsY0FBTSxPQUFPO0FBRWIsY0FBTSxrQkFBa0IsTUFBTSxLQUFLLFdBQVc7QUFDOUMsYUFBSyxPQUFPLEtBQUssWUFBWTtBQUM3QixhQUFLLE9BQU87QUFDWixhQUFLLFdBQVc7QUFDaEIsYUFBSyxjQUFjO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBS0EsUUFBTUMsd0JBQU4sY0FBbUNELGdCQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtoRCxZQUFZLFNBQVM7QUFDbkIsY0FBTSxHQUFHLDZCQUE2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QUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNu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QSxPQUFBLElBQUEsQ0FBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxXQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxLQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxZQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxXQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxhQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxZQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxLQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxlQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxlQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0lBQ0YsR0ExRFksVUFBQUosU0FBQSxZQUFBQSxTQUFBLFVBQU8sQ0FBQSxFQUFBO0FBNEROLElBQUFBLFNBQUEsZUFBZTtNQUMxQixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtN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aUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQU1BLGFBQVMsWUFBYSxPQUFPO0FBQzNCLFVBQUksQ0FBQyxPQUFPO0FBQ1YsZUFBTztBQUFBLE1BQ1Q7QUFNQSxjQUFRLE1BQU0sS0FBSyxFQUFFLFlBQVksR0FBRztBQUFBLFFBQ2xDLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEs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VyxLQUFLLEdBQUc7QUFDN0MsV0FBWSxXQUFRLFlBQVEsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQUEsRUFDM0M7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJBcmd1bWVudCIsICJleHBvcnRzIiwgIkhlbHAiLCAiY21kIiwgImV4cG9ydHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiT3B0aW9uIiwgInN0ciIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJmcyIsICJwcm9jZXNzIiwgIkFyZ3VtZW50IiwgIkNvbW1hbmRlckVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgIkNvbW1hbmQiLCAiaG9vayIsICJvcHRpb24iLCAiZXhwb3J0cyIsICJBcmd1bWVudCIsICJDb21tYW5kIiwgIkNvbW1hbmRlckVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgImV4cG9ydHMiLCAib3MiLCAiQ29tbWFuZCIsICJleHBvcnRzIiwgImZzIiwgIm9zIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9wdGlvbnMiLCAic29ja2V0IiwgInJlcXVpcmVfdHVubmVsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkJsb2IiLCAicGF0aCIsICJpZHgiLCAic3RyZWFtIiwgImVyciIsICJoYW5kbGVyIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInN0cnVjdHVyZWRDbG9uZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGVyZm9ybWFuY2UiLCAicmVxdWVzdCIsICJpdGVyYXRvciIsICJraW5kIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImF0b2IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImVudHJ5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJCbG9iIiwgImNodW5rIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBhdGgiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImVyciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInNlc3Npb24iLCAib25Db25uZWN0VGltZW91dCIsICJleHBvcnRzIiwgIkVSUk9SIiwgImV4cG9ydHMiLCAiVFlQRSIsICJGTEFHUyIsICJMRU5JRU5UX0ZMQUdTIiwgIk1FVEhPRFMiLCAiRklOSVNIIiwgIkhFQURFUl9TVEFURSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjb25uZWN0IiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJzb2NrZXQiLCAicGF0aCIsICJoZWFkZXJzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJXZWFrUmVmIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJub29wIiwgImNvbnN1bWUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiY2FsbGJhY2siLCAicmVzIiwgIm9wYXF1ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibW9ja0Rpc3BhdGNoIiwgInBhdGgiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInN0YXR1c0NvZGUiLCAiZGF0YSIsICJyZXNwb25zZU9wdGlvbnMiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJVUkwiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAib3B0cyIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImVyciIsICJyZXF1aXJlX2dsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJyZXF1aXJlX3JlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWVzdCIsICJhYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAicmVxdWVzdCIsICJnbG9iYWxUaGlzIiwgIml0ZXJhdG9yIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInR5cGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJIdHRwQ29kZXMiLCAiZXhwb3J0cyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAidXNlckFnZW50IiwgImluZm8iLCAiaGFuZGxlciIsICJsb3dlcmNhc2VLZXlzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJ3cml0ZUZpbGUiLCAiZXhwb3J0cyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIl9hIiwgInBhdGgiLCAiZXhwb3J0cyIsICJvcyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9zIiwgInBhdGgiLCAiRXhpdENvZGUiLCAiZXhwb3J0cyIsICJzZXRPdXRwdXQiLCAiaW5mbyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJOdWxsT2JqZWN0IiwgInBhcnNlIiwgInNhZmVQYXJzZSIsICJjb21tYW5kZXIiLCAiZnMiLCAib3MiLCAicGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJwcm9ncmFtIiwgInBhdGgiLCAib3MiLCAicGF0aCIsICJmcyIsICJjb3JlIiwgIm5hbWUiLCAibWV0aG9kIiwgImhvb2siLCAiaG9vayIsICJWRVJTSU9OIiwgImlzUGxhaW5PYmplY3QiLCAid2l0aERlZmF1bHRzIiwgIlZFUlNJT04iLCAid2l0aERlZmF1bHRzIiwgInJlcXVlc3QiLCAiZW5kcG9pbnQiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgImhvb2siLCAiYXV0aCIsICJWRVJTSU9OIiwgInJlcXVlc3QiLCAicGF0aCIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgImVuZHBvaW50IiwgIm9wdGlvbnMiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIk9jdG9raXQiLCAiVkVSU0lPTiIsICJPY3Rva2l0IiwgImZzIiwgInBhdGgiLCAib3MiLCAicHJvZ3JhbSIsICJzZXRPdXRwdXQiLCAic3RhdCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1jb250ZW50LXR5cGUtcGFyc2VAMi4wLjEvbm9kZV9tb2R1bGVzL2Zhc3QtY29udGVudC10eXBlLXBhcnNlL2luZGV4LmpzIiwgIi4uL3NyYy9tYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb21tYW5kZXJAMTQuMC4xL25vZGVfbW9kdWxlcy9jb21tYW5kZXIvZXNtLm1qcyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL3JlYWRTZXJ2ZXJJbmZvLnRzIiwgIi4uL3NyYy9ydW5Db2RleEV4ZWMudHMiLCAiLi4vc3JjL2NoZWNrT3V0cHV0LnRzIiwgIi4uL3NyYy9kcm9wU3Vkby50cyIsICIuLi9zcmMvbGludXhEcm9wU3Vkby50cyIsICIuLi9zcmMvbGludXhHaXRSZXBvc2l0b3JpZXMudHMiLCAiLi4vc3JjL2xpbnV4U3lzdGVtUGF0aHMudHMiLCAiLi4vc3JjL2xpbnV4RHJvcFN1ZG9HYXRlLnRzIiwgIi4uL3NyYy9saW51eE91dHB1dEZpbGUudHMiLCAiLi4vc3JjL2NoZWNrQWN0b3JQZXJtaXNzaW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5pdmVyc2FsLXVzZXItYWdlbnRANy4wLjMvbm9kZV9tb2R1bGVzL3VuaXZlcnNhbC11c2VyLWFnZW50L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlZ2lzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL2FkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZW1vdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrZW5kcG9pbnRAMTAuMS40L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9lbmRwb2ludC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVxdWVzdEA5LjIuNC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVxdWVzdC1lcnJvckA2LjEuOC9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVxdWVzdC1lcnJvci9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrZ3JhcGhxbEA4LjIuMi9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrYXV0aC10b2tlbkA1LjEuMi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC10b2tlbi9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVxdWVzdC1sb2dANS4zLjFfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXF1ZXN0LWxvZ0A1LjMuMV9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1wYWdpbmF0ZS1yZXN0QDExLjYuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9nZW5lcmF0ZWQvZW5kcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZW5kcG9pbnRzLXRvLW1ldGhvZHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVzdEAyMS4xLjEvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcmVzdEAyMS4xLjEvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZy1hcmd2QDAuMy4yL25vZGVfbW9kdWxlcy9zdHJpbmctYXJndi9pbmRleC5qcyIsICIuLi9zcmMvd3JpdGVQcm94eUNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb21tYW5kZXJFcnJvciBjbGFzc1xuICovXG5jbGFzcyBDb21tYW5kZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIENvbW1hbmRlckVycm9yIGNsYXNzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleGl0Q29kZSBzdWdnZXN0ZWQgZXhpdCBjb2RlIHdoaWNoIGNvdWxkIGJlIHVzZWQgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIC8vIHByb3Blcmx5IGNhcHR1cmUgc3RhY2sgdHJhY2UgaW4gTm9kZS5qc1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMuZXhpdENvZGUgPSBleGl0Q29kZTtcbiAgICB0aGlzLm5lc3RlZEVycm9yID0gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogSW52YWxpZEFyZ3VtZW50RXJyb3IgY2xhc3NcbiAqL1xuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBDb21tYW5kZXJFcnJvciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBJbnZhbGlkQXJndW1lbnRFcnJvciBjbGFzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGV4cGxhbmF0aW9uIG9mIHdoeSBhcmd1bWVudCBpcyBpbnZhbGlkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIoMSwgJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnLCBtZXNzYWdlKTtcbiAgICAvLyBwcm9wZXJseSBjYXB0dXJlIHN0YWNrIHRyYWNlIGluIE5vZGUuanNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbn1cblxuZXhwb3J0cy5Db21tYW5kZXJFcnJvciA9IENvbW1hbmRlckVycm9yO1xuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuIiwgImNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcblxuY2xhc3MgQXJndW1lbnQge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBjb21tYW5kIGFyZ3VtZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRlc2NyaXB0aW9uLlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCwgYW5kIHlvdSBjYW4gZXhwbGljaXRseVxuICAgKiBpbmRpY2F0ZSB0aGlzIHdpdGggPD4gYXJvdW5kIHRoZSBuYW1lLiBQdXQgW10gYXJvdW5kIHRoZSBuYW1lIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICovXG5cbiAgY29uc3RydWN0b3IobmFtZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG4gICAgdGhpcy52YXJpYWRpYyA9IGZhbHNlO1xuICAgIHRoaXMucGFyc2VBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB1bmRlZmluZWQ7XG5cbiAgICBzd2l0Y2ggKG5hbWVbMF0pIHtcbiAgICAgIGNhc2UgJzwnOiAvLyBlLmcuIDxyZXF1aXJlZD5cbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdbJzogLy8gZS5nLiBbb3B0aW9uYWxdXG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX25hbWUuZW5kc1dpdGgoJy4uLicpKSB7XG4gICAgICB0aGlzLnZhcmlhZGljID0gdHJ1ZTtcbiAgICAgIHRoaXMuX25hbWUgPSB0aGlzLl9uYW1lLnNsaWNlKDAsIC0zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFyZ3VtZW50IG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfY29sbGVjdFZhbHVlKHZhbHVlLCBwcmV2aW91cykge1xuICAgIGlmIChwcmV2aW91cyA9PT0gdGhpcy5kZWZhdWx0VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcmV2aW91cy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gcHJldmlvdXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgb3B0aW9uYWxseSBzdXBwbHkgdGhlIGRlc2NyaXB0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgZGVmYXVsdCh2YWx1ZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIENMSSBjb21tYW5kIGFyZ3VtZW50cyBpbnRvIGFyZ3VtZW50IHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgYXJnUGFyc2VyKGZuKSB7XG4gICAgdGhpcy5wYXJzZUFyZyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgYWxsb3cgYXJndW1lbnQgdmFsdWUgdG8gYmUgb25lIG9mIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtBcmd1bWVudH1cbiAgICovXG5cbiAgY2hvaWNlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB2YWx1ZXMuc2xpY2UoKTtcbiAgICB0aGlzLnBhcnNlQXJnID0gKGFyZywgcHJldmlvdXMpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmdDaG9pY2VzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIGNob2ljZXMgYXJlICR7dGhpcy5hcmdDaG9pY2VzLmpvaW4oJywgJyl9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YXJpYWRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdFZhbHVlKGFyZywgcHJldmlvdXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXJndW1lbnQgcmVxdWlyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudH1cbiAgICovXG4gIGFyZ1JlcXVpcmVkKCkge1xuICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYXJndW1lbnQgb3B0aW9uYWwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudH1cbiAgICovXG4gIGFyZ09wdGlvbmFsKCkge1xuICAgIHRoaXMucmVxdWlyZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGl0cyBodW1hbiByZWFkYWJsZSBlcXVpdmFsZW50IGZvciBoZWxwIHVzYWdlLlxuICpcbiAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpIHtcbiAgY29uc3QgbmFtZU91dHB1dCA9IGFyZy5uYW1lKCkgKyAoYXJnLnZhcmlhZGljID09PSB0cnVlID8gJy4uLicgOiAnJyk7XG5cbiAgcmV0dXJuIGFyZy5yZXF1aXJlZCA/ICc8JyArIG5hbWVPdXRwdXQgKyAnPicgOiAnWycgKyBuYW1lT3V0cHV0ICsgJ10nO1xufVxuXG5leHBvcnRzLkFyZ3VtZW50ID0gQXJndW1lbnQ7XG5leHBvcnRzLmh1bWFuUmVhZGFibGVBcmdOYW1lID0gaHVtYW5SZWFkYWJsZUFyZ05hbWU7XG4iLCAiY29uc3QgeyBodW1hblJlYWRhYmxlQXJnTmFtZSB9ID0gcmVxdWlyZSgnLi9hcmd1bWVudC5qcycpO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgaW1wb3J0IHR5cGVzIGZvciBKU0RvYywgdXNlZCBieSBWaXN1YWwgU3R1ZGlvIENvZGUgSW50ZWxsaVNlbnNlIGFuZCBgbnBtIHJ1biB0eXBlc2NyaXB0LWNoZWNrSlNgXG4gKiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9qc2RvYy1zdXBwb3J0ZWQtdHlwZXMuaHRtbCNpbXBvcnQtdHlwZXNcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9hcmd1bWVudC5qc1wiKS5Bcmd1bWVudCB9IEFyZ3VtZW50XG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vY29tbWFuZC5qc1wiKS5Db21tYW5kIH0gQ29tbWFuZFxuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL29wdGlvbi5qc1wiKS5PcHRpb24gfSBPcHRpb25cbiAqL1xuXG4vLyBBbHRob3VnaCB0aGlzIGlzIGEgY2xhc3MsIG1ldGhvZHMgYXJlIHN0YXRpYyBpbiBzdHlsZSB0byBhbGxvdyBvdmVycmlkZSB1c2luZyBzdWJjbGFzcyBvciBqdXN0IGZ1bmN0aW9ucy5cbmNsYXNzIEhlbHAge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlbHBXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1pbldpZHRoVG9XcmFwID0gNDA7XG4gICAgdGhpcy5zb3J0U3ViY29tbWFuZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnRPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5zaG93R2xvYmFsT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIHByZXBhcmVDb250ZXh0IGlzIGNhbGxlZCBieSBDb21tYW5kZXIgYWZ0ZXIgYXBwbHlpbmcgb3ZlcnJpZGVzIGZyb20gYENvbW1hbmQuY29uZmlndXJlSGVscCgpYFxuICAgKiBhbmQganVzdCBiZWZvcmUgY2FsbGluZyBgZm9ybWF0SGVscCgpYC5cbiAgICpcbiAgICogQ29tbWFuZGVyIGp1c3QgdXNlcyB0aGUgaGVscFdpZHRoIGFuZCB0aGUgcmVzdCBpcyBwcm92aWRlZCBmb3Igb3B0aW9uYWwgdXNlIGJ5IG1vcmUgY29tcGxleCBzdWJjbGFzc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I/OiBib29sZWFuLCBoZWxwV2lkdGg/OiBudW1iZXIsIG91dHB1dEhhc0NvbG9ycz86IGJvb2xlYW4gfX0gY29udGV4dE9wdGlvbnNcbiAgICovXG4gIHByZXBhcmVDb250ZXh0KGNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5oZWxwV2lkdGggPSB0aGlzLmhlbHBXaWR0aCA/PyBjb250ZXh0T3B0aW9ucy5oZWxwV2lkdGggPz8gODA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIHN1YmNvbW1hbmRzLiBJbmNsdWRlcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW1wbGljaXQgaGVscCBjb21tYW5kLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtDb21tYW5kW119XG4gICAqL1xuXG4gIHZpc2libGVDb21tYW5kcyhjbWQpIHtcbiAgICBjb25zdCB2aXNpYmxlQ29tbWFuZHMgPSBjbWQuY29tbWFuZHMuZmlsdGVyKChjbWQpID0+ICFjbWQuX2hpZGRlbik7XG4gICAgY29uc3QgaGVscENvbW1hbmQgPSBjbWQuX2dldEhlbHBDb21tYW5kKCk7XG4gICAgaWYgKGhlbHBDb21tYW5kICYmICFoZWxwQ29tbWFuZC5faGlkZGVuKSB7XG4gICAgICB2aXNpYmxlQ29tbWFuZHMucHVzaChoZWxwQ29tbWFuZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRTdWJjb21tYW5kcykge1xuICAgICAgdmlzaWJsZUNvbW1hbmRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgICAgIHJldHVybiBhLm5hbWUoKS5sb2NhbGVDb21wYXJlKGIubmFtZSgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUNvbW1hbmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgb3B0aW9ucyBmb3Igc29ydC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IGFcbiAgICogQHBhcmFtIHtPcHRpb259IGJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvbXBhcmVPcHRpb25zKGEsIGIpIHtcbiAgICBjb25zdCBnZXRTb3J0S2V5ID0gKG9wdGlvbikgPT4ge1xuICAgICAgLy8gV1lTSVdZRyBmb3Igb3JkZXIgZGlzcGxheWVkIGluIGhlbHAuIFNob3J0IHVzZWQgZm9yIGNvbXBhcmlzb24gaWYgcHJlc2VudC4gTm8gc3BlY2lhbCBoYW5kbGluZyBmb3IgbmVnYXRlZC5cbiAgICAgIHJldHVybiBvcHRpb24uc2hvcnRcbiAgICAgICAgPyBvcHRpb24uc2hvcnQucmVwbGFjZSgvXi0vLCAnJylcbiAgICAgICAgOiBvcHRpb24ubG9uZy5yZXBsYWNlKC9eLS0vLCAnJyk7XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0U29ydEtleShhKS5sb2NhbGVDb21wYXJlKGdldFNvcnRLZXkoYikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBvcHRpb25zLiBJbmNsdWRlcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW1wbGljaXQgaGVscCBvcHRpb24sIGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge09wdGlvbltdfVxuICAgKi9cblxuICB2aXNpYmxlT3B0aW9ucyhjbWQpIHtcbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IGNtZC5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiAhb3B0aW9uLmhpZGRlbik7XG4gICAgLy8gQnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAgY29uc3QgaGVscE9wdGlvbiA9IGNtZC5fZ2V0SGVscE9wdGlvbigpO1xuICAgIGlmIChoZWxwT3B0aW9uICYmICFoZWxwT3B0aW9uLmhpZGRlbikge1xuICAgICAgLy8gQXV0b21hdGljYWxseSBoaWRlIGNvbmZsaWN0aW5nIGZsYWdzLiBCaXQgZHViaW91cyBidXQgYSBoaXN0b3JpY2FsIGJlaGF2aW91ciB0aGF0IGlzIGNvbnZlbmllbnQgZm9yIHNpbmdsZS1jb21tYW5kIHByb2dyYW1zLlxuICAgICAgY29uc3QgcmVtb3ZlU2hvcnQgPSBoZWxwT3B0aW9uLnNob3J0ICYmIGNtZC5fZmluZE9wdGlvbihoZWxwT3B0aW9uLnNob3J0KTtcbiAgICAgIGNvbnN0IHJlbW92ZUxvbmcgPSBoZWxwT3B0aW9uLmxvbmcgJiYgY21kLl9maW5kT3B0aW9uKGhlbHBPcHRpb24ubG9uZyk7XG4gICAgICBpZiAoIXJlbW92ZVNob3J0ICYmICFyZW1vdmVMb25nKSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goaGVscE9wdGlvbik7IC8vIG5vIGNoYW5nZXMgbmVlZGVkXG4gICAgICB9IGVsc2UgaWYgKGhlbHBPcHRpb24ubG9uZyAmJiAhcmVtb3ZlTG9uZykge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIGNtZC5jcmVhdGVPcHRpb24oaGVscE9wdGlvbi5sb25nLCBoZWxwT3B0aW9uLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoaGVscE9wdGlvbi5zaG9ydCAmJiAhcmVtb3ZlU2hvcnQpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChcbiAgICAgICAgICBjbWQuY3JlYXRlT3B0aW9uKGhlbHBPcHRpb24uc2hvcnQsIGhlbHBPcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0T3B0aW9ucykge1xuICAgICAgdmlzaWJsZU9wdGlvbnMuc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBnbG9iYWwgb3B0aW9ucy4gKE5vdCBpbmNsdWRpbmcgaGVscC4pXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtPcHRpb25bXX1cbiAgICovXG5cbiAgdmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKSB7XG4gICAgaWYgKCF0aGlzLnNob3dHbG9iYWxPcHRpb25zKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBnbG9iYWxPcHRpb25zID0gW107XG4gICAgZm9yIChcbiAgICAgIGxldCBhbmNlc3RvckNtZCA9IGNtZC5wYXJlbnQ7XG4gICAgICBhbmNlc3RvckNtZDtcbiAgICAgIGFuY2VzdG9yQ21kID0gYW5jZXN0b3JDbWQucGFyZW50XG4gICAgKSB7XG4gICAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IGFuY2VzdG9yQ21kLm9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAob3B0aW9uKSA9PiAhb3B0aW9uLmhpZGRlbixcbiAgICAgICk7XG4gICAgICBnbG9iYWxPcHRpb25zLnB1c2goLi4udmlzaWJsZU9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0T3B0aW9ucykge1xuICAgICAgZ2xvYmFsT3B0aW9ucy5zb3J0KHRoaXMuY29tcGFyZU9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIGFyZ3VtZW50cyBpZiBhbnkgaGF2ZSBhIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7QXJndW1lbnRbXX1cbiAgICovXG5cbiAgdmlzaWJsZUFyZ3VtZW50cyhjbWQpIHtcbiAgICAvLyBTaWRlIGVmZmVjdCEgQXBwbHkgdGhlIGxlZ2FjeSBkZXNjcmlwdGlvbnMgYmVmb3JlIHRoZSBhcmd1bWVudHMgYXJlIGRpc3BsYXllZC5cbiAgICBpZiAoY21kLl9hcmdzRGVzY3JpcHRpb24pIHtcbiAgICAgIGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50KSA9PiB7XG4gICAgICAgIGFyZ3VtZW50LmRlc2NyaXB0aW9uID1cbiAgICAgICAgICBhcmd1bWVudC5kZXNjcmlwdGlvbiB8fCBjbWQuX2FyZ3NEZXNjcmlwdGlvblthcmd1bWVudC5uYW1lKCldIHx8ICcnO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBhcmd1bWVudHMgd2l0aCBhIGRlc2NyaXB0aW9uIHRoZW4gcmV0dXJuIGFsbCB0aGUgYXJndW1lbnRzLlxuICAgIGlmIChjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cy5maW5kKChhcmd1bWVudCkgPT4gYXJndW1lbnQuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm4gY21kLnJlZ2lzdGVyZWRBcmd1bWVudHM7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbW1hbmQgdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBzdWJjb21tYW5kVGVybShjbWQpIHtcbiAgICAvLyBMZWdhY3kuIElnbm9yZXMgY3VzdG9tIHVzYWdlIHN0cmluZywgYW5kIG5lc3RlZCBjb21tYW5kcy5cbiAgICBjb25zdCBhcmdzID0gY21kLnJlZ2lzdGVyZWRBcmd1bWVudHNcbiAgICAgIC5tYXAoKGFyZykgPT4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIGNtZC5fbmFtZSArXG4gICAgICAoY21kLl9hbGlhc2VzWzBdID8gJ3wnICsgY21kLl9hbGlhc2VzWzBdIDogJycpICtcbiAgICAgIChjbWQub3B0aW9ucy5sZW5ndGggPyAnIFtvcHRpb25zXScgOiAnJykgKyAvLyBzaW1wbGlzdGljIGNoZWNrIGZvciBub24taGVscCBvcHRpb25cbiAgICAgIChhcmdzID8gJyAnICsgYXJncyA6ICcnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcHRpb24gdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgb3B0aW9uVGVybShvcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLmZsYWdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJndW1lbnQgdGVybSB0byBzaG93IGluIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgYXJndW1lbnRUZXJtKGFyZ3VtZW50KSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50Lm5hbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgY29tbWFuZCB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdFN1YmNvbW1hbmRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlQ29tbWFuZHMoY21kKS5yZWR1Y2UoKG1heCwgY29tbWFuZCkgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmRUZXJtKGhlbHBlci5zdWJjb21tYW5kVGVybShjb21tYW5kKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBvcHRpb24gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlT3B0aW9ucyhjbWQpLnJlZHVjZSgobWF4LCBvcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGdsb2JhbCBvcHRpb24gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RHbG9iYWxPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpLnJlZHVjZSgobWF4LCBvcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGFyZ3VtZW50IHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0QXJndW1lbnRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIGhlbHBlci52aXNpYmxlQXJndW1lbnRzKGNtZCkucmVkdWNlKChtYXgsIGFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoXG4gICAgICAgICAgaGVscGVyLnN0eWxlQXJndW1lbnRUZXJtKGhlbHBlci5hcmd1bWVudFRlcm0oYXJndW1lbnQpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb21tYW5kIHVzYWdlIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgdG9wIG9mIHRoZSBidWlsdC1pbiBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBjb21tYW5kVXNhZ2UoY21kKSB7XG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgY21kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBpZiAoY21kLl9hbGlhc2VzWzBdKSB7XG4gICAgICBjbWROYW1lID0gY21kTmFtZSArICd8JyArIGNtZC5fYWxpYXNlc1swXTtcbiAgICB9XG4gICAgbGV0IGFuY2VzdG9yQ21kTmFtZXMgPSAnJztcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGFuY2VzdG9yQ21kTmFtZXMgPSBhbmNlc3RvckNtZC5uYW1lKCkgKyAnICcgKyBhbmNlc3RvckNtZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3JDbWROYW1lcyArIGNtZE5hbWUgKyAnICcgKyBjbWQudXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuZGVzY3JpcHRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN1YmNvbW1hbmQgc3VtbWFyeSB0byBzaG93IGluIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzLlxuICAgKiAoRmFsbGJhY2sgdG8gZGVzY3JpcHRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgc3ViY29tbWFuZERlc2NyaXB0aW9uKGNtZCkge1xuICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgIHJldHVybiBjbWQuc3VtbWFyeSgpIHx8IGNtZC5kZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIGRlc2NyaXB0aW9uIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IGV4dHJhSW5mbyA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbi5hcmdDaG9pY2VzKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgLy8gdXNlIHN0cmluZ2lmeSB0byBtYXRjaCB0aGUgZGlzcGxheSBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBgY2hvaWNlczogJHtvcHRpb24uYXJnQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gSlNPTi5zdHJpbmdpZnkoY2hvaWNlKSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZGVmYXVsdCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBtb3JlIGZvciBwcm9ncmFtbWVyIHRoYW4gZW5kIHVzZXIsXG4gICAgICAvLyBidXQgc2hvdyB0cnVlL2ZhbHNlIGZvciBib29sZWFuIG9wdGlvbiBhcyBtYXkgYmUgZm9yIGhhbmQtcm9sbGVkIGVudiBvciBjb25maWcgcHJvY2Vzc2luZy5cbiAgICAgIGNvbnN0IHNob3dEZWZhdWx0ID1cbiAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgIG9wdGlvbi5vcHRpb25hbCB8fFxuICAgICAgICAob3B0aW9uLmlzQm9vbGVhbigpICYmIHR5cGVvZiBvcHRpb24uZGVmYXVsdFZhbHVlID09PSAnYm9vbGVhbicpO1xuICAgICAgaWYgKHNob3dEZWZhdWx0KSB7XG4gICAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAgIGBkZWZhdWx0OiAke29wdGlvbi5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShvcHRpb24uZGVmYXVsdFZhbHVlKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwcmVzZXQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgYXJlIG1vcmUgZm9yIHByb2dyYW1tZXIgdGhhbiBlbmQgdXNlclxuICAgIGlmIChvcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQgJiYgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgcHJlc2V0OiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbi5wcmVzZXRBcmcpfWApO1xuICAgIH1cbiAgICBpZiAob3B0aW9uLmVudlZhciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChgZW52OiAke29wdGlvbi5lbnZWYXJ9YCk7XG4gICAgfVxuICAgIGlmIChleHRyYUluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXh0cmFEZXNjcmlwdGlvbiA9IGAoJHtleHRyYUluZm8uam9pbignLCAnKX0pYDtcbiAgICAgIGlmIChvcHRpb24uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke29wdGlvbi5kZXNjcmlwdGlvbn0gJHtleHRyYURlc2NyaXB0aW9ufWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0cmFEZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJndW1lbnQgZGVzY3JpcHRpb24gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgYXJndW1lbnREZXNjcmlwdGlvbihhcmd1bWVudCkge1xuICAgIGNvbnN0IGV4dHJhSW5mbyA9IFtdO1xuICAgIGlmIChhcmd1bWVudC5hcmdDaG9pY2VzKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgLy8gdXNlIHN0cmluZ2lmeSB0byBtYXRjaCB0aGUgZGlzcGxheSBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgICBgY2hvaWNlczogJHthcmd1bWVudC5hcmdDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBKU09OLnN0cmluZ2lmeShjaG9pY2UpKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYXJndW1lbnQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICBgZGVmYXVsdDogJHthcmd1bWVudC5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShhcmd1bWVudC5kZWZhdWx0VmFsdWUpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZXh0cmFJbmZvLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4dHJhRGVzY3JpcHRpb24gPSBgKCR7ZXh0cmFJbmZvLmpvaW4oJywgJyl9KWA7XG4gICAgICBpZiAoYXJndW1lbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGAke2FyZ3VtZW50LmRlc2NyaXB0aW9ufSAke2V4dHJhRGVzY3JpcHRpb259YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYURlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYXJndW1lbnQuZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGEgbGlzdCBvZiBpdGVtcywgZ2l2ZW4gYSBoZWFkaW5nIGFuZCBhbiBhcnJheSBvZiBmb3JtYXR0ZWQgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGl0ZW1zXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHN0cmluZ1tdXG4gICAqL1xuICBmb3JtYXRJdGVtTGlzdChoZWFkaW5nLCBpdGVtcywgaGVscGVyKSB7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIFtoZWxwZXIuc3R5bGVUaXRsZShoZWFkaW5nKSwgLi4uaXRlbXMsICcnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cCBpdGVtcyBieSB0aGVpciBoZWxwIGdyb3VwIGhlYWRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZFtdIHwgT3B0aW9uW119IHVuc29ydGVkSXRlbXNcbiAgICogQHBhcmFtIHtDb21tYW5kW10gfCBPcHRpb25bXX0gdmlzaWJsZUl0ZW1zXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGdldEdyb3VwXG4gICAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBDb21tYW5kW10gfCBPcHRpb25bXT59XG4gICAqL1xuICBncm91cEl0ZW1zKHVuc29ydGVkSXRlbXMsIHZpc2libGVJdGVtcywgZ2V0R3JvdXApIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgLy8gQWRkIGdyb3VwcyBpbiBvcmRlciBvZiBhcHBlYXJhbmNlIGluIHVuc29ydGVkSXRlbXMuXG4gICAgdW5zb3J0ZWRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IGdldEdyb3VwKGl0ZW0pO1xuICAgICAgaWYgKCFyZXN1bHQuaGFzKGdyb3VwKSkgcmVzdWx0LnNldChncm91cCwgW10pO1xuICAgIH0pO1xuICAgIC8vIEFkZCBpdGVtcyBpbiBvcmRlciBvZiBhcHBlYXJhbmNlIGluIHZpc2libGVJdGVtcy5cbiAgICB2aXNpYmxlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRHcm91cChpdGVtKTtcbiAgICAgIGlmICghcmVzdWx0Lmhhcyhncm91cCkpIHtcbiAgICAgICAgcmVzdWx0LnNldChncm91cCwgW10pO1xuICAgICAgfVxuICAgICAgcmVzdWx0LmdldChncm91cCkucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBidWlsdC1pbiBoZWxwIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGZvcm1hdEhlbHAoY21kLCBoZWxwZXIpIHtcbiAgICBjb25zdCB0ZXJtV2lkdGggPSBoZWxwZXIucGFkV2lkdGgoY21kLCBoZWxwZXIpO1xuICAgIGNvbnN0IGhlbHBXaWR0aCA9IGhlbHBlci5oZWxwV2lkdGggPz8gODA7IC8vIGluIGNhc2UgcHJlcGFyZUNvbnRleHQoKSB3YXMgbm90IGNhbGxlZFxuXG4gICAgZnVuY3Rpb24gY2FsbEZvcm1hdEl0ZW0odGVybSwgZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBoZWxwZXIuZm9ybWF0SXRlbSh0ZXJtLCB0ZXJtV2lkdGgsIGRlc2NyaXB0aW9uLCBoZWxwZXIpO1xuICAgIH1cblxuICAgIC8vIFVzYWdlXG4gICAgbGV0IG91dHB1dCA9IFtcbiAgICAgIGAke2hlbHBlci5zdHlsZVRpdGxlKCdVc2FnZTonKX0gJHtoZWxwZXIuc3R5bGVVc2FnZShoZWxwZXIuY29tbWFuZFVzYWdlKGNtZCkpfWAsXG4gICAgICAnJyxcbiAgICBdO1xuXG4gICAgLy8gRGVzY3JpcHRpb25cbiAgICBjb25zdCBjb21tYW5kRGVzY3JpcHRpb24gPSBoZWxwZXIuY29tbWFuZERlc2NyaXB0aW9uKGNtZCk7XG4gICAgaWYgKGNvbW1hbmREZXNjcmlwdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFtcbiAgICAgICAgaGVscGVyLmJveFdyYXAoXG4gICAgICAgICAgaGVscGVyLnN0eWxlQ29tbWFuZERlc2NyaXB0aW9uKGNvbW1hbmREZXNjcmlwdGlvbiksXG4gICAgICAgICAgaGVscFdpZHRoLFxuICAgICAgICApLFxuICAgICAgICAnJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIEFyZ3VtZW50c1xuICAgIGNvbnN0IGFyZ3VtZW50TGlzdCA9IGhlbHBlci52aXNpYmxlQXJndW1lbnRzKGNtZCkubWFwKChhcmd1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudFRlcm0oaGVscGVyLmFyZ3VtZW50VGVybShhcmd1bWVudCkpLFxuICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudERlc2NyaXB0aW9uKGhlbHBlci5hcmd1bWVudERlc2NyaXB0aW9uKGFyZ3VtZW50KSksXG4gICAgICApO1xuICAgIH0pO1xuICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICB0aGlzLmZvcm1hdEl0ZW1MaXN0KCdBcmd1bWVudHM6JywgYXJndW1lbnRMaXN0LCBoZWxwZXIpLFxuICAgICk7XG5cbiAgICAvLyBPcHRpb25zXG4gICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5ncm91cEl0ZW1zKFxuICAgICAgY21kLm9wdGlvbnMsXG4gICAgICBoZWxwZXIudmlzaWJsZU9wdGlvbnMoY21kKSxcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5oZWxwR3JvdXBIZWFkaW5nID8/ICdPcHRpb25zOicsXG4gICAgKTtcbiAgICBvcHRpb25Hcm91cHMuZm9yRWFjaCgob3B0aW9ucywgZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpLFxuICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvbkRlc2NyaXB0aW9uKGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdCh0aGlzLmZvcm1hdEl0ZW1MaXN0KGdyb3VwLCBvcHRpb25MaXN0LCBoZWxwZXIpKTtcbiAgICB9KTtcblxuICAgIGlmIChoZWxwZXIuc2hvd0dsb2JhbE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGdsb2JhbE9wdGlvbkxpc3QgPSBoZWxwZXJcbiAgICAgICAgLnZpc2libGVHbG9iYWxPcHRpb25zKGNtZClcbiAgICAgICAgLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSxcbiAgICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvbkRlc2NyaXB0aW9uKGhlbHBlci5vcHRpb25EZXNjcmlwdGlvbihvcHRpb24pKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICAgIHRoaXMuZm9ybWF0SXRlbUxpc3QoJ0dsb2JhbCBPcHRpb25zOicsIGdsb2JhbE9wdGlvbkxpc3QsIGhlbHBlciksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbW1hbmRzXG4gICAgY29uc3QgY29tbWFuZEdyb3VwcyA9IHRoaXMuZ3JvdXBJdGVtcyhcbiAgICAgIGNtZC5jb21tYW5kcyxcbiAgICAgIGhlbHBlci52aXNpYmxlQ29tbWFuZHMoY21kKSxcbiAgICAgIChzdWIpID0+IHN1Yi5oZWxwR3JvdXAoKSB8fCAnQ29tbWFuZHM6JyxcbiAgICApO1xuICAgIGNvbW1hbmRHcm91cHMuZm9yRWFjaCgoY29tbWFuZHMsIGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBjb21tYW5kTGlzdCA9IGNvbW1hbmRzLm1hcCgoc3ViKSA9PiB7XG4gICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kVGVybShoZWxwZXIuc3ViY29tbWFuZFRlcm0oc3ViKSksXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZERlc2NyaXB0aW9uKGhlbHBlci5zdWJjb21tYW5kRGVzY3JpcHRpb24oc3ViKSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQodGhpcy5mb3JtYXRJdGVtTGlzdChncm91cCwgY29tbWFuZExpc3QsIGhlbHBlcikpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGlzcGxheSB3aWR0aCBvZiBzdHJpbmcsIGlnbm9yaW5nIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4gVXNlZCBpbiBwYWRkaW5nIGFuZCB3cmFwcGluZyBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3BsYXlXaWR0aChzdHIpIHtcbiAgICByZXR1cm4gc3RyaXBDb2xvcihzdHIpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHlsZSB0aGUgdGl0bGUgZm9yIGRpc3BsYXlpbmcgaW4gdGhlIGhlbHAuIENhbGxlZCB3aXRoICdVc2FnZTonLCAnT3B0aW9uczonLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0eWxlVGl0bGUoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHN0eWxlVXNhZ2Uoc3RyKSB7XG4gICAgLy8gVXNhZ2UgaGFzIGxvdHMgb2YgcGFydHMgdGhlIHVzZXIgbWlnaHQgbGlrZSB0byBjb2xvciBzZXBhcmF0ZWx5ISBBc3N1bWUgZGVmYXVsdCB1c2FnZSBzdHJpbmcgd2hpY2ggaXMgZm9ybWVkIGxpa2U6XG4gICAgLy8gICAgY29tbWFuZCBzdWJjb21tYW5kIFtvcHRpb25zXSBbY29tbWFuZF0gPGZvbz4gW2Jhcl1cbiAgICByZXR1cm4gc3RyXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLm1hcCgod29yZCkgPT4ge1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tvcHRpb25zXScpIHJldHVybiB0aGlzLnN0eWxlT3B0aW9uVGV4dCh3b3JkKTtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbY29tbWFuZF0nKSByZXR1cm4gdGhpcy5zdHlsZVN1YmNvbW1hbmRUZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZFswXSA9PT0gJ1snIHx8IHdvcmRbMF0gPT09ICc8JylcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dCh3b3JkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVDb21tYW5kVGV4dCh3b3JkKTsgLy8gUmVzdHJpY3QgdG8gaW5pdGlhbCB3b3Jkcz9cbiAgICAgIH0pXG4gICAgICAuam9pbignICcpO1xuICB9XG4gIHN0eWxlQ29tbWFuZERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVPcHRpb25EZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVBcmd1bWVudERlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZU9wdGlvblRlcm0oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kVGVybShzdHIpIHtcbiAgICAvLyBUaGlzIGlzIHZlcnkgbGlrZSB1c2FnZSB3aXRoIGxvdHMgb2YgcGFydHMhIEFzc3VtZSBkZWZhdWx0IHN0cmluZyB3aGljaCBpcyBmb3JtZWQgbGlrZTpcbiAgICAvLyAgICBzdWJjb21tYW5kIFtvcHRpb25zXSA8Zm9vPiBbYmFyXVxuICAgIHJldHVybiBzdHJcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgIGlmICh3b3JkID09PSAnW29wdGlvbnNdJykgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZFswXSA9PT0gJ1snIHx8IHdvcmRbMF0gPT09ICc8JylcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dCh3b3JkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVTdWJjb21tYW5kVGV4dCh3b3JkKTsgLy8gUmVzdHJpY3QgdG8gaW5pdGlhbCB3b3Jkcz9cbiAgICAgIH0pXG4gICAgICAuam9pbignICcpO1xuICB9XG4gIHN0eWxlQXJndW1lbnRUZXJtKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVPcHRpb25UZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVBcmd1bWVudFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVDb21tYW5kVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcGFkIHdpZHRoIGZyb20gdGhlIG1heGltdW0gdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIHBhZFdpZHRoKGNtZCwgaGVscGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgaGVscGVyLmxvbmdlc3RPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0R2xvYmFsT3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdFN1YmNvbW1hbmRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0QXJndW1lbnRUZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBtYW51YWxseSB3cmFwcGVkIGFuZCBpbmRlbnRlZCBzdHJpbmdzIGJ5IGNoZWNraW5nIGZvciBsaW5lIGJyZWFrIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwcmVmb3JtYXR0ZWQoc3RyKSB7XG4gICAgcmV0dXJuIC9cXG5bXlxcU1xcclxcbl0vLnRlc3Qoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgdGhlIFwiaXRlbVwiLCB3aGljaCBjb25zaXN0cyBvZiBhIHRlcm0gYW5kIGRlc2NyaXB0aW9uLiBQYWQgdGhlIHRlcm0gYW5kIHdyYXAgdGhlIGRlc2NyaXB0aW9uLCBpbmRlbnRpbmcgdGhlIGZvbGxvd2luZyBsaW5lcy5cbiAgICpcbiAgICogU28gXCJUVFRcIiwgNSwgXCJEREQgRERERCBERCBERERcIiBtaWdodCBiZSBmb3JtYXR0ZWQgZm9yIHRoaXMuaGVscFdpZHRoPTE3IGxpa2Ugc286XG4gICAqICAgVFRUICBEREQgRERERFxuICAgKiAgICAgICAgREQgREREXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXJtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0ZXJtV2lkdGhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmb3JtYXRJdGVtKHRlcm0sIHRlcm1XaWR0aCwgZGVzY3JpcHRpb24sIGhlbHBlcikge1xuICAgIGNvbnN0IGl0ZW1JbmRlbnQgPSAyO1xuICAgIGNvbnN0IGl0ZW1JbmRlbnRTdHIgPSAnICcucmVwZWF0KGl0ZW1JbmRlbnQpO1xuICAgIGlmICghZGVzY3JpcHRpb24pIHJldHVybiBpdGVtSW5kZW50U3RyICsgdGVybTtcblxuICAgIC8vIFBhZCB0aGUgdGVybSBvdXQgdG8gYSBjb25zaXN0ZW50IHdpZHRoLCBzbyBkZXNjcmlwdGlvbnMgYXJlIGFsaWduZWQuXG4gICAgY29uc3QgcGFkZGVkVGVybSA9IHRlcm0ucGFkRW5kKFxuICAgICAgdGVybVdpZHRoICsgdGVybS5sZW5ndGggLSBoZWxwZXIuZGlzcGxheVdpZHRoKHRlcm0pLFxuICAgICk7XG5cbiAgICAvLyBGb3JtYXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgIGNvbnN0IHNwYWNlcldpZHRoID0gMjsgLy8gYmV0d2VlbiB0ZXJtIGFuZCBkZXNjcmlwdGlvblxuICAgIGNvbnN0IGhlbHBXaWR0aCA9IHRoaXMuaGVscFdpZHRoID8/IDgwOyAvLyBpbiBjYXNlIHByZXBhcmVDb250ZXh0KCkgd2FzIG5vdCBjYWxsZWRcbiAgICBjb25zdCByZW1haW5pbmdXaWR0aCA9IGhlbHBXaWR0aCAtIHRlcm1XaWR0aCAtIHNwYWNlcldpZHRoIC0gaXRlbUluZGVudDtcbiAgICBsZXQgZm9ybWF0dGVkRGVzY3JpcHRpb247XG4gICAgaWYgKFxuICAgICAgcmVtYWluaW5nV2lkdGggPCB0aGlzLm1pbldpZHRoVG9XcmFwIHx8XG4gICAgICBoZWxwZXIucHJlZm9ybWF0dGVkKGRlc2NyaXB0aW9uKVxuICAgICkge1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgd3JhcHBlZERlc2NyaXB0aW9uID0gaGVscGVyLmJveFdyYXAoZGVzY3JpcHRpb24sIHJlbWFpbmluZ1dpZHRoKTtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uID0gd3JhcHBlZERlc2NyaXB0aW9uLnJlcGxhY2UoXG4gICAgICAgIC9cXG4vZyxcbiAgICAgICAgJ1xcbicgKyAnICcucmVwZWF0KHRlcm1XaWR0aCArIHNwYWNlcldpZHRoKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29uc3RydWN0IGFuZCBvdmVyYWxsIGluZGVudC5cbiAgICByZXR1cm4gKFxuICAgICAgaXRlbUluZGVudFN0ciArXG4gICAgICBwYWRkZWRUZXJtICtcbiAgICAgICcgJy5yZXBlYXQoc3BhY2VyV2lkdGgpICtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uLnJlcGxhY2UoL1xcbi9nLCBgXFxuJHtpdGVtSW5kZW50U3RyfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIGEgc3RyaW5nIGF0IHdoaXRlc3BhY2UsIHByZXNlcnZpbmcgZXhpc3RpbmcgbGluZSBicmVha3MuXG4gICAqIFdyYXBwaW5nIGlzIHNraXBwZWQgaWYgdGhlIHdpZHRoIGlzIGxlc3MgdGhhbiBgbWluV2lkdGhUb1dyYXBgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYm94V3JhcChzdHIsIHdpZHRoKSB7XG4gICAgaWYgKHdpZHRoIDwgdGhpcy5taW5XaWR0aFRvV3JhcCkgcmV0dXJuIHN0cjtcblxuICAgIGNvbnN0IHJhd0xpbmVzID0gc3RyLnNwbGl0KC9cXHJcXG58XFxuLyk7XG4gICAgLy8gc3BsaXQgdXAgdGV4dCBieSB3aGl0ZXNwYWNlXG4gICAgY29uc3QgY2h1bmtQYXR0ZXJuID0gL1tcXHNdKlteXFxzXSsvZztcbiAgICBjb25zdCB3cmFwcGVkTGluZXMgPSBbXTtcbiAgICByYXdMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBjaHVua3MgPSBsaW5lLm1hdGNoKGNodW5rUGF0dGVybik7XG4gICAgICBpZiAoY2h1bmtzID09PSBudWxsKSB7XG4gICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKCcnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3VtQ2h1bmtzID0gW2NodW5rcy5zaGlmdCgpXTtcbiAgICAgIGxldCBzdW1XaWR0aCA9IHRoaXMuZGlzcGxheVdpZHRoKHN1bUNodW5rc1swXSk7XG4gICAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgdmlzaWJsZVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgoY2h1bmspO1xuICAgICAgICAvLyBBY2N1bXVsYXRlIGNodW5rcyB3aGlsZSB0aGV5IGZpdCBpbnRvIHdpZHRoLlxuICAgICAgICBpZiAoc3VtV2lkdGggKyB2aXNpYmxlV2lkdGggPD0gd2lkdGgpIHtcbiAgICAgICAgICBzdW1DaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgc3VtV2lkdGggKz0gdmlzaWJsZVdpZHRoO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkTGluZXMucHVzaChzdW1DaHVua3Muam9pbignJykpO1xuXG4gICAgICAgIGNvbnN0IG5leHRDaHVuayA9IGNodW5rLnRyaW1TdGFydCgpOyAvLyB0cmltIHNwYWNlIGF0IGxpbmUgYnJlYWtcbiAgICAgICAgc3VtQ2h1bmtzID0gW25leHRDaHVua107XG4gICAgICAgIHN1bVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgobmV4dENodW5rKTtcbiAgICAgIH0pO1xuICAgICAgd3JhcHBlZExpbmVzLnB1c2goc3VtQ2h1bmtzLmpvaW4oJycpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3cmFwcGVkTGluZXMuam9pbignXFxuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpcCBzdHlsZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgZnJvbSB0aGUgc3RyaW5nLiBJbiBwYXJ0aWN1bGFyLCBTR1IgKFNlbGVjdCBHcmFwaGljIFJlbmRpdGlvbikgY29kZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqIEBwYWNrYWdlXG4gKi9cblxuZnVuY3Rpb24gc3RyaXBDb2xvcihzdHIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgY29uc3Qgc2dyUGF0dGVybiA9IC9cXHgxYlxcW1xcZCooO1xcZCopKm0vZztcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHNnclBhdHRlcm4sICcnKTtcbn1cblxuZXhwb3J0cy5IZWxwID0gSGVscDtcbmV4cG9ydHMuc3RyaXBDb2xvciA9IHN0cmlwQ29sb3I7XG4iLCAiY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuXG5jbGFzcyBPcHRpb24ge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBgT3B0aW9uYCB3aXRoIHRoZSBnaXZlbiBgZmxhZ3NgIGFuZCBgZGVzY3JpcHRpb25gLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcblxuICAgIHRoaXMucmVxdWlyZWQgPSBmbGFncy5pbmNsdWRlcygnPCcpOyAvLyBBIHZhbHVlIG11c3QgYmUgc3VwcGxpZWQgd2hlbiB0aGUgb3B0aW9uIGlzIHNwZWNpZmllZC5cbiAgICB0aGlzLm9wdGlvbmFsID0gZmxhZ3MuaW5jbHVkZXMoJ1snKTsgLy8gQSB2YWx1ZSBpcyBvcHRpb25hbCB3aGVuIHRoZSBvcHRpb24gaXMgc3BlY2lmaWVkLlxuICAgIC8vIHZhcmlhZGljIHRlc3QgaWdub3JlcyA8dmFsdWUsLi4uPiBldCBhbCB3aGljaCBtaWdodCBiZSB1c2VkIHRvIGRlc2NyaWJlIGN1c3RvbSBzcGxpdHRpbmcgb2Ygc2luZ2xlIGFyZ3VtZW50XG4gICAgdGhpcy52YXJpYWRpYyA9IC9cXHdcXC5cXC5cXC5bPlxcXV0kLy50ZXN0KGZsYWdzKTsgLy8gVGhlIG9wdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSB2YWx1ZXMuXG4gICAgdGhpcy5tYW5kYXRvcnkgPSBmYWxzZTsgLy8gVGhlIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0IG11c3QgYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS5cbiAgICBjb25zdCBvcHRpb25GbGFncyA9IHNwbGl0T3B0aW9uRmxhZ3MoZmxhZ3MpO1xuICAgIHRoaXMuc2hvcnQgPSBvcHRpb25GbGFncy5zaG9ydEZsYWc7IC8vIE1heSBiZSBhIHNob3J0IGZsYWcsIHVuZGVmaW5lZCwgb3IgZXZlbiBhIGxvbmcgZmxhZyAoaWYgb3B0aW9uIGhhcyB0d28gbG9uZyBmbGFncykuXG4gICAgdGhpcy5sb25nID0gb3B0aW9uRmxhZ3MubG9uZ0ZsYWc7XG4gICAgdGhpcy5uZWdhdGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5sb25nKSB7XG4gICAgICB0aGlzLm5lZ2F0ZSA9IHRoaXMubG9uZy5zdGFydHNXaXRoKCctLW5vLScpO1xuICAgIH1cbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJlc2V0QXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZW52VmFyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGFyc2VBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jb25mbGljdHNXaXRoID0gW107XG4gICAgdGhpcy5pbXBsaWVkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGVscEdyb3VwSGVhZGluZyA9IHVuZGVmaW5lZDsgLy8gc29mdCBpbml0aWFsaXNlZCB3aGVuIG9wdGlvbiBhZGRlZCB0byBjb21tYW5kXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlLCBhbmQgb3B0aW9uYWxseSBzdXBwbHkgdGhlIGRlc2NyaXB0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGRlZmF1bHQodmFsdWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUHJlc2V0IHRvIHVzZSB3aGVuIG9wdGlvbiB1c2VkIHdpdGhvdXQgb3B0aW9uLWFyZ3VtZW50LCBlc3BlY2lhbGx5IG9wdGlvbmFsIGJ1dCBhbHNvIGJvb2xlYW4gYW5kIG5lZ2F0ZWQuXG4gICAqIFRoZSBjdXN0b20gcHJvY2Vzc2luZyAocGFyc2VBcmcpIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IE9wdGlvbignLS1jb2xvcicpLmRlZmF1bHQoJ0dSRVlTQ0FMRScpLnByZXNldCgnUkdCJyk7XG4gICAqIG5ldyBPcHRpb24oJy0tZG9uYXRlIFthbW91bnRdJykucHJlc2V0KCcyMCcpLmFyZ1BhcnNlcihwYXJzZUZsb2F0KTtcbiAgICpcbiAgICogQHBhcmFtIHsqfSBhcmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBwcmVzZXQoYXJnKSB7XG4gICAgdGhpcy5wcmVzZXRBcmcgPSBhcmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9wdGlvbiBuYW1lKHMpIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGlzIG9wdGlvbi5cbiAgICogQW4gZXJyb3Igd2lsbCBiZSBkaXNwbGF5ZWQgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgZm91bmQgZHVyaW5nIHBhcnNpbmcuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBPcHRpb24oJy0tcmdiJykuY29uZmxpY3RzKCdjbXlrJyk7XG4gICAqIG5ldyBPcHRpb24oJy0tanMnKS5jb25mbGljdHMoWyd0cycsICdqc3gnXSk7XG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbmFtZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBjb25mbGljdHMobmFtZXMpIHtcbiAgICB0aGlzLmNvbmZsaWN0c1dpdGggPSB0aGlzLmNvbmZsaWN0c1dpdGguY29uY2F0KG5hbWVzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGltcGxpZWQgb3B0aW9uIHZhbHVlcyBmb3Igd2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgYW5kIHRoZSBpbXBsaWVkIG9wdGlvbnMgYXJlIG5vdC5cbiAgICpcbiAgICogVGhlIGN1c3RvbSBwcm9jZXNzaW5nIChwYXJzZUFyZykgaXMgbm90IGNhbGxlZCBvbiB0aGUgaW1wbGllZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbG9nJywgJ3dyaXRlIGxvZ2dpbmcgaW5mb3JtYXRpb24gdG8gZmlsZScpKVxuICAgKiAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cmFjZScsICdsb2cgZXh0cmEgZGV0YWlscycpLmltcGxpZXMoeyBsb2c6ICd0cmFjZS50eHQnIH0pKTtcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGltcGxpZWRPcHRpb25WYWx1ZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cbiAgaW1wbGllcyhpbXBsaWVkT3B0aW9uVmFsdWVzKSB7XG4gICAgbGV0IG5ld0ltcGxpZWQgPSBpbXBsaWVkT3B0aW9uVmFsdWVzO1xuICAgIGlmICh0eXBlb2YgaW1wbGllZE9wdGlvblZhbHVlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHN0cmluZyBpcyBub3QgZG9jdW1lbnRlZCwgYnV0IGVhc3kgbWlzdGFrZSBhbmQgd2UgY2FuIGRvIHdoYXQgdXNlciBwcm9iYWJseSBpbnRlbmRlZC5cbiAgICAgIG5ld0ltcGxpZWQgPSB7IFtpbXBsaWVkT3B0aW9uVmFsdWVzXTogdHJ1ZSB9O1xuICAgIH1cbiAgICB0aGlzLmltcGxpZWQgPSBPYmplY3QuYXNzaWduKHRoaXMuaW1wbGllZCB8fCB7fSwgbmV3SW1wbGllZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNoZWNrIGZvciBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG9ubHkgdXNlZCBpZiB3aGVuIHByb2Nlc3NlZCB0aGUgY3VycmVudCBvcHRpb24gdmFsdWUgaXNcbiAgICogdW5kZWZpbmVkLCBvciB0aGUgc291cmNlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGlzICdkZWZhdWx0JyBvciAnY29uZmlnJyBvciAnZW52Jy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBlbnYobmFtZSkge1xuICAgIHRoaXMuZW52VmFyID0gbmFtZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1c3RvbSBoYW5kbGVyIGZvciBwcm9jZXNzaW5nIENMSSBvcHRpb24gYXJndW1lbnRzIGludG8gb3B0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGFyZ1BhcnNlcihmbikge1xuICAgIHRoaXMucGFyc2VBcmcgPSBmbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvcHRpb24gaXMgbWFuZGF0b3J5IGFuZCBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFttYW5kYXRvcnk9dHJ1ZV1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBtYWtlT3B0aW9uTWFuZGF0b3J5KG1hbmRhdG9yeSA9IHRydWUpIHtcbiAgICB0aGlzLm1hbmRhdG9yeSA9ICEhbWFuZGF0b3J5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgb3B0aW9uIGluIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGU9dHJ1ZV1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBoaWRlSGVscChoaWRlID0gdHJ1ZSkge1xuICAgIHRoaXMuaGlkZGVuID0gISFoaWRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9jb2xsZWN0VmFsdWUodmFsdWUsIHByZXZpb3VzKSB7XG4gICAgaWYgKHByZXZpb3VzID09PSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cblxuICAgIHByZXZpb3VzLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBwcmV2aW91cztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGFsbG93IG9wdGlvbiB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgY2hvaWNlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLmFyZ0Nob2ljZXMgPSB2YWx1ZXMuc2xpY2UoKTtcbiAgICB0aGlzLnBhcnNlQXJnID0gKGFyZywgcHJldmlvdXMpID0+IHtcbiAgICAgIGlmICghdGhpcy5hcmdDaG9pY2VzLmluY2x1ZGVzKGFyZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBBbGxvd2VkIGNob2ljZXMgYXJlICR7dGhpcy5hcmdDaG9pY2VzLmpvaW4oJywgJyl9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YXJpYWRpYykge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdFZhbHVlKGFyZywgcHJldmlvdXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvcHRpb24gbmFtZS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBuYW1lKCkge1xuICAgIGlmICh0aGlzLmxvbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvbmcucmVwbGFjZSgvXi0tLywgJycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG9ydC5yZXBsYWNlKC9eLS8sICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gb3B0aW9uIG5hbWUsIGluIGEgY2FtZWxjYXNlIGZvcm1hdCB0aGF0IGNhbiBiZSB1c2VkXG4gICAqIGFzIGFuIG9iamVjdCBhdHRyaWJ1dGUga2V5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgaWYgKHRoaXMubmVnYXRlKSB7XG4gICAgICByZXR1cm4gY2FtZWxjYXNlKHRoaXMubmFtZSgpLnJlcGxhY2UoL15uby0vLCAnJykpO1xuICAgIH1cbiAgICByZXR1cm4gY2FtZWxjYXNlKHRoaXMubmFtZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGhlbHAgZ3JvdXAgaGVhZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRpbmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cbiAgaGVscEdyb3VwKGhlYWRpbmcpIHtcbiAgICB0aGlzLmhlbHBHcm91cEhlYWRpbmcgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGBhcmdgIG1hdGNoZXMgdGhlIHNob3J0IG9yIGxvbmcgZmxhZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBpcyhhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5zaG9ydCA9PT0gYXJnIHx8IHRoaXMubG9uZyA9PT0gYXJnO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIGEgYm9vbGVhbiBvcHRpb24uXG4gICAqXG4gICAqIE9wdGlvbnMgYXJlIG9uZSBvZiBib29sZWFuLCBuZWdhdGVkLCByZXF1aXJlZCBhcmd1bWVudCwgb3Igb3B0aW9uYWwgYXJndW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIGlzQm9vbGVhbigpIHtcbiAgICByZXR1cm4gIXRoaXMucmVxdWlyZWQgJiYgIXRoaXMub3B0aW9uYWwgJiYgIXRoaXMubmVnYXRlO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0byBtYWtlIGl0IGVhc2llciB0byB3b3JrIHdpdGggZHVhbCBvcHRpb25zLCB3aXRob3V0IGNoYW5naW5nIHRoZSBleGlzdGluZ1xuICogaW1wbGVtZW50YXRpb24uIFdlIHN1cHBvcnQgc2VwYXJhdGUgZHVhbCBvcHRpb25zIGZvciBzZXBhcmF0ZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgb3B0aW9ucyxcbiAqIGxpa2UgYC0tYnVpbGRgIGFuZCBgLS1uby1idWlsZGAsIHdoaWNoIHNoYXJlIGEgc2luZ2xlIG9wdGlvbiB2YWx1ZS4gVGhpcyB3b3JrcyBuaWNlbHkgZm9yIHNvbWVcbiAqIHVzZSBjYXNlcywgYnV0IGlzIHRyaWNreSBmb3Igb3RoZXJzIHdoZXJlIHdlIHdhbnQgc2VwYXJhdGUgYmVoYXZpb3VycyBkZXNwaXRlXG4gKiB0aGUgc2luZ2xlIHNoYXJlZCBvcHRpb24gdmFsdWUuXG4gKi9cbmNsYXNzIER1YWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7T3B0aW9uW119IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnBvc2l0aXZlT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmR1YWxPcHRpb25zID0gbmV3IFNldCgpO1xuICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucy5zZXQob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSwgb3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9zaXRpdmVPcHRpb25zLnNldChvcHRpb24uYXR0cmlidXRlTmFtZSgpLCBvcHRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubmVnYXRpdmVPcHRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzLnBvc2l0aXZlT3B0aW9ucy5oYXMoa2V5KSkge1xuICAgICAgICB0aGlzLmR1YWxPcHRpb25zLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpZCB0aGUgdmFsdWUgY29tZSBmcm9tIHRoZSBvcHRpb24sIGFuZCBub3QgZnJvbSBwb3NzaWJsZSBtYXRjaGluZyBkdWFsIG9wdGlvbj9cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgdmFsdWVGcm9tT3B0aW9uKHZhbHVlLCBvcHRpb24pIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgIGlmICghdGhpcy5kdWFsT3B0aW9ucy5oYXMob3B0aW9uS2V5KSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBVc2UgdGhlIHZhbHVlIHRvIGRlZHVjZSBpZiAocHJvYmFibHkpIGNhbWUgZnJvbSB0aGUgb3B0aW9uLlxuICAgIGNvbnN0IHByZXNldCA9IHRoaXMubmVnYXRpdmVPcHRpb25zLmdldChvcHRpb25LZXkpLnByZXNldEFyZztcbiAgICBjb25zdCBuZWdhdGl2ZVZhbHVlID0gcHJlc2V0ICE9PSB1bmRlZmluZWQgPyBwcmVzZXQgOiBmYWxzZTtcbiAgICByZXR1cm4gb3B0aW9uLm5lZ2F0ZSA9PT0gKG5lZ2F0aXZlVmFsdWUgPT09IHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIGZyb20ga2ViYWItY2FzZSB0byBjYW1lbENhc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjYW1lbGNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJy0nKS5yZWR1Y2UoKHN0ciwgd29yZCkgPT4ge1xuICAgIHJldHVybiBzdHIgKyB3b3JkWzBdLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgc2hvcnQgYW5kIGxvbmcgZmxhZyBvdXQgb2Ygc29tZXRoaW5nIGxpa2UgJy1tLC0tbWl4ZWQgPHZhbHVlPidcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHNwbGl0T3B0aW9uRmxhZ3MoZmxhZ3MpIHtcbiAgbGV0IHNob3J0RmxhZztcbiAgbGV0IGxvbmdGbGFnO1xuICAvLyBzaG9ydCBmbGFnLCBzaW5nbGUgZGFzaCBhbmQgc2luZ2xlIGNoYXJhY3RlclxuICBjb25zdCBzaG9ydEZsYWdFeHAgPSAvXi1bXi1dJC87XG4gIC8vIGxvbmcgZmxhZywgZG91YmxlIGRhc2ggYW5kIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXJcbiAgY29uc3QgbG9uZ0ZsYWdFeHAgPSAvXi0tW14tXS87XG5cbiAgY29uc3QgZmxhZ1BhcnRzID0gZmxhZ3Muc3BsaXQoL1sgfCxdKy8pLmNvbmNhdCgnZ3VhcmQnKTtcbiAgLy8gTm9ybWFsIGlzIHNob3J0IGFuZC9vciBsb25nLlxuICBpZiAoc2hvcnRGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkgc2hvcnRGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIGlmIChsb25nRmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpIGxvbmdGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIC8vIExvbmcgdGhlbiBzaG9ydC4gUmFyZWx5IHVzZWQgYnV0IGZpbmUuXG4gIGlmICghc2hvcnRGbGFnICYmIHNob3J0RmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpXG4gICAgc2hvcnRGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIC8vIEFsbG93IHR3byBsb25nIGZsYWdzLCBsaWtlICctLXdzLCAtLXdvcmtzcGFjZSdcbiAgLy8gVGhpcyBpcyB0aGUgc3VwcG9ydGVkIHdheSB0byBoYXZlIGEgc2hvcnRpc2ggb3B0aW9uIGZsYWcuXG4gIGlmICghc2hvcnRGbGFnICYmIGxvbmdGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkge1xuICAgIHNob3J0RmxhZyA9IGxvbmdGbGFnO1xuICAgIGxvbmdGbGFnID0gZmxhZ1BhcnRzLnNoaWZ0KCk7XG4gIH1cblxuICAvLyBDaGVjayBmb3IgdW5wcm9jZXNzZWQgZmxhZy4gRmFpbCBub2lzaWx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yZS5cbiAgaWYgKGZsYWdQYXJ0c1swXS5zdGFydHNXaXRoKCctJykpIHtcbiAgICBjb25zdCB1bnN1cHBvcnRlZEZsYWcgPSBmbGFnUGFydHNbMF07XG4gICAgY29uc3QgYmFzZUVycm9yID0gYG9wdGlvbiBjcmVhdGlvbiBmYWlsZWQgZHVlIHRvICcke3Vuc3VwcG9ydGVkRmxhZ30nIGluIG9wdGlvbiBmbGFncyAnJHtmbGFnc30nYDtcbiAgICBpZiAoL14tW14tXVteLV0vLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7YmFzZUVycm9yfVxuLSBhIHNob3J0IGZsYWcgaXMgYSBzaW5nbGUgZGFzaCBhbmQgYSBzaW5nbGUgY2hhcmFjdGVyXG4gIC0gZWl0aGVyIHVzZSBhIHNpbmdsZSBkYXNoIGFuZCBhIHNpbmdsZSBjaGFyYWN0ZXIgKGZvciBhIHNob3J0IGZsYWcpXG4gIC0gb3IgdXNlIGEgZG91YmxlIGRhc2ggZm9yIGEgbG9uZyBvcHRpb24gKGFuZCBjYW4gaGF2ZSB0d28sIGxpa2UgJy0td3MsIC0td29ya3NwYWNlJylgLFxuICAgICAgKTtcbiAgICBpZiAoc2hvcnRGbGFnRXhwLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHRvbyBtYW55IHNob3J0IGZsYWdzYCk7XG4gICAgaWYgKGxvbmdGbGFnRXhwLnRlc3QodW5zdXBwb3J0ZWRGbGFnKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHRvbyBtYW55IGxvbmcgZmxhZ3NgKTtcblxuICAgIHRocm93IG5ldyBFcnJvcihgJHtiYXNlRXJyb3J9XG4tIHVucmVjb2duaXNlZCBmbGFnIGZvcm1hdGApO1xuICB9XG4gIGlmIChzaG9ydEZsYWcgPT09IHVuZGVmaW5lZCAmJiBsb25nRmxhZyA9PT0gdW5kZWZpbmVkKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBvcHRpb24gY3JlYXRpb24gZmFpbGVkIGR1ZSB0byBubyBmbGFncyBmb3VuZCBpbiAnJHtmbGFnc30nLmAsXG4gICAgKTtcblxuICByZXR1cm4geyBzaG9ydEZsYWcsIGxvbmdGbGFnIH07XG59XG5cbmV4cG9ydHMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0cy5EdWFsT3B0aW9ucyA9IER1YWxPcHRpb25zO1xuIiwgImNvbnN0IG1heERpc3RhbmNlID0gMztcblxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGEsIGIpIHtcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGFtZXJhdVx1MjAxM0xldmVuc2h0ZWluX2Rpc3RhbmNlXG4gIC8vIENhbGN1bGF0aW5nIG9wdGltYWwgc3RyaW5nIGFsaWdubWVudCBkaXN0YW5jZSwgbm8gc3Vic3RyaW5nIGlzIGVkaXRlZCBtb3JlIHRoYW4gb25jZS5cbiAgLy8gKFNpbXBsZSBpbXBsZW1lbnRhdGlvbi4pXG5cbiAgLy8gUXVpY2sgZWFybHkgZXhpdCwgcmV0dXJuIHdvcnN0IGNhc2UuXG4gIGlmIChNYXRoLmFicyhhLmxlbmd0aCAtIGIubGVuZ3RoKSA+IG1heERpc3RhbmNlKVxuICAgIHJldHVybiBNYXRoLm1heChhLmxlbmd0aCwgYi5sZW5ndGgpO1xuXG4gIC8vIGRpc3RhbmNlIGJldHdlZW4gcHJlZml4IHN1YnN0cmluZ3Mgb2YgYSBhbmQgYlxuICBjb25zdCBkID0gW107XG5cbiAgLy8gcHVyZSBkZWxldGlvbnMgdHVybiBhIGludG8gZW1wdHkgc3RyaW5nXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICBkW2ldID0gW2ldO1xuICB9XG4gIC8vIHB1cmUgaW5zZXJ0aW9ucyB0dXJuIGVtcHR5IHN0cmluZyBpbnRvIGJcbiAgZm9yIChsZXQgaiA9IDA7IGogPD0gYi5sZW5ndGg7IGorKykge1xuICAgIGRbMF1bal0gPSBqO1xuICB9XG5cbiAgLy8gZmlsbCBtYXRyaXhcbiAgZm9yIChsZXQgaiA9IDE7IGogPD0gYi5sZW5ndGg7IGorKykge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjb3N0ID0gMTtcbiAgICAgIGlmIChhW2kgLSAxXSA9PT0gYltqIC0gMV0pIHtcbiAgICAgICAgY29zdCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3N0ID0gMTtcbiAgICAgIH1cbiAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgZFtpIC0gMV1bal0gKyAxLCAvLyBkZWxldGlvblxuICAgICAgICBkW2ldW2ogLSAxXSArIDEsIC8vIGluc2VydGlvblxuICAgICAgICBkW2kgLSAxXVtqIC0gMV0gKyBjb3N0LCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICBkW2ldW2pdID0gTWF0aC5taW4oZFtpXVtqXSwgZFtpIC0gMl1baiAtIDJdICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRbYS5sZW5ndGhdW2IubGVuZ3RoXTtcbn1cblxuLyoqXG4gKiBGaW5kIGNsb3NlIG1hdGNoZXMsIHJlc3RyaWN0ZWQgdG8gc2FtZSBudW1iZXIgb2YgZWRpdHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmRcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gc3VnZ2VzdFNpbWlsYXIod29yZCwgY2FuZGlkYXRlcykge1xuICBpZiAoIWNhbmRpZGF0ZXMgfHwgY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgLy8gcmVtb3ZlIHBvc3NpYmxlIGR1cGxpY2F0ZXNcbiAgY2FuZGlkYXRlcyA9IEFycmF5LmZyb20obmV3IFNldChjYW5kaWRhdGVzKSk7XG5cbiAgY29uc3Qgc2VhcmNoaW5nT3B0aW9ucyA9IHdvcmQuc3RhcnRzV2l0aCgnLS0nKTtcbiAgaWYgKHNlYXJjaGluZ09wdGlvbnMpIHtcbiAgICB3b3JkID0gd29yZC5zbGljZSgyKTtcbiAgICBjYW5kaWRhdGVzID0gY2FuZGlkYXRlcy5tYXAoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnNsaWNlKDIpKTtcbiAgfVxuXG4gIGxldCBzaW1pbGFyID0gW107XG4gIGxldCBiZXN0RGlzdGFuY2UgPSBtYXhEaXN0YW5jZTtcbiAgY29uc3QgbWluU2ltaWxhcml0eSA9IDAuNDtcbiAgY2FuZGlkYXRlcy5mb3JFYWNoKChjYW5kaWRhdGUpID0+IHtcbiAgICBpZiAoY2FuZGlkYXRlLmxlbmd0aCA8PSAxKSByZXR1cm47IC8vIG5vIG9uZSBjaGFyYWN0ZXIgZ3Vlc3Nlc1xuXG4gICAgY29uc3QgZGlzdGFuY2UgPSBlZGl0RGlzdGFuY2Uod29yZCwgY2FuZGlkYXRlKTtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCh3b3JkLmxlbmd0aCwgY2FuZGlkYXRlLmxlbmd0aCk7XG4gICAgY29uc3Qgc2ltaWxhcml0eSA9IChsZW5ndGggLSBkaXN0YW5jZSkgLyBsZW5ndGg7XG4gICAgaWYgKHNpbWlsYXJpdHkgPiBtaW5TaW1pbGFyaXR5KSB7XG4gICAgICBpZiAoZGlzdGFuY2UgPCBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgLy8gYmV0dGVyIGVkaXQgZGlzdGFuY2UsIHRocm93IGF3YXkgcHJldmlvdXMgd29yc2UgbWF0Y2hlc1xuICAgICAgICBiZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgc2ltaWxhciA9IFtjYW5kaWRhdGVdO1xuICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZSA9PT0gYmVzdERpc3RhbmNlKSB7XG4gICAgICAgIHNpbWlsYXIucHVzaChjYW5kaWRhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgc2ltaWxhci5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBpZiAoc2VhcmNoaW5nT3B0aW9ucykge1xuICAgIHNpbWlsYXIgPSBzaW1pbGFyLm1hcCgoY2FuZGlkYXRlKSA9PiBgLS0ke2NhbmRpZGF0ZX1gKTtcbiAgfVxuXG4gIGlmIChzaW1pbGFyLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gYFxcbihEaWQgeW91IG1lYW4gb25lIG9mICR7c2ltaWxhci5qb2luKCcsICcpfT8pYDtcbiAgfVxuICBpZiAoc2ltaWxhci5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gYFxcbihEaWQgeW91IG1lYW4gJHtzaW1pbGFyWzBdfT8pYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydHMuc3VnZ2VzdFNpbWlsYXIgPSBzdWdnZXN0U2ltaWxhcjtcbiIsICJjb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlcjtcbmNvbnN0IGNoaWxkUHJvY2VzcyA9IHJlcXVpcmUoJ25vZGU6Y2hpbGRfcHJvY2VzcycpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ25vZGU6cGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdub2RlOmZzJyk7XG5jb25zdCBwcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpwcm9jZXNzJyk7XG5cbmNvbnN0IHsgQXJndW1lbnQsIGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5jb25zdCB7IENvbW1hbmRlckVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5jb25zdCB7IEhlbHAsIHN0cmlwQ29sb3IgfSA9IHJlcXVpcmUoJy4vaGVscC5qcycpO1xuY29uc3QgeyBPcHRpb24sIER1YWxPcHRpb25zIH0gPSByZXF1aXJlKCcuL29wdGlvbi5qcycpO1xuY29uc3QgeyBzdWdnZXN0U2ltaWxhciB9ID0gcmVxdWlyZSgnLi9zdWdnZXN0U2ltaWxhcicpO1xuXG5jbGFzcyBDb21tYW5kIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgYENvbW1hbmRgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAdHlwZSB7Q29tbWFuZFtdfSAqL1xuICAgIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgICAvKiogQHR5cGUge09wdGlvbltdfSAqL1xuICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9IGZhbHNlO1xuICAgIC8qKiBAdHlwZSB7QXJndW1lbnRbXX0gKi9cbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMgPSBbXTtcbiAgICB0aGlzLl9hcmdzID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzOyAvLyBkZXByZWNhdGVkIG9sZCBuYW1lXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLmFyZ3MgPSBbXTsgLy8gY2xpIGFyZ3Mgd2l0aCBvcHRpb25zIHJlbW92ZWRcbiAgICB0aGlzLnJhd0FyZ3MgPSBbXTtcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBbXTsgLy8gbGlrZSAuYXJncyBidXQgYWZ0ZXIgY3VzdG9tIHByb2Nlc3NpbmcgYW5kIGNvbGxlY3RpbmcgdmFyaWFkaWNcbiAgICB0aGlzLl9zY3JpcHRQYXRoID0gbnVsbDtcbiAgICB0aGlzLl9uYW1lID0gbmFtZSB8fCAnJztcbiAgICB0aGlzLl9vcHRpb25WYWx1ZXMgPSB7fTtcbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgPSB7fTsgLy8gZGVmYXVsdCwgZW52LCBjbGkgZXRjXG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aW9uSGFuZGxlciA9IG51bGw7XG4gICAgdGhpcy5fZXhlY3V0YWJsZUhhbmRsZXIgPSBmYWxzZTtcbiAgICB0aGlzLl9leGVjdXRhYmxlRmlsZSA9IG51bGw7IC8vIGN1c3RvbSBuYW1lIGZvciBleGVjdXRhYmxlXG4gICAgdGhpcy5fZXhlY3V0YWJsZURpciA9IG51bGw7IC8vIGN1c3RvbSBzZWFyY2ggZGlyZWN0b3J5IGZvciBzdWJjb21tYW5kc1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IG51bGw7XG4gICAgdGhpcy5fZXhpdENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9hbGlhc2VzID0gW107XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9ICcnO1xuICAgIHRoaXMuX3N1bW1hcnkgPSAnJztcbiAgICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7IC8vIGxlZ2FjeVxuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zID0gZmFsc2U7XG4gICAgdGhpcy5fbGlmZUN5Y2xlSG9va3MgPSB7fTsgLy8gYSBoYXNoIG9mIGFycmF5c1xuICAgIC8qKiBAdHlwZSB7KGJvb2xlYW4gfCBzdHJpbmcpfSAqL1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9IHRydWU7XG4gICAgdGhpcy5fc2F2ZWRTdGF0ZSA9IG51bGw7IC8vIHVzZWQgaW4gc2F2ZS9yZXN0b3JlU3RhdGVCZWZvcmVQYXJzZVxuXG4gICAgLy8gc2VlIGNvbmZpZ3VyZU91dHB1dCgpIGZvciBkb2NzXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgIHdyaXRlT3V0OiAoc3RyKSA9PiBwcm9jZXNzLnN0ZG91dC53cml0ZShzdHIpLFxuICAgICAgd3JpdGVFcnI6IChzdHIpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKHN0ciksXG4gICAgICBvdXRwdXRFcnJvcjogKHN0ciwgd3JpdGUpID0+IHdyaXRlKHN0ciksXG4gICAgICBnZXRPdXRIZWxwV2lkdGg6ICgpID0+XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LmlzVFRZID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyA6IHVuZGVmaW5lZCxcbiAgICAgIGdldEVyckhlbHBXaWR0aDogKCkgPT5cbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIuaXNUVFkgPyBwcm9jZXNzLnN0ZGVyci5jb2x1bW5zIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0T3V0SGFzQ29sb3JzOiAoKSA9PlxuICAgICAgICB1c2VDb2xvcigpID8/IChwcm9jZXNzLnN0ZG91dC5pc1RUWSAmJiBwcm9jZXNzLnN0ZG91dC5oYXNDb2xvcnM/LigpKSxcbiAgICAgIGdldEVyckhhc0NvbG9yczogKCkgPT5cbiAgICAgICAgdXNlQ29sb3IoKSA/PyAocHJvY2Vzcy5zdGRlcnIuaXNUVFkgJiYgcHJvY2Vzcy5zdGRlcnIuaGFzQ29sb3JzPy4oKSksXG4gICAgICBzdHJpcENvbG9yOiAoc3RyKSA9PiBzdHJpcENvbG9yKHN0ciksXG4gICAgfTtcblxuICAgIHRoaXMuX2hpZGRlbiA9IGZhbHNlO1xuICAgIC8qKiBAdHlwZSB7KE9wdGlvbiB8IG51bGwgfCB1bmRlZmluZWQpfSAqL1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSB1bmRlZmluZWQ7IC8vIExhenkgY3JlYXRlZCBvbiBkZW1hbmQuIE1heSBiZSBudWxsIGlmIGhlbHAgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB1bmRlZmluZWQ7IC8vIHVuZGVjaWRlZCB3aGV0aGVyIHRydWUgb3IgZmFsc2UgeWV0LCBub3QgaW5oZXJpdGVkXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kfSAqL1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gdW5kZWZpbmVkOyAvLyBsYXp5IGluaXRpYWxpc2VkLCBpbmhlcml0ZWRcbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IHt9O1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPSB1bmRlZmluZWQ7IC8vIHNvZnQgaW5pdGlhbGlzZWQgd2hlbiBhZGRlZCB0byBwYXJlbnRcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID0gdW5kZWZpbmVkO1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHNldHRpbmdzIHRoYXQgYXJlIHVzZWZ1bCB0byBoYXZlIGluIGNvbW1vbiBhY3Jvc3Mgcm9vdCBjb21tYW5kIGFuZCBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogKFVzZWQgaW50ZXJuYWxseSB3aGVuIGFkZGluZyBhIGNvbW1hbmQgdXNpbmcgYC5jb21tYW5kKClgIHNvIHN1YmNvbW1hbmRzIGluaGVyaXQgcGFyZW50IHNldHRpbmdzLilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBzb3VyY2VDb21tYW5kXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgY29weUluaGVyaXRlZFNldHRpbmdzKHNvdXJjZUNvbW1hbmQpIHtcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0gc291cmNlQ29tbWFuZC5fb3V0cHV0Q29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gc291cmNlQ29tbWFuZC5faGVscE9wdGlvbjtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IHNvdXJjZUNvbW1hbmQuX2hlbHBDb21tYW5kO1xuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0gc291cmNlQ29tbWFuZC5faGVscENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5fZXhpdENhbGxiYWNrID0gc291cmNlQ29tbWFuZC5fZXhpdENhbGxiYWNrO1xuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9IHNvdXJjZUNvbW1hbmQuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcztcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPVxuICAgICAgc291cmNlQ29tbWFuZC5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlO1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gc291cmNlQ29tbWFuZC5fYWxsb3dFeGNlc3NBcmd1bWVudHM7XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSBzb3VyY2VDb21tYW5kLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucztcbiAgICB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPSBzb3VyY2VDb21tYW5kLl9zaG93SGVscEFmdGVyRXJyb3I7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gc291cmNlQ29tbWFuZC5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0NvbW1hbmRbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgZm9yIChsZXQgY29tbWFuZCA9IHRoaXM7IGNvbW1hbmQ7IGNvbW1hbmQgPSBjb21tYW5kLnBhcmVudCkge1xuICAgICAgcmVzdWx0LnB1c2goY29tbWFuZCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGEgY29tbWFuZC5cbiAgICpcbiAgICogVGhlcmUgYXJlIHR3byBzdHlsZXMgb2YgY29tbWFuZDogcGF5IGF0dGVudGlvbiB0byB3aGVyZSB0byBwdXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDb21tYW5kIGltcGxlbWVudGVkIHVzaW5nIGFjdGlvbiBoYW5kbGVyIChkZXNjcmlwdGlvbiBpcyBzdXBwbGllZCBzZXBhcmF0ZWx5IHRvIGAuY29tbWFuZGApXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnY2xvbmUgPHNvdXJjZT4gW2Rlc3RpbmF0aW9uXScpXG4gICAqICAgLmRlc2NyaXB0aW9uKCdjbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5JylcbiAgICogICAuYWN0aW9uKChzb3VyY2UsIGRlc3RpbmF0aW9uKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZygnY2xvbmUgY29tbWFuZCBjYWxsZWQnKTtcbiAgICogICB9KTtcbiAgICpcbiAgICogLy8gQ29tbWFuZCBpbXBsZW1lbnRlZCB1c2luZyBzZXBhcmF0ZSBleGVjdXRhYmxlIGZpbGUgKGRlc2NyaXB0aW9uIGlzIHNlY29uZCBwYXJhbWV0ZXIgdG8gYC5jb21tYW5kYClcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdzdGFydCA8c2VydmljZT4nLCAnc3RhcnQgbmFtZWQgc2VydmljZScpXG4gICAqICAgLmNvbW1hbmQoJ3N0b3AgW3NlcnZpY2VdJywgJ3N0b3AgbmFtZWQgc2VydmljZSwgb3IgYWxsIGlmIG5vIG5hbWUgc3VwcGxpZWQnKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVBbmRBcmdzIC0gY29tbWFuZCBuYW1lIGFuZCBhcmd1bWVudHMsIGFyZ3MgYXJlIGA8cmVxdWlyZWQ+YCBvciBgW29wdGlvbmFsXWAgYW5kIGxhc3QgbWF5IGFsc28gYmUgYHZhcmlhZGljLi4uYFxuICAgKiBAcGFyYW0geyhvYmplY3QgfCBzdHJpbmcpfSBbYWN0aW9uT3B0c09yRXhlY0Rlc2NdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIChmb3IgYWN0aW9uKSwgb3IgZGVzY3JpcHRpb24gKGZvciBleGVjdXRhYmxlKVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2V4ZWNPcHRzXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoZm9yIGV4ZWN1dGFibGUpXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IHJldHVybnMgbmV3IGNvbW1hbmQgZm9yIGFjdGlvbiBoYW5kbGVyLCBvciBgdGhpc2AgZm9yIGV4ZWN1dGFibGUgY29tbWFuZFxuICAgKi9cblxuICBjb21tYW5kKG5hbWVBbmRBcmdzLCBhY3Rpb25PcHRzT3JFeGVjRGVzYywgZXhlY09wdHMpIHtcbiAgICBsZXQgZGVzYyA9IGFjdGlvbk9wdHNPckV4ZWNEZXNjO1xuICAgIGxldCBvcHRzID0gZXhlY09wdHM7XG4gICAgaWYgKHR5cGVvZiBkZXNjID09PSAnb2JqZWN0JyAmJiBkZXNjICE9PSBudWxsKSB7XG4gICAgICBvcHRzID0gZGVzYztcbiAgICAgIGRlc2MgPSBudWxsO1xuICAgIH1cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBjb25zdCBbLCBuYW1lLCBhcmdzXSA9IG5hbWVBbmRBcmdzLm1hdGNoKC8oW14gXSspICooLiopLyk7XG5cbiAgICBjb25zdCBjbWQgPSB0aGlzLmNyZWF0ZUNvbW1hbmQobmFtZSk7XG4gICAgaWYgKGRlc2MpIHtcbiAgICAgIGNtZC5kZXNjcmlwdGlvbihkZXNjKTtcbiAgICAgIGNtZC5fZXhlY3V0YWJsZUhhbmRsZXIgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0cy5pc0RlZmF1bHQpIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBjbWQuX2hpZGRlbiA9ICEhKG9wdHMubm9IZWxwIHx8IG9wdHMuaGlkZGVuKTsgLy8gbm9IZWxwIGlzIGRlcHJlY2F0ZWQgb2xkIG5hbWUgZm9yIGhpZGRlblxuICAgIGNtZC5fZXhlY3V0YWJsZUZpbGUgPSBvcHRzLmV4ZWN1dGFibGVGaWxlIHx8IG51bGw7IC8vIEN1c3RvbSBuYW1lIGZvciBleGVjdXRhYmxlIGZpbGUsIHNldCBtaXNzaW5nIHRvIG51bGwgdG8gbWF0Y2ggY29uc3RydWN0b3JcbiAgICBpZiAoYXJncykgY21kLmFyZ3VtZW50cyhhcmdzKTtcbiAgICB0aGlzLl9yZWdpc3RlckNvbW1hbmQoY21kKTtcbiAgICBjbWQucGFyZW50ID0gdGhpcztcbiAgICBjbWQuY29weUluaGVyaXRlZFNldHRpbmdzKHRoaXMpO1xuXG4gICAgaWYgKGRlc2MpIHJldHVybiB0aGlzO1xuICAgIHJldHVybiBjbWQ7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIGNvbW1hbmQuXG4gICAqXG4gICAqIFNlZSAuY29tbWFuZCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBzdWJjb21tYW5kLCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIGNvbW1hbmQuIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlQ29tbWFuZCB0byBjdXN0b21pc2Ugc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gbmV3IGNvbW1hbmRcbiAgICovXG5cbiAgY3JlYXRlQ29tbWFuZChuYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBDb21tYW5kKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBoZWxwIHdpdGggYSBzdWJjbGFzcyBvZiBIZWxwIGJ5IG92ZXJyaWRpbmcgY3JlYXRlSGVscCxcbiAgICogb3IgYnkgb3ZlcnJpZGluZyBIZWxwIHByb3BlcnRpZXMgdXNpbmcgY29uZmlndXJlSGVscCgpLlxuICAgKlxuICAgKiBAcmV0dXJuIHtIZWxwfVxuICAgKi9cblxuICBjcmVhdGVIZWxwKCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBIZWxwKCksIHRoaXMuY29uZmlndXJlSGVscCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGN1c3RvbWlzZSB0aGUgaGVscCBieSBvdmVycmlkaW5nIEhlbHAgcHJvcGVydGllcyB1c2luZyBjb25maWd1cmVIZWxwKCksXG4gICAqIG9yIHdpdGggYSBzdWJjbGFzcyBvZiBIZWxwIGJ5IG92ZXJyaWRpbmcgY3JlYXRlSGVscCgpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbmZpZ3VyYXRpb25dIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4geyhDb21tYW5kIHwgb2JqZWN0KX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciBzdG9yZWQgY29uZmlndXJhdGlvblxuICAgKi9cblxuICBjb25maWd1cmVIZWxwKGNvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5faGVscENvbmZpZ3VyYXRpb247XG5cbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgb3V0cHV0IGdvZXMgdG8gc3Rkb3V0IGFuZCBzdGRlcnIuIFlvdSBjYW4gY3VzdG9taXNlIHRoaXMgZm9yIHNwZWNpYWxcbiAgICogYXBwbGljYXRpb25zLiBZb3UgY2FuIGFsc28gY3VzdG9taXNlIHRoZSBkaXNwbGF5IG9mIGVycm9ycyBieSBvdmVycmlkaW5nIG91dHB1dEVycm9yLlxuICAgKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGFyZSBhbGwgZnVuY3Rpb25zOlxuICAgKlxuICAgKiAgICAgLy8gY2hhbmdlIGhvdyBvdXRwdXQgYmVpbmcgd3JpdHRlbiwgZGVmYXVsdHMgdG8gc3Rkb3V0IGFuZCBzdGRlcnJcbiAgICogICAgIHdyaXRlT3V0KHN0cilcbiAgICogICAgIHdyaXRlRXJyKHN0cilcbiAgICogICAgIC8vIGNoYW5nZSBob3cgb3V0cHV0IGJlaW5nIHdyaXR0ZW4gZm9yIGVycm9ycywgZGVmYXVsdHMgdG8gd3JpdGVFcnJcbiAgICogICAgIG91dHB1dEVycm9yKHN0ciwgd3JpdGUpIC8vIHVzZWQgZm9yIGRpc3BsYXlpbmcgZXJyb3JzIGFuZCBub3QgdXNlZCBmb3IgZGlzcGxheWluZyBoZWxwXG4gICAqICAgICAvLyBzcGVjaWZ5IHdpZHRoIGZvciB3cmFwcGluZyBoZWxwXG4gICAqICAgICBnZXRPdXRIZWxwV2lkdGgoKVxuICAgKiAgICAgZ2V0RXJySGVscFdpZHRoKClcbiAgICogICAgIC8vIGNvbG9yIHN1cHBvcnQsIGN1cnJlbnRseSBvbmx5IHVzZWQgd2l0aCBIZWxwXG4gICAqICAgICBnZXRPdXRIYXNDb2xvcnMoKVxuICAgKiAgICAgZ2V0RXJySGFzQ29sb3JzKClcbiAgICogICAgIHN0cmlwQ29sb3IoKSAvLyB1c2VkIHRvIHJlbW92ZSBBTlNJIGVzY2FwZSBjb2RlcyBpZiBvdXRwdXQgZG9lcyBub3QgaGF2ZSBjb2xvcnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtjb25maWd1cmF0aW9uXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHsoQ29tbWFuZCB8IG9iamVjdCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICovXG5cbiAgY29uZmlndXJlT3V0cHV0KGNvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoY29uZmlndXJhdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbjtcblxuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi50aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLFxuICAgICAgLi4uY29uZmlndXJhdGlvbixcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIGhlbHAgb3IgYSBjdXN0b20gbWVzc2FnZSBhZnRlciBhbiBlcnJvciBvY2N1cnMuXG4gICAqXG4gICAqIEBwYXJhbSB7KGJvb2xlYW58c3RyaW5nKX0gW2Rpc3BsYXlIZWxwXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dIZWxwQWZ0ZXJFcnJvcihkaXNwbGF5SGVscCA9IHRydWUpIHtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlIZWxwICE9PSAnc3RyaW5nJykgZGlzcGxheUhlbHAgPSAhIWRpc3BsYXlIZWxwO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IGRpc3BsYXlIZWxwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgc3VnZ2VzdGlvbiBvZiBzaW1pbGFyIGNvbW1hbmRzIGZvciB1bmtub3duIGNvbW1hbmRzLCBvciBvcHRpb25zIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Rpc3BsYXlTdWdnZXN0aW9uXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHNob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcihkaXNwbGF5U3VnZ2VzdGlvbiA9IHRydWUpIHtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSAhIWRpc3BsYXlTdWdnZXN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHByZXBhcmVkIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIFNlZSAuY29tbWFuZCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBzdWJjb21tYW5kIHdoaWNoIGluaGVyaXRzIHNldHRpbmdzIGZyb20gaXRzIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWQgLSBuZXcgc3ViY29tbWFuZFxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhZGRDb21tYW5kKGNtZCwgb3B0cykge1xuICAgIGlmICghY21kLl9uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgcGFzc2VkIHRvIC5hZGRDb21tYW5kKCkgbXVzdCBoYXZlIGEgbmFtZVxuLSBzcGVjaWZ5IHRoZSBuYW1lIGluIENvbW1hbmQgY29uc3RydWN0b3Igb3IgdXNpbmcgLm5hbWUoKWApO1xuICAgIH1cblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGlmIChvcHRzLm5vSGVscCB8fCBvcHRzLmhpZGRlbikgY21kLl9oaWRkZW4gPSB0cnVlOyAvLyBtb2RpZnlpbmcgcGFzc2VkIGNvbW1hbmQgZHVlIHRvIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uXG5cbiAgICB0aGlzLl9yZWdpc3RlckNvbW1hbmQoY21kKTtcbiAgICBjbWQucGFyZW50ID0gdGhpcztcbiAgICBjbWQuX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBhcmd1bWVudC5cbiAgICpcbiAgICogU2VlIC5hcmd1bWVudCgpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBhcmd1bWVudCwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBhcmd1bWVudC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVBcmd1bWVudCB0byByZXR1cm4gYSBjdXN0b20gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fSBuZXcgYXJndW1lbnRcbiAgICovXG5cbiAgY3JlYXRlQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IEFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGF0IHRoZSBhcmd1bWVudCBpcyByZXF1aXJlZCwgYW5kIHlvdSBjYW4gZXhwbGljaXRseVxuICAgKiBpbmRpY2F0ZSB0aGlzIHdpdGggPD4gYXJvdW5kIHRoZSBuYW1lLiBQdXQgW10gYXJvdW5kIHRoZSBuYW1lIGZvciBhbiBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5hcmd1bWVudCgnPGlucHV0LWZpbGU+Jyk7XG4gICAqIHByb2dyYW0uYXJndW1lbnQoJ1tvdXRwdXQtZmlsZV0nKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gYXJndW1lbnQgcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gdGhpcy5jcmVhdGVBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG4gICAgaWYgKHR5cGVvZiBwYXJzZUFyZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXJndW1lbnQuZGVmYXVsdChkZWZhdWx0VmFsdWUpLmFyZ1BhcnNlcihwYXJzZUFyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHQocGFyc2VBcmcpO1xuICAgIH1cbiAgICB0aGlzLmFkZEFyZ3VtZW50KGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLCBhZGRpbmcgbXVsdGlwbGUgYXQgb25jZSAod2l0aG91dCBkZXNjcmlwdGlvbnMpLlxuICAgKlxuICAgKiBTZWUgYWxzbyAuYXJndW1lbnQoKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5hcmd1bWVudHMoJzxjbWQ+IFtlbnZdJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYXJndW1lbnRzKG5hbWVzKSB7XG4gICAgbmFtZXNcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdCgvICsvKVxuICAgICAgLmZvckVhY2goKGRldGFpbCkgPT4ge1xuICAgICAgICB0aGlzLmFyZ3VtZW50KGRldGFpbCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYXJndW1lbnQgc3ludGF4IGZvciBjb21tYW5kLCBhZGRpbmcgYSBwcmVwYXJlZCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRBcmd1bWVudChhcmd1bWVudCkge1xuICAgIGNvbnN0IHByZXZpb3VzQXJndW1lbnQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuc2xpY2UoLTEpWzBdO1xuICAgIGlmIChwcmV2aW91c0FyZ3VtZW50Py52YXJpYWRpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgb25seSB0aGUgbGFzdCBhcmd1bWVudCBjYW4gYmUgdmFyaWFkaWMgJyR7cHJldmlvdXNBcmd1bWVudC5uYW1lKCl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhcmd1bWVudC5yZXF1aXJlZCAmJlxuICAgICAgYXJndW1lbnQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFyZ3VtZW50LnBhcnNlQXJnID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGEgZGVmYXVsdCB2YWx1ZSBmb3IgYSByZXF1aXJlZCBhcmd1bWVudCBpcyBuZXZlciB1c2VkOiAnJHthcmd1bWVudC5uYW1lKCl9J2AsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMucHVzaChhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3VzdG9taXNlIG9yIG92ZXJyaWRlIGRlZmF1bHQgaGVscCBjb21tYW5kLiBCeSBkZWZhdWx0IGEgaGVscCBjb21tYW5kIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgaWYgeW91ciBjb21tYW5kIGhhcyBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCgnaGVscCBbY21kXScpO1xuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKCdoZWxwIFtjbWRdJywgJ3Nob3cgaGVscCcpO1xuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKGZhbHNlKTsgLy8gc3VwcHJlc3MgZGVmYXVsdCBoZWxwIGNvbW1hbmRcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCh0cnVlKTsgLy8gYWRkIGhlbHAgY29tbWFuZCBldmVuIGlmIG5vIHN1YmNvbW1hbmRzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfGJvb2xlYW59IGVuYWJsZU9yTmFtZUFuZEFyZ3MgLSBlbmFibGUgd2l0aCBjdXN0b20gbmFtZSBhbmQvb3IgYXJndW1lbnRzLCBvciBib29sZWFuIHRvIG92ZXJyaWRlIHdoZXRoZXIgYWRkZWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl0gLSBjdXN0b20gZGVzY3JpcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhlbHBDb21tYW5kKGVuYWJsZU9yTmFtZUFuZEFyZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBlbmFibGVPck5hbWVBbmRBcmdzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSBlbmFibGVPck5hbWVBbmRBcmdzO1xuICAgICAgaWYgKGVuYWJsZU9yTmFtZUFuZEFyZ3MgJiYgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCkge1xuICAgICAgICAvLyBtYWtlIHRoZSBjb21tYW5kIHRvIHN0b3JlIHRoZSBncm91cFxuICAgICAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKHRoaXMuX2dldEhlbHBDb21tYW5kKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUFuZEFyZ3MgPSBlbmFibGVPck5hbWVBbmRBcmdzID8/ICdoZWxwIFtjb21tYW5kXSc7XG4gICAgY29uc3QgWywgaGVscE5hbWUsIGhlbHBBcmdzXSA9IG5hbWVBbmRBcmdzLm1hdGNoKC8oW14gXSspICooLiopLyk7XG4gICAgY29uc3QgaGVscERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPz8gJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCc7XG5cbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChoZWxwTmFtZSk7XG4gICAgaGVscENvbW1hbmQuaGVscE9wdGlvbihmYWxzZSk7XG4gICAgaWYgKGhlbHBBcmdzKSBoZWxwQ29tbWFuZC5hcmd1bWVudHMoaGVscEFyZ3MpO1xuICAgIGlmIChoZWxwRGVzY3JpcHRpb24pIGhlbHBDb21tYW5kLmRlc2NyaXB0aW9uKGhlbHBEZXNjcmlwdGlvbik7XG5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdHJ1ZTtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IGhlbHBDb21tYW5kO1xuICAgIC8vIGluaXQgZ3JvdXAgdW5sZXNzIGxhenkgY3JlYXRlXG4gICAgaWYgKGVuYWJsZU9yTmFtZUFuZEFyZ3MgfHwgZGVzY3JpcHRpb24pIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoaGVscENvbW1hbmQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHByZXBhcmVkIGN1c3RvbSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7KENvbW1hbmR8c3RyaW5nfGJvb2xlYW4pfSBoZWxwQ29tbWFuZCAtIGN1c3RvbSBoZWxwIGNvbW1hbmQsIG9yIGRlcHJlY2F0ZWQgZW5hYmxlT3JOYW1lQW5kQXJncyBhcyBmb3IgYC5oZWxwQ29tbWFuZCgpYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlcHJlY2F0ZWREZXNjcmlwdGlvbl0gLSBkZXByZWNhdGVkIGN1c3RvbSBkZXNjcmlwdGlvbiB1c2VkIHdpdGggY3VzdG9tIG5hbWUgb25seVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pIHtcbiAgICAvLyBJZiBub3QgcGFzc2VkIGFuIG9iamVjdCwgY2FsbCB0aHJvdWdoIHRvIGhlbHBDb21tYW5kIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSxcbiAgICAvLyBhcyBhZGRIZWxwQ29tbWFuZCB3YXMgb3JpZ2luYWxseSB1c2VkIGxpa2UgaGVscENvbW1hbmQgaXMgbm93LlxuICAgIGlmICh0eXBlb2YgaGVscENvbW1hbmQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLmhlbHBDb21tYW5kKGhlbHBDb21tYW5kLCBkZXByZWNhdGVkRGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHRydWU7XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBoZWxwQ29tbWFuZDtcbiAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKGhlbHBDb21tYW5kKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXp5IGNyZWF0ZSBoZWxwIGNvbW1hbmQuXG4gICAqXG4gICAqIEByZXR1cm4geyhDb21tYW5kfG51bGwpfVxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBDb21tYW5kKCkge1xuICAgIGNvbnN0IGhhc0ltcGxpY2l0SGVscENvbW1hbmQgPVxuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA/P1xuICAgICAgKHRoaXMuY29tbWFuZHMubGVuZ3RoICYmXG4gICAgICAgICF0aGlzLl9hY3Rpb25IYW5kbGVyICYmXG4gICAgICAgICF0aGlzLl9maW5kQ29tbWFuZCgnaGVscCcpKTtcblxuICAgIGlmIChoYXNJbXBsaWNpdEhlbHBDb21tYW5kKSB7XG4gICAgICBpZiAodGhpcy5faGVscENvbW1hbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmhlbHBDb21tYW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gdXNlIGRlZmF1bHQgbmFtZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9oZWxwQ29tbWFuZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGhvb2sgZm9yIGxpZmUgY3ljbGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaG9vayhldmVudCwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydwcmVTdWJjb21tYW5kJywgJ3ByZUFjdGlvbicsICdwb3N0QWN0aW9uJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBldmVudCBwYXNzZWQgdG8gaG9vayA6ICcke2V2ZW50fScuXG5FeHBlY3Rpbmcgb25lIG9mICcke2FsbG93ZWRWYWx1ZXMuam9pbihcIicsICdcIil9J2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdKSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0ucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIHRvIHVzZSBhcyByZXBsYWNlbWVudCBmb3IgY2FsbGluZyBwcm9jZXNzLmV4aXQuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl0gb3B0aW9uYWwgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYSBDb21tYW5kZXJFcnJvciwgZGVmYXVsdHMgdG8gdGhyb3dpbmdcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGV4aXRPdmVycmlkZShmbikge1xuICAgIGlmIChmbikge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrID0gZm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlICE9PSAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFzeW5jIGNhbGxiYWNrIGZyb20gc3Bhd24gZXZlbnRzLCBub3QgdXNlZnVsIHRvIHRocm93LlxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHByb2Nlc3MuZXhpdCwgYW5kIF9leGl0Q2FsbGJhY2sgaWYgZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIGV4aXQgY29kZSBmb3IgdXNpbmcgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGVycm9yXG4gICAqIEByZXR1cm4gbmV2ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4aXQoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBpZiAodGhpcy5fZXhpdENhbGxiYWNrKSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sobmV3IENvbW1hbmRlckVycm9yKGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSk7XG4gICAgICAvLyBFeHBlY3RpbmcgdGhpcyBsaW5lIGlzIG5vdCByZWFjaGVkLlxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoZXhpdENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNhbGxiYWNrIGBmbmAgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3NlcnZlJylcbiAgICogICAuZGVzY3JpcHRpb24oJ3N0YXJ0IHNlcnZpY2UnKVxuICAgKiAgIC5hY3Rpb24oZnVuY3Rpb24oKSB7XG4gICAqICAgICAgLy8gZG8gd29yayBoZXJlXG4gICAqICAgfSk7XG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhY3Rpb24oZm4pIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChhcmdzKSA9PiB7XG4gICAgICAvLyBUaGUgLmFjdGlvbiBjYWxsYmFjayB0YWtlcyBhbiBleHRyYSBwYXJhbWV0ZXIgd2hpY2ggaXMgdGhlIGNvbW1hbmQgb3Igb3B0aW9ucy5cbiAgICAgIGNvbnN0IGV4cGVjdGVkQXJnc0NvdW50ID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGFjdGlvbkFyZ3MgPSBhcmdzLnNsaWNlKDAsIGV4cGVjdGVkQXJnc0NvdW50KTtcbiAgICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzOyAvLyBiYWNrd2FyZHMgY29tcGF0aWJsZSBcIm9wdGlvbnNcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aW9uQXJnc1tleHBlY3RlZEFyZ3NDb3VudF0gPSB0aGlzLm9wdHMoKTtcbiAgICAgIH1cbiAgICAgIGFjdGlvbkFyZ3MucHVzaCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFjdGlvbkFyZ3MpO1xuICAgIH07XG4gICAgdGhpcy5fYWN0aW9uSGFuZGxlciA9IGxpc3RlbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBvcHRpb24uXG4gICAqXG4gICAqIFNlZSAub3B0aW9uKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIG9wdGlvbiwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBvcHRpb24uIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlT3B0aW9uIHRvIHJldHVybiBhIGN1c3RvbSBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtPcHRpb259IG5ldyBvcHRpb25cbiAgICovXG5cbiAgY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCBwYXJzZUFyZ3MgdG8gY2F0Y2ggJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnLlxuICAgKlxuICAgKiBAcGFyYW0geyhPcHRpb24gfCBBcmd1bWVudCl9IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBwcmV2aW91c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gaW52YWxpZEFyZ3VtZW50TWVzc2FnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2FsbFBhcnNlQXJnKHRhcmdldCwgdmFsdWUsIHByZXZpb3VzLCBpbnZhbGlkQXJndW1lbnRNZXNzYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0YXJnZXQucGFyc2VBcmcodmFsdWUsIHByZXZpb3VzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ2NvbW1hbmRlci5pbnZhbGlkQXJndW1lbnQnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtpbnZhbGlkQXJndW1lbnRNZXNzYWdlfSAke2Vyci5tZXNzYWdlfWA7XG4gICAgICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBleGl0Q29kZTogZXJyLmV4aXRDb2RlLCBjb2RlOiBlcnIuY29kZSB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIG9wdGlvbiBmbGFnIGNvbmZsaWN0cy5cbiAgICogUmVnaXN0ZXIgb3B0aW9uIGlmIG5vIGNvbmZsaWN0cyBmb3VuZCwgb3IgdGhyb3cgb24gY29uZmxpY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3JlZ2lzdGVyT3B0aW9uKG9wdGlvbikge1xuICAgIGNvbnN0IG1hdGNoaW5nT3B0aW9uID1cbiAgICAgIChvcHRpb24uc2hvcnQgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24uc2hvcnQpKSB8fFxuICAgICAgKG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpKTtcbiAgICBpZiAobWF0Y2hpbmdPcHRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nRmxhZyA9XG4gICAgICAgIG9wdGlvbi5sb25nICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLmxvbmcpXG4gICAgICAgICAgPyBvcHRpb24ubG9uZ1xuICAgICAgICAgIDogb3B0aW9uLnNob3J0O1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYWRkIG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyR7dGhpcy5fbmFtZSAmJiBgIHRvIGNvbW1hbmQgJyR7dGhpcy5fbmFtZX0nYH0gZHVlIHRvIGNvbmZsaWN0aW5nIGZsYWcgJyR7bWF0Y2hpbmdGbGFnfSdcbi0gIGFscmVhZHkgdXNlZCBieSBvcHRpb24gJyR7bWF0Y2hpbmdPcHRpb24uZmxhZ3N9J2ApO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cChvcHRpb24pO1xuICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgZm9yIGNvbW1hbmQgbmFtZSBhbmQgYWxpYXMgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgY29tbWFuZHMuXG4gICAqIFJlZ2lzdGVyIGNvbW1hbmQgaWYgbm8gY29uZmxpY3RzIGZvdW5kLCBvciB0aHJvdyBvbiBjb25mbGljdC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjb21tYW5kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9yZWdpc3RlckNvbW1hbmQoY29tbWFuZCkge1xuICAgIGNvbnN0IGtub3duQnkgPSAoY21kKSA9PiB7XG4gICAgICByZXR1cm4gW2NtZC5uYW1lKCldLmNvbmNhdChjbWQuYWxpYXNlcygpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWxyZWFkeVVzZWQgPSBrbm93bkJ5KGNvbW1hbmQpLmZpbmQoKG5hbWUpID0+XG4gICAgICB0aGlzLl9maW5kQ29tbWFuZChuYW1lKSxcbiAgICApO1xuICAgIGlmIChhbHJlYWR5VXNlZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdDbWQgPSBrbm93bkJ5KHRoaXMuX2ZpbmRDb21tYW5kKGFscmVhZHlVc2VkKSkuam9pbignfCcpO1xuICAgICAgY29uc3QgbmV3Q21kID0ga25vd25CeShjb21tYW5kKS5qb2luKCd8Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYW5ub3QgYWRkIGNvbW1hbmQgJyR7bmV3Q21kfScgYXMgYWxyZWFkeSBoYXZlIGNvbW1hbmQgJyR7ZXhpc3RpbmdDbWR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoY29tbWFuZCk7XG4gICAgdGhpcy5jb21tYW5kcy5wdXNoKGNvbW1hbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXJPcHRpb24ob3B0aW9uKTtcblxuICAgIGNvbnN0IG9uYW1lID0gb3B0aW9uLm5hbWUoKTtcbiAgICBjb25zdCBuYW1lID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcblxuICAgIC8vIHN0b3JlIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgLy8gLS1uby1mb28gaXMgc3BlY2lhbCBhbmQgZGVmYXVsdHMgZm9vIHRvIHRydWUsIHVubGVzcyBhIC0tZm9vIG9wdGlvbiBpcyBhbHJlYWR5IGRlZmluZWRcbiAgICAgIGNvbnN0IHBvc2l0aXZlTG9uZ0ZsYWcgPSBvcHRpb24ubG9uZy5yZXBsYWNlKC9eLS1uby0vLCAnLS0nKTtcbiAgICAgIGlmICghdGhpcy5fZmluZE9wdGlvbihwb3NpdGl2ZUxvbmdGbGFnKSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG9wdGlvbi5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBvcHRpb24uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbi5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UobmFtZSwgb3B0aW9uLmRlZmF1bHRWYWx1ZSwgJ2RlZmF1bHQnKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGVyIGZvciBjbGkgYW5kIGVudiBzdXBwbGllZCB2YWx1ZXNcbiAgICBjb25zdCBoYW5kbGVPcHRpb25WYWx1ZSA9ICh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsIHZhbHVlU291cmNlKSA9PiB7XG4gICAgICAvLyB2YWwgaXMgbnVsbCBmb3Igb3B0aW9uYWwgb3B0aW9uIHVzZWQgd2l0aG91dCBhbiBvcHRpb25hbC1hcmd1bWVudC5cbiAgICAgIC8vIHZhbCBpcyB1bmRlZmluZWQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgb3B0aW9uLlxuICAgICAgaWYgKHZhbCA9PSBudWxsICYmIG9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWwgPSBvcHRpb24ucHJlc2V0QXJnO1xuICAgICAgfVxuXG4gICAgICAvLyBjdXN0b20gcHJvY2Vzc2luZ1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG5hbWUpO1xuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiBvcHRpb24ucGFyc2VBcmcpIHtcbiAgICAgICAgdmFsID0gdGhpcy5fY2FsbFBhcnNlQXJnKG9wdGlvbiwgdmFsLCBvbGRWYWx1ZSwgaW52YWxpZFZhbHVlTWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiBvcHRpb24udmFyaWFkaWMpIHtcbiAgICAgICAgdmFsID0gb3B0aW9uLl9jb2xsZWN0VmFsdWUodmFsLCBvbGRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbGwtaW4gYXBwcm9wcmlhdGUgbWlzc2luZyB2YWx1ZXMuIExvbmcgd2luZGVkIGJ1dCBlYXN5IHRvIGZvbGxvdy5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgICBpZiAob3B0aW9uLm5lZ2F0ZSkge1xuICAgICAgICAgIHZhbCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5pc0Jvb2xlYW4oKSB8fCBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICB2YWwgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9ICcnOyAvLyBub3Qgbm9ybWFsLCBwYXJzZUFyZyBtaWdodCBoYXZlIGZhaWxlZCBvciBiZSBhIG1vY2sgZnVuY3Rpb24gZm9yIHRlc3RpbmdcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UobmFtZSwgdmFsLCB2YWx1ZVNvdXJjZSk7XG4gICAgfTtcblxuICAgIHRoaXMub24oJ29wdGlvbjonICsgb25hbWUsICh2YWwpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBhcmd1bWVudCAnJHt2YWx9JyBpcyBpbnZhbGlkLmA7XG4gICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdjbGknKTtcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb24uZW52VmFyKSB7XG4gICAgICB0aGlzLm9uKCdvcHRpb25FbnY6JyArIG9uYW1lLCAodmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyB2YWx1ZSAnJHt2YWx9JyBmcm9tIGVudiAnJHtvcHRpb24uZW52VmFyfScgaXMgaW52YWxpZC5gO1xuICAgICAgICBoYW5kbGVPcHRpb25WYWx1ZSh2YWwsIGludmFsaWRWYWx1ZU1lc3NhZ2UsICdlbnYnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIHNoYXJlZCBieSAub3B0aW9uKCkgYW5kIC5yZXF1aXJlZE9wdGlvbigpXG4gICAqXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29wdGlvbkV4KGNvbmZpZywgZmxhZ3MsIGRlc2NyaXB0aW9uLCBmbiwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ29iamVjdCcgJiYgZmxhZ3MgaW5zdGFuY2VvZiBPcHRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RvIGFkZCBhbiBPcHRpb24gb2JqZWN0IHVzZSBhZGRPcHRpb24oKSBpbnN0ZWFkIG9mIG9wdGlvbigpIG9yIHJlcXVpcmVkT3B0aW9uKCknLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgICBvcHRpb24ubWFrZU9wdGlvbk1hbmRhdG9yeSghIWNvbmZpZy5tYW5kYXRvcnkpO1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2UgaWYgKGZuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBkZXByZWNhdGVkXG4gICAgICBjb25zdCByZWdleCA9IGZuO1xuICAgICAgZm4gPSAodmFsLCBkZWYpID0+IHtcbiAgICAgICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWModmFsKTtcbiAgICAgICAgcmV0dXJuIG0gPyBtWzBdIDogZGVmO1xuICAgICAgfTtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKGZuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZm4pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBvcHRpb24gd2l0aCBgZmxhZ3NgLCBgZGVzY3JpcHRpb25gLCBhbmQgb3B0aW9uYWwgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbiBvciBgZGVmYXVsdFZhbHVlYCBvciBib3RoLlxuICAgKlxuICAgKiBUaGUgYGZsYWdzYCBzdHJpbmcgY29udGFpbnMgdGhlIHNob3J0IGFuZC9vciBsb25nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS4gQSByZXF1aXJlZFxuICAgKiBvcHRpb24tYXJndW1lbnQgaXMgaW5kaWNhdGVkIGJ5IGA8PmAgYW5kIGFuIG9wdGlvbmFsIG9wdGlvbi1hcmd1bWVudCBieSBgW11gLlxuICAgKlxuICAgKiBTZWUgdGhlIFJFQURNRSBmb3IgbW9yZSBkZXRhaWxzLCBhbmQgc2VlIGFsc28gYWRkT3B0aW9uKCkgYW5kIHJlcXVpcmVkT3B0aW9uKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAgIC5vcHRpb24oJy1wLCAtLXBlcHBlcicsICdhZGQgcGVwcGVyJylcbiAgICogICAgIC5vcHRpb24oJy0tcHQsIC0tcGl6emEtdHlwZSA8VFlQRT4nLCAndHlwZSBvZiBwaXp6YScpIC8vIHJlcXVpcmVkIG9wdGlvbi1hcmd1bWVudFxuICAgKiAgICAgLm9wdGlvbignLWMsIC0tY2hlZXNlIFtDSEVFU0VdJywgJ2FkZCBleHRyYSBjaGVlc2UnLCAnbW96emFyZWxsYScpIC8vIG9wdGlvbmFsIG9wdGlvbi1hcmd1bWVudCB3aXRoIGRlZmF1bHRcbiAgICogICAgIC5vcHRpb24oJy10LCAtLXRpcCA8VkFMVUU+JywgJ2FkZCB0aXAgdG8gcHVyY2hhc2UgY29zdCcsIHBhcnNlRmxvYXQpIC8vIGN1c3RvbSBwYXJzZSBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBvcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkV4KHt9LCBmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHJlcXVpcmVkIG9wdGlvbiB3aGljaCBtdXN0IGhhdmUgYSB2YWx1ZSBhZnRlciBwYXJzaW5nLiBUaGlzIHVzdWFsbHkgbWVhbnNcbiAgICogdGhlIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAoT3RoZXJ3aXNlIHRoZSBzYW1lIGFzIC5vcHRpb24oKS4pXG4gICAqXG4gICAqIFRoZSBgZmxhZ3NgIHN0cmluZyBjb250YWlucyB0aGUgc2hvcnQgYW5kL29yIGxvbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBjb21tYSwgYSBwaXBlIG9yIHNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHsoRnVuY3Rpb258Kil9IFtwYXJzZUFyZ10gLSBjdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICByZXF1aXJlZE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRXgoXG4gICAgICB7IG1hbmRhdG9yeTogdHJ1ZSB9LFxuICAgICAgZmxhZ3MsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHBhcnNlQXJnLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWx0ZXIgcGFyc2luZyBvZiBzaG9ydCBmbGFncyB3aXRoIG9wdGlvbmFsIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gZm9yIGAub3B0aW9uKCctZiwtLWZsYWcgW3ZhbHVlXScpOlxuICAgKiBwcm9ncmFtLmNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSh0cnVlKTsgIC8vIGAtZjgwYCBpcyB0cmVhdGVkIGxpa2UgYC0tZmxhZz04MGAsIHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyXG4gICAqIHByb2dyYW0uY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKGZhbHNlKSAvLyBgLWZiYCBpcyB0cmVhdGVkIGxpa2UgYC1mIC1iYFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb21iaW5lXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBhbiBvcHRpb25hbCB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGFmdGVyIHRoZSBmbGFnLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZShjb21iaW5lID0gdHJ1ZSkge1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9ICEhY29tYmluZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1bmtub3duIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dVbmtub3duXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBubyBlcnJvciB3aWxsIGJlIHRocm93biBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFsbG93VW5rbm93bk9wdGlvbihhbGxvd1Vua25vd24gPSB0cnVlKSB7XG4gICAgdGhpcy5fYWxsb3dVbmtub3duT3B0aW9uID0gISFhbGxvd1Vua25vd247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgZXhjZXNzIGNvbW1hbmQtYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUuIFBhc3MgZmFsc2UgdG8gbWFrZSBleGNlc3MgYXJndW1lbnRzIGFuIGVycm9yLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0V4Y2Vzc10gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd24gZm9yIGV4Y2VzcyBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWxsb3dFeGNlc3NBcmd1bWVudHMoYWxsb3dFeGNlc3MgPSB0cnVlKSB7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSAhIWFsbG93RXhjZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBwb3NpdGlvbmFsIG9wdGlvbnMuIFBvc2l0aW9uYWwgbWVhbnMgZ2xvYmFsIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBiZWZvcmUgc3ViY29tbWFuZHMgd2hpY2ggbGV0c1xuICAgKiBzdWJjb21tYW5kcyByZXVzZSB0aGUgc2FtZSBvcHRpb24gbmFtZXMsIGFuZCBhbHNvIGVuYWJsZXMgc3ViY29tbWFuZHMgdG8gdHVybiBvbiBwYXNzVGhyb3VnaE9wdGlvbnMuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub24tcG9zaXRpb25hbCBhbmQgZ2xvYmFsIG9wdGlvbnMgbWF5IGFwcGVhciBhbnl3aGVyZSBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwb3NpdGlvbmFsXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKHBvc2l0aW9uYWwgPSB0cnVlKSB7XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSAhIXBvc2l0aW9uYWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGFzcyB0aHJvdWdoIG9wdGlvbnMgdGhhdCBjb21lIGFmdGVyIGNvbW1hbmQtYXJndW1lbnRzIHJhdGhlciB0aGFuIHRyZWF0IHRoZW0gYXMgY29tbWFuZC1vcHRpb25zLFxuICAgKiBzbyBhY3R1YWwgY29tbWFuZC1vcHRpb25zIGNvbWUgYmVmb3JlIGNvbW1hbmQtYXJndW1lbnRzLiBUdXJuaW5nIHRoaXMgb24gZm9yIGEgc3ViY29tbWFuZCByZXF1aXJlc1xuICAgKiBwb3NpdGlvbmFsIG9wdGlvbnMgdG8gaGF2ZSBiZWVuIGVuYWJsZWQgb24gdGhlIHByb2dyYW0gKHBhcmVudCBjb21tYW5kcykuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub24tcG9zaXRpb25hbCBhbmQgb3B0aW9ucyBtYXkgYXBwZWFyIGJlZm9yZSBvciBhZnRlciBjb21tYW5kLWFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbcGFzc1Rocm91Z2hdIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgcGFzc1Rocm91Z2hPcHRpb25zKHBhc3NUaHJvdWdoID0gdHJ1ZSkge1xuICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyA9ICEhcGFzc1Rocm91Z2g7XG4gICAgdGhpcy5fY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucGFyZW50ICYmXG4gICAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgJiZcbiAgICAgICF0aGlzLnBhcmVudC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHBhc3NUaHJvdWdoT3B0aW9ucyBjYW5ub3QgYmUgdXNlZCBmb3IgJyR7dGhpcy5fbmFtZX0nIHdpdGhvdXQgdHVybmluZyBvbiBlbmFibGVQb3NpdGlvbmFsT3B0aW9ucyBmb3IgcGFyZW50IGNvbW1hbmQocylgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBzdG9yZSBvcHRpb24gdmFsdWVzIGFzIHByb3BlcnRpZXMgb24gY29tbWFuZCBvYmplY3QsXG4gICAqIG9yIHN0b3JlIHNlcGFyYXRlbHkgKHNwZWNpZnkgZmFsc2UpLiBJbiBib3RoIGNhc2VzIHRoZSBvcHRpb24gdmFsdWVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAub3B0cygpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZUFzUHJvcGVydGllcz10cnVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKHN0b3JlQXNQcm9wZXJ0aWVzID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGwgLnN0b3JlT3B0aW9uc0FzUHJvcGVydGllcygpIGJlZm9yZSBhZGRpbmcgb3B0aW9ucycpO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fb3B0aW9uVmFsdWVzKS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2NhbGwgLnN0b3JlT3B0aW9uc0FzUHJvcGVydGllcygpIGJlZm9yZSBzZXR0aW5nIG9wdGlvbiB2YWx1ZXMnLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gISFzdG9yZUFzUHJvcGVydGllcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7b2JqZWN0fSB2YWx1ZVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZShrZXkpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc2V0T3B0aW9uVmFsdWUoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShrZXksIHZhbHVlLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIG9wdGlvbiB2YWx1ZSBhbmQgd2hlcmUgdGhlIHZhbHVlIGNhbWUgZnJvbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIGV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdC9jb25maWcvZW52L2NsaS9pbXBsaWVkXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2Uoa2V5LCB2YWx1ZSwgc291cmNlKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29wdGlvblZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlc1trZXldID0gc291cmNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2Ugb2Ygb3B0aW9uIHZhbHVlLlxuICAgKiBFeHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQgfCBjb25maWcgfCBlbnYgfCBjbGkgfCBpbXBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZSBvZiBvcHRpb24gdmFsdWUuIFNlZSBhbHNvIC5vcHRzV2l0aEdsb2JhbHMoKS5cbiAgICogRXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0IHwgY29uZmlnIHwgZW52IHwgY2xpIHwgaW1wbGllZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWVTb3VyY2VXaXRoR2xvYmFscyhrZXkpIHtcbiAgICAvLyBnbG9iYWwgb3ZlcndyaXRlcyBsb2NhbCwgbGlrZSBvcHRzV2l0aEdsb2JhbHNcbiAgICBsZXQgc291cmNlO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGlmIChjbWQuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNvdXJjZSA9IGNtZC5nZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgYXJndW1lbnRzIGZyb20gaW1wbGllZCBvciBleHBsaWNpdCBhcmd1bWVudHMuXG4gICAqIFNpZGUtZWZmZWN0czogc2V0IF9zY3JpcHRQYXRoIGlmIGFyZ3MgaW5jbHVkZWQgc2NyaXB0LiBVc2VkIGZvciBkZWZhdWx0IHByb2dyYW0gbmFtZSwgYW5kIHN1YmNvbW1hbmQgc2VhcmNoZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgaWYgKGFyZ3YgIT09IHVuZGVmaW5lZCAmJiAhQXJyYXkuaXNBcnJheShhcmd2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdCBwYXJhbWV0ZXIgdG8gcGFyc2UgbXVzdCBiZSBhcnJheSBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcGFyc2VPcHRpb25zID0gcGFyc2VPcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gYXV0by1kZXRlY3QgYXJndW1lbnQgY29udmVudGlvbnMgaWYgbm90aGluZyBzdXBwbGllZFxuICAgIGlmIChhcmd2ID09PSB1bmRlZmluZWQgJiYgcGFyc2VPcHRpb25zLmZyb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudmVyc2lvbnM/LmVsZWN0cm9uKSB7XG4gICAgICAgIHBhcnNlT3B0aW9ucy5mcm9tID0gJ2VsZWN0cm9uJztcbiAgICAgIH1cbiAgICAgIC8vIGNoZWNrIG5vZGUgc3BlY2lmaWMgb3B0aW9ucyBmb3Igc2NlbmFyaW9zIHdoZXJlIHVzZXIgQ0xJIGFyZ3MgZm9sbG93IGV4ZWN1dGFibGUgd2l0aG91dCBzY3JpcHRuYW1lXG4gICAgICBjb25zdCBleGVjQXJndiA9IHByb2Nlc3MuZXhlY0FyZ3YgPz8gW107XG4gICAgICBpZiAoXG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctZScpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctLWV2YWwnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLXAnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLS1wcmludCcpXG4gICAgICApIHtcbiAgICAgICAgcGFyc2VPcHRpb25zLmZyb20gPSAnZXZhbCc7IC8vIGludGVybmFsIHVzYWdlLCBub3QgZG9jdW1lbnRlZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlZmF1bHQgdG8gdXNpbmcgcHJvY2Vzcy5hcmd2XG4gICAgaWYgKGFyZ3YgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJndiA9IHByb2Nlc3MuYXJndjtcbiAgICB9XG4gICAgdGhpcy5yYXdBcmdzID0gYXJndi5zbGljZSgpO1xuXG4gICAgLy8gZXh0cmFjdCB0aGUgdXNlciBhcmdzIGFuZCBzY3JpcHRQYXRoXG4gICAgbGV0IHVzZXJBcmdzO1xuICAgIHN3aXRjaCAocGFyc2VPcHRpb25zLmZyb20pIHtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgIHRoaXMuX3NjcmlwdFBhdGggPSBhcmd2WzFdO1xuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWxlY3Ryb24nOlxuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGRlZmF1bHRBcHAgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgICBpZiAocHJvY2Vzcy5kZWZhdWx0QXBwKSB7XG4gICAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCA9IGFyZ3ZbMV07XG4gICAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VzZXInOlxuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXZhbCc6XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYHVuZXhwZWN0ZWQgcGFyc2Ugb3B0aW9uIHsgZnJvbTogJyR7cGFyc2VPcHRpb25zLmZyb219JyB9YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGRlZmF1bHQgbmFtZSBmb3IgcHJvZ3JhbSBmcm9tIGFyZ3VtZW50cy5cbiAgICBpZiAoIXRoaXMuX25hbWUgJiYgdGhpcy5fc2NyaXB0UGF0aClcbiAgICAgIHRoaXMubmFtZUZyb21GaWxlbmFtZSh0aGlzLl9zY3JpcHRQYXRoKTtcbiAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZSB8fCAncHJvZ3JhbSc7XG5cbiAgICByZXR1cm4gdXNlckFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYGFyZ3ZgLCBzZXR0aW5nIG9wdGlvbnMgYW5kIGludm9raW5nIGNvbW1hbmRzIHdoZW4gZGVmaW5lZC5cbiAgICpcbiAgICogVXNlIHBhcnNlQXN5bmMgaW5zdGVhZCBvZiBwYXJzZSBpZiBhbnkgb2YgeW91ciBhY3Rpb24gaGFuZGxlcnMgYXJlIGFzeW5jLlxuICAgKlxuICAgKiBDYWxsIHdpdGggbm8gcGFyYW1ldGVycyB0byBwYXJzZSBgcHJvY2Vzcy5hcmd2YC4gRGV0ZWN0cyBFbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIG9wdGlvbnMgbGlrZSBgbm9kZSAtLWV2YWxgLiBFYXN5IG1vZGUhXG4gICAqXG4gICAqIE9yIGNhbGwgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlLCBhbmQgb3B0aW9uYWxseSB3aGVyZSB0aGUgdXNlciBhcmd1bWVudHMgc3RhcnQgYnkgc3BlY2lmeWluZyB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSBgZnJvbWA6XG4gICAqIC0gYCdub2RlJ2A6IGRlZmF1bHQsIGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCBpcyB0aGUgc2NyaXB0IGJlaW5nIHJ1biwgd2l0aCB1c2VyIGFyZ3VtZW50cyBhZnRlciB0aGF0XG4gICAqIC0gYCdlbGVjdHJvbidgOiBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBlbGVjdHJvbiBhcHBsaWNhdGlvbiBpcyBwYWNrYWdlZFxuICAgKiAtIGAndXNlcidgOiBqdXN0IHVzZXIgYXJndW1lbnRzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0ucGFyc2UoKTsgLy8gcGFyc2UgcHJvY2Vzcy5hcmd2IGFuZCBhdXRvLWRldGVjdCBlbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIGZsYWdzXG4gICAqIHByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KTsgLy8gYXNzdW1lIGFyZ3ZbMF0gaXMgYXBwIGFuZCBhcmd2WzFdIGlzIHNjcmlwdFxuICAgKiBwcm9ncmFtLnBhcnNlKG15LWFyZ3MsIHsgZnJvbTogJ3VzZXInIH0pOyAvLyBqdXN0IHVzZXIgc3VwcGxpZWQgYXJndW1lbnRzLCBub3RoaW5nIHNwZWNpYWwgYWJvdXQgYXJndlswXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJndl0gLSBvcHRpb25hbCwgZGVmYXVsdHMgdG8gcHJvY2Vzcy5hcmd2XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyc2VPcHRpb25zXSAtIG9wdGlvbmFsbHkgc3BlY2lmeSBzdHlsZSBvZiBvcHRpb25zIHdpdGggZnJvbTogbm9kZS91c2VyL2VsZWN0cm9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGFyc2VPcHRpb25zLmZyb21dIC0gd2hlcmUgdGhlIGFyZ3MgYXJlIGZyb206ICdub2RlJywgJ3VzZXInLCAnZWxlY3Ryb24nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBwYXJzZShhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBjb25zdCB1c2VyQXJncyA9IHRoaXMuX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpO1xuICAgIHRoaXMuX3BhcnNlQ29tbWFuZChbXSwgdXNlckFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYGFyZ3ZgLCBzZXR0aW5nIG9wdGlvbnMgYW5kIGludm9raW5nIGNvbW1hbmRzIHdoZW4gZGVmaW5lZC5cbiAgICpcbiAgICogQ2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcGFyc2UgYHByb2Nlc3MuYXJndmAuIERldGVjdHMgRWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBvcHRpb25zIGxpa2UgYG5vZGUgLS1ldmFsYC4gRWFzeSBtb2RlIVxuICAgKlxuICAgKiBPciBjYWxsIHdpdGggYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSwgYW5kIG9wdGlvbmFsbHkgd2hlcmUgdGhlIHVzZXIgYXJndW1lbnRzIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgYGZyb21gOlxuICAgKiAtIGAnbm9kZSdgOiBkZWZhdWx0LCBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgaXMgdGhlIHNjcmlwdCBiZWluZyBydW4sIHdpdGggdXNlciBhcmd1bWVudHMgYWZ0ZXIgdGhhdFxuICAgKiAtIGAnZWxlY3Ryb24nYDogYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZWxlY3Ryb24gYXBwbGljYXRpb24gaXMgcGFja2FnZWRcbiAgICogLSBgJ3VzZXInYDoganVzdCB1c2VyIGFyZ3VtZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMoKTsgLy8gcGFyc2UgcHJvY2Vzcy5hcmd2IGFuZCBhdXRvLWRldGVjdCBlbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIGZsYWdzXG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpOyAvLyBhc3N1bWUgYXJndlswXSBpcyBhcHAgYW5kIGFyZ3ZbMV0gaXMgc2NyaXB0XG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhteS1hcmdzLCB7IGZyb206ICd1c2VyJyB9KTsgLy8ganVzdCB1c2VyIHN1cHBsaWVkIGFyZ3VtZW50cywgbm90aGluZyBzcGVjaWFsIGFib3V0IGFyZ3ZbMF1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3ZdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyc2VPcHRpb25zXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyc2VPcHRpb25zLmZyb20gLSB3aGVyZSB0aGUgYXJncyBhcmUgZnJvbTogJ25vZGUnLCAndXNlcicsICdlbGVjdHJvbidcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG5cbiAgYXN5bmMgcGFyc2VBc3luYyhhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBjb25zdCB1c2VyQXJncyA9IHRoaXMuX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpO1xuICAgIGF3YWl0IHRoaXMuX3BhcnNlQ29tbWFuZChbXSwgdXNlckFyZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfcHJlcGFyZUZvclBhcnNlKCkge1xuICAgIGlmICh0aGlzLl9zYXZlZFN0YXRlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnNhdmVTdGF0ZUJlZm9yZVBhcnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzdG9yZVN0YXRlQmVmb3JlUGFyc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHRoZSBmaXJzdCB0aW1lIHBhcnNlIGlzIGNhbGxlZCB0byBzYXZlIHN0YXRlIGFuZCBhbGxvdyBhIHJlc3RvcmUgYmVmb3JlIHN1YnNlcXVlbnQgY2FsbHMgdG8gcGFyc2UuXG4gICAqIE5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IGF2YWlsYWJsZSBmb3Igc3ViY2xhc3NlcyB0byBzYXZlIHRoZWlyIGN1c3RvbSBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBpcyBjYWxsZWQgaW4gYSBsYXp5IHdheS4gT25seSBjb21tYW5kcyB1c2VkIGluIHBhcnNpbmcgY2hhaW4gd2lsbCBoYXZlIHN0YXRlIHNhdmVkLlxuICAgKi9cbiAgc2F2ZVN0YXRlQmVmb3JlUGFyc2UoKSB7XG4gICAgdGhpcy5fc2F2ZWRTdGF0ZSA9IHtcbiAgICAgIC8vIG5hbWUgaXMgc3RhYmxlIGlmIHN1cHBsaWVkIGJ5IGF1dGhvciwgYnV0IG1heSBiZSB1bnNwZWNpZmllZCBmb3Igcm9vdCBjb21tYW5kIGFuZCBkZWR1Y2VkIGR1cmluZyBwYXJzaW5nXG4gICAgICBfbmFtZTogdGhpcy5fbmFtZSxcbiAgICAgIC8vIG9wdGlvbiB2YWx1ZXMgYmVmb3JlIHBhcnNlIGhhdmUgZGVmYXVsdCB2YWx1ZXMgKGluY2x1ZGluZyBmYWxzZSBmb3IgbmVnYXRlZCBvcHRpb25zKVxuICAgICAgLy8gc2hhbGxvdyBjbG9uZXNcbiAgICAgIF9vcHRpb25WYWx1ZXM6IHsgLi4udGhpcy5fb3B0aW9uVmFsdWVzIH0sXG4gICAgICBfb3B0aW9uVmFsdWVTb3VyY2VzOiB7IC4uLnRoaXMuX29wdGlvblZhbHVlU291cmNlcyB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSBzdGF0ZSBiZWZvcmUgcGFyc2UgZm9yIGNhbGxzIGFmdGVyIHRoZSBmaXJzdC5cbiAgICogTm90IHVzdWFsbHkgY2FsbGVkIGRpcmVjdGx5LCBidXQgYXZhaWxhYmxlIGZvciBzdWJjbGFzc2VzIHRvIHNhdmUgdGhlaXIgY3VzdG9tIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbiBhIGxhenkgd2F5LiBPbmx5IGNvbW1hbmRzIHVzZWQgaW4gcGFyc2luZyBjaGFpbiB3aWxsIGhhdmUgc3RhdGUgcmVzdG9yZWQuXG4gICAqL1xuICByZXN0b3JlU3RhdGVCZWZvcmVQYXJzZSgpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGNhbGwgcGFyc2UgYWdhaW4gd2hlbiBzdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgaXMgdHJ1ZS5cbi0gZWl0aGVyIG1ha2UgYSBuZXcgQ29tbWFuZCBmb3IgZWFjaCBjYWxsIHRvIHBhcnNlLCBvciBzdG9wIHN0b3Jpbmcgb3B0aW9ucyBhcyBwcm9wZXJ0aWVzYCk7XG5cbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wcmVwYXJlVXNlckFyZ3NcbiAgICB0aGlzLl9uYW1lID0gdGhpcy5fc2F2ZWRTdGF0ZS5fbmFtZTtcbiAgICB0aGlzLl9zY3JpcHRQYXRoID0gbnVsbDtcbiAgICB0aGlzLnJhd0FyZ3MgPSBbXTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIHNldE9wdGlvblZhbHVlV2l0aFNvdXJjZVxuICAgIHRoaXMuX29wdGlvblZhbHVlcyA9IHsgLi4udGhpcy5fc2F2ZWRTdGF0ZS5fb3B0aW9uVmFsdWVzIH07XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzID0geyAuLi50aGlzLl9zYXZlZFN0YXRlLl9vcHRpb25WYWx1ZVNvdXJjZXMgfTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wYXJzZUNvbW1hbmRcbiAgICB0aGlzLmFyZ3MgPSBbXTtcbiAgICAvLyBjbGVhciBzdGF0ZSBmcm9tIF9wcm9jZXNzQXJndW1lbnRzXG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gW107XG4gIH1cblxuICAvKipcbiAgICogVGhyb3cgaWYgZXhwZWN0ZWQgZXhlY3V0YWJsZSBpcyBtaXNzaW5nLiBBZGQgbG90cyBvZiBoZWxwIGZvciBhdXRob3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGVjdXRhYmxlRmlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhlY3V0YWJsZURpclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3ViY29tbWFuZE5hbWVcbiAgICovXG4gIF9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKGV4ZWN1dGFibGVGaWxlLCBleGVjdXRhYmxlRGlyLCBzdWJjb21tYW5kTmFtZSkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGV4ZWN1dGFibGVGaWxlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhlY3V0YWJsZURpck1lc3NhZ2UgPSBleGVjdXRhYmxlRGlyXG4gICAgICA/IGBzZWFyY2hlZCBmb3IgbG9jYWwgc3ViY29tbWFuZCByZWxhdGl2ZSB0byBkaXJlY3RvcnkgJyR7ZXhlY3V0YWJsZURpcn0nYFxuICAgICAgOiAnbm8gZGlyZWN0b3J5IGZvciBzZWFyY2ggZm9yIGxvY2FsIHN1YmNvbW1hbmQsIHVzZSAuZXhlY3V0YWJsZURpcigpIHRvIHN1cHBseSBhIGN1c3RvbSBkaXJlY3RvcnknO1xuICAgIGNvbnN0IGV4ZWN1dGFibGVNaXNzaW5nID0gYCcke2V4ZWN1dGFibGVGaWxlfScgZG9lcyBub3QgZXhpc3RcbiAtIGlmICcke3N1YmNvbW1hbmROYW1lfScgaXMgbm90IG1lYW50IHRvIGJlIGFuIGV4ZWN1dGFibGUgY29tbWFuZCwgcmVtb3ZlIGRlc2NyaXB0aW9uIHBhcmFtZXRlciBmcm9tICcuY29tbWFuZCgpJyBhbmQgdXNlICcuZGVzY3JpcHRpb24oKScgaW5zdGVhZFxuIC0gaWYgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSBuYW1lIGlzIG5vdCBzdWl0YWJsZSwgdXNlIHRoZSBleGVjdXRhYmxlRmlsZSBvcHRpb24gdG8gc3VwcGx5IGEgY3VzdG9tIG5hbWUgb3IgcGF0aFxuIC0gJHtleGVjdXRhYmxlRGlyTWVzc2FnZX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihleGVjdXRhYmxlTWlzc2luZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHN1Yi1jb21tYW5kIGV4ZWN1dGFibGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGVjdXRlU3ViQ29tbWFuZChzdWJjb21tYW5kLCBhcmdzKSB7XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoKTtcbiAgICBsZXQgbGF1bmNoV2l0aE5vZGUgPSBmYWxzZTsgLy8gVXNlIG5vZGUgZm9yIHNvdXJjZSB0YXJnZXRzIHNvIGRvIG5vdCBuZWVkIHRvIGdldCBwZXJtaXNzaW9ucyBjb3JyZWN0LCBhbmQgb24gV2luZG93cy5cbiAgICBjb25zdCBzb3VyY2VFeHQgPSBbJy5qcycsICcudHMnLCAnLnRzeCcsICcubWpzJywgJy5janMnXTtcblxuICAgIGZ1bmN0aW9uIGZpbmRGaWxlKGJhc2VEaXIsIGJhc2VOYW1lKSB7XG4gICAgICAvLyBMb29rIGZvciBzcGVjaWZpZWQgZmlsZVxuICAgICAgY29uc3QgbG9jYWxCaW4gPSBwYXRoLnJlc29sdmUoYmFzZURpciwgYmFzZU5hbWUpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobG9jYWxCaW4pKSByZXR1cm4gbG9jYWxCaW47XG5cbiAgICAgIC8vIFN0b3AgbG9va2luZyBpZiBjYW5kaWRhdGUgYWxyZWFkeSBoYXMgYW4gZXhwZWN0ZWQgZXh0ZW5zaW9uLlxuICAgICAgaWYgKHNvdXJjZUV4dC5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoYmFzZU5hbWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gVHJ5IGFsbCB0aGUgZXh0ZW5zaW9ucy5cbiAgICAgIGNvbnN0IGZvdW5kRXh0ID0gc291cmNlRXh0LmZpbmQoKGV4dCkgPT5cbiAgICAgICAgZnMuZXhpc3RzU3luYyhgJHtsb2NhbEJpbn0ke2V4dH1gKSxcbiAgICAgICk7XG4gICAgICBpZiAoZm91bmRFeHQpIHJldHVybiBgJHtsb2NhbEJpbn0ke2ZvdW5kRXh0fWA7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTm90IGNoZWNraW5nIGZvciBoZWxwIGZpcnN0LiBVbmxpa2VseSB0byBoYXZlIG1hbmRhdG9yeSBhbmQgZXhlY3V0YWJsZSwgYW5kIGNhbid0IHJvYnVzdGx5IHRlc3QgZm9yIGhlbHAgZmxhZ3MgaW4gZXh0ZXJuYWwgY29tbWFuZC5cbiAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCk7XG4gICAgdGhpcy5fY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKTtcblxuICAgIC8vIGV4ZWN1dGFibGVGaWxlIGFuZCBleGVjdXRhYmxlRGlyIG1pZ2h0IGJlIGZ1bGwgcGF0aCwgb3IganVzdCBhIG5hbWVcbiAgICBsZXQgZXhlY3V0YWJsZUZpbGUgPVxuICAgICAgc3ViY29tbWFuZC5fZXhlY3V0YWJsZUZpbGUgfHwgYCR7dGhpcy5fbmFtZX0tJHtzdWJjb21tYW5kLl9uYW1lfWA7XG4gICAgbGV0IGV4ZWN1dGFibGVEaXIgPSB0aGlzLl9leGVjdXRhYmxlRGlyIHx8ICcnO1xuICAgIGlmICh0aGlzLl9zY3JpcHRQYXRoKSB7XG4gICAgICBsZXQgcmVzb2x2ZWRTY3JpcHRQYXRoOyAvLyByZXNvbHZlIHBvc3NpYmxlIHN5bWxpbmsgZm9yIGluc3RhbGxlZCBucG0gYmluYXJ5XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlZFNjcmlwdFBhdGggPSBmcy5yZWFscGF0aFN5bmModGhpcy5fc2NyaXB0UGF0aCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmVzb2x2ZWRTY3JpcHRQYXRoID0gdGhpcy5fc2NyaXB0UGF0aDtcbiAgICAgIH1cbiAgICAgIGV4ZWN1dGFibGVEaXIgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHBhdGguZGlybmFtZShyZXNvbHZlZFNjcmlwdFBhdGgpLFxuICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb29rIGZvciBhIGxvY2FsIGZpbGUgaW4gcHJlZmVyZW5jZSB0byBhIGNvbW1hbmQgaW4gUEFUSC5cbiAgICBpZiAoZXhlY3V0YWJsZURpcikge1xuICAgICAgbGV0IGxvY2FsRmlsZSA9IGZpbmRGaWxlKGV4ZWN1dGFibGVEaXIsIGV4ZWN1dGFibGVGaWxlKTtcblxuICAgICAgLy8gTGVnYWN5IHNlYXJjaCB1c2luZyBwcmVmaXggb2Ygc2NyaXB0IG5hbWUgaW5zdGVhZCBvZiBjb21tYW5kIG5hbWVcbiAgICAgIGlmICghbG9jYWxGaWxlICYmICFzdWJjb21tYW5kLl9leGVjdXRhYmxlRmlsZSAmJiB0aGlzLl9zY3JpcHRQYXRoKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeU5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICAgIHRoaXMuX3NjcmlwdFBhdGgsXG4gICAgICAgICAgcGF0aC5leHRuYW1lKHRoaXMuX3NjcmlwdFBhdGgpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobGVnYWN5TmFtZSAhPT0gdGhpcy5fbmFtZSkge1xuICAgICAgICAgIGxvY2FsRmlsZSA9IGZpbmRGaWxlKFxuICAgICAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgICAgIGAke2xlZ2FjeU5hbWV9LSR7c3ViY29tbWFuZC5fbmFtZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4ZWN1dGFibGVGaWxlID0gbG9jYWxGaWxlIHx8IGV4ZWN1dGFibGVGaWxlO1xuICAgIH1cblxuICAgIGxhdW5jaFdpdGhOb2RlID0gc291cmNlRXh0LmluY2x1ZGVzKHBhdGguZXh0bmFtZShleGVjdXRhYmxlRmlsZSkpO1xuXG4gICAgbGV0IHByb2M7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgIGlmIChsYXVuY2hXaXRoTm9kZSkge1xuICAgICAgICBhcmdzLnVuc2hpZnQoZXhlY3V0YWJsZUZpbGUpO1xuICAgICAgICAvLyBhZGQgZXhlY3V0YWJsZSBhcmd1bWVudHMgdG8gc3Bhd25cbiAgICAgICAgYXJncyA9IGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KHByb2Nlc3MuZXhlY0FyZ3YpLmNvbmNhdChhcmdzKTtcblxuICAgICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKHByb2Nlc3MuYXJndlswXSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihleGVjdXRhYmxlRmlsZSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKFxuICAgICAgICBleGVjdXRhYmxlRmlsZSxcbiAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgc3ViY29tbWFuZC5fbmFtZSxcbiAgICAgICk7XG4gICAgICBhcmdzLnVuc2hpZnQoZXhlY3V0YWJsZUZpbGUpO1xuICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICBhcmdzID0gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQocHJvY2Vzcy5leGVjQXJndikuY29uY2F0KGFyZ3MpO1xuICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihwcm9jZXNzLmV4ZWNQYXRoLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9jLmtpbGxlZCkge1xuICAgICAgLy8gdGVzdGluZyBtYWlubHkgdG8gYXZvaWQgbGVhayB3YXJuaW5ncyBkdXJpbmcgdW5pdCB0ZXN0cyB3aXRoIG1vY2tlZCBzcGF3blxuICAgICAgY29uc3Qgc2lnbmFscyA9IFsnU0lHVVNSMScsICdTSUdVU1IyJywgJ1NJR1RFUk0nLCAnU0lHSU5UJywgJ1NJR0hVUCddO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5vbihzaWduYWwsICgpID0+IHtcbiAgICAgICAgICBpZiAocHJvYy5raWxsZWQgPT09IGZhbHNlICYmIHByb2MuZXhpdENvZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgYmVjYXVzZSBzaWduYWxzIG5vdCB0eXBlZCB0byBrbm93biBzdHJpbmdzXG4gICAgICAgICAgICBwcm9jLmtpbGwoc2lnbmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCB0ZXJtaW5hdGUgcHJvY2VzcyB3aGVuIHNwYXduZWQgcHJvY2VzcyB0ZXJtaW5hdGVzLlxuICAgIGNvbnN0IGV4aXRDYWxsYmFjayA9IHRoaXMuX2V4aXRDYWxsYmFjaztcbiAgICBwcm9jLm9uKCdjbG9zZScsIChjb2RlKSA9PiB7XG4gICAgICBjb2RlID0gY29kZSA/PyAxOyAvLyBjb2RlIGlzIG51bGwgaWYgc3Bhd25lZCBwcm9jZXNzIHRlcm1pbmF0ZWQgZHVlIHRvIGEgc2lnbmFsXG4gICAgICBpZiAoIWV4aXRDYWxsYmFjaykge1xuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGl0Q2FsbGJhY2soXG4gICAgICAgICAgbmV3IENvbW1hbmRlckVycm9yKFxuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycsXG4gICAgICAgICAgICAnKGNsb3NlKScsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBwcm9jLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZXJyLmNvZGUgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdFeGVjdXRhYmxlKFxuICAgICAgICAgIGV4ZWN1dGFibGVGaWxlLFxuICAgICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgICAgc3ViY29tbWFuZC5fbmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBlcnIuY29kZSBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICB9IGVsc2UgaWYgKGVyci5jb2RlID09PSAnRUFDQ0VTJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2V4ZWN1dGFibGVGaWxlfScgbm90IGV4ZWN1dGFibGVgKTtcbiAgICAgIH1cbiAgICAgIGlmICghZXhpdENhbGxiYWNrKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRFcnJvciA9IG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgICAgICAxLFxuICAgICAgICAgICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycsXG4gICAgICAgICAgJyhlcnJvciknLFxuICAgICAgICApO1xuICAgICAgICB3cmFwcGVkRXJyb3IubmVzdGVkRXJyb3IgPSBlcnI7XG4gICAgICAgIGV4aXRDYWxsYmFjayh3cmFwcGVkRXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgY2hpbGQgcHJvY2Vzc1xuICAgIHRoaXMucnVubmluZ0NvbW1hbmQgPSBwcm9jO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9kaXNwYXRjaFN1YmNvbW1hbmQoY29tbWFuZE5hbWUsIG9wZXJhbmRzLCB1bmtub3duKSB7XG4gICAgY29uc3Qgc3ViQ29tbWFuZCA9IHRoaXMuX2ZpbmRDb21tYW5kKGNvbW1hbmROYW1lKTtcbiAgICBpZiAoIXN1YkNvbW1hbmQpIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuXG4gICAgc3ViQ29tbWFuZC5fcHJlcGFyZUZvclBhcnNlKCk7XG4gICAgbGV0IHByb21pc2VDaGFpbjtcbiAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbFN1YkNvbW1hbmRIb29rKFxuICAgICAgcHJvbWlzZUNoYWluLFxuICAgICAgc3ViQ29tbWFuZCxcbiAgICAgICdwcmVTdWJjb21tYW5kJyxcbiAgICApO1xuICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT4ge1xuICAgICAgaWYgKHN1YkNvbW1hbmQuX2V4ZWN1dGFibGVIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX2V4ZWN1dGVTdWJDb21tYW5kKHN1YkNvbW1hbmQsIG9wZXJhbmRzLmNvbmNhdCh1bmtub3duKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3ViQ29tbWFuZC5fcGFyc2VDb21tYW5kKG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZUNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBoZWxwIGRpcmVjdGx5IGlmIHBvc3NpYmxlLCBvciBkaXNwYXRjaCBpZiBuZWNlc3NhcnkuXG4gICAqIGUuZy4gaGVscCBmb29cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2Rpc3BhdGNoSGVscENvbW1hbmQoc3ViY29tbWFuZE5hbWUpIHtcbiAgICBpZiAoIXN1YmNvbW1hbmROYW1lKSB7XG4gICAgICB0aGlzLmhlbHAoKTtcbiAgICB9XG4gICAgY29uc3Qgc3ViQ29tbWFuZCA9IHRoaXMuX2ZpbmRDb21tYW5kKHN1YmNvbW1hbmROYW1lKTtcbiAgICBpZiAoc3ViQ29tbWFuZCAmJiAhc3ViQ29tbWFuZC5fZXhlY3V0YWJsZUhhbmRsZXIpIHtcbiAgICAgIHN1YkNvbW1hbmQuaGVscCgpO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIHBhcnNpbmcgdGhlIGhlbHAgZmxhZyB0byBpbnZva2UgdGhlIGhlbHAuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZChcbiAgICAgIHN1YmNvbW1hbmROYW1lLFxuICAgICAgW10sXG4gICAgICBbdGhpcy5fZ2V0SGVscE9wdGlvbigpPy5sb25nID8/IHRoaXMuX2dldEhlbHBPcHRpb24oKT8uc2hvcnQgPz8gJy0taGVscCddLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhpcy5hcmdzIGFnYWluc3QgZXhwZWN0ZWQgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tOdW1iZXJPZkFyZ3VtZW50cygpIHtcbiAgICAvLyB0b28gZmV3XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGFyZywgaSkgPT4ge1xuICAgICAgaWYgKGFyZy5yZXF1aXJlZCAmJiB0aGlzLmFyZ3NbaV0gPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1pc3NpbmdBcmd1bWVudChhcmcubmFtZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyB0b28gbWFueVxuICAgIGlmIChcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHNbdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCAtIDFdLnZhcmlhZGljXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmFyZ3MubGVuZ3RoID4gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fZXhjZXNzQXJndW1lbnRzKHRoaXMuYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGhpcy5hcmdzIHVzaW5nIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cyBhbmQgc2F2ZSBhcyB0aGlzLnByb2Nlc3NlZEFyZ3MhXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wcm9jZXNzQXJndW1lbnRzKCkge1xuICAgIGNvbnN0IG15UGFyc2VBcmcgPSAoYXJndW1lbnQsIHZhbHVlLCBwcmV2aW91cykgPT4ge1xuICAgICAgLy8gRXh0cmEgcHJvY2Vzc2luZyBmb3IgbmljZSBlcnJvciBtZXNzYWdlIG9uIHBhcnNpbmcgZmFpbHVyZS5cbiAgICAgIGxldCBwYXJzZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIGFyZ3VtZW50LnBhcnNlQXJnKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRWYWx1ZU1lc3NhZ2UgPSBgZXJyb3I6IGNvbW1hbmQtYXJndW1lbnQgdmFsdWUgJyR7dmFsdWV9JyBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAnJHthcmd1bWVudC5uYW1lKCl9Jy5gO1xuICAgICAgICBwYXJzZWRWYWx1ZSA9IHRoaXMuX2NhbGxQYXJzZUFyZyhcbiAgICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgICBpbnZhbGlkVmFsdWVNZXNzYWdlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlO1xuICAgIH07XG5cbiAgICB0aGlzLl9jaGVja051bWJlck9mQXJndW1lbnRzKCk7XG5cbiAgICBjb25zdCBwcm9jZXNzZWRBcmdzID0gW107XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmZvckVhY2goKGRlY2xhcmVkQXJnLCBpbmRleCkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGRlY2xhcmVkQXJnLnZhcmlhZGljKSB7XG4gICAgICAgIC8vIENvbGxlY3QgdG9nZXRoZXIgcmVtYWluaW5nIGFyZ3VtZW50cyBmb3IgcGFzc2luZyB0b2dldGhlciBhcyBhbiBhcnJheS5cbiAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5hcmdzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBpZiAoZGVjbGFyZWRBcmcucGFyc2VBcmcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVkdWNlKChwcm9jZXNzZWQsIHYpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIG15UGFyc2VBcmcoZGVjbGFyZWRBcmcsIHYsIHByb2Nlc3NlZCk7XG4gICAgICAgICAgICB9LCBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpbmRleCA8IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmFyZ3NbaW5kZXhdO1xuICAgICAgICBpZiAoZGVjbGFyZWRBcmcucGFyc2VBcmcpIHtcbiAgICAgICAgICB2YWx1ZSA9IG15UGFyc2VBcmcoZGVjbGFyZWRBcmcsIHZhbHVlLCBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwcm9jZXNzZWRBcmdzW2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IHByb2Nlc3NlZEFyZ3M7XG4gIH1cblxuICAvKipcbiAgICogT25jZSB3ZSBoYXZlIGEgcHJvbWlzZSB3ZSBjaGFpbiwgYnV0IGNhbGwgc3luY2hyb25vdXNseSB1bnRpbCB0aGVuLlxuICAgKlxuICAgKiBAcGFyYW0geyhQcm9taXNlfHVuZGVmaW5lZCl9IHByb21pc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsKHByb21pc2UsIGZuKSB7XG4gICAgLy8gdGhlbmFibGVcbiAgICBpZiAocHJvbWlzZT8udGhlbiAmJiB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBhbHJlYWR5IGhhdmUgYSBwcm9taXNlLCBjaGFpbiBjYWxsYmFja1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoKSA9PiBmbigpKTtcbiAgICB9XG4gICAgLy8gY2FsbGJhY2sgbWlnaHQgcmV0dXJuIGEgcHJvbWlzZVxuICAgIHJldHVybiBmbigpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZSwgZXZlbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gcHJvbWlzZTtcbiAgICBjb25zdCBob29rcyA9IFtdO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbHRlcigoY21kKSA9PiBjbWQuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZvckVhY2goKGhvb2tlZENvbW1hbmQpID0+IHtcbiAgICAgICAgaG9va2VkQ29tbWFuZC5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgaG9va3MucHVzaCh7IGhvb2tlZENvbW1hbmQsIGNhbGxiYWNrIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIGlmIChldmVudCA9PT0gJ3Bvc3RBY3Rpb24nKSB7XG4gICAgICBob29rcy5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgaG9va3MuZm9yRWFjaCgoaG9va0RldGFpbCkgPT4ge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fY2hhaW5PckNhbGwocmVzdWx0LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBob29rRGV0YWlsLmNhbGxiYWNrKGhvb2tEZXRhaWwuaG9va2VkQ29tbWFuZCwgdGhpcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IHN1YkNvbW1hbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbFN1YkNvbW1hbmRIb29rKHByb21pc2UsIHN1YkNvbW1hbmQsIGV2ZW50KSB7XG4gICAgbGV0IHJlc3VsdCA9IHByb21pc2U7XG4gICAgaWYgKHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0uZm9yRWFjaCgoaG9vaykgPT4ge1xuICAgICAgICByZXN1bHQgPSB0aGlzLl9jaGFpbk9yQ2FsbChyZXN1bHQsICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gaG9vayh0aGlzLCBzdWJDb21tYW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGFyZ3VtZW50cyBpbiBjb250ZXh0IG9mIHRoaXMgY29tbWFuZC5cbiAgICogUmV0dXJucyBhY3Rpb24gcmVzdWx0LCBpbiBjYXNlIGl0IGlzIGEgcHJvbWlzZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3BhcnNlQ29tbWFuZChvcGVyYW5kcywgdW5rbm93bikge1xuICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VPcHRpb25zKHVua25vd24pO1xuICAgIHRoaXMuX3BhcnNlT3B0aW9uc0VudigpOyAvLyBhZnRlciBjbGksIHNvIHBhcnNlQXJnIG5vdCBjYWxsZWQgb24gYm90aCBjbGkgYW5kIGVudlxuICAgIHRoaXMuX3BhcnNlT3B0aW9uc0ltcGxpZWQoKTtcbiAgICBvcGVyYW5kcyA9IG9wZXJhbmRzLmNvbmNhdChwYXJzZWQub3BlcmFuZHMpO1xuICAgIHVua25vd24gPSBwYXJzZWQudW5rbm93bjtcbiAgICB0aGlzLmFyZ3MgPSBvcGVyYW5kcy5jb25jYXQodW5rbm93bik7XG5cbiAgICBpZiAob3BlcmFuZHMgJiYgdGhpcy5fZmluZENvbW1hbmQob3BlcmFuZHNbMF0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKG9wZXJhbmRzWzBdLCBvcGVyYW5kcy5zbGljZSgxKSwgdW5rbm93bik7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuX2dldEhlbHBDb21tYW5kKCkgJiZcbiAgICAgIG9wZXJhbmRzWzBdID09PSB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpLm5hbWUoKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoSGVscENvbW1hbmQob3BlcmFuZHNbMV0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICB0aGlzLl9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQodW5rbm93bik7IC8vIFJ1biB0aGUgaGVscCBmb3IgZGVmYXVsdCBjb21tYW5kIGZyb20gcGFyZW50IHJhdGhlciB0aGFuIHBhc3NpbmcgdG8gZGVmYXVsdCBjb21tYW5kXG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKFxuICAgICAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUsXG4gICAgICAgIG9wZXJhbmRzLFxuICAgICAgICB1bmtub3duLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggJiZcbiAgICAgIHRoaXMuYXJncy5sZW5ndGggPT09IDAgJiZcbiAgICAgICF0aGlzLl9hY3Rpb25IYW5kbGVyICYmXG4gICAgICAhdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lXG4gICAgKSB7XG4gICAgICAvLyBwcm9iYWJseSBtaXNzaW5nIHN1YmNvbW1hbmQgYW5kIG5vIGhhbmRsZXIsIHVzZXIgbmVlZHMgaGVscCAoYW5kIGV4aXQpXG4gICAgICB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQocGFyc2VkLnVua25vd24pO1xuICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKTtcbiAgICB0aGlzLl9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpO1xuXG4gICAgLy8gV2UgZG8gbm90IGFsd2F5cyBjYWxsIHRoaXMgY2hlY2sgdG8gYXZvaWQgbWFza2luZyBhIFwiYmV0dGVyXCIgZXJyb3IsIGxpa2UgdW5rbm93biBjb21tYW5kLlxuICAgIGNvbnN0IGNoZWNrRm9yVW5rbm93bk9wdGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAocGFyc2VkLnVua25vd24ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnVua25vd25PcHRpb24ocGFyc2VkLnVua25vd25bMF0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjb21tYW5kRXZlbnQgPSBgY29tbWFuZDoke3RoaXMubmFtZSgpfWA7XG4gICAgaWYgKHRoaXMuX2FjdGlvbkhhbmRsZXIpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcblxuICAgICAgbGV0IHByb21pc2VDaGFpbjtcbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZUNoYWluLCAncHJlQWN0aW9uJyk7XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+XG4gICAgICAgIHRoaXMuX2FjdGlvbkhhbmRsZXIodGhpcy5wcm9jZXNzZWRBcmdzKSxcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wYXJlbnQuZW1pdChjb21tYW5kRXZlbnQsIG9wZXJhbmRzLCB1bmtub3duKTsgLy8gbGVnYWN5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxIb29rcyhwcm9taXNlQ2hhaW4sICdwb3N0QWN0aW9uJyk7XG4gICAgICByZXR1cm4gcHJvbWlzZUNoYWluO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXJlbnQ/Lmxpc3RlbmVyQ291bnQoY29tbWFuZEV2ZW50KSkge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgdGhpcy5wYXJlbnQuZW1pdChjb21tYW5kRXZlbnQsIG9wZXJhbmRzLCB1bmtub3duKTsgLy8gbGVnYWN5XG4gICAgfSBlbHNlIGlmIChvcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLl9maW5kQ29tbWFuZCgnKicpKSB7XG4gICAgICAgIC8vIGxlZ2FjeSBkZWZhdWx0IGNvbW1hbmRcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZCgnKicsIG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQoJ2NvbW1hbmQ6KicpKSB7XG4gICAgICAgIC8vIHNraXAgb3B0aW9uIGNoZWNrLCBlbWl0IGV2ZW50IGZvciBwb3NzaWJsZSBtaXNzcGVsbGluZyBzdWdnZXN0aW9uXG4gICAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDoqJywgb3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVua25vd25Db21tYW5kKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICAvLyBUaGlzIGNvbW1hbmQgaGFzIHN1YmNvbW1hbmRzIGFuZCBub3RoaW5nIGhvb2tlZCB1cCBhdCB0aGlzIGxldmVsLCBzbyBkaXNwbGF5IGhlbHAgKGFuZCBleGl0KS5cbiAgICAgIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICAvLyBmYWxsIHRocm91Z2ggZm9yIGNhbGxlciB0byBoYW5kbGUgYWZ0ZXIgY2FsbGluZyAucGFyc2UoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIG1hdGNoaW5nIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm4ge0NvbW1hbmQgfCB1bmRlZmluZWR9XG4gICAqL1xuICBfZmluZENvbW1hbmQobmFtZSkge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5maW5kKFxuICAgICAgKGNtZCkgPT4gY21kLl9uYW1lID09PSBuYW1lIHx8IGNtZC5fYWxpYXNlcy5pbmNsdWRlcyhuYW1lKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvcHRpb24gbWF0Y2hpbmcgYGFyZ2AgaWYgYW55LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJnXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2ZpbmRPcHRpb24oYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5pcyhhcmcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgYSBtYW5kYXRvcnkgb3B0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWx1ZS5cbiAgICogQ2FsbGVkIGFmdGVyIGNoZWNraW5nIGZvciBoZWxwIGZsYWdzIGluIGxlYWYgc3ViY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKSB7XG4gICAgLy8gV2FsayB1cCBoaWVyYXJjaHkgc28gY2FuIGNhbGwgaW4gc3ViY29tbWFuZCBhZnRlciBjaGVja2luZyBmb3IgZGlzcGxheWluZyBoZWxwLlxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNtZC5vcHRpb25zLmZvckVhY2goKGFuT3B0aW9uKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhbk9wdGlvbi5tYW5kYXRvcnkgJiZcbiAgICAgICAgICBjbWQuZ2V0T3B0aW9uVmFsdWUoYW5PcHRpb24uYXR0cmlidXRlTmFtZSgpKSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNtZC5taXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUoYW5PcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgdXNlZCB0b2dldGhlciBpbiB0aGlzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrRm9yQ29uZmxpY3RpbmdMb2NhbE9wdGlvbnMoKSB7XG4gICAgY29uc3QgZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgaWYgKHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSkgIT09ICdkZWZhdWx0JztcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbnNXaXRoQ29uZmxpY3RpbmcgPSBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMuZmlsdGVyKFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmNvbmZsaWN0c1dpdGgubGVuZ3RoID4gMCxcbiAgICApO1xuXG4gICAgb3B0aW9uc1dpdGhDb25mbGljdGluZy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbmZsaWN0aW5nQW5kRGVmaW5lZCA9IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucy5maW5kKChkZWZpbmVkKSA9PlxuICAgICAgICBvcHRpb24uY29uZmxpY3RzV2l0aC5pbmNsdWRlcyhkZWZpbmVkLmF0dHJpYnV0ZU5hbWUoKSksXG4gICAgICApO1xuICAgICAgaWYgKGNvbmZsaWN0aW5nQW5kRGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jb25mbGljdGluZ09wdGlvbihvcHRpb24sIGNvbmZsaWN0aW5nQW5kRGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIHVzZWQgdG9nZXRoZXIuXG4gICAqIENhbGxlZCBhZnRlciBjaGVja2luZyBmb3IgaGVscCBmbGFncyBpbiBsZWFmIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKSB7XG4gICAgLy8gV2FsayB1cCBoaWVyYXJjaHkgc28gY2FuIGNhbGwgaW4gc3ViY29tbWFuZCBhZnRlciBjaGVja2luZyBmb3IgZGlzcGxheWluZyBoZWxwLlxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNtZC5fY2hlY2tGb3JDb25mbGljdGluZ0xvY2FsT3B0aW9ucygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIG9wdGlvbnMgZnJvbSBgYXJndmAgcmVtb3Zpbmcga25vd24gb3B0aW9ucyxcbiAgICogYW5kIHJldHVybiBhcmd2IHNwbGl0IGludG8gb3BlcmFuZHMgYW5kIHVua25vd24gYXJndW1lbnRzLlxuICAgKlxuICAgKiBTaWRlIGVmZmVjdHM6IG1vZGlmaWVzIGNvbW1hbmQgYnkgc3RvcmluZyBvcHRpb25zLiBEb2VzIG5vdCByZXNldCBzdGF0ZSBpZiBjYWxsZWQgYWdhaW4uXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgYXJndiA9PiBvcGVyYW5kcywgdW5rbm93blxuICAgKiAgICAgLS1rbm93biBra2sgb3AgPT4gW29wXSwgW11cbiAgICogICAgIG9wIC0ta25vd24ga2trID0+IFtvcF0sIFtdXG4gICAqICAgICBzdWIgLS11bmtub3duIHV1dSBvcCA9PiBbc3ViXSwgWy0tdW5rbm93biB1dXUgb3BdXG4gICAqICAgICBzdWIgLS0gLS11bmtub3duIHV1dSBvcCA9PiBbc3ViIC0tdW5rbm93biB1dXUgb3BdLCBbXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzXG4gICAqIEByZXR1cm4ge3tvcGVyYW5kczogc3RyaW5nW10sIHVua25vd246IHN0cmluZ1tdfX1cbiAgICovXG5cbiAgcGFyc2VPcHRpb25zKGFyZ3MpIHtcbiAgICBjb25zdCBvcGVyYW5kcyA9IFtdOyAvLyBvcGVyYW5kcywgbm90IG9wdGlvbnMgb3IgdmFsdWVzXG4gICAgY29uc3QgdW5rbm93biA9IFtdOyAvLyBmaXJzdCB1bmtub3duIG9wdGlvbiBhbmQgcmVtYWluaW5nIHVua25vd24gYXJnc1xuICAgIGxldCBkZXN0ID0gb3BlcmFuZHM7XG5cbiAgICBmdW5jdGlvbiBtYXliZU9wdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBhcmcubGVuZ3RoID4gMSAmJiBhcmdbMF0gPT09ICctJztcbiAgICB9XG5cbiAgICBjb25zdCBuZWdhdGl2ZU51bWJlckFyZyA9IChhcmcpID0+IHtcbiAgICAgIC8vIHJldHVybiBmYWxzZSBpZiBub3QgYSBuZWdhdGl2ZSBudW1iZXJcbiAgICAgIGlmICghL14tXFxkKlxcLj9cXGQrKGVbKy1dP1xcZCspPyQvLnRlc3QoYXJnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gbmVnYXRpdmUgbnVtYmVyIGlzIG9rIHVubGVzcyBkaWdpdCB1c2VkIGFzIGFuIG9wdGlvbiBpbiBjb21tYW5kIGhpZXJhcmNoeVxuICAgICAgcmV0dXJuICF0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuc29tZSgoY21kKSA9PlxuICAgICAgICBjbWQub3B0aW9uc1xuICAgICAgICAgIC5tYXAoKG9wdCkgPT4gb3B0LnNob3J0KVxuICAgICAgICAgIC5zb21lKChzaG9ydCkgPT4gL14tXFxkJC8udGVzdChzaG9ydCkpLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gcGFyc2Ugb3B0aW9uc1xuICAgIGxldCBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG4gICAgbGV0IGFjdGl2ZUdyb3VwID0gbnVsbDsgLy8gd29ya2luZyB0aHJvdWdoIGdyb3VwIG9mIHNob3J0IG9wdGlvbnMsIGxpa2UgLWFiY1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3MubGVuZ3RoIHx8IGFjdGl2ZUdyb3VwKSB7XG4gICAgICBjb25zdCBhcmcgPSBhY3RpdmVHcm91cCA/PyBhcmdzW2krK107XG4gICAgICBhY3RpdmVHcm91cCA9IG51bGw7XG5cbiAgICAgIC8vIGxpdGVyYWxcbiAgICAgIGlmIChhcmcgPT09ICctLScpIHtcbiAgICAgICAgaWYgKGRlc3QgPT09IHVua25vd24pIGRlc3QucHVzaChhcmcpO1xuICAgICAgICBkZXN0LnB1c2goLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uICYmXG4gICAgICAgICghbWF5YmVPcHRpb24oYXJnKSB8fCBuZWdhdGl2ZU51bWJlckFyZyhhcmcpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7YWN0aXZlVmFyaWFkaWNPcHRpb24ubmFtZSgpfWAsIGFyZyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gPSBudWxsO1xuXG4gICAgICBpZiAobWF5YmVPcHRpb24oYXJnKSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGFyZyk7XG4gICAgICAgIC8vIHJlY29nbmlzZWQgb3B0aW9uLCBjYWxsIGxpc3RlbmVyIHRvIGFzc2lnbiB2YWx1ZSB3aXRoIHBvc3NpYmxlIGN1c3RvbSBwcm9jZXNzaW5nXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbaSsrXTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aGlzLm9wdGlvbk1pc3NpbmdBcmd1bWVudChvcHRpb24pO1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIC8vIGhpc3RvcmljYWwgYmVoYXZpb3VyIGlzIG9wdGlvbmFsIHZhbHVlIGlzIGZvbGxvd2luZyBhcmcgdW5sZXNzIGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpIDwgYXJncy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgKCFtYXliZU9wdGlvbihhcmdzW2ldKSB8fCBuZWdhdGl2ZU51bWJlckFyZyhhcmdzW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbaSsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW4gZmxhZ1xuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG9wdGlvbi52YXJpYWRpYyA/IG9wdGlvbiA6IG51bGw7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9vayBmb3IgY29tYm8gb3B0aW9ucyBmb2xsb3dpbmcgc2luZ2xlIGRhc2gsIGVhdCBmaXJzdCBvbmUgaWYga25vd24uXG4gICAgICBpZiAoYXJnLmxlbmd0aCA+IDIgJiYgYXJnWzBdID09PSAnLScgJiYgYXJnWzFdICE9PSAnLScpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihgLSR7YXJnWzFdfWApO1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgb3B0aW9uLnJlcXVpcmVkIHx8XG4gICAgICAgICAgICAob3B0aW9uLm9wdGlvbmFsICYmIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIG9wdGlvbiB3aXRoIHZhbHVlIGZvbGxvd2luZyBpbiBzYW1lIGFyZ3VtZW50XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgYXJnLnNsaWNlKDIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhbiBvcHRpb25cbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcHJvY2Vzc2VkIG9wdGlvbiBhbmQga2VlcCBwcm9jZXNzaW5nIGdyb3VwXG4gICAgICAgICAgICBhY3RpdmVHcm91cCA9IGAtJHthcmcuc2xpY2UoMil9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTG9vayBmb3Iga25vd24gbG9uZyBmbGFnIHdpdGggdmFsdWUsIGxpa2UgLS1mb289YmFyXG4gICAgICBpZiAoL14tLVtePV0rPS8udGVzdChhcmcpKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJnLmluZGV4T2YoJz0nKTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihhcmcuc2xpY2UoMCwgaW5kZXgpKTtcbiAgICAgICAgaWYgKG9wdGlvbiAmJiAob3B0aW9uLnJlcXVpcmVkIHx8IG9wdGlvbi5vcHRpb25hbCkpIHtcbiAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgYXJnLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBhIHJlY29nbmlzZWQgb3B0aW9uIGJ5IHRoaXMgY29tbWFuZC5cbiAgICAgIC8vIE1pZ2h0IGJlIGEgY29tbWFuZC1hcmd1bWVudCwgb3Igc3ViY29tbWFuZCBvcHRpb24sIG9yIHVua25vd24gb3B0aW9uLCBvciBoZWxwIGNvbW1hbmQgb3Igb3B0aW9uLlxuXG4gICAgICAvLyBBbiB1bmtub3duIG9wdGlvbiBtZWFucyBmdXJ0aGVyIGFyZ3VtZW50cyBhbHNvIGNsYXNzaWZpZWQgYXMgdW5rbm93biBzbyBjYW4gYmUgcmVwcm9jZXNzZWQgYnkgc3ViY29tbWFuZHMuXG4gICAgICAvLyBBIG5lZ2F0aXZlIG51bWJlciBpbiBhIGxlYWYgY29tbWFuZCBpcyBub3QgYW4gdW5rbm93biBvcHRpb24uXG4gICAgICBpZiAoXG4gICAgICAgIGRlc3QgPT09IG9wZXJhbmRzICYmXG4gICAgICAgIG1heWJlT3B0aW9uKGFyZykgJiZcbiAgICAgICAgISh0aGlzLmNvbW1hbmRzLmxlbmd0aCA9PT0gMCAmJiBuZWdhdGl2ZU51bWJlckFyZyhhcmcpKVxuICAgICAgKSB7XG4gICAgICAgIGRlc3QgPSB1bmtub3duO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB1c2luZyBwb3NpdGlvbmFsT3B0aW9ucywgc3RvcCBwcm9jZXNzaW5nIG91ciBvcHRpb25zIGF0IHN1YmNvbW1hbmQuXG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyB8fCB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMpICYmXG4gICAgICAgIG9wZXJhbmRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICB1bmtub3duLmxlbmd0aCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLl9maW5kQ29tbWFuZChhcmcpKSB7XG4gICAgICAgICAgb3BlcmFuZHMucHVzaChhcmcpO1xuICAgICAgICAgIHVua25vd24ucHVzaCguLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpICYmXG4gICAgICAgICAgYXJnID09PSB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpLm5hbWUoKVxuICAgICAgICApIHtcbiAgICAgICAgICBvcGVyYW5kcy5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmROYW1lKSB7XG4gICAgICAgICAgdW5rbm93bi5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdXNpbmcgcGFzc1Rocm91Z2hPcHRpb25zLCBzdG9wIHByb2Nlc3Npbmcgb3B0aW9ucyBhdCBmaXJzdCBjb21tYW5kLWFyZ3VtZW50LlxuICAgICAgaWYgKHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucykge1xuICAgICAgICBkZXN0LnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBhcmdcbiAgICAgIGRlc3QucHVzaChhcmcpO1xuICAgIH1cblxuICAgIHJldHVybiB7IG9wZXJhbmRzLCB1bmtub3duIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGxvY2FsIG9wdGlvbiB2YWx1ZXMgYXMga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqL1xuICBvcHRzKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIC8vIFByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW91ciBzbyBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aGVuIHN0aWxsIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgY29uc3QgbGVuID0gdGhpcy5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLm9wdGlvbnNbaV0uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAga2V5ID09PSB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA/IHRoaXMuX3ZlcnNpb24gOiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIG1lcmdlZCBsb2NhbCBhbmQgZ2xvYmFsIG9wdGlvbiB2YWx1ZXMgYXMga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAqL1xuICBvcHRzV2l0aEdsb2JhbHMoKSB7XG4gICAgLy8gZ2xvYmFscyBvdmVyd3JpdGUgbG9jYWxzXG4gICAgcmV0dXJuIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5yZWR1Y2UoXG4gICAgICAoY29tYmluZWRPcHRpb25zLCBjbWQpID0+IE9iamVjdC5hc3NpZ24oY29tYmluZWRPcHRpb25zLCBjbWQub3B0cygpKSxcbiAgICAgIHt9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBlcnJvciBtZXNzYWdlIGFuZCBleGl0IChvciBjYWxsIGV4aXRPdmVycmlkZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXJyb3JPcHRpb25zXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Vycm9yT3B0aW9ucy5jb2RlXSAtIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZXJyb3JPcHRpb25zLmV4aXRDb2RlXSAtIHVzZWQgd2l0aCBwcm9jZXNzLmV4aXRcbiAgICovXG4gIGVycm9yKG1lc3NhZ2UsIGVycm9yT3B0aW9ucykge1xuICAgIC8vIG91dHB1dCBoYW5kbGluZ1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ub3V0cHV0RXJyb3IoXG4gICAgICBgJHttZXNzYWdlfVxcbmAsXG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyLFxuICAgICk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKGAke3RoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvcn1cXG5gKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvcikge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycignXFxuJyk7XG4gICAgICB0aGlzLm91dHB1dEhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBleGl0IGhhbmRsaW5nXG4gICAgY29uc3QgY29uZmlnID0gZXJyb3JPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGV4aXRDb2RlID0gY29uZmlnLmV4aXRDb2RlIHx8IDE7XG4gICAgY29uc3QgY29kZSA9IGNvbmZpZy5jb2RlIHx8ICdjb21tYW5kZXIuZXJyb3InO1xuICAgIHRoaXMuX2V4aXQoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFueSBvcHRpb24gcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlmIG9wdGlvbiBkb2VzXG4gICAqIG5vdCBoYXZlIGEgdmFsdWUgZnJvbSBjbGkgb3IgY2xpZW50IGNvZGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFyc2VPcHRpb25zRW52KCkge1xuICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24uZW52VmFyICYmIG9wdGlvbi5lbnZWYXIgaW4gcHJvY2Vzcy5lbnYpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgICAgLy8gUHJpb3JpdHkgY2hlY2suIERvIG5vdCBvdmVyd3JpdGUgY2xpIG9yIG9wdGlvbnMgZnJvbSB1bmtub3duIHNvdXJjZSAoY2xpZW50LWNvZGUpLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBbJ2RlZmF1bHQnLCAnY29uZmlnJywgJ2VudiddLmluY2x1ZGVzKFxuICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZXF1aXJlZCB8fCBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIC8vIG9wdGlvbiBjYW4gdGFrZSBhIHZhbHVlXG4gICAgICAgICAgICAvLyBrZWVwIHZlcnkgc2ltcGxlLCBvcHRpb25hbCBhbHdheXMgdGFrZXMgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uRW52OiR7b3B0aW9uLm5hbWUoKX1gLCBwcm9jZXNzLmVudltvcHRpb24uZW52VmFyXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW5cbiAgICAgICAgICAgIC8vIGtlZXAgdmVyeSBzaW1wbGUsIG9ubHkgY2FyZSB0aGF0IGVudlZhciBkZWZpbmVkIGFuZCBub3QgdGhlIHZhbHVlXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbkVudjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYW55IGltcGxpZWQgb3B0aW9uIHZhbHVlcywgaWYgb3B0aW9uIGlzIHVuZGVmaW5lZCBvciBkZWZhdWx0IHZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlT3B0aW9uc0ltcGxpZWQoKSB7XG4gICAgY29uc3QgZHVhbEhlbHBlciA9IG5ldyBEdWFsT3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IGhhc0N1c3RvbU9wdGlvblZhbHVlID0gKG9wdGlvbktleSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIVsnZGVmYXVsdCcsICdpbXBsaWVkJ10uaW5jbHVkZXModGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIHRoaXMub3B0aW9uc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKG9wdGlvbikgPT5cbiAgICAgICAgICBvcHRpb24uaW1wbGllZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgaGFzQ3VzdG9tT3B0aW9uVmFsdWUob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSkgJiZcbiAgICAgICAgICBkdWFsSGVscGVyLnZhbHVlRnJvbU9wdGlvbihcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSksXG4gICAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9uLmltcGxpZWQpXG4gICAgICAgICAgLmZpbHRlcigoaW1wbGllZEtleSkgPT4gIWhhc0N1c3RvbU9wdGlvblZhbHVlKGltcGxpZWRLZXkpKVxuICAgICAgICAgIC5mb3JFYWNoKChpbXBsaWVkS2V5KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShcbiAgICAgICAgICAgICAgaW1wbGllZEtleSxcbiAgICAgICAgICAgICAgb3B0aW9uLmltcGxpZWRbaW1wbGllZEtleV0sXG4gICAgICAgICAgICAgICdpbXBsaWVkJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcmd1bWVudCBgbmFtZWAgaXMgbWlzc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgbWlzc2luZ0FyZ3VtZW50KG5hbWUpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICcke25hbWV9J2A7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIubWlzc2luZ0FyZ3VtZW50JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBpcyBtaXNzaW5nIGFuIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG9wdGlvbk1pc3NpbmdBcmd1bWVudChvcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgYXJndW1lbnQgbWlzc2luZ2A7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIub3B0aW9uTWlzc2luZ0FyZ3VtZW50JyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBkb2VzIG5vdCBoYXZlIGEgdmFsdWUsIGFuZCBpcyBhIG1hbmRhdG9yeSBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgbWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlKG9wdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHJlcXVpcmVkIG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBub3Qgc3BlY2lmaWVkYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5taXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGNvbmZsaWN0cyB3aXRoIGFub3RoZXIgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBjb25mbGljdGluZ09wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NvbmZsaWN0aW5nT3B0aW9uKG9wdGlvbiwgY29uZmxpY3RpbmdPcHRpb24pIHtcbiAgICAvLyBUaGUgY2FsbGluZyBjb2RlIGRvZXMgbm90IGtub3cgd2hldGhlciBhIG5lZ2F0ZWQgb3B0aW9uIGlzIHRoZSBzb3VyY2Ugb2YgdGhlXG4gICAgLy8gdmFsdWUsIHNvIGRvIHNvbWUgd29yayB0byB0YWtlIGFuIGVkdWNhdGVkIGd1ZXNzLlxuICAgIGNvbnN0IGZpbmRCZXN0T3B0aW9uRnJvbVZhbHVlID0gKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpO1xuICAgICAgY29uc3QgbmVnYXRpdmVPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gdGFyZ2V0Lm5lZ2F0ZSAmJiBvcHRpb25LZXkgPT09IHRhcmdldC5hdHRyaWJ1dGVOYW1lKCksXG4gICAgICApO1xuICAgICAgY29uc3QgcG9zaXRpdmVPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChcbiAgICAgICAgKHRhcmdldCkgPT4gIXRhcmdldC5uZWdhdGUgJiYgb3B0aW9uS2V5ID09PSB0YXJnZXQuYXR0cmlidXRlTmFtZSgpLFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgbmVnYXRpdmVPcHRpb24gJiZcbiAgICAgICAgKChuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25WYWx1ZSA9PT0gZmFsc2UpIHx8XG4gICAgICAgICAgKG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBvcHRpb25WYWx1ZSA9PT0gbmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbmVnYXRpdmVPcHRpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gcG9zaXRpdmVPcHRpb24gfHwgb3B0aW9uO1xuICAgIH07XG5cbiAgICBjb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBiZXN0T3B0aW9uID0gZmluZEJlc3RPcHRpb25Gcm9tVmFsdWUob3B0aW9uKTtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IGJlc3RPcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpO1xuICAgICAgaWYgKHNvdXJjZSA9PT0gJ2VudicpIHtcbiAgICAgICAgcmV0dXJuIGBlbnZpcm9ubWVudCB2YXJpYWJsZSAnJHtiZXN0T3B0aW9uLmVudlZhcn0nYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgb3B0aW9uICcke2Jlc3RPcHRpb24uZmxhZ3N9J2A7XG4gICAgfTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKG9wdGlvbil9IGNhbm5vdCBiZSB1c2VkIHdpdGggJHtnZXRFcnJvck1lc3NhZ2UoY29uZmxpY3RpbmdPcHRpb24pfWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIuY29uZmxpY3RpbmdPcHRpb24nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVua25vd24gb3B0aW9uIGBmbGFnYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgdW5rbm93bk9wdGlvbihmbGFnKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbikgcmV0dXJuO1xuICAgIGxldCBzdWdnZXN0aW9uID0gJyc7XG5cbiAgICBpZiAoZmxhZy5zdGFydHNXaXRoKCctLScpICYmIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcikge1xuICAgICAgLy8gTG9vcGluZyB0byBwaWNrIHVwIHRoZSBnbG9iYWwgb3B0aW9ucyB0b29cbiAgICAgIGxldCBjYW5kaWRhdGVGbGFncyA9IFtdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICBsZXQgY29tbWFuZCA9IHRoaXM7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1vcmVGbGFncyA9IGNvbW1hbmRcbiAgICAgICAgICAuY3JlYXRlSGVscCgpXG4gICAgICAgICAgLnZpc2libGVPcHRpb25zKGNvbW1hbmQpXG4gICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24ubG9uZylcbiAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi5sb25nKTtcbiAgICAgICAgY2FuZGlkYXRlRmxhZ3MgPSBjYW5kaWRhdGVGbGFncy5jb25jYXQobW9yZUZsYWdzKTtcbiAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucGFyZW50O1xuICAgICAgfSB3aGlsZSAoY29tbWFuZCAmJiAhY29tbWFuZC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMpO1xuICAgICAgc3VnZ2VzdGlvbiA9IHN1Z2dlc3RTaW1pbGFyKGZsYWcsIGNhbmRpZGF0ZUZsYWdzKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB1bmtub3duIG9wdGlvbiAnJHtmbGFnfScke3N1Z2dlc3Rpb259YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci51bmtub3duT3B0aW9uJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNlc3MgYXJndW1lbnRzLCBtb3JlIHRoYW4gZXhwZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHJlY2VpdmVkQXJnc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhjZXNzQXJndW1lbnRzKHJlY2VpdmVkQXJncykge1xuICAgIGlmICh0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cykgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhwZWN0ZWQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoO1xuICAgIGNvbnN0IHMgPSBleHBlY3RlZCA9PT0gMSA/ICcnIDogJ3MnO1xuICAgIGNvbnN0IGZvclN1YmNvbW1hbmQgPSB0aGlzLnBhcmVudCA/IGAgZm9yICcke3RoaXMubmFtZSgpfSdgIDogJyc7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdG9vIG1hbnkgYXJndW1lbnRzJHtmb3JTdWJjb21tYW5kfS4gRXhwZWN0ZWQgJHtleHBlY3RlZH0gYXJndW1lbnQke3N9IGJ1dCBnb3QgJHtyZWNlaXZlZEFyZ3MubGVuZ3RofS5gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLmV4Y2Vzc0FyZ3VtZW50cycgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5rbm93biBjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICB1bmtub3duQ29tbWFuZCgpIHtcbiAgICBjb25zdCB1bmtub3duTmFtZSA9IHRoaXMuYXJnc1swXTtcbiAgICBsZXQgc3VnZ2VzdGlvbiA9ICcnO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcikge1xuICAgICAgY29uc3QgY2FuZGlkYXRlTmFtZXMgPSBbXTtcbiAgICAgIHRoaXMuY3JlYXRlSGVscCgpXG4gICAgICAgIC52aXNpYmxlQ29tbWFuZHModGhpcylcbiAgICAgICAgLmZvckVhY2goKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICBjYW5kaWRhdGVOYW1lcy5wdXNoKGNvbW1hbmQubmFtZSgpKTtcbiAgICAgICAgICAvLyBqdXN0IHZpc2libGUgYWxpYXNcbiAgICAgICAgICBpZiAoY29tbWFuZC5hbGlhcygpKSBjYW5kaWRhdGVOYW1lcy5wdXNoKGNvbW1hbmQuYWxpYXMoKSk7XG4gICAgICAgIH0pO1xuICAgICAgc3VnZ2VzdGlvbiA9IHN1Z2dlc3RTaW1pbGFyKHVua25vd25OYW1lLCBjYW5kaWRhdGVOYW1lcyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdW5rbm93biBjb21tYW5kICcke3Vua25vd25OYW1lfScke3N1Z2dlc3Rpb259YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci51bmtub3duQ29tbWFuZCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgcHJvZ3JhbSB2ZXJzaW9uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhdXRvLXJlZ2lzdGVycyB0aGUgXCItViwgLS12ZXJzaW9uXCIgb3B0aW9uIHdoaWNoIHdpbGwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyLlxuICAgKlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3VwcGx5IHRoZSBmbGFncyBhbmQgZGVzY3JpcHRpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7KHRoaXMgfCBzdHJpbmcgfCB1bmRlZmluZWQpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHZlcnNpb24gc3RyaW5nIGlmIG5vIGFyZ3VtZW50c1xuICAgKi9cblxuICB2ZXJzaW9uKHN0ciwgZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fdmVyc2lvbjtcbiAgICB0aGlzLl92ZXJzaW9uID0gc3RyO1xuICAgIGZsYWdzID0gZmxhZ3MgfHwgJy1WLCAtLXZlcnNpb24nO1xuICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJ291dHB1dCB0aGUgdmVyc2lvbiBudW1iZXInO1xuICAgIGNvbnN0IHZlcnNpb25PcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICAgIHRoaXMuX3ZlcnNpb25PcHRpb25OYW1lID0gdmVyc2lvbk9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJPcHRpb24odmVyc2lvbk9wdGlvbik7XG5cbiAgICB0aGlzLm9uKCdvcHRpb246JyArIHZlcnNpb25PcHRpb24ubmFtZSgpLCAoKSA9PiB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlT3V0KGAke3N0cn1cXG5gKTtcbiAgICAgIHRoaXMuX2V4aXQoMCwgJ2NvbW1hbmRlci52ZXJzaW9uJywgc3RyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlc2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzRGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuICBkZXNjcmlwdGlvbihzdHIsIGFyZ3NEZXNjcmlwdGlvbikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCAmJiBhcmdzRGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHN0cjtcbiAgICBpZiAoYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSBhcmdzRGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3VtbWFyeS4gVXNlZCB3aGVuIGxpc3RlZCBhcyBzdWJjb21tYW5kIG9mIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuICBzdW1tYXJ5KHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3N1bW1hcnk7XG4gICAgdGhpcy5fc3VtbWFyeSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gYWxpYXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBZb3UgbWF5IGNhbGwgbW9yZSB0aGFuIG9uY2UgdG8gYWRkIG11bHRpcGxlIGFsaWFzZXMuIE9ubHkgdGhlIGZpcnN0IGFsaWFzIGlzIHNob3duIGluIHRoZSBhdXRvLWdlbmVyYXRlZCBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICBhbGlhcyhhbGlhcykge1xuICAgIGlmIChhbGlhcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fYWxpYXNlc1swXTsgLy8ganVzdCByZXR1cm4gZmlyc3QsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgLyoqIEB0eXBlIHtDb21tYW5kfSAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGxldCBjb21tYW5kID0gdGhpcztcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5jb21tYW5kc1t0aGlzLmNvbW1hbmRzLmxlbmd0aCAtIDFdLl9leGVjdXRhYmxlSGFuZGxlclxuICAgICkge1xuICAgICAgLy8gYXNzdW1lIGFkZGluZyBhbGlhcyBmb3IgbGFzdCBhZGRlZCBleGVjdXRhYmxlIHN1YmNvbW1hbmQsIHJhdGhlciB0aGFuIHRoaXNcbiAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgaWYgKGFsaWFzID09PSBjb21tYW5kLl9uYW1lKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tbWFuZCBhbGlhcyBjYW4ndCBiZSB0aGUgc2FtZSBhcyBpdHMgbmFtZVwiKTtcbiAgICBjb25zdCBtYXRjaGluZ0NvbW1hbmQgPSB0aGlzLnBhcmVudD8uX2ZpbmRDb21tYW5kKGFsaWFzKTtcbiAgICBpZiAobWF0Y2hpbmdDb21tYW5kKSB7XG4gICAgICAvLyBjLmYuIF9yZWdpc3RlckNvbW1hbmRcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ21kID0gW21hdGNoaW5nQ29tbWFuZC5uYW1lKCldXG4gICAgICAgIC5jb25jYXQobWF0Y2hpbmdDb21tYW5kLmFsaWFzZXMoKSlcbiAgICAgICAgLmpvaW4oJ3wnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhbm5vdCBhZGQgYWxpYXMgJyR7YWxpYXN9JyB0byBjb21tYW5kICcke3RoaXMubmFtZSgpfScgYXMgYWxyZWFkeSBoYXZlIGNvbW1hbmQgJyR7ZXhpc3RpbmdDbWR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbW1hbmQuX2FsaWFzZXMucHVzaChhbGlhcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFsaWFzZXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBPbmx5IHRoZSBmaXJzdCBhbGlhcyBpcyBzaG93biBpbiB0aGUgYXV0by1nZW5lcmF0ZWQgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FsaWFzZXNdXG4gICAqIEByZXR1cm4geyhzdHJpbmdbXXxDb21tYW5kKX1cbiAgICovXG5cbiAgYWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgLy8gR2V0dGVyIGZvciB0aGUgYXJyYXkgb2YgYWxpYXNlcyBpcyB0aGUgbWFpbiByZWFzb24gZm9yIGhhdmluZyBhbGlhc2VzKCkgaW4gYWRkaXRpb24gdG8gYWxpYXMoKS5cbiAgICBpZiAoYWxpYXNlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fYWxpYXNlcztcblxuICAgIGFsaWFzZXMuZm9yRWFjaCgoYWxpYXMpID0+IHRoaXMuYWxpYXMoYWxpYXMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgLyBnZXQgdGhlIGNvbW1hbmQgdXNhZ2UgYHN0cmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICB1c2FnZShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl91c2FnZSkgcmV0dXJuIHRoaXMuX3VzYWdlO1xuXG4gICAgICBjb25zdCBhcmdzID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLm1hcCgoYXJnKSA9PiB7XG4gICAgICAgIHJldHVybiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gW11cbiAgICAgICAgLmNvbmNhdChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoIHx8IHRoaXMuX2hlbHBPcHRpb24gIT09IG51bGwgPyAnW29wdGlvbnNdJyA6IFtdLFxuICAgICAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoID8gJ1tjb21tYW5kXScgOiBbXSxcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoID8gYXJncyA6IFtdLFxuICAgICAgICApXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXNhZ2UgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIG5hbWUoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fbmFtZTtcbiAgICB0aGlzLl9uYW1lID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGhlbHAgZ3JvdXAgaGVhZGluZyBmb3IgdGhpcyBzdWJjb21tYW5kIGluIHBhcmVudCBjb21tYW5kJ3MgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cblxuICBoZWxwR3JvdXAoaGVhZGluZykge1xuICAgIGlmIChoZWFkaW5nID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9oZWxwR3JvdXBIZWFkaW5nID8/ICcnO1xuICAgIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGRlZmF1bHQgaGVscCBncm91cCBoZWFkaW5nIGZvciBzdWJjb21tYW5kcyBhZGRlZCB0byB0aGlzIGNvbW1hbmQuXG4gICAqIChUaGlzIGRvZXMgbm90IG92ZXJyaWRlIGEgZ3JvdXAgc2V0IGRpcmVjdGx5IG9uIHRoZSBzdWJjb21tYW5kIHVzaW5nIC5oZWxwR3JvdXAoKS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uY29tbWFuZHNHcm91cCgnRGV2ZWxvcG1lbnQgQ29tbWFuZHM6KTtcbiAgICogcHJvZ3JhbS5jb21tYW5kKCd3YXRjaCcpLi4uXG4gICAqIHByb2dyYW0uY29tbWFuZCgnbGludCcpLi4uXG4gICAqIC4uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm5zIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cbiAgY29tbWFuZHNHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPz8gJyc7XG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgZGVmYXVsdCBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIG9wdGlvbnMgYWRkZWQgdG8gdGhpcyBjb21tYW5kLlxuICAgKiAoVGhpcyBkb2VzIG5vdCBvdmVycmlkZSBhIGdyb3VwIHNldCBkaXJlY3RseSBvbiB0aGUgb3B0aW9uIHVzaW5nIC5oZWxwR3JvdXAoKS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAub3B0aW9uc0dyb3VwKCdEZXZlbG9wbWVudCBPcHRpb25zOicpXG4gICAqICAgLm9wdGlvbignLWQsIC0tZGVidWcnLCAnb3V0cHV0IGV4dHJhIGRlYnVnZ2luZycpXG4gICAqICAgLm9wdGlvbignLXAsIC0tcHJvZmlsZScsICdvdXRwdXQgcHJvZmlsaW5nIGluZm9ybWF0aW9uJylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJucyB7Q29tbWFuZCB8IHN0cmluZ31cbiAgICovXG4gIG9wdGlvbnNHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA/PyAnJztcbiAgICB0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0T3B0aW9uR3JvdXAob3B0aW9uKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCAmJiAhb3B0aW9uLmhlbHBHcm91cEhlYWRpbmcpXG4gICAgICBvcHRpb24uaGVscEdyb3VwKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pbml0Q29tbWFuZEdyb3VwKGNtZCkge1xuICAgIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwICYmICFjbWQuaGVscEdyb3VwKCkpXG4gICAgICBjbWQuaGVscEdyb3VwKHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmcm9tIHNjcmlwdCBmaWxlbmFtZSwgc3VjaCBhcyBwcm9jZXNzLmFyZ3ZbMV0sXG4gICAqIG9yIHJlcXVpcmUubWFpbi5maWxlbmFtZSwgb3IgX19maWxlbmFtZS5cbiAgICpcbiAgICogKFVzZWQgaW50ZXJuYWxseSBhbmQgcHVibGljIGFsdGhvdWdoIG5vdCBkb2N1bWVudGVkIGluIFJFQURNRS4pXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0ubmFtZUZyb21GaWxlbmFtZShyZXF1aXJlLm1haW4uZmlsZW5hbWUpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybiB7Q29tbWFuZH1cbiAgICovXG5cbiAgbmFtZUZyb21GaWxlbmFtZShmaWxlbmFtZSkge1xuICAgIHRoaXMuX25hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lLCBwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIGRpcmVjdG9yeSBmb3Igc2VhcmNoaW5nIGZvciBleGVjdXRhYmxlIHN1YmNvbW1hbmRzIG9mIHRoaXMgY29tbWFuZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5leGVjdXRhYmxlRGlyKF9fZGlybmFtZSk7XG4gICAqIC8vIG9yXG4gICAqIHByb2dyYW0uZXhlY3V0YWJsZURpcignc3ViY29tbWFuZHMnKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfG51bGx8Q29tbWFuZCl9XG4gICAqL1xuXG4gIGV4ZWN1dGFibGVEaXIocGF0aCkge1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9leGVjdXRhYmxlRGlyO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVEaXIgPSBwYXRoO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBwcm9ncmFtIGhlbHAgZG9jdW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH19IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cmFwIGZvciBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBoZWxwSW5mb3JtYXRpb24oY29udGV4dE9wdGlvbnMpIHtcbiAgICBjb25zdCBoZWxwZXIgPSB0aGlzLmNyZWF0ZUhlbHAoKTtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucyk7XG4gICAgaGVscGVyLnByZXBhcmVDb250ZXh0KHtcbiAgICAgIGVycm9yOiBjb250ZXh0LmVycm9yLFxuICAgICAgaGVscFdpZHRoOiBjb250ZXh0LmhlbHBXaWR0aCxcbiAgICAgIG91dHB1dEhhc0NvbG9yczogY29udGV4dC5oYXNDb2xvcnMsXG4gICAgfSk7XG4gICAgY29uc3QgdGV4dCA9IGhlbHBlci5mb3JtYXRIZWxwKHRoaXMsIGhlbHBlcik7XG4gICAgaWYgKGNvbnRleHQuaGFzQ29sb3JzKSByZXR1cm4gdGV4dDtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5zdHJpcENvbG9yKHRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIEhlbHBDb250ZXh0XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXJyb3JcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGhlbHBXaWR0aFxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGhhc0NvbG9yc1xuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSB3cml0ZSAtIGluY2x1ZGVzIHN0cmlwQ29sb3IgaWYgbmVlZGVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtIZWxwQ29udGV4dH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpIHtcbiAgICBjb250ZXh0T3B0aW9ucyA9IGNvbnRleHRPcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IGVycm9yID0gISFjb250ZXh0T3B0aW9ucy5lcnJvcjtcbiAgICBsZXQgYmFzZVdyaXRlO1xuICAgIGxldCBoYXNDb2xvcnM7XG4gICAgbGV0IGhlbHBXaWR0aDtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGJhc2VXcml0ZSA9IChzdHIpID0+IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoc3RyKTtcbiAgICAgIGhhc0NvbG9ycyA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0RXJySGFzQ29sb3JzKCk7XG4gICAgICBoZWxwV2lkdGggPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldEVyckhlbHBXaWR0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlV3JpdGUgPSAoc3RyKSA9PiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlT3V0KHN0cik7XG4gICAgICBoYXNDb2xvcnMgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldE91dEhhc0NvbG9ycygpO1xuICAgICAgaGVscFdpZHRoID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRPdXRIZWxwV2lkdGgoKTtcbiAgICB9XG4gICAgY29uc3Qgd3JpdGUgPSAoc3RyKSA9PiB7XG4gICAgICBpZiAoIWhhc0NvbG9ycykgc3RyID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5zdHJpcENvbG9yKHN0cik7XG4gICAgICByZXR1cm4gYmFzZVdyaXRlKHN0cik7XG4gICAgfTtcbiAgICByZXR1cm4geyBlcnJvciwgd3JpdGUsIGhhc0NvbG9ycywgaGVscFdpZHRoIH07XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gZm9yIHRoaXMgY29tbWFuZC5cbiAgICpcbiAgICogT3V0cHV0cyBidWlsdC1pbiBoZWxwLCBhbmQgY3VzdG9tIHRleHQgYWRkZWQgdXNpbmcgYC5hZGRIZWxwVGV4dCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH0gfCBGdW5jdGlvbn0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKi9cblxuICBvdXRwdXRIZWxwKGNvbnRleHRPcHRpb25zKSB7XG4gICAgbGV0IGRlcHJlY2F0ZWRDYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIGNvbnRleHRPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkZXByZWNhdGVkQ2FsbGJhY2sgPSBjb250ZXh0T3B0aW9ucztcbiAgICAgIGNvbnRleHRPcHRpb25zID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dENvbnRleHQgPSB0aGlzLl9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcbiAgICAvKiogQHR5cGUge0hlbHBUZXh0RXZlbnRDb250ZXh0fSAqL1xuICAgIGNvbnN0IGV2ZW50Q29udGV4dCA9IHtcbiAgICAgIGVycm9yOiBvdXRwdXRDb250ZXh0LmVycm9yLFxuICAgICAgd3JpdGU6IG91dHB1dENvbnRleHQud3JpdGUsXG4gICAgICBjb21tYW5kOiB0aGlzLFxuICAgIH07XG5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5mb3JFYWNoKChjb21tYW5kKSA9PiBjb21tYW5kLmVtaXQoJ2JlZm9yZUFsbEhlbHAnLCBldmVudENvbnRleHQpKTtcbiAgICB0aGlzLmVtaXQoJ2JlZm9yZUhlbHAnLCBldmVudENvbnRleHQpO1xuXG4gICAgbGV0IGhlbHBJbmZvcm1hdGlvbiA9IHRoaXMuaGVscEluZm9ybWF0aW9uKHsgZXJyb3I6IG91dHB1dENvbnRleHQuZXJyb3IgfSk7XG4gICAgaWYgKGRlcHJlY2F0ZWRDYWxsYmFjaykge1xuICAgICAgaGVscEluZm9ybWF0aW9uID0gZGVwcmVjYXRlZENhbGxiYWNrKGhlbHBJbmZvcm1hdGlvbik7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBoZWxwSW5mb3JtYXRpb24gIT09ICdzdHJpbmcnICYmXG4gICAgICAgICFCdWZmZXIuaXNCdWZmZXIoaGVscEluZm9ybWF0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3V0cHV0SGVscCBjYWxsYmFjayBtdXN0IHJldHVybiBhIHN0cmluZyBvciBhIEJ1ZmZlcicpO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXRwdXRDb250ZXh0LndyaXRlKGhlbHBJbmZvcm1hdGlvbik7XG5cbiAgICBpZiAodGhpcy5fZ2V0SGVscE9wdGlvbigpPy5sb25nKSB7XG4gICAgICB0aGlzLmVtaXQodGhpcy5fZ2V0SGVscE9wdGlvbigpLmxvbmcpOyAvLyBkZXByZWNhdGVkXG4gICAgfVxuICAgIHRoaXMuZW1pdCgnYWZ0ZXJIZWxwJywgZXZlbnRDb250ZXh0KTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY29tbWFuZCkgPT5cbiAgICAgIGNvbW1hbmQuZW1pdCgnYWZ0ZXJBbGxIZWxwJywgZXZlbnRDb250ZXh0KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gcGFzcyBpbiBmbGFncyBhbmQgYSBkZXNjcmlwdGlvbiB0byBjdXN0b21pc2UgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKiBQYXNzIGluIGZhbHNlIHRvIGRpc2FibGUgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmhlbHBPcHRpb24oJy0/LCAtLWhlbHAnICdzaG93IGhlbHAnKTsgLy8gY3VzdG9taXNlXG4gICAqIHByb2dyYW0uaGVscE9wdGlvbihmYWxzZSk7IC8vIGRpc2FibGVcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgYm9vbGVhbil9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBoZWxwT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIC8vIFN1cHBvcnQgZW5hYmxpbmcvZGlzYWJsaW5nIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKGZsYWdzKSB7XG4gICAgICAgIGlmICh0aGlzLl9oZWxwT3B0aW9uID09PSBudWxsKSB0aGlzLl9oZWxwT3B0aW9uID0gdW5kZWZpbmVkOyAvLyByZWVuYWJsZVxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwKSB7XG4gICAgICAgICAgLy8gbWFrZSB0aGUgb3B0aW9uIHRvIHN0b3JlIHRoZSBncm91cFxuICAgICAgICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cCh0aGlzLl9nZXRIZWxwT3B0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9oZWxwT3B0aW9uID0gbnVsbDsgLy8gZGlzYWJsZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9taXNlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbi5cbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oXG4gICAgICBmbGFncyA/PyAnLWgsIC0taGVscCcsXG4gICAgICBkZXNjcmlwdGlvbiA/PyAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJyxcbiAgICApO1xuICAgIC8vIGluaXQgZ3JvdXAgdW5sZXNzIGxhenkgY3JlYXRlXG4gICAgaWYgKGZsYWdzIHx8IGRlc2NyaXB0aW9uKSB0aGlzLl9pbml0T3B0aW9uR3JvdXAodGhpcy5faGVscE9wdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXp5IGNyZWF0ZSBoZWxwIG9wdGlvbi5cbiAgICogUmV0dXJucyBudWxsIGlmIGhhcyBiZWVuIGRpc2FibGVkIHdpdGggLmhlbHBPcHRpb24oZmFsc2UpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7KE9wdGlvbiB8IG51bGwpfSB0aGUgaGVscCBvcHRpb25cbiAgICogQHBhY2thZ2VcbiAgICovXG4gIF9nZXRIZWxwT3B0aW9uKCkge1xuICAgIC8vIExhenkgY3JlYXRlIGhlbHAgb3B0aW9uIG9uIGRlbWFuZC5cbiAgICBpZiAodGhpcy5faGVscE9wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhlbHBPcHRpb24odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGVscE9wdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwbHkgeW91ciBvd24gb3B0aW9uIHRvIHVzZSBmb3IgdGhlIGJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgKiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIGhlbHBPcHRpb24oKSB0byBjdXN0b21pc2UgdGhlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbiBldGMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRIZWxwT3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSBvcHRpb247XG4gICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKG9wdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gYW5kIGV4aXQuXG4gICAqXG4gICAqIE91dHB1dHMgYnVpbHQtaW4gaGVscCwgYW5kIGN1c3RvbSB0ZXh0IGFkZGVkIHVzaW5nIGAuYWRkSGVscFRleHQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9fSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqL1xuXG4gIGhlbHAoY29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLm91dHB1dEhlbHAoY29udGV4dE9wdGlvbnMpO1xuICAgIGxldCBleGl0Q29kZSA9IE51bWJlcihwcm9jZXNzLmV4aXRDb2RlID8/IDApOyAvLyBwcm9jZXNzLmV4aXRDb2RlIGRvZXMgYWxsb3cgYSBzdHJpbmcgb3IgYW4gaW50ZWdlciwgYnV0IHdlIHByZWZlciBqdXN0IGEgbnVtYmVyXG4gICAgaWYgKFxuICAgICAgZXhpdENvZGUgPT09IDAgJiZcbiAgICAgIGNvbnRleHRPcHRpb25zICYmXG4gICAgICB0eXBlb2YgY29udGV4dE9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgIGNvbnRleHRPcHRpb25zLmVycm9yXG4gICAgKSB7XG4gICAgICBleGl0Q29kZSA9IDE7XG4gICAgfVxuICAgIC8vIG1lc3NhZ2U6IGRvIG5vdCBoYXZlIGFsbCBkaXNwbGF5ZWQgdGV4dCBhdmFpbGFibGUgc28gb25seSBwYXNzaW5nIHBsYWNlaG9sZGVyLlxuICAgIHRoaXMuX2V4aXQoZXhpdENvZGUsICdjb21tYW5kZXIuaGVscCcsICcob3V0cHV0SGVscCknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAvLyBEbyBhIGxpdHRsZSB0eXBpbmcgdG8gY29vcmRpbmF0ZSBlbWl0IGFuZCBsaXN0ZW5lciBmb3IgdGhlIGhlbHAgdGV4dCBldmVudHMuXG4gICAqIEB0eXBlZGVmIEhlbHBUZXh0RXZlbnRDb250ZXh0XG4gICAqIEB0eXBlIHtvYmplY3R9XG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXJyb3JcbiAgICogQHByb3BlcnR5IHtDb21tYW5kfSBjb21tYW5kXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHdyaXRlXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBZGQgYWRkaXRpb25hbCB0ZXh0IHRvIGJlIGRpc3BsYXllZCB3aXRoIHRoZSBidWlsdC1pbiBoZWxwLlxuICAgKlxuICAgKiBQb3NpdGlvbiBpcyAnYmVmb3JlJyBvciAnYWZ0ZXInIHRvIGFmZmVjdCBqdXN0IHRoaXMgY29tbWFuZCxcbiAgICogYW5kICdiZWZvcmVBbGwnIG9yICdhZnRlckFsbCcgdG8gYWZmZWN0IHRoaXMgY29tbWFuZCBhbmQgYWxsIGl0cyBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uIC0gYmVmb3JlIG9yIGFmdGVyIGJ1aWx0LWluIGhlbHBcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgRnVuY3Rpb24pfSB0ZXh0IC0gc3RyaW5nIHRvIGFkZCwgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJpbmdcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFkZEhlbHBUZXh0KHBvc2l0aW9uLCB0ZXh0KSB7XG4gICAgY29uc3QgYWxsb3dlZFZhbHVlcyA9IFsnYmVmb3JlQWxsJywgJ2JlZm9yZScsICdhZnRlcicsICdhZnRlckFsbCddO1xuICAgIGlmICghYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyhwb3NpdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3IgcG9zaXRpb24gdG8gYWRkSGVscFRleHQuXG5FeHBlY3Rpbmcgb25lIG9mICcke2FsbG93ZWRWYWx1ZXMuam9pbihcIicsICdcIil9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IGhlbHBFdmVudCA9IGAke3Bvc2l0aW9ufUhlbHBgO1xuICAgIHRoaXMub24oaGVscEV2ZW50LCAoLyoqIEB0eXBlIHtIZWxwVGV4dEV2ZW50Q29udGV4dH0gKi8gY29udGV4dCkgPT4ge1xuICAgICAgbGV0IGhlbHBTdHI7XG4gICAgICBpZiAodHlwZW9mIHRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQoeyBlcnJvcjogY29udGV4dC5lcnJvciwgY29tbWFuZDogY29udGV4dC5jb21tYW5kIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVscFN0ciA9IHRleHQ7XG4gICAgICB9XG4gICAgICAvLyBJZ25vcmUgZmFsc3kgdmFsdWUgd2hlbiBub3RoaW5nIHRvIG91dHB1dC5cbiAgICAgIGlmIChoZWxwU3RyKSB7XG4gICAgICAgIGNvbnRleHQud3JpdGUoYCR7aGVscFN0cn1cXG5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBpZiBoZWxwIGZsYWdzIHNwZWNpZmllZFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIC0gYXJyYXkgb2Ygb3B0aW9ucyB0byBzZWFyY2ggZm9yIGhlbHAgZmxhZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX291dHB1dEhlbHBJZlJlcXVlc3RlZChhcmdzKSB7XG4gICAgY29uc3QgaGVscE9wdGlvbiA9IHRoaXMuX2dldEhlbHBPcHRpb24oKTtcbiAgICBjb25zdCBoZWxwUmVxdWVzdGVkID0gaGVscE9wdGlvbiAmJiBhcmdzLmZpbmQoKGFyZykgPT4gaGVscE9wdGlvbi5pcyhhcmcpKTtcbiAgICBpZiAoaGVscFJlcXVlc3RlZCkge1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKCk7XG4gICAgICAvLyAoRG8gbm90IGhhdmUgYWxsIGRpc3BsYXllZCB0ZXh0IGF2YWlsYWJsZSBzbyBvbmx5IHBhc3NpbmcgcGxhY2Vob2xkZXIuKVxuICAgICAgdGhpcy5fZXhpdCgwLCAnY29tbWFuZGVyLmhlbHBEaXNwbGF5ZWQnLCAnKG91dHB1dEhlbHApJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2NhbiBhcmd1bWVudHMgYW5kIGluY3JlbWVudCBwb3J0IG51bWJlciBmb3IgaW5zcGVjdCBjYWxscyAodG8gYXZvaWQgY29uZmxpY3RzIHdoZW4gc3Bhd25pbmcgbmV3IGNvbW1hbmQpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBhcnJheSBvZiBhcmd1bWVudHMgZnJvbSBub2RlLmV4ZWNBcmd2XG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KGFyZ3MpIHtcbiAgLy8gVGVzdGluZyBmb3IgdGhlc2Ugb3B0aW9uczpcbiAgLy8gIC0taW5zcGVjdFs9W2hvc3Q6XXBvcnRdXG4gIC8vICAtLWluc3BlY3QtYnJrWz1baG9zdDpdcG9ydF1cbiAgLy8gIC0taW5zcGVjdC1wb3J0PVtob3N0Ol1wb3J0XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiB7XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aCgnLS1pbnNwZWN0JykpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIGxldCBkZWJ1Z09wdGlvbjtcbiAgICBsZXQgZGVidWdIb3N0ID0gJzEyNy4wLjAuMSc7XG4gICAgbGV0IGRlYnVnUG9ydCA9ICc5MjI5JztcbiAgICBsZXQgbWF0Y2g7XG4gICAgaWYgKChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJyayk/KSQvKSkgIT09IG51bGwpIHtcbiAgICAgIC8vIGUuZy4gLS1pbnNwZWN0XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmt8LXBvcnQpPyk9KFteOl0rKSQvKSkgIT09IG51bGxcbiAgICApIHtcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBpZiAoL15cXGQrJC8udGVzdChtYXRjaFszXSkpIHtcbiAgICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9MTIzNFxuICAgICAgICBkZWJ1Z1BvcnQgPSBtYXRjaFszXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PWxvY2FsaG9zdFxuICAgICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrfC1wb3J0KT8pPShbXjpdKyk6KFxcZCspJC8pKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9bG9jYWxob3N0OjEyMzRcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgICBkZWJ1Z0hvc3QgPSBtYXRjaFszXTtcbiAgICAgIGRlYnVnUG9ydCA9IG1hdGNoWzRdO1xuICAgIH1cblxuICAgIGlmIChkZWJ1Z09wdGlvbiAmJiBkZWJ1Z1BvcnQgIT09ICcwJykge1xuICAgICAgcmV0dXJuIGAke2RlYnVnT3B0aW9ufT0ke2RlYnVnSG9zdH06JHtwYXJzZUludChkZWJ1Z1BvcnQpICsgMX1gO1xuICAgIH1cbiAgICByZXR1cm4gYXJnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH1cbiAqIEBwYWNrYWdlXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbG9yKCkge1xuICAvLyBUZXN0IGZvciBjb21tb24gY29udmVudGlvbnMuXG4gIC8vIE5COiB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3VyIGlzIGluIGNvbWJpbmF0aW9uIHdpdGggaG93IGF1dGhvciBhZGRzIGNvbG9yISBGb3IgZXhhbXBsZTpcbiAgLy8gICAtIHdlIGRvIG5vdCB0ZXN0IE5PREVfRElTQUJMRV9DT0xPUlMsIGJ1dCB1dGlsOnN0eWxldGV4dCBkb2VzXG4gIC8vICAgLSB3ZSBkbyB0ZXN0IE5PX0NPTE9SLCBidXQgQ2hhbGsgZG9lcyBub3RcbiAgLy9cbiAgLy8gUmVmZXJlbmNlczpcbiAgLy8gaHR0cHM6Ly9uby1jb2xvci5vcmdcbiAgLy8gaHR0cHM6Ly9iaXhlbnNlLmNvbS9jbGljb2xvcnMvXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzBhMDAyMTdhNWY2N2VmNGEyMjM4NGNmYzgwZWI2ZGQ5YTkxN2ZkYzEvbGliL2ludGVybmFsL3R0eS5qcyNMMTA5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9zdXBwb3J0cy1jb2xvci9ibG9iL2MyMTQzMTRhMTRiY2IxNzRiMTJiMzAxNGIyYjBhOGRlMzc1MDI5YWUvaW5kZXguanMjTDMzXG4gIC8vIChodHRwczovL2ZvcmNlLWNvbG9yLm9yZyByZWNlbnQgd2ViIHBhZ2UgZnJvbSAyMDIzLCBkb2VzIG5vdCBtYXRjaCBtYWpvciBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9ucylcblxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9fQ09MT1IgfHxcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9PT0gJzAnIHx8XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09ICdmYWxzZSdcbiAgKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SIHx8IHByb2Nlc3MuZW52LkNMSUNPTE9SX0ZPUkNFICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5leHBvcnRzLnVzZUNvbG9yID0gdXNlQ29sb3I7IC8vIGV4cG9ydGluZyBmb3IgdGVzdHNcbiIsICJjb25zdCB7IEFyZ3VtZW50IH0gPSByZXF1aXJlKCcuL2xpYi9hcmd1bWVudC5qcycpO1xuY29uc3QgeyBDb21tYW5kIH0gPSByZXF1aXJlKCcuL2xpYi9jb21tYW5kLmpzJyk7XG5jb25zdCB7IENvbW1hbmRlckVycm9yLCBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9saWIvZXJyb3IuanMnKTtcbmNvbnN0IHsgSGVscCB9ID0gcmVxdWlyZSgnLi9saWIvaGVscC5qcycpO1xuY29uc3QgeyBPcHRpb24gfSA9IHJlcXVpcmUoJy4vbGliL29wdGlvbi5qcycpO1xuXG5leHBvcnRzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5leHBvcnRzLmNyZWF0ZUNvbW1hbmQgPSAobmFtZSkgPT4gbmV3IENvbW1hbmQobmFtZSk7XG5leHBvcnRzLmNyZWF0ZU9wdGlvbiA9IChmbGFncywgZGVzY3JpcHRpb24pID0+IG5ldyBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbmV4cG9ydHMuY3JlYXRlQXJndW1lbnQgPSAobmFtZSwgZGVzY3JpcHRpb24pID0+IG5ldyBBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG5cbi8qKlxuICogRXhwb3NlIGNsYXNzZXNcbiAqL1xuXG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuZXhwb3J0cy5PcHRpb24gPSBPcHRpb247XG5leHBvcnRzLkFyZ3VtZW50ID0gQXJndW1lbnQ7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xuXG5leHBvcnRzLkNvbW1hbmRlckVycm9yID0gQ29tbWFuZGVyRXJyb3I7XG5leHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7XG5leHBvcnRzLkludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7IC8vIERlcHJlY2F0ZWRcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIndXNlIHN0cmljdCc7XG5cbnZhciBuZXQgPSByZXF1aXJlKCduZXQnKTtcbnZhciB0bHMgPSByZXF1aXJlKCd0bHMnKTtcbnZhciBodHRwID0gcmVxdWlyZSgnaHR0cCcpO1xudmFyIGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbnZhciBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5cbmV4cG9ydHMuaHR0cE92ZXJIdHRwID0gaHR0cE92ZXJIdHRwO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwID0gaHR0cHNPdmVySHR0cDtcbmV4cG9ydHMuaHR0cE92ZXJIdHRwcyA9IGh0dHBPdmVySHR0cHM7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHBzID0gaHR0cHNPdmVySHR0cHM7XG5cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cE92ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cblxuZnVuY3Rpb24gVHVubmVsaW5nQWdlbnQob3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHNlbGYucHJveHlPcHRpb25zID0gc2VsZi5vcHRpb25zLnByb3h5IHx8IHt9O1xuICBzZWxmLm1heFNvY2tldHMgPSBzZWxmLm9wdGlvbnMubWF4U29ja2V0cyB8fCBodHRwLkFnZW50LmRlZmF1bHRNYXhTb2NrZXRzO1xuICBzZWxmLnJlcXVlc3RzID0gW107XG4gIHNlbGYuc29ja2V0cyA9IFtdO1xuXG4gIHNlbGYub24oJ2ZyZWUnLCBmdW5jdGlvbiBvbkZyZWUoc29ja2V0LCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWxmLnJlcXVlc3RzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB2YXIgcGVuZGluZyA9IHNlbGYucmVxdWVzdHNbaV07XG4gICAgICBpZiAocGVuZGluZy5ob3N0ID09PSBvcHRpb25zLmhvc3QgJiYgcGVuZGluZy5wb3J0ID09PSBvcHRpb25zLnBvcnQpIHtcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSByZXF1ZXN0IHRvIGNvbm5lY3Qgc2FtZSBvcmlnaW4gc2VydmVyLFxuICAgICAgICAvLyByZXVzZSB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgc2VsZi5yZXF1ZXN0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgfSk7XG59XG51dGlsLmluaGVyaXRzKFR1bm5lbGluZ0FnZW50LCBldmVudHMuRXZlbnRFbWl0dGVyKTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmFkZFJlcXVlc3QgPSBmdW5jdGlvbiBhZGRSZXF1ZXN0KHJlcSwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe3JlcXVlc3Q6IHJlcX0sIHNlbGYub3B0aW9ucywgdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykpO1xuXG4gIGlmIChzZWxmLnNvY2tldHMubGVuZ3RoID49IHRoaXMubWF4U29ja2V0cykge1xuICAgIC8vIFdlIGFyZSBvdmVyIGxpbWl0IHNvIHdlJ2xsIGFkZCBpdCB0byB0aGUgcXVldWUuXG4gICAgc2VsZi5yZXF1ZXN0cy5wdXNoKG9wdGlvbnMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHdlIGFyZSB1bmRlciBtYXhTb2NrZXRzIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIHNlbGYuY3JlYXRlU29ja2V0KG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHNvY2tldC5vbignZnJlZScsIG9uRnJlZSk7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgc29ja2V0Lm9uKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgcmVxLm9uU29ja2V0KHNvY2tldCk7XG5cbiAgICBmdW5jdGlvbiBvbkZyZWUoKSB7XG4gICAgICBzZWxmLmVtaXQoJ2ZyZWUnLCBzb2NrZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xvc2VPclJlbW92ZShlcnIpIHtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2ZyZWUnLCBvbkZyZWUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldCA9IGZ1bmN0aW9uIGNyZWF0ZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBwbGFjZWhvbGRlciA9IHt9O1xuICBzZWxmLnNvY2tldHMucHVzaChwbGFjZWhvbGRlcik7XG5cbiAgdmFyIGNvbm5lY3RPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLnByb3h5T3B0aW9ucywge1xuICAgIG1ldGhvZDogJ0NPTk5FQ1QnLFxuICAgIHBhdGg6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydCxcbiAgICBhZ2VudDogZmFsc2UsXG4gICAgaGVhZGVyczoge1xuICAgICAgaG9zdDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0XG4gICAgfVxuICB9KTtcbiAgaWYgKG9wdGlvbnMubG9jYWxBZGRyZXNzKSB7XG4gICAgY29ubmVjdE9wdGlvbnMubG9jYWxBZGRyZXNzID0gb3B0aW9ucy5sb2NhbEFkZHJlc3M7XG4gIH1cbiAgaWYgKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkge1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgPSBjb25uZWN0T3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbm5lY3RPcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICtcbiAgICAgICAgbmV3IEJ1ZmZlcihjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIGRlYnVnKCdtYWtpbmcgQ09OTkVDVCByZXF1ZXN0Jyk7XG4gIHZhciBjb25uZWN0UmVxID0gc2VsZi5yZXF1ZXN0KGNvbm5lY3RPcHRpb25zKTtcbiAgY29ubmVjdFJlcS51c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdyZXNwb25zZScsIG9uUmVzcG9uc2UpOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3VwZ3JhZGUnLCBvblVwZ3JhZGUpOyAgIC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgnY29ubmVjdCcsIG9uQ29ubmVjdCk7ICAgLy8gZm9yIHYwLjcgb3IgbGF0ZXJcbiAgY29ubmVjdFJlcS5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICBjb25uZWN0UmVxLmVuZCgpO1xuXG4gIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzKSB7XG4gICAgLy8gVmVyeSBoYWNreS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgaHR0cC1wYXJzZXIgbGVha3MuXG4gICAgcmVzLnVwZ3JhZGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25VcGdyYWRlKHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgLy8gSGFja3kuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIHNvY2tldC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIHN0YXR1c0NvZGU9JWQnLFxuICAgICAgICByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICdzdGF0dXNDb2RlPScgKyByZXMuc3RhdHVzQ29kZSk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICBkZWJ1ZygnZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRlYnVnKCd0dW5uZWxpbmcgY29ubmVjdGlvbiBoYXMgZXN0YWJsaXNoZWQnKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2YocGxhY2Vob2xkZXIpXSA9IHNvY2tldDtcbiAgICByZXR1cm4gY2Ioc29ja2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRXJyb3IoY2F1c2UpIHtcbiAgICBjb25uZWN0UmVxLnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBjYXVzZT0lc1xcbicsXG4gICAgICAgICAgY2F1c2UubWVzc2FnZSwgY2F1c2Uuc3RhY2spO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnY2F1c2U9JyArIGNhdXNlLm1lc3NhZ2UpO1xuICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgfVxufTtcblxuVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLnJlbW92ZVNvY2tldCA9IGZ1bmN0aW9uIHJlbW92ZVNvY2tldChzb2NrZXQpIHtcbiAgdmFyIHBvcyA9IHRoaXMuc29ja2V0cy5pbmRleE9mKHNvY2tldClcbiAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zb2NrZXRzLnNwbGljZShwb3MsIDEpO1xuXG4gIHZhciBwZW5kaW5nID0gdGhpcy5yZXF1ZXN0cy5zaGlmdCgpO1xuICBpZiAocGVuZGluZykge1xuICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyByZXF1ZXN0cyBhbmQgYSBzb2NrZXQgZ2V0cyBjbG9zZWQgYSBuZXcgb25lXG4gICAgLy8gbmVlZHMgdG8gYmUgY3JlYXRlZCB0byB0YWtlIG92ZXIgaW4gdGhlIHBvb2wgZm9yIHRoZSBvbmUgdGhhdCBjbG9zZWQuXG4gICAgdGhpcy5jcmVhdGVTb2NrZXQocGVuZGluZywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU2VjdXJlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgVHVubmVsaW5nQWdlbnQucHJvdG90eXBlLmNyZWF0ZVNvY2tldC5jYWxsKHNlbGYsIG9wdGlvbnMsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgIHZhciBob3N0SGVhZGVyID0gb3B0aW9ucy5yZXF1ZXN0LmdldEhlYWRlcignaG9zdCcpO1xuICAgIHZhciB0bHNPcHRpb25zID0gbWVyZ2VPcHRpb25zKHt9LCBzZWxmLm9wdGlvbnMsIHtcbiAgICAgIHNvY2tldDogc29ja2V0LFxuICAgICAgc2VydmVybmFtZTogaG9zdEhlYWRlciA/IGhvc3RIZWFkZXIucmVwbGFjZSgvOi4qJC8sICcnKSA6IG9wdGlvbnMuaG9zdFxuICAgIH0pO1xuXG4gICAgLy8gMCBpcyBkdW1teSBwb3J0IGZvciB2MC42XG4gICAgdmFyIHNlY3VyZVNvY2tldCA9IHRscy5jb25uZWN0KDAsIHRsc09wdGlvbnMpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXSA9IHNlY3VyZVNvY2tldDtcbiAgICBjYihzZWN1cmVTb2NrZXQpO1xuICB9KTtcbn1cblxuXG5mdW5jdGlvbiB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHsgLy8gc2luY2UgdjAuMTBcbiAgICByZXR1cm4ge1xuICAgICAgaG9zdDogaG9zdCxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICBsb2NhbEFkZHJlc3M6IGxvY2FsQWRkcmVzc1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGhvc3Q7IC8vIGZvciB2MC4xMSBvciBsYXRlclxufVxuXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnModGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIgb3ZlcnJpZGVzID0gYXJndW1lbnRzW2ldO1xuICAgIGlmICh0eXBlb2Ygb3ZlcnJpZGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvdmVycmlkZXMpO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGtleUxlbiA9IGtleXMubGVuZ3RoOyBqIDwga2V5TGVuOyArK2opIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW2pdO1xuICAgICAgICBpZiAob3ZlcnJpZGVzW2tdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRba10gPSBvdmVycmlkZXNba107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuXG52YXIgZGVidWc7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyAmJiAvXFxidHVubmVsXFxiLy50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpKSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGFyZ3NbMF0gPSAnVFVOTkVMOiAnICsgYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncy51bnNoaWZ0KCdUVU5ORUw6Jyk7XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgYXJncyk7XG4gIH1cbn0gZWxzZSB7XG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbn1cbmV4cG9ydHMuZGVidWcgPSBkZWJ1ZzsgLy8gZm9yIHRlc3RcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL3R1bm5lbCcpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga0Rlc3Ryb3k6IFN5bWJvbCgnZGVzdHJveScpLFxuICBrRGlzcGF0Y2g6IFN5bWJvbCgnZGlzcGF0Y2gnKSxcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga1dyaXRpbmc6IFN5bWJvbCgnd3JpdGluZycpLFxuICBrUmVzdW1pbmc6IFN5bWJvbCgncmVzdW1pbmcnKSxcbiAga1F1ZXVlOiBTeW1ib2woJ3F1ZXVlJyksXG4gIGtDb25uZWN0OiBTeW1ib2woJ2Nvbm5lY3QnKSxcbiAga0Nvbm5lY3Rpbmc6IFN5bWJvbCgnY29ubmVjdGluZycpLFxuICBrSGVhZGVyc0xpc3Q6IFN5bWJvbCgnaGVhZGVycyBsaXN0JyksXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dDogU3ltYm9sKCdkZWZhdWx0IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dDogU3ltYm9sKCdtYXgga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCB0aHJlc2hvbGQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZTogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZTogU3ltYm9sKCdrZWVwIGFsaXZlJyksXG4gIGtIZWFkZXJzVGltZW91dDogU3ltYm9sKCdoZWFkZXJzIHRpbWVvdXQnKSxcbiAga0JvZHlUaW1lb3V0OiBTeW1ib2woJ2JvZHkgdGltZW91dCcpLFxuICBrU2VydmVyTmFtZTogU3ltYm9sKCdzZXJ2ZXIgbmFtZScpLFxuICBrTG9jYWxBZGRyZXNzOiBTeW1ib2woJ2xvY2FsIGFkZHJlc3MnKSxcbiAga0hvc3Q6IFN5bWJvbCgnaG9zdCcpLFxuICBrTm9SZWY6IFN5bWJvbCgnbm8gcmVmJyksXG4gIGtCb2R5VXNlZDogU3ltYm9sKCd1c2VkJyksXG4gIGtSdW5uaW5nOiBTeW1ib2woJ3J1bm5pbmcnKSxcbiAga0Jsb2NraW5nOiBTeW1ib2woJ2Jsb2NraW5nJyksXG4gIGtQZW5kaW5nOiBTeW1ib2woJ3BlbmRpbmcnKSxcbiAga1NpemU6IFN5bWJvbCgnc2l6ZScpLFxuICBrQnVzeTogU3ltYm9sKCdidXN5JyksXG4gIGtRdWV1ZWQ6IFN5bWJvbCgncXVldWVkJyksXG4gIGtGcmVlOiBTeW1ib2woJ2ZyZWUnKSxcbiAga0Nvbm5lY3RlZDogU3ltYm9sKCdjb25uZWN0ZWQnKSxcbiAga0Nsb3NlZDogU3ltYm9sKCdjbG9zZWQnKSxcbiAga05lZWREcmFpbjogU3ltYm9sKCduZWVkIGRyYWluJyksXG4gIGtSZXNldDogU3ltYm9sKCdyZXNldCcpLFxuICBrRGVzdHJveWVkOiBTeW1ib2wuZm9yKCdub2RlanMuc3RyZWFtLmRlc3Ryb3llZCcpLFxuICBrTWF4SGVhZGVyc1NpemU6IFN5bWJvbCgnbWF4IGhlYWRlcnMgc2l6ZScpLFxuICBrUnVubmluZ0lkeDogU3ltYm9sKCdydW5uaW5nIGluZGV4JyksXG4gIGtQZW5kaW5nSWR4OiBTeW1ib2woJ3BlbmRpbmcgaW5kZXgnKSxcbiAga0Vycm9yOiBTeW1ib2woJ2Vycm9yJyksXG4gIGtDbGllbnRzOiBTeW1ib2woJ2NsaWVudHMnKSxcbiAga0NsaWVudDogU3ltYm9sKCdjbGllbnQnKSxcbiAga1BhcnNlcjogU3ltYm9sKCdwYXJzZXInKSxcbiAga09uRGVzdHJveWVkOiBTeW1ib2woJ2Rlc3Ryb3kgY2FsbGJhY2tzJyksXG4gIGtQaXBlbGluaW5nOiBTeW1ib2woJ3BpcGVsaW5pbmcnKSxcbiAga1NvY2tldDogU3ltYm9sKCdzb2NrZXQnKSxcbiAga0hvc3RIZWFkZXI6IFN5bWJvbCgnaG9zdCBoZWFkZXInKSxcbiAga0Nvbm5lY3RvcjogU3ltYm9sKCdjb25uZWN0b3InKSxcbiAga1N0cmljdENvbnRlbnRMZW5ndGg6IFN5bWJvbCgnc3RyaWN0IGNvbnRlbnQgbGVuZ3RoJyksXG4gIGtNYXhSZWRpcmVjdGlvbnM6IFN5bWJvbCgnbWF4UmVkaXJlY3Rpb25zJyksXG4gIGtNYXhSZXF1ZXN0czogU3ltYm9sKCdtYXhSZXF1ZXN0c1BlckNsaWVudCcpLFxuICBrUHJveHk6IFN5bWJvbCgncHJveHkgYWdlbnQgb3B0aW9ucycpLFxuICBrQ291bnRlcjogU3ltYm9sKCdzb2NrZXQgcmVxdWVzdCBjb3VudGVyJyksXG4gIGtJbnRlcmNlcHRvcnM6IFN5bWJvbCgnZGlzcGF0Y2ggaW50ZXJjZXB0b3JzJyksXG4gIGtNYXhSZXNwb25zZVNpemU6IFN5bWJvbCgnbWF4IHJlc3BvbnNlIHNpemUnKSxcbiAga0hUVFAyU2Vzc2lvbjogU3ltYm9sKCdodHRwMlNlc3Npb24nKSxcbiAga0hUVFAyU2Vzc2lvblN0YXRlOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbiBzdGF0ZScpLFxuICBrSFRUUDJCdWlsZFJlcXVlc3Q6IFN5bWJvbCgnaHR0cDIgYnVpbGQgcmVxdWVzdCcpLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Q6IFN5bWJvbCgnaHR0cDEgYnVpbGQgcmVxdWVzdCcpLFxuICBrSFRUUDJDb3B5SGVhZGVyczogU3ltYm9sKCdodHRwMiBjb3B5IGhlYWRlcnMnKSxcbiAga0hUVFBDb25uVmVyc2lvbjogU3ltYm9sKCdodHRwIGNvbm5lY3Rpb24gdmVyc2lvbicpLFxuICBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5OiBTeW1ib2woJ3JldHJ5IGFnZW50IGRlZmF1bHQgcmV0cnknKSxcbiAga0NvbnN0cnVjdDogU3ltYm9sKCdjb25zdHJ1Y3RhYmxlJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY2xhc3MgVW5kaWNpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnVW5kaWNpRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlInXG4gIH1cbn1cblxuY2xhc3MgQ29ubmVjdFRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENvbm5lY3RUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc1RpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc1RpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNPdmVyZmxvd0Vycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSGVhZGVyc092ZXJmbG93RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNPdmVyZmxvd0Vycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgT3ZlcmZsb3cgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSEVBREVSU19PVkVSRkxPVydcbiAgfVxufVxuXG5jbGFzcyBCb2R5VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQm9keVRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQm9keVRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdCb2R5IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQk9EWV9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc3RhdHVzQ29kZSwgaGVhZGVycywgYm9keSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlU3RhdHVzQ29kZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIFN0YXR1cyBDb2RlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFX1NUQVRVU19DT0RFJ1xuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZEFyZ3VtZW50RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRBcmd1bWVudEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgQXJndW1lbnQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9BUkcnXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZFJldHVyblZhbHVlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFJldHVyblZhbHVlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBSZXR1cm4gVmFsdWUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEFib3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RBYm9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBhYm9ydGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0FCT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgSW5mb3JtYXRpb25hbEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW5mb3JtYXRpb25hbEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbmZvcm1hdGlvbmFsRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBpbmZvcm1hdGlvbidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTkZPJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudERlc3Ryb3llZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50RGVzdHJveWVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudERlc3Ryb3llZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgZGVzdHJveWVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0RFU1RST1lFRCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnRDbG9zZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudENsb3NlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnRDbG9zZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGNsb3NlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DTE9TRUQnXG4gIH1cbn1cblxuY2xhc3MgU29ja2V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzb2NrZXQpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNvY2tldEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdTb2NrZXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdTb2NrZXQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfU09DS0VUJ1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gIH1cbn1cblxuY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTm90U3VwcG9ydGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm90IHN1cHBvcnRlZCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9OT1RfU1VQUE9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01pc3NpbmdVcHN0cmVhbUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vIHVwc3RyZWFtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBCYWxhbmNlZFBvb2wnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQlBMX01JU1NJTkdfVVBTVFJFQU0nXG4gIH1cbn1cblxuY2xhc3MgSFRUUFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgZGF0YSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSFRUUFBhcnNlckVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgY29udGVudCBleGNlZWRlZCBtYXggc2l6ZSdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfRVhDRUVERURfTUFYX1NJWkUnXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdFJldHJ5RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCB7IGhlYWRlcnMsIGRhdGEgfSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdFJldHJ5RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RSZXRyeUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgcmV0cnkgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX1JFVFJZJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFVuZGljaUVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBDb25uZWN0VGltZW91dEVycm9yLFxuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgUmVxdWVzdFJldHJ5RXJyb3Jcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+fSAqL1xuY29uc3QgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgPSB7fVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnNcbmNvbnN0IHdlbGxrbm93bkhlYWRlck5hbWVzID0gW1xuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnLFxuICAnQWNjZXB0LVJhbmdlcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kJyxcbiAgJ0FnZScsXG4gICdBbGxvdycsXG4gICdBbHQtU3ZjJyxcbiAgJ0FsdC1Vc2VkJyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuICAnQ2FjaGUtQ29udHJvbCcsXG4gICdDbGVhci1TaXRlLURhdGEnLFxuICAnQ29ubmVjdGlvbicsXG4gICdDb250ZW50LURpc3Bvc2l0aW9uJyxcbiAgJ0NvbnRlbnQtRW5jb2RpbmcnLFxuICAnQ29udGVudC1MYW5ndWFnZScsXG4gICdDb250ZW50LUxlbmd0aCcsXG4gICdDb250ZW50LUxvY2F0aW9uJyxcbiAgJ0NvbnRlbnQtUmFuZ2UnLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3knLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHknLFxuICAnQ29udGVudC1UeXBlJyxcbiAgJ0Nvb2tpZScsXG4gICdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3knLFxuICAnRGF0ZScsXG4gICdEZXZpY2UtTWVtb3J5JyxcbiAgJ0Rvd25saW5rJyxcbiAgJ0VDVCcsXG4gICdFVGFnJyxcbiAgJ0V4cGVjdCcsXG4gICdFeHBlY3QtQ1QnLFxuICAnRXhwaXJlcycsXG4gICdGb3J3YXJkZWQnLFxuICAnRnJvbScsXG4gICdIb3N0JyxcbiAgJ0lmLU1hdGNoJyxcbiAgJ0lmLU1vZGlmaWVkLVNpbmNlJyxcbiAgJ0lmLU5vbmUtTWF0Y2gnLFxuICAnSWYtUmFuZ2UnLFxuICAnSWYtVW5tb2RpZmllZC1TaW5jZScsXG4gICdLZWVwLUFsaXZlJyxcbiAgJ0xhc3QtTW9kaWZpZWQnLFxuICAnTGluaycsXG4gICdMb2NhdGlvbicsXG4gICdNYXgtRm9yd2FyZHMnLFxuICAnT3JpZ2luJyxcbiAgJ1Blcm1pc3Npb25zLVBvbGljeScsXG4gICdQcmFnbWEnLFxuICAnUHJveHktQXV0aGVudGljYXRlJyxcbiAgJ1Byb3h5LUF1dGhvcml6YXRpb24nLFxuICAnUlRUJyxcbiAgJ1JhbmdlJyxcbiAgJ1JlZmVyZXInLFxuICAnUmVmZXJyZXItUG9saWN5JyxcbiAgJ1JlZnJlc2gnLFxuICAnUmV0cnktQWZ0ZXInLFxuICAnU2VjLVdlYlNvY2tldC1BY2NlcHQnLFxuICAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJyxcbiAgJ1NlYy1XZWJTb2NrZXQtS2V5JyxcbiAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnLFxuICAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJyxcbiAgJ1NlcnZlcicsXG4gICdTZXJ2ZXItVGltaW5nJyxcbiAgJ1NlcnZpY2UtV29ya2VyLUFsbG93ZWQnLFxuICAnU2VydmljZS1Xb3JrZXItTmF2aWdhdGlvbi1QcmVsb2FkJyxcbiAgJ1NldC1Db29raWUnLFxuICAnU291cmNlTWFwJyxcbiAgJ1N0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHknLFxuICAnU3VwcG9ydHMtTG9hZGluZy1Nb2RlJyxcbiAgJ1RFJyxcbiAgJ1RpbWluZy1BbGxvdy1PcmlnaW4nLFxuICAnVHJhaWxlcicsXG4gICdUcmFuc2Zlci1FbmNvZGluZycsXG4gICdVcGdyYWRlJyxcbiAgJ1VwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMnLFxuICAnVXNlci1BZ2VudCcsXG4gICdWYXJ5JyxcbiAgJ1ZpYScsXG4gICdXV1ctQXV0aGVudGljYXRlJyxcbiAgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLFxuICAnWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCcsXG4gICdYLUZyYW1lLU9wdGlvbnMnLFxuICAnWC1QZXJtaXR0ZWQtQ3Jvc3MtRG9tYWluLVBvbGljaWVzJyxcbiAgJ1gtUG93ZXJlZC1CeScsXG4gICdYLVJlcXVlc3RlZC1XaXRoJyxcbiAgJ1gtWFNTLVByb3RlY3Rpb24nXG5dXG5cbmZvciAobGV0IGkgPSAwOyBpIDwgd2VsbGtub3duSGVhZGVyTmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgY29uc3Qga2V5ID0gd2VsbGtub3duSGVhZGVyTmFtZXNbaV1cbiAgY29uc3QgbG93ZXJDYXNlZEtleSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV0gPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtsb3dlckNhc2VkS2V5XSA9XG4gICAgbG93ZXJDYXNlZEtleVxufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCwgbnVsbClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlbGxrbm93bkhlYWRlck5hbWVzLFxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrRGVzdHJveWVkLCBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEluY29taW5nTWVzc2FnZSB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCBzdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IHsgQmxvYiB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKVxuY29uc3QgeyBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG5jb25zdCBbbm9kZU1ham9yLCBub2RlTWlub3JdID0gcHJvY2Vzcy52ZXJzaW9ucy5ub2RlLnNwbGl0KCcuJykubWFwKHYgPT4gTnVtYmVyKHYpKVxuXG5mdW5jdGlvbiBub3AgKCkge31cblxuZnVuY3Rpb24gaXNTdHJlYW0gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLm9uID09PSAnZnVuY3Rpb24nXG59XG5cbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlLWZldGNoL2ZldGNoLWJsb2IvYmxvYi84YWI1ODdkMzQwODBkZTk0MTQwYjU0ZjA3MTY4NDUxZTdkMGI2NTVlL2luZGV4LmpzI0wyMjktTDI0MSAoTUlUIExpY2Vuc2UpXG5mdW5jdGlvbiBpc0Jsb2JMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChCbG9iICYmIG9iamVjdCBpbnN0YW5jZW9mIEJsb2IpIHx8IChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAvXihCbG9ifEZpbGUpJC8udGVzdChvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSlcbiAgKVxufVxuXG5mdW5jdGlvbiBidWlsZFVSTCAodXJsLCBxdWVyeVBhcmFtcykge1xuICBpZiAodXJsLmluY2x1ZGVzKCc/JykgfHwgdXJsLmluY2x1ZGVzKCcjJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1ZXJ5IHBhcmFtcyBjYW5ub3QgYmUgcGFzc2VkIHdoZW4gdXJsIGFscmVhZHkgY29udGFpbnMgXCI/XCIgb3IgXCIjXCIuJylcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zKVxuXG4gIGlmIChzdHJpbmdpZmllZCkge1xuICAgIHVybCArPSAnPycgKyBzdHJpbmdpZmllZFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBwYXJzZVVSTCAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHVybCA9IG5ldyBVUkwodXJsKVxuXG4gICAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBUaGUgVVJMIGFyZ3VtZW50IG11c3QgYmUgYSBub24tbnVsbCBvYmplY3QuJylcbiAgfVxuXG4gIGlmICghL15odHRwcz86Ly50ZXN0KHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgfVxuXG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICBpZiAodXJsLnBvcnQgIT0gbnVsbCAmJiB1cmwucG9ydCAhPT0gJycgJiYgIU51bWJlci5pc0Zpbml0ZShwYXJzZUludCh1cmwucG9ydCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBwb3J0IG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyIG9yIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGggIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGg6IHRoZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRobmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aG5hbWU6IHRoZSBwYXRobmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwuaG9zdG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIGhvc3RuYW1lOiB0aGUgaG9zdG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwub3JpZ2luICE9IG51bGwgJiYgdHlwZW9mIHVybC5vcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIG9yaWdpbjogdGhlIG9yaWdpbiBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgY29uc3QgcG9ydCA9IHVybC5wb3J0ICE9IG51bGxcbiAgICAgID8gdXJsLnBvcnRcbiAgICAgIDogKHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MClcbiAgICBsZXQgb3JpZ2luID0gdXJsLm9yaWdpbiAhPSBudWxsXG4gICAgICA/IHVybC5vcmlnaW5cbiAgICAgIDogYCR7dXJsLnByb3RvY29sfS8vJHt1cmwuaG9zdG5hbWV9OiR7cG9ydH1gXG4gICAgbGV0IHBhdGggPSB1cmwucGF0aCAhPSBudWxsXG4gICAgICA/IHVybC5wYXRoXG4gICAgICA6IGAke3VybC5wYXRobmFtZSB8fCAnJ30ke3VybC5zZWFyY2ggfHwgJyd9YFxuXG4gICAgaWYgKG9yaWdpbi5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBvcmlnaW4gPSBvcmlnaW4uc3Vic3RyaW5nKDAsIG9yaWdpbi5sZW5ndGggLSAxKVxuICAgIH1cblxuICAgIGlmIChwYXRoICYmICFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICB9XG4gICAgLy8gbmV3IFVSTChwYXRoLCBvcmlnaW4pIGlzIHVuc2FmZSB3aGVuIGBwYXRoYCBjb250YWlucyBhbiBhYnNvbHV0ZSBVUkxcbiAgICAvLyBGcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvVVJMOlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhIHJlbGF0aXZlIFVSTCwgc2Vjb25kIHBhcmFtIGlzIHJlcXVpcmVkLCBhbmQgd2lsbCBiZSB1c2VkIGFzIHRoZSBiYXNlIFVSTC5cbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYW4gYWJzb2x1dGUgVVJMLCBhIGdpdmVuIHNlY29uZCBwYXJhbSB3aWxsIGJlIGlnbm9yZWQuXG4gICAgdXJsID0gbmV3IFVSTChvcmlnaW4gKyBwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBwYXJzZU9yaWdpbiAodXJsKSB7XG4gIHVybCA9IHBhcnNlVVJMKHVybClcblxuICBpZiAodXJsLnBhdGhuYW1lICE9PSAnLycgfHwgdXJsLnNlYXJjaCB8fCB1cmwuaGFzaCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBnZXRIb3N0bmFtZSAoaG9zdCkge1xuICBpZiAoaG9zdFswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIHJldHVybiBob3N0LnN1YnN0cmluZygxLCBpZHgpXG4gIH1cblxuICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJzonKVxuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIGhvc3RcblxuICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMCwgaWR4KVxufVxuXG4vLyBJUCBhZGRyZXNzZXMgYXJlIG5vdCB2YWxpZCBzZXJ2ZXIgbmFtZXMgcGVyIFJGQzYwNjZcbi8vID4gQ3VycmVudGx5LCB0aGUgb25seSBzZXJ2ZXIgbmFtZXMgc3VwcG9ydGVkIGFyZSBETlMgaG9zdG5hbWVzXG5mdW5jdGlvbiBnZXRTZXJ2ZXJOYW1lIChob3N0KSB7XG4gIGlmICghaG9zdCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGhvc3QsICdzdHJpbmcnKVxuXG4gIGNvbnN0IHNlcnZlcm5hbWUgPSBnZXRIb3N0bmFtZShob3N0KVxuICBpZiAobmV0LmlzSVAoc2VydmVybmFtZSkpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHJldHVybiBzZXJ2ZXJuYW1lXG59XG5cbmZ1bmN0aW9uIGRlZXBDbG9uZSAob2JqKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJylcbn1cblxuZnVuY3Rpb24gaXNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiAodHlwZW9mIG9ialtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSlcbn1cblxuZnVuY3Rpb24gYm9keUxlbmd0aCAoYm9keSkge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDBcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgIGNvbnN0IHN0YXRlID0gYm9keS5fcmVhZGFibGVTdGF0ZVxuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5vYmplY3RNb2RlID09PSBmYWxzZSAmJiBzdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhdGUubGVuZ3RoKVxuICAgICAgPyBzdGF0ZS5sZW5ndGhcbiAgICAgIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplICE9IG51bGwgPyBib2R5LnNpemUgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0Rlc3Ryb3llZCAoc3RyZWFtKSB7XG4gIHJldHVybiAhc3RyZWFtIHx8ICEhKHN0cmVhbS5kZXN0cm95ZWQgfHwgc3RyZWFtW2tEZXN0cm95ZWRdKVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlQWJvcnRlZCAoc3RyZWFtKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtICYmIHN0cmVhbS5fcmVhZGFibGVTdGF0ZVxuICByZXR1cm4gaXNEZXN0cm95ZWQoc3RyZWFtKSAmJiBzdGF0ZSAmJiAhc3RhdGUuZW5kRW1pdHRlZFxufVxuXG5mdW5jdGlvbiBkZXN0cm95IChzdHJlYW0sIGVycikge1xuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIWlzU3RyZWFtKHN0cmVhbSkgfHwgaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RyZWFtKS5jb25zdHJ1Y3RvciA9PT0gSW5jb21pbmdNZXNzYWdlKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM4NTA1L2ZpbGVzXG4gICAgICBzdHJlYW0uc29ja2V0ID0gbnVsbFxuICAgIH1cblxuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKChzdHJlYW0sIGVycikgPT4ge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgIH0sIHN0cmVhbSwgZXJyKVxuICB9XG5cbiAgaWYgKHN0cmVhbS5kZXN0cm95ZWQgIT09IHRydWUpIHtcbiAgICBzdHJlYW1ba0Rlc3Ryb3llZF0gPSB0cnVlXG4gIH1cbn1cblxuY29uc3QgS0VFUEFMSVZFX1RJTUVPVVRfRVhQUiA9IC90aW1lb3V0PShcXGQrKS9cbmZ1bmN0aW9uIHBhcnNlS2VlcEFsaXZlVGltZW91dCAodmFsKSB7XG4gIGNvbnN0IG0gPSB2YWwudG9TdHJpbmcoKS5tYXRjaChLRUVQQUxJVkVfVElNRU9VVF9FWFBSKVxuICByZXR1cm4gbSA/IHBhcnNlSW50KG1bMV0sIDEwKSAqIDEwMDAgOiBudWxsXG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgaGVhZGVyIG5hbWUgYW5kIHJldHVybnMgaXRzIGxvd2VyY2FzZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSB2YWx1ZSBIZWFkZXIgbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaGVhZGVyTmFtZVRvU3RyaW5nICh2YWx1ZSkge1xuICByZXR1cm4gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbdmFsdWVdIHx8IHZhbHVlLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzIChoZWFkZXJzLCBvYmogPSB7fSkge1xuICAvLyBGb3IgSDIgc3VwcG9ydFxuICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVycykpIHJldHVybiBoZWFkZXJzXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tpXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgICBsZXQgdmFsID0gb2JqW2tleV1cblxuICAgIGlmICghdmFsKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzW2kgKyAxXSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBoZWFkZXJzW2kgKyAxXS5tYXAoeCA9PiB4LnRvU3RyaW5nKCd1dGY4JykpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLnRvU3RyaW5nKCd1dGY4JylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFsID0gW3ZhbF1cbiAgICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICAgIHZhbC5wdXNoKGhlYWRlcnNbaSArIDFdLnRvU3RyaW5nKCd1dGY4JykpXG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ2NTI4XG4gIGlmICgnY29udGVudC1sZW5ndGgnIGluIG9iaiAmJiAnY29udGVudC1kaXNwb3NpdGlvbicgaW4gb2JqKSB7XG4gICAgb2JqWydjb250ZW50LWRpc3Bvc2l0aW9uJ10gPSBCdWZmZXIuZnJvbShvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIHBhcnNlUmF3SGVhZGVycyAoaGVhZGVycykge1xuICBjb25zdCByZXQgPSBbXVxuICBsZXQgaGFzQ29udGVudExlbmd0aCA9IGZhbHNlXG4gIGxldCBjb250ZW50RGlzcG9zaXRpb25JZHggPSAtMVxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdLnRvU3RyaW5nKClcbiAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXS50b1N0cmluZygndXRmOCcpXG5cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgKGtleSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykpIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgICAgaGFzQ29udGVudExlbmd0aCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE5ICYmIChrZXkgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nKSkge1xuICAgICAgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gcmV0LnB1c2goa2V5LCB2YWwpIC0gMVxuICAgIH0gZWxzZSB7XG4gICAgICByZXQucHVzaChrZXksIHZhbClcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKGhhc0NvbnRlbnRMZW5ndGggJiYgY29udGVudERpc3Bvc2l0aW9uSWR4ICE9PSAtMSkge1xuICAgIHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdID0gQnVmZmVyLmZyb20ocmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoYnVmZmVyKSB7XG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9wdWxsLzMxOVxuICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUhhbmRsZXIgKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSkge1xuICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db25uZWN0IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyLm9uQm9keVNlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkJvZHlTZW50IG1ldGhvZCcpXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vblVwZ3JhZGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvblVwZ3JhZGUgbWV0aG9kJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uSGVhZGVycyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSGVhZGVycyBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkRhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkRhdGEgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25Db21wbGV0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29tcGxldGUgbWV0aG9kJylcbiAgICB9XG4gIH1cbn1cblxuLy8gQSBib2R5IGlzIGRpc3R1cmJlZCBpZiBpdCBoYXMgYmVlbiByZWFkIGZyb20gYW5kIGl0IGNhbm5vdFxuLy8gYmUgcmUtdXNlZCB3aXRob3V0IGxvc2luZyBzdGF0ZSBvciBkYXRhLlxuZnVuY3Rpb24gaXNEaXN0dXJiZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Rpc3R1cmJlZFxuICAgICAgPyBzdHJlYW0uaXNEaXN0dXJiZWQoYm9keSkgfHwgYm9keVtrQm9keVVzZWRdIC8vIFRPRE8gKGZpeCk6IFdoeSBpcyBib2R5W2tCb2R5VXNlZF0gbmVlZGVkP1xuICAgICAgOiBib2R5W2tCb2R5VXNlZF0gfHxcbiAgICAgICAgYm9keS5yZWFkYWJsZURpZFJlYWQgfHxcbiAgICAgICAgKGJvZHkuX3JlYWRhYmxlU3RhdGUgJiYgYm9keS5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCkgfHxcbiAgICAgICAgaXNSZWFkYWJsZUFib3J0ZWQoYm9keSlcbiAgKSlcbn1cblxuZnVuY3Rpb24gaXNFcnJvcmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNFcnJvcmVkXG4gICAgICA/IHN0cmVhbS5pc0Vycm9yZWQoYm9keSlcbiAgICAgIDogL3N0YXRlOiAnZXJyb3JlZCcvLnRlc3Qobm9kZVV0aWwuaW5zcGVjdChib2R5KVxuICAgICAgKSkpXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGUgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc1JlYWRhYmxlXG4gICAgICA/IHN0cmVhbS5pc1JlYWRhYmxlKGJvZHkpXG4gICAgICA6IC9zdGF0ZTogJ3JlYWRhYmxlJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gZ2V0U29ja2V0SW5mbyAoc29ja2V0KSB7XG4gIHJldHVybiB7XG4gICAgbG9jYWxBZGRyZXNzOiBzb2NrZXQubG9jYWxBZGRyZXNzLFxuICAgIGxvY2FsUG9ydDogc29ja2V0LmxvY2FsUG9ydCxcbiAgICByZW1vdGVBZGRyZXNzOiBzb2NrZXQucmVtb3RlQWRkcmVzcyxcbiAgICByZW1vdGVQb3J0OiBzb2NrZXQucmVtb3RlUG9ydCxcbiAgICByZW1vdGVGYW1pbHk6IHNvY2tldC5yZW1vdGVGYW1pbHksXG4gICAgdGltZW91dDogc29ja2V0LnRpbWVvdXQsXG4gICAgYnl0ZXNXcml0dGVuOiBzb2NrZXQuYnl0ZXNXcml0dGVuLFxuICAgIGJ5dGVzUmVhZDogc29ja2V0LmJ5dGVzUmVhZFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uICogY29udmVydEl0ZXJhYmxlVG9CdWZmZXIgKGl0ZXJhYmxlKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHtcbiAgICB5aWVsZCBCdWZmZXIuaXNCdWZmZXIoY2h1bmspID8gY2h1bmsgOiBCdWZmZXIuZnJvbShjaHVuaylcbiAgfVxufVxuXG5sZXQgUmVhZGFibGVTdHJlYW1cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRnJvbSAoaXRlcmFibGUpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBpZiAoUmVhZGFibGVTdHJlYW0uZnJvbSkge1xuICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbS5mcm9tKGNvbnZlcnRJdGVyYWJsZVRvQnVmZmVyKGl0ZXJhYmxlKSlcbiAgfVxuXG4gIGxldCBpdGVyYXRvclxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBidWYgPSBCdWZmZXIuaXNCdWZmZXIodmFsdWUpID8gdmFsdWUgOiBCdWZmZXIuZnJvbSh2YWx1ZSlcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5kZXNpcmVkU2l6ZSA+IDBcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgfVxuICAgIH0sXG4gICAgMFxuICApXG59XG5cbi8vIFRoZSBjaHVuayBzaG91bGQgYmUgYSBGb3JtRGF0YSBpbnN0YW5jZSBhbmQgY29udGFpbnNcbi8vIGFsbCB0aGUgcmVxdWlyZWQgbWV0aG9kcy5cbmZ1bmN0aW9uIGlzRm9ybURhdGFMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QuYXBwZW5kID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5kZWxldGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0QWxsID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5oYXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LnNldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnXG4gIClcbn1cblxuZnVuY3Rpb24gdGhyb3dJZkFib3J0ZWQgKHNpZ25hbCkge1xuICBpZiAoIXNpZ25hbCkgeyByZXR1cm4gfVxuICBpZiAodHlwZW9mIHNpZ25hbC50aHJvd0lmQWJvcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpXG4gIH0gZWxzZSB7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAvLyBET01FeGNlcHRpb24gbm90IGF2YWlsYWJsZSA8IHYxNy4wLjBcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcpXG4gICAgICBlcnIubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0TGlzdGVuZXIgKHNpZ25hbCwgbGlzdGVuZXIpIHtcbiAgaWYgKCdhZGRFdmVudExpc3RlbmVyJyBpbiBzaWduYWwpIHtcbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pXG4gICAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICB9XG4gIHNpZ25hbC5hZGRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgcmV0dXJuICgpID0+IHNpZ25hbC5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbn1cblxuY29uc3QgaGFzVG9XZWxsRm9ybWVkID0gISFTdHJpbmcucHJvdG90eXBlLnRvV2VsbEZvcm1lZFxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuZnVuY3Rpb24gdG9VU1ZTdHJpbmcgKHZhbCkge1xuICBpZiAoaGFzVG9XZWxsRm9ybWVkKSB7XG4gICAgcmV0dXJuIGAke3ZhbH1gLnRvV2VsbEZvcm1lZCgpXG4gIH0gZWxzZSBpZiAobm9kZVV0aWwudG9VU1ZTdHJpbmcpIHtcbiAgICByZXR1cm4gbm9kZVV0aWwudG9VU1ZTdHJpbmcodmFsKVxuICB9XG5cbiAgcmV0dXJuIGAke3ZhbH1gXG59XG5cbi8vIFBhcnNlZCBhY2NvcmRpbmdseSB0byBSRkMgOTExMFxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAjZmllbGQuY29udGVudC1yYW5nZVxuZnVuY3Rpb24gcGFyc2VSYW5nZUhlYWRlciAocmFuZ2UpIHtcbiAgaWYgKHJhbmdlID09IG51bGwgfHwgcmFuZ2UgPT09ICcnKSByZXR1cm4geyBzdGFydDogMCwgZW5kOiBudWxsLCBzaXplOiBudWxsIH1cblxuICBjb25zdCBtID0gcmFuZ2UgPyByYW5nZS5tYXRjaCgvXmJ5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKyk/JC8pIDogbnVsbFxuICByZXR1cm4gbVxuICAgID8ge1xuICAgICAgICBzdGFydDogcGFyc2VJbnQobVsxXSksXG4gICAgICAgIGVuZDogbVsyXSA/IHBhcnNlSW50KG1bMl0pIDogbnVsbCxcbiAgICAgICAgc2l6ZTogbVszXSA/IHBhcnNlSW50KG1bM10pIDogbnVsbFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuXG5jb25zdCBrRW51bWVyYWJsZVByb3BlcnR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxua0VudW1lcmFibGVQcm9wZXJ0eS5lbnVtZXJhYmxlID0gdHJ1ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbm9wLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNFcnJvcmVkLFxuICBpc1JlYWRhYmxlLFxuICB0b1VTVlN0cmluZyxcbiAgaXNSZWFkYWJsZUFib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHBhcnNlT3JpZ2luLFxuICBwYXJzZVVSTCxcbiAgZ2V0U2VydmVyTmFtZSxcbiAgaXNTdHJlYW0sXG4gIGlzSXRlcmFibGUsXG4gIGlzQXN5bmNJdGVyYWJsZSxcbiAgaXNEZXN0cm95ZWQsXG4gIGhlYWRlck5hbWVUb1N0cmluZyxcbiAgcGFyc2VSYXdIZWFkZXJzLFxuICBwYXJzZUhlYWRlcnMsXG4gIHBhcnNlS2VlcEFsaXZlVGltZW91dCxcbiAgZGVzdHJveSxcbiAgYm9keUxlbmd0aCxcbiAgZGVlcENsb25lLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQnVmZmVyLFxuICB2YWxpZGF0ZUhhbmRsZXIsXG4gIGdldFNvY2tldEluZm8sXG4gIGlzRm9ybURhdGFMaWtlLFxuICBidWlsZFVSTCxcbiAgdGhyb3dJZkFib3J0ZWQsXG4gIGFkZEFib3J0TGlzdGVuZXIsXG4gIHBhcnNlUmFuZ2VIZWFkZXIsXG4gIG5vZGVNYWpvcixcbiAgbm9kZU1pbm9yLFxuICBub2RlSGFzQXV0b1NlbGVjdEZhbWlseTogbm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDEzKSxcbiAgc2FmZUhUVFBNZXRob2RzOiBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5sZXQgZmFzdE5vdyA9IERhdGUubm93KClcbmxldCBmYXN0Tm93VGltZW91dFxuXG5jb25zdCBmYXN0VGltZXJzID0gW11cblxuZnVuY3Rpb24gb25UaW1lb3V0ICgpIHtcbiAgZmFzdE5vdyA9IERhdGUubm93KClcblxuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcbiAgbGV0IGlkeCA9IDBcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIGNvbnN0IHRpbWVyID0gZmFzdFRpbWVyc1tpZHhdXG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IDApIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gZmFzdE5vdyArIHRpbWVyLmRlbGF5XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGF0ZSA+IDAgJiYgZmFzdE5vdyA+PSB0aW1lci5zdGF0ZSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMVxuICAgICAgdGltZXIuY2FsbGJhY2sodGltZXIub3BhcXVlKVxuICAgIH1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gLTEpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTJcbiAgICAgIGlmIChpZHggIT09IGxlbiAtIDEpIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmFzdFRpbWVycy5wb3AoKVxuICAgICAgfVxuICAgICAgbGVuIC09IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaWR4ICs9IDFcbiAgICB9XG4gIH1cblxuICBpZiAoZmFzdFRpbWVycy5sZW5ndGggPiAwKSB7XG4gICAgcmVmcmVzaFRpbWVvdXQoKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2hUaW1lb3V0ICgpIHtcbiAgaWYgKGZhc3ROb3dUaW1lb3V0ICYmIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2gpIHtcbiAgICBmYXN0Tm93VGltZW91dC5yZWZyZXNoKClcbiAgfSBlbHNlIHtcbiAgICBjbGVhclRpbWVvdXQoZmFzdE5vd1RpbWVvdXQpXG4gICAgZmFzdE5vd1RpbWVvdXQgPSBzZXRUaW1lb3V0KG9uVGltZW91dCwgMWUzKVxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBUaW1lb3V0IHtcbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5XG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWVcblxuICAgIC8vICAtMiBub3QgaW4gdGltZXIgbGlzdFxuICAgIC8vICAtMSBpbiB0aW1lciBsaXN0IGJ1dCBpbmFjdGl2ZVxuICAgIC8vICAgMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWVcbiAgICAvLyA+IDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lIHRvIGV4cGlyZVxuICAgIHRoaXMuc3RhdGUgPSAtMlxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIHJlZnJlc2ggKCkge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAtMikge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgICBpZiAoIWZhc3ROb3dUaW1lb3V0IHx8IGZhc3RUaW1lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gMFxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXMuc3RhdGUgPSAtMVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRUaW1lb3V0IChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHJldHVybiBkZWxheSA8IDFlM1xuICAgICAgPyBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICAgICAgOiBuZXcgVGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgfSxcbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgaWYgKHRpbWVvdXQgaW5zdGFuY2VvZiBUaW1lb3V0KSB7XG4gICAgICB0aW1lb3V0LmNsZWFyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQ29weXJpZ2h0IEJyaWFuIFdoaXRlLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21zY2RleC9zdHJlYW1zZWFyY2hcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuICogZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuICogc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lOR1xuICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuICogSU4gVEhFIFNPRlRXQVJFLlxuICpcbiAqIEJhc2VkIGhlYXZpbHkgb24gdGhlIFN0cmVhbWluZyBCb3llci1Nb29yZS1Ib3JzcG9vbCBDKysgaW1wbGVtZW50YXRpb25cbiAqIGJ5IEhvbmdsaSBMYWkgYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9Gb29CYXJXaWRnZXQvYm95ZXItbW9vcmUtaG9yc3Bvb2xcbiAqL1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuZnVuY3Rpb24gU0JNSCAobmVlZGxlKSB7XG4gIGlmICh0eXBlb2YgbmVlZGxlID09PSAnc3RyaW5nJykge1xuICAgIG5lZWRsZSA9IEJ1ZmZlci5mcm9tKG5lZWRsZSlcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKG5lZWRsZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgbmVlZGxlIGhhcyB0byBiZSBhIFN0cmluZyBvciBhIEJ1ZmZlci4nKVxuICB9XG5cbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuXG4gIGlmIChuZWVkbGVMZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGJlIGFuIGVtcHR5IFN0cmluZy9CdWZmZXIuJylcbiAgfVxuXG4gIGlmIChuZWVkbGVMZW5ndGggPiAyNTYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuZWVkbGUgY2Fubm90IGhhdmUgYSBsZW5ndGggYmlnZ2VyIHRoYW4gMjU2LicpXG4gIH1cblxuICB0aGlzLm1heE1hdGNoZXMgPSBJbmZpbml0eVxuICB0aGlzLm1hdGNoZXMgPSAwXG5cbiAgdGhpcy5fb2NjID0gbmV3IEFycmF5KDI1NilcbiAgICAuZmlsbChuZWVkbGVMZW5ndGgpIC8vIEluaXRpYWxpemUgb2NjdXJyZW5jZSB0YWJsZS5cbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICB0aGlzLl9uZWVkbGUgPSBuZWVkbGVcbiAgdGhpcy5fYnVmcG9zID0gMFxuXG4gIHRoaXMuX2xvb2tiZWhpbmQgPSBCdWZmZXIuYWxsb2MobmVlZGxlTGVuZ3RoKVxuXG4gIC8vIFBvcHVsYXRlIG9jY3VycmVuY2UgdGFibGUgd2l0aCBhbmFseXNpcyBvZiB0aGUgbmVlZGxlLFxuICAvLyBpZ25vcmluZyBsYXN0IGxldHRlci5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZWVkbGVMZW5ndGggLSAxOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICB0aGlzLl9vY2NbbmVlZGxlW2ldXSA9IG5lZWRsZUxlbmd0aCAtIDEgLSBpXG4gIH1cbn1cbmluaGVyaXRzKFNCTUgsIEV2ZW50RW1pdHRlcilcblxuU0JNSC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5tYXRjaGVzID0gMFxuICB0aGlzLl9idWZwb3MgPSAwXG59XG5cblNCTUgucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoY2h1bmssIHBvcykge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCAnYmluYXJ5JylcbiAgfVxuICBjb25zdCBjaGxlbiA9IGNodW5rLmxlbmd0aFxuICB0aGlzLl9idWZwb3MgPSBwb3MgfHwgMFxuICBsZXQgclxuICB3aGlsZSAociAhPT0gY2hsZW4gJiYgdGhpcy5tYXRjaGVzIDwgdGhpcy5tYXhNYXRjaGVzKSB7IHIgPSB0aGlzLl9zYm1oX2ZlZWQoY2h1bmspIH1cbiAgcmV0dXJuIHJcbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfZmVlZCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoXG4gIGNvbnN0IG5lZWRsZSA9IHRoaXMuX25lZWRsZVxuICBjb25zdCBuZWVkbGVMZW5ndGggPSBuZWVkbGUubGVuZ3RoXG4gIGNvbnN0IGxhc3ROZWVkbGVDaGFyID0gbmVlZGxlW25lZWRsZUxlbmd0aCAtIDFdXG5cbiAgLy8gUG9zaXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIGBkYXRhYFxuICAvLyAgICAgICAgICAgcG9zID09IDMgcG9pbnRzIHRvIGRhdGFbM11cbiAgLy8gTmVnYXRpdmU6IHBvaW50cyB0byBhIHBvc2l0aW9uIGluIHRoZSBsb29rYmVoaW5kIGJ1ZmZlclxuICAvLyAgICAgICAgICAgcG9zID09IC0yIHBvaW50cyB0byBsb29rYmVoaW5kW2xvb2tiZWhpbmRfc2l6ZSAtIDJdXG4gIGxldCBwb3MgPSAtdGhpcy5fbG9va2JlaGluZF9zaXplXG4gIGxldCBjaFxuXG4gIGlmIChwb3MgPCAwKSB7XG4gICAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm90IGVtcHR5LiBQZXJmb3JtIEJveWVyLU1vb3JlLUhvcnNwb29sXG4gICAgLy8gc2VhcmNoIHdpdGggY2hhcmFjdGVyIGxvb2t1cCBjb2RlIHRoYXQgY29uc2lkZXJzIGJvdGggdGhlXG4gICAgLy8gbG9va2JlaGluZCBidWZmZXIgYW5kIHRoZSBjdXJyZW50IHJvdW5kJ3MgaGF5c3RhY2sgZGF0YS5cbiAgICAvL1xuICAgIC8vIExvb3AgdW50aWxcbiAgICAvLyAgIHRoZXJlIGlzIGEgbWF0Y2guXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHdlJ3ZlIG1vdmVkIHBhc3QgdGhlIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgdGhlXG4gICAgLy8gICBsb29rYmVoaW5kIGJ1ZmZlci4gSW4gdGhpcyBjYXNlIHdlIHN3aXRjaCB0byB0aGVcbiAgICAvLyAgIG9wdGltaXplZCBsb29wLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB0aGUgY2hhcmFjdGVyIHRvIGxvb2sgYXQgbGllcyBvdXRzaWRlIHRoZSBoYXlzdGFjay5cbiAgICB3aGlsZSAocG9zIDwgMCAmJiBwb3MgPD0gbGVuIC0gbmVlZGxlTGVuZ3RoKSB7XG4gICAgICBjaCA9IHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgbmVlZGxlTGVuZ3RoIC0gMSlcblxuICAgICAgaWYgKFxuICAgICAgICBjaCA9PT0gbGFzdE5lZWRsZUNoYXIgJiZcbiAgICAgICAgdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBuZWVkbGVMZW5ndGggLSAxKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgICAgICAgKyt0aGlzLm1hdGNoZXNcbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSlcblxuICAgICAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgICAgIH1cbiAgICAgIHBvcyArPSB0aGlzLl9vY2NbY2hdXG4gICAgfVxuXG4gICAgLy8gTm8gbWF0Y2guXG5cbiAgICBpZiAocG9zIDwgMCkge1xuICAgICAgLy8gVGhlcmUncyB0b28gZmV3IGRhdGEgZm9yIEJveWVyLU1vb3JlLUhvcnNwb29sIHRvIHJ1bixcbiAgICAgIC8vIHNvIGxldCdzIHVzZSBhIGRpZmZlcmVudCBhbGdvcml0aG0gdG8gc2tpcCBhcyBtdWNoIGFzXG4gICAgICAvLyB3ZSBjYW4uXG4gICAgICAvLyBGb3J3YXJkIHBvcyB1bnRpbFxuICAgICAgLy8gICB0aGUgdHJhaWxpbmcgcGFydCBvZiBsb29rYmVoaW5kICsgZGF0YVxuICAgICAgLy8gICBsb29rcyBsaWtlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5lZWRsZVxuICAgICAgLy8gb3IgdW50aWxcbiAgICAgIC8vICAgcG9zID09IDBcbiAgICAgIHdoaWxlIChwb3MgPCAwICYmICF0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIGxlbiAtIHBvcykpIHsgKytwb3MgfVxuICAgIH1cblxuICAgIGlmIChwb3MgPj0gMCkge1xuICAgICAgLy8gRGlzY2FyZCBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEN1dCBvZmYgcGFydCBvZiB0aGUgbG9va2JlaGluZCBidWZmZXIgdGhhdCBoYXNcbiAgICAgIC8vIGJlZW4gcHJvY2Vzc2VkIGFuZCBhcHBlbmQgdGhlIGVudGlyZSBoYXlzdGFja1xuICAgICAgLy8gaW50byBpdC5cbiAgICAgIGNvbnN0IGJ5dGVzVG9DdXRPZmYgPSB0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NcbiAgICAgIGlmIChieXRlc1RvQ3V0T2ZmID4gMCkge1xuICAgICAgICAvLyBUaGUgY3V0IG9mZiBkYXRhIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAgICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIHRoaXMuX2xvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvb2tiZWhpbmQuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmLFxuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLSBieXRlc1RvQ3V0T2ZmKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC09IGJ5dGVzVG9DdXRPZmZcblxuICAgICAgZGF0YS5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArPSBsZW5cblxuICAgICAgdGhpcy5fYnVmcG9zID0gbGVuXG4gICAgICByZXR1cm4gbGVuXG4gICAgfVxuICB9XG5cbiAgcG9zICs9IChwb3MgPj0gMCkgKiB0aGlzLl9idWZwb3NcblxuICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3cgZW1wdHkuIFdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiB0aGVcbiAgLy8gbmVlZGxlIGlzIGluIHRoZSBoYXlzdGFjay5cbiAgaWYgKGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcykgIT09IC0xKSB7XG4gICAgcG9zID0gZGF0YS5pbmRleE9mKG5lZWRsZSwgcG9zKVxuICAgICsrdGhpcy5tYXRjaGVzXG4gICAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MpIH0gZWxzZSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUpIH1cblxuICAgIHJldHVybiAodGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlTGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIHBvcyA9IGxlbiAtIG5lZWRsZUxlbmd0aFxuICB9XG5cbiAgLy8gVGhlcmUgd2FzIG5vIG1hdGNoLiBJZiB0aGVyZSdzIHRyYWlsaW5nIGhheXN0YWNrIGRhdGEgdGhhdCB3ZSBjYW5ub3RcbiAgLy8gbWF0Y2ggeWV0IHVzaW5nIHRoZSBCb3llci1Nb29yZS1Ib3JzcG9vbCBhbGdvcml0aG0gKGJlY2F1c2UgdGhlIHRyYWlsaW5nXG4gIC8vIGRhdGEgaXMgbGVzcyB0aGFuIHRoZSBuZWVkbGUgc2l6ZSkgdGhlbiBtYXRjaCB1c2luZyBhIG1vZGlmaWVkXG4gIC8vIGFsZ29yaXRobSB0aGF0IHN0YXJ0cyBtYXRjaGluZyBmcm9tIHRoZSBiZWdpbm5pbmcgaW5zdGVhZCBvZiB0aGUgZW5kLlxuICAvLyBXaGF0ZXZlciB0cmFpbGluZyBkYXRhIGlzIGxlZnQgYWZ0ZXIgcnVubmluZyB0aGlzIGFsZ29yaXRobSBpcyBhZGRlZCB0b1xuICAvLyB0aGUgbG9va2JlaGluZCBidWZmZXIuXG4gIHdoaWxlIChcbiAgICBwb3MgPCBsZW4gJiZcbiAgICAoXG4gICAgICBkYXRhW3Bvc10gIT09IG5lZWRsZVswXSB8fFxuICAgICAgKFxuICAgICAgICAoQnVmZmVyLmNvbXBhcmUoXG4gICAgICAgICAgZGF0YS5zdWJhcnJheShwb3MsIHBvcyArIGxlbiAtIHBvcyksXG4gICAgICAgICAgbmVlZGxlLnN1YmFycmF5KDAsIGxlbiAtIHBvcylcbiAgICAgICAgKSAhPT0gMClcbiAgICAgIClcbiAgICApXG4gICkge1xuICAgICsrcG9zXG4gIH1cbiAgaWYgKHBvcyA8IGxlbikge1xuICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCAwLCBwb3MsIHBvcyArIChsZW4gLSBwb3MpKVxuICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IGxlbiAtIHBvc1xuICB9XG5cbiAgLy8gRXZlcnl0aGluZyB1bnRpbCBwb3MgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiBuZWVkbGUgZGF0YS5cbiAgaWYgKHBvcyA+IDApIHsgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zIDwgbGVuID8gcG9zIDogbGVuKSB9XG5cbiAgdGhpcy5fYnVmcG9zID0gbGVuXG4gIHJldHVybiBsZW5cbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbG9va3VwX2NoYXIgPSBmdW5jdGlvbiAoZGF0YSwgcG9zKSB7XG4gIHJldHVybiAocG9zIDwgMClcbiAgICA/IHRoaXMuX2xvb2tiZWhpbmRbdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXVxuICAgIDogZGF0YVtwb3NdXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX21lbWNtcCA9IGZ1bmN0aW9uIChkYXRhLCBwb3MsIGxlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKHRoaXMuX3NibWhfbG9va3VwX2NoYXIoZGF0YSwgcG9zICsgaSkgIT09IHRoaXMuX25lZWRsZVtpXSkgeyByZXR1cm4gZmFsc2UgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU0JNSFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5jb25zdCBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuUmVhZGFibGVcblxuZnVuY3Rpb24gUGFydFN0cmVhbSAob3B0cykge1xuICBSZWFkYWJsZVN0cmVhbS5jYWxsKHRoaXMsIG9wdHMpXG59XG5pbmhlcml0cyhQYXJ0U3RyZWFtLCBSZWFkYWJsZVN0cmVhbSlcblxuUGFydFN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge31cblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0U3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0TGltaXQgKGxpbWl0cywgbmFtZSwgZGVmYXVsdExpbWl0KSB7XG4gIGlmIChcbiAgICAhbGltaXRzIHx8XG4gICAgbGltaXRzW25hbWVdID09PSB1bmRlZmluZWQgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IG51bGxcbiAgKSB7IHJldHVybiBkZWZhdWx0TGltaXQgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgbGltaXRzW25hbWVdICE9PSAnbnVtYmVyJyB8fFxuICAgIGlzTmFOKGxpbWl0c1tuYW1lXSlcbiAgKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbWl0ICcgKyBuYW1lICsgJyBpcyBub3QgYSB2YWxpZCBudW1iZXInKSB9XG5cbiAgcmV0dXJuIGxpbWl0c1tuYW1lXVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCcuLi8uLi9zdHJlYW1zZWFyY2gvc2JtaCcpXG5cbmNvbnN0IEJfRENSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuXFxyXFxuJylcbmNvbnN0IFJFX0NSTEYgPSAvXFxyXFxuL2dcbmNvbnN0IFJFX0hEUiA9IC9eKFteOl0rKTpbIFxcdF0/KFtcXHgwMC1cXHhGRl0rKT8kLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuZnVuY3Rpb24gSGVhZGVyUGFyc2VyIChjZmcpIHtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcylcblxuICBjZmcgPSBjZmcgfHwge31cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5ucmVhZCA9IDBcbiAgdGhpcy5tYXhlZCA9IGZhbHNlXG4gIHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heEhlYWRlclBhaXJzID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyUGFpcnMnLCAyMDAwKVxuICB0aGlzLm1heEhlYWRlclNpemUgPSBnZXRMaW1pdChjZmcsICdtYXhIZWFkZXJTaXplJywgODAgKiAxMDI0KVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuc3MgPSBuZXcgU3RyZWFtU2VhcmNoKEJfRENSTEYpXG4gIHRoaXMuc3Mub24oJ2luZm8nLCBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIGlmIChkYXRhICYmICFzZWxmLm1heGVkKSB7XG4gICAgICBpZiAoc2VsZi5ucmVhZCArIGVuZCAtIHN0YXJ0ID49IHNlbGYubWF4SGVhZGVyU2l6ZSkge1xuICAgICAgICBlbmQgPSBzZWxmLm1heEhlYWRlclNpemUgLSBzZWxmLm5yZWFkICsgc3RhcnRcbiAgICAgICAgc2VsZi5ucmVhZCA9IHNlbGYubWF4SGVhZGVyU2l6ZVxuICAgICAgICBzZWxmLm1heGVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHsgc2VsZi5ucmVhZCArPSAoZW5kIC0gc3RhcnQpIH1cblxuICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5Jywgc3RhcnQsIGVuZClcbiAgICB9XG4gICAgaWYgKGlzTWF0Y2gpIHsgc2VsZi5fZmluaXNoKCkgfVxuICB9KVxufVxuaW5oZXJpdHMoSGVhZGVyUGFyc2VyLCBFdmVudEVtaXR0ZXIpXG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnNzLnB1c2goZGF0YSlcbiAgaWYgKHRoaXMuZmluaXNoZWQpIHsgcmV0dXJuIHIgfVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuc3MucmVzZXQoKVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJ1ZmZlcikgeyB0aGlzLl9wYXJzZUhlYWRlcigpIH1cbiAgdGhpcy5zcy5tYXRjaGVzID0gdGhpcy5zcy5tYXhNYXRjaGVzXG4gIGNvbnN0IGhlYWRlciA9IHRoaXMuaGVhZGVyXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmZpbmlzaGVkID0gdHJ1ZVxuICB0aGlzLm5yZWFkID0gdGhpcy5ucGFpcnMgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fcGFyc2VIZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGxpbmVzID0gdGhpcy5idWZmZXIuc3BsaXQoUkVfQ1JMRilcbiAgY29uc3QgbGVuID0gbGluZXMubGVuZ3RoXG4gIGxldCBtLCBoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmIChsaW5lc1tpXS5sZW5ndGggPT09IDApIHsgY29udGludWUgfVxuICAgIGlmIChsaW5lc1tpXVswXSA9PT0gJ1xcdCcgfHwgbGluZXNbaV1bMF0gPT09ICcgJykge1xuICAgICAgLy8gZm9sZGVkIGhlYWRlciBjb250ZW50XG4gICAgICAvLyBSRkMyODIyIHNheXMgdG8ganVzdCByZW1vdmUgdGhlIENSTEYgYW5kIG5vdCB0aGUgd2hpdGVzcGFjZSBmb2xsb3dpbmdcbiAgICAgIC8vIGl0LCBzbyB3ZSBmb2xsb3cgdGhlIFJGQyBhbmQgaW5jbHVkZSB0aGUgbGVhZGluZyB3aGl0ZXNwYWNlIC4uLlxuICAgICAgaWYgKGgpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJbaF1bdGhpcy5oZWFkZXJbaF0ubGVuZ3RoIC0gMV0gKz0gbGluZXNbaV1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwb3NDb2xvbiA9IGxpbmVzW2ldLmluZGV4T2YoJzonKVxuICAgIGlmIChcbiAgICAgIHBvc0NvbG9uID09PSAtMSB8fFxuICAgICAgcG9zQ29sb24gPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBtID0gUkVfSERSLmV4ZWMobGluZXNbaV0pXG4gICAgaCA9IG1bMV0udG9Mb3dlckNhc2UoKVxuICAgIHRoaXMuaGVhZGVyW2hdID0gdGhpcy5oZWFkZXJbaF0gfHwgW11cbiAgICB0aGlzLmhlYWRlcltoXS5wdXNoKChtWzJdIHx8ICcnKSlcbiAgICBpZiAoKyt0aGlzLm5wYWlycyA9PT0gdGhpcy5tYXhIZWFkZXJQYWlycykgeyBicmVhayB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIZWFkZXJQYXJzZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgV3JpdGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLldyaXRhYmxlXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmNvbnN0IFN0cmVhbVNlYXJjaCA9IHJlcXVpcmUoJy4uLy4uL3N0cmVhbXNlYXJjaC9zYm1oJylcblxuY29uc3QgUGFydFN0cmVhbSA9IHJlcXVpcmUoJy4vUGFydFN0cmVhbScpXG5jb25zdCBIZWFkZXJQYXJzZXIgPSByZXF1aXJlKCcuL0hlYWRlclBhcnNlcicpXG5cbmNvbnN0IERBU0ggPSA0NVxuY29uc3QgQl9PTkVEQVNIID0gQnVmZmVyLmZyb20oJy0nKVxuY29uc3QgQl9DUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcbicpXG5jb25zdCBFTVBUWV9GTiA9IGZ1bmN0aW9uICgpIHt9XG5cbmZ1bmN0aW9uIERpY2VyIChjZmcpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIERpY2VyKSkgeyByZXR1cm4gbmV3IERpY2VyKGNmZykgfVxuICBXcml0YWJsZVN0cmVhbS5jYWxsKHRoaXMsIGNmZylcblxuICBpZiAoIWNmZyB8fCAoIWNmZy5oZWFkZXJGaXJzdCAmJiB0eXBlb2YgY2ZnLmJvdW5kYXJ5ICE9PSAnc3RyaW5nJykpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignQm91bmRhcnkgcmVxdWlyZWQnKSB9XG5cbiAgaWYgKHR5cGVvZiBjZmcuYm91bmRhcnkgPT09ICdzdHJpbmcnKSB7IHRoaXMuc2V0Qm91bmRhcnkoY2ZnLmJvdW5kYXJ5KSB9IGVsc2UgeyB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkIH1cblxuICB0aGlzLl9oZWFkZXJGaXJzdCA9IGNmZy5oZWFkZXJGaXJzdFxuXG4gIHRoaXMuX2Rhc2hlcyA9IDBcbiAgdGhpcy5fcGFydHMgPSAwXG4gIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gIHRoaXMuX2lzUHJlYW1ibGUgPSB0cnVlXG4gIHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2VcbiAgdGhpcy5fZmlyc3RXcml0ZSA9IHRydWVcbiAgdGhpcy5faW5IZWFkZXIgPSB0cnVlXG4gIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gIHRoaXMuX3BhcnRPcHRzID0geyBoaWdoV2F0ZXJNYXJrOiBjZmcucGFydEh3bSB9XG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcblxuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLl9ocGFyc2VyID0gbmV3IEhlYWRlclBhcnNlcihjZmcpXG4gIHRoaXMuX2hwYXJzZXIub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICBzZWxmLl9pbkhlYWRlciA9IGZhbHNlXG4gICAgc2VsZi5fcGFydC5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG4gIH0pXG59XG5pbmhlcml0cyhEaWNlciwgV3JpdGFibGVTdHJlYW0pXG5cbkRpY2VyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2KSB7XG4gIGlmIChldiA9PT0gJ2ZpbmlzaCcgJiYgIXRoaXMuX3JlYWxGaW5pc2gpIHtcbiAgICBpZiAoIXRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpc1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kIG9mIG11bHRpcGFydCBkYXRhJykpXG4gICAgICAgIGlmIChzZWxmLl9wYXJ0ICYmICFzZWxmLl9pZ25vcmVEYXRhKSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IChzZWxmLl9pc1ByZWFtYmxlID8gJ1ByZWFtYmxlJyA6ICdQYXJ0JylcbiAgICAgICAgICBzZWxmLl9wYXJ0LmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKHR5cGUgKyAnIHRlcm1pbmF0ZWQgZWFybHkgZHVlIHRvIHVuZXhwZWN0ZWQgZW5kIG9mIG11bHRpcGFydCBkYXRhJykpXG4gICAgICAgICAgc2VsZi5fcGFydC5wdXNoKG51bGwpXG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0gZWxzZSB7IFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYikge1xuICAvLyBpZ25vcmUgdW5leHBlY3RlZCBkYXRhIChlLmcuIGV4dHJhIHRyYWlsZXIgZGF0YSBhZnRlciBmaW5pc2hlZClcbiAgaWYgKCF0aGlzLl9ocGFyc2VyICYmICF0aGlzLl9icGFyc2VyKSB7IHJldHVybiBjYigpIH1cblxuICBpZiAodGhpcy5faGVhZGVyRmlyc3QgJiYgdGhpcy5faXNQcmVhbWJsZSkge1xuICAgIGlmICghdGhpcy5fcGFydCkge1xuICAgICAgdGhpcy5fcGFydCA9IG5ldyBQYXJ0U3RyZWFtKHRoaXMuX3BhcnRPcHRzKVxuICAgICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudCgncHJlYW1ibGUnKSAhPT0gMCkgeyB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydCkgfSBlbHNlIHsgdGhpcy5faWdub3JlKCkgfVxuICAgIH1cbiAgICBjb25zdCByID0gdGhpcy5faHBhcnNlci5wdXNoKGRhdGEpXG4gICAgaWYgKCF0aGlzLl9pbkhlYWRlciAmJiByICE9PSB1bmRlZmluZWQgJiYgciA8IGRhdGEubGVuZ3RoKSB7IGRhdGEgPSBkYXRhLnNsaWNlKHIpIH0gZWxzZSB7IHJldHVybiBjYigpIH1cbiAgfVxuXG4gIC8vIGFsbG93cyBmb3IgXCJlYXNpZXJcIiB0ZXN0aW5nXG4gIGlmICh0aGlzLl9maXJzdFdyaXRlKSB7XG4gICAgdGhpcy5fYnBhcnNlci5wdXNoKEJfQ1JMRilcbiAgICB0aGlzLl9maXJzdFdyaXRlID0gZmFsc2VcbiAgfVxuXG4gIHRoaXMuX2JwYXJzZXIucHVzaChkYXRhKVxuXG4gIGlmICh0aGlzLl9wYXVzZSkgeyB0aGlzLl9jYiA9IGNiIH0gZWxzZSB7IGNiKCkgfVxufVxuXG5EaWNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgdGhpcy5fYnBhcnNlciA9IHVuZGVmaW5lZFxuICB0aGlzLl9ocGFyc2VyID0gdW5kZWZpbmVkXG59XG5cbkRpY2VyLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uIChib3VuZGFyeSkge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLl9icGFyc2VyID0gbmV3IFN0cmVhbVNlYXJjaCgnXFxyXFxuLS0nICsgYm91bmRhcnkpXG4gIHRoaXMuX2JwYXJzZXIub24oJ2luZm8nLCBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHNlbGYuX29uaW5mbyhpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKVxuICB9KVxufVxuXG5EaWNlci5wcm90b3R5cGUuX2lnbm9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuX3BhcnQgJiYgIXRoaXMuX2lnbm9yZURhdGEpIHtcbiAgICB0aGlzLl9pZ25vcmVEYXRhID0gdHJ1ZVxuICAgIHRoaXMuX3BhcnQub24oJ2Vycm9yJywgRU1QVFlfRk4pXG4gICAgLy8gd2UgbXVzdCBwZXJmb3JtIHNvbWUga2luZCBvZiByZWFkIG9uIHRoZSBzdHJlYW0gZXZlbiB0aG91Z2ggd2UgYXJlXG4gICAgLy8gaWdub3JpbmcgdGhlIGRhdGEsIG90aGVyd2lzZSBub2RlJ3MgUmVhZGFibGUgc3RyZWFtIHdpbGwgbm90IGVtaXQgJ2VuZCdcbiAgICAvLyBhZnRlciBwdXNoaW5nIG51bGwgdG8gdGhlIHN0cmVhbVxuICAgIHRoaXMuX3BhcnQucmVzdW1lKClcbiAgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX29uaW5mbyA9IGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gIGxldCBidWY7IGNvbnN0IHNlbGYgPSB0aGlzOyBsZXQgaSA9IDA7IGxldCByOyBsZXQgc2hvdWxkV3JpdGVNb3JlID0gdHJ1ZVxuXG4gIGlmICghdGhpcy5fcGFydCAmJiB0aGlzLl9qdXN0TWF0Y2hlZCAmJiBkYXRhKSB7XG4gICAgd2hpbGUgKHRoaXMuX2Rhc2hlcyA8IDIgJiYgKHN0YXJ0ICsgaSkgPCBlbmQpIHtcbiAgICAgIGlmIChkYXRhW3N0YXJ0ICsgaV0gPT09IERBU0gpIHtcbiAgICAgICAgKytpXG4gICAgICAgICsrdGhpcy5fZGFzaGVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fZGFzaGVzKSB7IGJ1ZiA9IEJfT05FREFTSCB9XG4gICAgICAgIHRoaXMuX2Rhc2hlcyA9IDBcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Rhc2hlcyA9PT0gMikge1xuICAgICAgaWYgKChzdGFydCArIGkpIDwgZW5kICYmIHRoaXMubGlzdGVuZXJDb3VudCgndHJhaWxlcicpICE9PSAwKSB7IHRoaXMuZW1pdCgndHJhaWxlcicsIGRhdGEuc2xpY2Uoc3RhcnQgKyBpLCBlbmQpKSB9XG4gICAgICB0aGlzLnJlc2V0KClcbiAgICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICAgICAgLy8gbm8gbW9yZSBwYXJ0cyB3aWxsIGJlIGFkZGVkXG4gICAgICBpZiAoc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuX2Rhc2hlcykgeyByZXR1cm4gfVxuICB9XG4gIGlmICh0aGlzLl9qdXN0TWF0Y2hlZCkgeyB0aGlzLl9qdXN0TWF0Y2hlZCA9IGZhbHNlIH1cbiAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgdGhpcy5fcGFydCA9IG5ldyBQYXJ0U3RyZWFtKHRoaXMuX3BhcnRPcHRzKVxuICAgIHRoaXMuX3BhcnQuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMubGlzdGVuZXJDb3VudCgncHJlYW1ibGUnKSAhPT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdwcmVhbWJsZScsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9pc1ByZWFtYmxlICE9PSB0cnVlICYmIHRoaXMubGlzdGVuZXJDb3VudCgncGFydCcpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3BhcnQnLCB0aGlzLl9wYXJ0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pZ25vcmUoKVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2lzUHJlYW1ibGUpIHsgdGhpcy5faW5IZWFkZXIgPSB0cnVlIH1cbiAgfVxuICBpZiAoZGF0YSAmJiBzdGFydCA8IGVuZCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlIHx8ICF0aGlzLl9pbkhlYWRlcikge1xuICAgICAgaWYgKGJ1ZikgeyBzaG91bGRXcml0ZU1vcmUgPSB0aGlzLl9wYXJ0LnB1c2goYnVmKSB9XG4gICAgICBzaG91bGRXcml0ZU1vcmUgPSB0aGlzLl9wYXJ0LnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghc2hvdWxkV3JpdGVNb3JlKSB7IHRoaXMuX3BhdXNlID0gdHJ1ZSB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5faXNQcmVhbWJsZSAmJiB0aGlzLl9pbkhlYWRlcikge1xuICAgICAgaWYgKGJ1ZikgeyB0aGlzLl9ocGFyc2VyLnB1c2goYnVmKSB9XG4gICAgICByID0gdGhpcy5faHBhcnNlci5wdXNoKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gICAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZW5kKSB7IHRoaXMuX29uaW5mbyhmYWxzZSwgZGF0YSwgc3RhcnQgKyByLCBlbmQpIH1cbiAgICB9XG4gIH1cbiAgaWYgKGlzTWF0Y2gpIHtcbiAgICB0aGlzLl9ocGFyc2VyLnJlc2V0KClcbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pc1ByZWFtYmxlID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydCAhPT0gZW5kKSB7XG4gICAgICAgICsrdGhpcy5fcGFydHNcbiAgICAgICAgdGhpcy5fcGFydC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICgtLXNlbGYuX3BhcnRzID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5fZmluaXNoZWQpIHtcbiAgICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYuX3VucGF1c2UoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fcGFydC5wdXNoKG51bGwpXG4gICAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuX2lnbm9yZURhdGEgPSBmYWxzZVxuICAgIHRoaXMuX2p1c3RNYXRjaGVkID0gdHJ1ZVxuICAgIHRoaXMuX2Rhc2hlcyA9IDBcbiAgfVxufVxuXG5EaWNlci5wcm90b3R5cGUuX3VucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5fcGF1c2UpIHsgcmV0dXJuIH1cblxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIGlmICh0aGlzLl9jYikge1xuICAgIGNvbnN0IGNiID0gdGhpcy5fY2JcbiAgICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICAgIGNiKClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpY2VyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIE5vZGUgaGFzIGFsd2F5cyB1dGYtOFxuY29uc3QgdXRmOERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JylcbmNvbnN0IHRleHREZWNvZGVycyA9IG5ldyBNYXAoW1xuICBbJ3V0Zi04JywgdXRmOERlY29kZXJdLFxuICBbJ3V0ZjgnLCB1dGY4RGVjb2Rlcl1cbl0pXG5cbmZ1bmN0aW9uIGdldERlY29kZXIgKGNoYXJzZXQpIHtcbiAgbGV0IGxjXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChjaGFyc2V0KSB7XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjhcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdhc2NpaSc6IC8vIFRPRE86IE1ha2UgdGhlc2UgYSBzZXBhcmF0ZSwgc3RyaWN0IGRlY29kZXI/XG4gICAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5MSc6XG4gICAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgICAgY2FzZSAnY3AxMjUyJzpcbiAgICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmxhdGluMVxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLnV0ZjE2bGVcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5iYXNlNjRcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGMgPSB0cnVlXG4gICAgICAgICAgY2hhcnNldCA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLm90aGVyLmJpbmQoY2hhcnNldClcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVjb2RlcnMgPSB7XG4gIHV0Zjg6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudXRmOFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGxhdGluMTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEubGF0aW4xU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgdXRmMTZsZTogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51Y3MyU2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgYmFzZTY0OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmJhc2U2NFNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIG90aGVyOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuXG4gICAgaWYgKHRleHREZWNvZGVycy5oYXModGhpcy50b1N0cmluZygpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRleHREZWNvZGVycy5nZXQodGhpcykuZGVjb2RlKGRhdGEpXG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVUZXh0ICh0ZXh0LCBzb3VyY2VFbmNvZGluZywgZGVzdEVuY29kaW5nKSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgcmV0dXJuIGdldERlY29kZXIoZGVzdEVuY29kaW5nKSh0ZXh0LCBzb3VyY2VFbmNvZGluZylcbiAgfVxuICByZXR1cm4gdGV4dFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlY29kZVRleHRcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBvYmplY3QtcHJvcGVydHktbmV3bGluZSAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuL2RlY29kZVRleHQnKVxuXG5jb25zdCBSRV9FTkNPREVEID0gLyVbYS1mQS1GMC05XVthLWZBLUYwLTldL2dcblxuY29uc3QgRW5jb2RlZExvb2t1cCA9IHtcbiAgJyUwMCc6ICdcXHgwMCcsICclMDEnOiAnXFx4MDEnLCAnJTAyJzogJ1xceDAyJywgJyUwMyc6ICdcXHgwMycsICclMDQnOiAnXFx4MDQnLFxuICAnJTA1JzogJ1xceDA1JywgJyUwNic6ICdcXHgwNicsICclMDcnOiAnXFx4MDcnLCAnJTA4JzogJ1xceDA4JywgJyUwOSc6ICdcXHgwOScsXG4gICclMGEnOiAnXFx4MGEnLCAnJTBBJzogJ1xceDBhJywgJyUwYic6ICdcXHgwYicsICclMEInOiAnXFx4MGInLCAnJTBjJzogJ1xceDBjJyxcbiAgJyUwQyc6ICdcXHgwYycsICclMGQnOiAnXFx4MGQnLCAnJTBEJzogJ1xceDBkJywgJyUwZSc6ICdcXHgwZScsICclMEUnOiAnXFx4MGUnLFxuICAnJTBmJzogJ1xceDBmJywgJyUwRic6ICdcXHgwZicsICclMTAnOiAnXFx4MTAnLCAnJTExJzogJ1xceDExJywgJyUxMic6ICdcXHgxMicsXG4gICclMTMnOiAnXFx4MTMnLCAnJTE0JzogJ1xceDE0JywgJyUxNSc6ICdcXHgxNScsICclMTYnOiAnXFx4MTYnLCAnJTE3JzogJ1xceDE3JyxcbiAgJyUxOCc6ICdcXHgxOCcsICclMTknOiAnXFx4MTknLCAnJTFhJzogJ1xceDFhJywgJyUxQSc6ICdcXHgxYScsICclMWInOiAnXFx4MWInLFxuICAnJTFCJzogJ1xceDFiJywgJyUxYyc6ICdcXHgxYycsICclMUMnOiAnXFx4MWMnLCAnJTFkJzogJ1xceDFkJywgJyUxRCc6ICdcXHgxZCcsXG4gICclMWUnOiAnXFx4MWUnLCAnJTFFJzogJ1xceDFlJywgJyUxZic6ICdcXHgxZicsICclMUYnOiAnXFx4MWYnLCAnJTIwJzogJ1xceDIwJyxcbiAgJyUyMSc6ICdcXHgyMScsICclMjInOiAnXFx4MjInLCAnJTIzJzogJ1xceDIzJywgJyUyNCc6ICdcXHgyNCcsICclMjUnOiAnXFx4MjUnLFxuICAnJTI2JzogJ1xceDI2JywgJyUyNyc6ICdcXHgyNycsICclMjgnOiAnXFx4MjgnLCAnJTI5JzogJ1xceDI5JywgJyUyYSc6ICdcXHgyYScsXG4gICclMkEnOiAnXFx4MmEnLCAnJTJiJzogJ1xceDJiJywgJyUyQic6ICdcXHgyYicsICclMmMnOiAnXFx4MmMnLCAnJTJDJzogJ1xceDJjJyxcbiAgJyUyZCc6ICdcXHgyZCcsICclMkQnOiAnXFx4MmQnLCAnJTJlJzogJ1xceDJlJywgJyUyRSc6ICdcXHgyZScsICclMmYnOiAnXFx4MmYnLFxuICAnJTJGJzogJ1xceDJmJywgJyUzMCc6ICdcXHgzMCcsICclMzEnOiAnXFx4MzEnLCAnJTMyJzogJ1xceDMyJywgJyUzMyc6ICdcXHgzMycsXG4gICclMzQnOiAnXFx4MzQnLCAnJTM1JzogJ1xceDM1JywgJyUzNic6ICdcXHgzNicsICclMzcnOiAnXFx4MzcnLCAnJTM4JzogJ1xceDM4JyxcbiAgJyUzOSc6ICdcXHgzOScsICclM2EnOiAnXFx4M2EnLCAnJTNBJzogJ1xceDNhJywgJyUzYic6ICdcXHgzYicsICclM0InOiAnXFx4M2InLFxuICAnJTNjJzogJ1xceDNjJywgJyUzQyc6ICdcXHgzYycsICclM2QnOiAnXFx4M2QnLCAnJTNEJzogJ1xceDNkJywgJyUzZSc6ICdcXHgzZScsXG4gICclM0UnOiAnXFx4M2UnLCAnJTNmJzogJ1xceDNmJywgJyUzRic6ICdcXHgzZicsICclNDAnOiAnXFx4NDAnLCAnJTQxJzogJ1xceDQxJyxcbiAgJyU0Mic6ICdcXHg0MicsICclNDMnOiAnXFx4NDMnLCAnJTQ0JzogJ1xceDQ0JywgJyU0NSc6ICdcXHg0NScsICclNDYnOiAnXFx4NDYnLFxuICAnJTQ3JzogJ1xceDQ3JywgJyU0OCc6ICdcXHg0OCcsICclNDknOiAnXFx4NDknLCAnJTRhJzogJ1xceDRhJywgJyU0QSc6ICdcXHg0YScsXG4gICclNGInOiAnXFx4NGInLCAnJTRCJzogJ1xceDRiJywgJyU0Yyc6ICdcXHg0YycsICclNEMnOiAnXFx4NGMnLCAnJTRkJzogJ1xceDRkJyxcbiAgJyU0RCc6ICdcXHg0ZCcsICclNGUnOiAnXFx4NGUnLCAnJTRFJzogJ1xceDRlJywgJyU0Zic6ICdcXHg0ZicsICclNEYnOiAnXFx4NGYnLFxuICAnJTUwJzogJ1xceDUwJywgJyU1MSc6ICdcXHg1MScsICclNTInOiAnXFx4NTInLCAnJTUzJzogJ1xceDUzJywgJyU1NCc6ICdcXHg1NCcsXG4gICclNTUnOiAnXFx4NTUnLCAnJTU2JzogJ1xceDU2JywgJyU1Nyc6ICdcXHg1NycsICclNTgnOiAnXFx4NTgnLCAnJTU5JzogJ1xceDU5JyxcbiAgJyU1YSc6ICdcXHg1YScsICclNUEnOiAnXFx4NWEnLCAnJTViJzogJ1xceDViJywgJyU1Qic6ICdcXHg1YicsICclNWMnOiAnXFx4NWMnLFxuICAnJTVDJzogJ1xceDVjJywgJyU1ZCc6ICdcXHg1ZCcsICclNUQnOiAnXFx4NWQnLCAnJTVlJzogJ1xceDVlJywgJyU1RSc6ICdcXHg1ZScsXG4gICclNWYnOiAnXFx4NWYnLCAnJTVGJzogJ1xceDVmJywgJyU2MCc6ICdcXHg2MCcsICclNjEnOiAnXFx4NjEnLCAnJTYyJzogJ1xceDYyJyxcbiAgJyU2Myc6ICdcXHg2MycsICclNjQnOiAnXFx4NjQnLCAnJTY1JzogJ1xceDY1JywgJyU2Nic6ICdcXHg2NicsICclNjcnOiAnXFx4NjcnLFxuICAnJTY4JzogJ1xceDY4JywgJyU2OSc6ICdcXHg2OScsICclNmEnOiAnXFx4NmEnLCAnJTZBJzogJ1xceDZhJywgJyU2Yic6ICdcXHg2YicsXG4gICclNkInOiAnXFx4NmInLCAnJTZjJzogJ1xceDZjJywgJyU2Qyc6ICdcXHg2YycsICclNmQnOiAnXFx4NmQnLCAnJTZEJzogJ1xceDZkJyxcbiAgJyU2ZSc6ICdcXHg2ZScsICclNkUnOiAnXFx4NmUnLCAnJTZmJzogJ1xceDZmJywgJyU2Ric6ICdcXHg2ZicsICclNzAnOiAnXFx4NzAnLFxuICAnJTcxJzogJ1xceDcxJywgJyU3Mic6ICdcXHg3MicsICclNzMnOiAnXFx4NzMnLCAnJTc0JzogJ1xceDc0JywgJyU3NSc6ICdcXHg3NScsXG4gICclNzYnOiAnXFx4NzYnLCAnJTc3JzogJ1xceDc3JywgJyU3OCc6ICdcXHg3OCcsICclNzknOiAnXFx4NzknLCAnJTdhJzogJ1xceDdhJyxcbiAgJyU3QSc6ICdcXHg3YScsICclN2InOiAnXFx4N2InLCAnJTdCJzogJ1xceDdiJywgJyU3Yyc6ICdcXHg3YycsICclN0MnOiAnXFx4N2MnLFxuICAnJTdkJzogJ1xceDdkJywgJyU3RCc6ICdcXHg3ZCcsICclN2UnOiAnXFx4N2UnLCAnJTdFJzogJ1xceDdlJywgJyU3Zic6ICdcXHg3ZicsXG4gICclN0YnOiAnXFx4N2YnLCAnJTgwJzogJ1xceDgwJywgJyU4MSc6ICdcXHg4MScsICclODInOiAnXFx4ODInLCAnJTgzJzogJ1xceDgzJyxcbiAgJyU4NCc6ICdcXHg4NCcsICclODUnOiAnXFx4ODUnLCAnJTg2JzogJ1xceDg2JywgJyU4Nyc6ICdcXHg4NycsICclODgnOiAnXFx4ODgnLFxuICAnJTg5JzogJ1xceDg5JywgJyU4YSc6ICdcXHg4YScsICclOEEnOiAnXFx4OGEnLCAnJThiJzogJ1xceDhiJywgJyU4Qic6ICdcXHg4YicsXG4gICclOGMnOiAnXFx4OGMnLCAnJThDJzogJ1xceDhjJywgJyU4ZCc6ICdcXHg4ZCcsICclOEQnOiAnXFx4OGQnLCAnJThlJzogJ1xceDhlJyxcbiAgJyU4RSc6ICdcXHg4ZScsICclOGYnOiAnXFx4OGYnLCAnJThGJzogJ1xceDhmJywgJyU5MCc6ICdcXHg5MCcsICclOTEnOiAnXFx4OTEnLFxuICAnJTkyJzogJ1xceDkyJywgJyU5Myc6ICdcXHg5MycsICclOTQnOiAnXFx4OTQnLCAnJTk1JzogJ1xceDk1JywgJyU5Nic6ICdcXHg5NicsXG4gICclOTcnOiAnXFx4OTcnLCAnJTk4JzogJ1xceDk4JywgJyU5OSc6ICdcXHg5OScsICclOWEnOiAnXFx4OWEnLCAnJTlBJzogJ1xceDlhJyxcbiAgJyU5Yic6ICdcXHg5YicsICclOUInOiAnXFx4OWInLCAnJTljJzogJ1xceDljJywgJyU5Qyc6ICdcXHg5YycsICclOWQnOiAnXFx4OWQnLFxuICAnJTlEJzogJ1xceDlkJywgJyU5ZSc6ICdcXHg5ZScsICclOUUnOiAnXFx4OWUnLCAnJTlmJzogJ1xceDlmJywgJyU5Ric6ICdcXHg5ZicsXG4gICclYTAnOiAnXFx4YTAnLCAnJUEwJzogJ1xceGEwJywgJyVhMSc6ICdcXHhhMScsICclQTEnOiAnXFx4YTEnLCAnJWEyJzogJ1xceGEyJyxcbiAgJyVBMic6ICdcXHhhMicsICclYTMnOiAnXFx4YTMnLCAnJUEzJzogJ1xceGEzJywgJyVhNCc6ICdcXHhhNCcsICclQTQnOiAnXFx4YTQnLFxuICAnJWE1JzogJ1xceGE1JywgJyVBNSc6ICdcXHhhNScsICclYTYnOiAnXFx4YTYnLCAnJUE2JzogJ1xceGE2JywgJyVhNyc6ICdcXHhhNycsXG4gICclQTcnOiAnXFx4YTcnLCAnJWE4JzogJ1xceGE4JywgJyVBOCc6ICdcXHhhOCcsICclYTknOiAnXFx4YTknLCAnJUE5JzogJ1xceGE5JyxcbiAgJyVhYSc6ICdcXHhhYScsICclQWEnOiAnXFx4YWEnLCAnJWFBJzogJ1xceGFhJywgJyVBQSc6ICdcXHhhYScsICclYWInOiAnXFx4YWInLFxuICAnJUFiJzogJ1xceGFiJywgJyVhQic6ICdcXHhhYicsICclQUInOiAnXFx4YWInLCAnJWFjJzogJ1xceGFjJywgJyVBYyc6ICdcXHhhYycsXG4gICclYUMnOiAnXFx4YWMnLCAnJUFDJzogJ1xceGFjJywgJyVhZCc6ICdcXHhhZCcsICclQWQnOiAnXFx4YWQnLCAnJWFEJzogJ1xceGFkJyxcbiAgJyVBRCc6ICdcXHhhZCcsICclYWUnOiAnXFx4YWUnLCAnJUFlJzogJ1xceGFlJywgJyVhRSc6ICdcXHhhZScsICclQUUnOiAnXFx4YWUnLFxuICAnJWFmJzogJ1xceGFmJywgJyVBZic6ICdcXHhhZicsICclYUYnOiAnXFx4YWYnLCAnJUFGJzogJ1xceGFmJywgJyViMCc6ICdcXHhiMCcsXG4gICclQjAnOiAnXFx4YjAnLCAnJWIxJzogJ1xceGIxJywgJyVCMSc6ICdcXHhiMScsICclYjInOiAnXFx4YjInLCAnJUIyJzogJ1xceGIyJyxcbiAgJyViMyc6ICdcXHhiMycsICclQjMnOiAnXFx4YjMnLCAnJWI0JzogJ1xceGI0JywgJyVCNCc6ICdcXHhiNCcsICclYjUnOiAnXFx4YjUnLFxuICAnJUI1JzogJ1xceGI1JywgJyViNic6ICdcXHhiNicsICclQjYnOiAnXFx4YjYnLCAnJWI3JzogJ1xceGI3JywgJyVCNyc6ICdcXHhiNycsXG4gICclYjgnOiAnXFx4YjgnLCAnJUI4JzogJ1xceGI4JywgJyViOSc6ICdcXHhiOScsICclQjknOiAnXFx4YjknLCAnJWJhJzogJ1xceGJhJyxcbiAgJyVCYSc6ICdcXHhiYScsICclYkEnOiAnXFx4YmEnLCAnJUJBJzogJ1xceGJhJywgJyViYic6ICdcXHhiYicsICclQmInOiAnXFx4YmInLFxuICAnJWJCJzogJ1xceGJiJywgJyVCQic6ICdcXHhiYicsICclYmMnOiAnXFx4YmMnLCAnJUJjJzogJ1xceGJjJywgJyViQyc6ICdcXHhiYycsXG4gICclQkMnOiAnXFx4YmMnLCAnJWJkJzogJ1xceGJkJywgJyVCZCc6ICdcXHhiZCcsICclYkQnOiAnXFx4YmQnLCAnJUJEJzogJ1xceGJkJyxcbiAgJyViZSc6ICdcXHhiZScsICclQmUnOiAnXFx4YmUnLCAnJWJFJzogJ1xceGJlJywgJyVCRSc6ICdcXHhiZScsICclYmYnOiAnXFx4YmYnLFxuICAnJUJmJzogJ1xceGJmJywgJyViRic6ICdcXHhiZicsICclQkYnOiAnXFx4YmYnLCAnJWMwJzogJ1xceGMwJywgJyVDMCc6ICdcXHhjMCcsXG4gICclYzEnOiAnXFx4YzEnLCAnJUMxJzogJ1xceGMxJywgJyVjMic6ICdcXHhjMicsICclQzInOiAnXFx4YzInLCAnJWMzJzogJ1xceGMzJyxcbiAgJyVDMyc6ICdcXHhjMycsICclYzQnOiAnXFx4YzQnLCAnJUM0JzogJ1xceGM0JywgJyVjNSc6ICdcXHhjNScsICclQzUnOiAnXFx4YzUnLFxuICAnJWM2JzogJ1xceGM2JywgJyVDNic6ICdcXHhjNicsICclYzcnOiAnXFx4YzcnLCAnJUM3JzogJ1xceGM3JywgJyVjOCc6ICdcXHhjOCcsXG4gICclQzgnOiAnXFx4YzgnLCAnJWM5JzogJ1xceGM5JywgJyVDOSc6ICdcXHhjOScsICclY2EnOiAnXFx4Y2EnLCAnJUNhJzogJ1xceGNhJyxcbiAgJyVjQSc6ICdcXHhjYScsICclQ0EnOiAnXFx4Y2EnLCAnJWNiJzogJ1xceGNiJywgJyVDYic6ICdcXHhjYicsICclY0InOiAnXFx4Y2InLFxuICAnJUNCJzogJ1xceGNiJywgJyVjYyc6ICdcXHhjYycsICclQ2MnOiAnXFx4Y2MnLCAnJWNDJzogJ1xceGNjJywgJyVDQyc6ICdcXHhjYycsXG4gICclY2QnOiAnXFx4Y2QnLCAnJUNkJzogJ1xceGNkJywgJyVjRCc6ICdcXHhjZCcsICclQ0QnOiAnXFx4Y2QnLCAnJWNlJzogJ1xceGNlJyxcbiAgJyVDZSc6ICdcXHhjZScsICclY0UnOiAnXFx4Y2UnLCAnJUNFJzogJ1xceGNlJywgJyVjZic6ICdcXHhjZicsICclQ2YnOiAnXFx4Y2YnLFxuICAnJWNGJzogJ1xceGNmJywgJyVDRic6ICdcXHhjZicsICclZDAnOiAnXFx4ZDAnLCAnJUQwJzogJ1xceGQwJywgJyVkMSc6ICdcXHhkMScsXG4gICclRDEnOiAnXFx4ZDEnLCAnJWQyJzogJ1xceGQyJywgJyVEMic6ICdcXHhkMicsICclZDMnOiAnXFx4ZDMnLCAnJUQzJzogJ1xceGQzJyxcbiAgJyVkNCc6ICdcXHhkNCcsICclRDQnOiAnXFx4ZDQnLCAnJWQ1JzogJ1xceGQ1JywgJyVENSc6ICdcXHhkNScsICclZDYnOiAnXFx4ZDYnLFxuICAnJUQ2JzogJ1xceGQ2JywgJyVkNyc6ICdcXHhkNycsICclRDcnOiAnXFx4ZDcnLCAnJWQ4JzogJ1xceGQ4JywgJyVEOCc6ICdcXHhkOCcsXG4gICclZDknOiAnXFx4ZDknLCAnJUQ5JzogJ1xceGQ5JywgJyVkYSc6ICdcXHhkYScsICclRGEnOiAnXFx4ZGEnLCAnJWRBJzogJ1xceGRhJyxcbiAgJyVEQSc6ICdcXHhkYScsICclZGInOiAnXFx4ZGInLCAnJURiJzogJ1xceGRiJywgJyVkQic6ICdcXHhkYicsICclREInOiAnXFx4ZGInLFxuICAnJWRjJzogJ1xceGRjJywgJyVEYyc6ICdcXHhkYycsICclZEMnOiAnXFx4ZGMnLCAnJURDJzogJ1xceGRjJywgJyVkZCc6ICdcXHhkZCcsXG4gICclRGQnOiAnXFx4ZGQnLCAnJWREJzogJ1xceGRkJywgJyVERCc6ICdcXHhkZCcsICclZGUnOiAnXFx4ZGUnLCAnJURlJzogJ1xceGRlJyxcbiAgJyVkRSc6ICdcXHhkZScsICclREUnOiAnXFx4ZGUnLCAnJWRmJzogJ1xceGRmJywgJyVEZic6ICdcXHhkZicsICclZEYnOiAnXFx4ZGYnLFxuICAnJURGJzogJ1xceGRmJywgJyVlMCc6ICdcXHhlMCcsICclRTAnOiAnXFx4ZTAnLCAnJWUxJzogJ1xceGUxJywgJyVFMSc6ICdcXHhlMScsXG4gICclZTInOiAnXFx4ZTInLCAnJUUyJzogJ1xceGUyJywgJyVlMyc6ICdcXHhlMycsICclRTMnOiAnXFx4ZTMnLCAnJWU0JzogJ1xceGU0JyxcbiAgJyVFNCc6ICdcXHhlNCcsICclZTUnOiAnXFx4ZTUnLCAnJUU1JzogJ1xceGU1JywgJyVlNic6ICdcXHhlNicsICclRTYnOiAnXFx4ZTYnLFxuICAnJWU3JzogJ1xceGU3JywgJyVFNyc6ICdcXHhlNycsICclZTgnOiAnXFx4ZTgnLCAnJUU4JzogJ1xceGU4JywgJyVlOSc6ICdcXHhlOScsXG4gICclRTknOiAnXFx4ZTknLCAnJWVhJzogJ1xceGVhJywgJyVFYSc6ICdcXHhlYScsICclZUEnOiAnXFx4ZWEnLCAnJUVBJzogJ1xceGVhJyxcbiAgJyVlYic6ICdcXHhlYicsICclRWInOiAnXFx4ZWInLCAnJWVCJzogJ1xceGViJywgJyVFQic6ICdcXHhlYicsICclZWMnOiAnXFx4ZWMnLFxuICAnJUVjJzogJ1xceGVjJywgJyVlQyc6ICdcXHhlYycsICclRUMnOiAnXFx4ZWMnLCAnJWVkJzogJ1xceGVkJywgJyVFZCc6ICdcXHhlZCcsXG4gICclZUQnOiAnXFx4ZWQnLCAnJUVEJzogJ1xceGVkJywgJyVlZSc6ICdcXHhlZScsICclRWUnOiAnXFx4ZWUnLCAnJWVFJzogJ1xceGVlJyxcbiAgJyVFRSc6ICdcXHhlZScsICclZWYnOiAnXFx4ZWYnLCAnJUVmJzogJ1xceGVmJywgJyVlRic6ICdcXHhlZicsICclRUYnOiAnXFx4ZWYnLFxuICAnJWYwJzogJ1xceGYwJywgJyVGMCc6ICdcXHhmMCcsICclZjEnOiAnXFx4ZjEnLCAnJUYxJzogJ1xceGYxJywgJyVmMic6ICdcXHhmMicsXG4gICclRjInOiAnXFx4ZjInLCAnJWYzJzogJ1xceGYzJywgJyVGMyc6ICdcXHhmMycsICclZjQnOiAnXFx4ZjQnLCAnJUY0JzogJ1xceGY0JyxcbiAgJyVmNSc6ICdcXHhmNScsICclRjUnOiAnXFx4ZjUnLCAnJWY2JzogJ1xceGY2JywgJyVGNic6ICdcXHhmNicsICclZjcnOiAnXFx4ZjcnLFxuICAnJUY3JzogJ1xceGY3JywgJyVmOCc6ICdcXHhmOCcsICclRjgnOiAnXFx4ZjgnLCAnJWY5JzogJ1xceGY5JywgJyVGOSc6ICdcXHhmOScsXG4gICclZmEnOiAnXFx4ZmEnLCAnJUZhJzogJ1xceGZhJywgJyVmQSc6ICdcXHhmYScsICclRkEnOiAnXFx4ZmEnLCAnJWZiJzogJ1xceGZiJyxcbiAgJyVGYic6ICdcXHhmYicsICclZkInOiAnXFx4ZmInLCAnJUZCJzogJ1xceGZiJywgJyVmYyc6ICdcXHhmYycsICclRmMnOiAnXFx4ZmMnLFxuICAnJWZDJzogJ1xceGZjJywgJyVGQyc6ICdcXHhmYycsICclZmQnOiAnXFx4ZmQnLCAnJUZkJzogJ1xceGZkJywgJyVmRCc6ICdcXHhmZCcsXG4gICclRkQnOiAnXFx4ZmQnLCAnJWZlJzogJ1xceGZlJywgJyVGZSc6ICdcXHhmZScsICclZkUnOiAnXFx4ZmUnLCAnJUZFJzogJ1xceGZlJyxcbiAgJyVmZic6ICdcXHhmZicsICclRmYnOiAnXFx4ZmYnLCAnJWZGJzogJ1xceGZmJywgJyVGRic6ICdcXHhmZidcbn1cblxuZnVuY3Rpb24gZW5jb2RlZFJlcGxhY2VyIChtYXRjaCkge1xuICByZXR1cm4gRW5jb2RlZExvb2t1cFttYXRjaF1cbn1cblxuY29uc3QgU1RBVEVfS0VZID0gMFxuY29uc3QgU1RBVEVfVkFMVUUgPSAxXG5jb25zdCBTVEFURV9DSEFSU0VUID0gMlxuY29uc3QgU1RBVEVfTEFORyA9IDNcblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMgKHN0cikge1xuICBjb25zdCByZXMgPSBbXVxuICBsZXQgc3RhdGUgPSBTVEFURV9LRVlcbiAgbGV0IGNoYXJzZXQgPSAnJ1xuICBsZXQgaW5xdW90ZSA9IGZhbHNlXG4gIGxldCBlc2NhcGluZyA9IGZhbHNlXG4gIGxldCBwID0gMFxuICBsZXQgdG1wID0gJydcbiAgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldXG4gICAgaWYgKGNoYXIgPT09ICdcXFxcJyAmJiBpbnF1b3RlKSB7XG4gICAgICBpZiAoZXNjYXBpbmcpIHsgZXNjYXBpbmcgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgICBlc2NhcGluZyA9IHRydWVcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICAgIGlmICghZXNjYXBpbmcpIHtcbiAgICAgICAgaWYgKGlucXVvdGUpIHtcbiAgICAgICAgICBpbnF1b3RlID0gZmFsc2VcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0tFWVxuICAgICAgICB9IGVsc2UgeyBpbnF1b3RlID0gdHJ1ZSB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgeyBlc2NhcGluZyA9IGZhbHNlIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVzY2FwaW5nICYmIGlucXVvdGUpIHsgdG1wICs9ICdcXFxcJyB9XG4gICAgICBlc2NhcGluZyA9IGZhbHNlXG4gICAgICBpZiAoKHN0YXRlID09PSBTVEFURV9DSEFSU0VUIHx8IHN0YXRlID09PSBTVEFURV9MQU5HKSAmJiBjaGFyID09PSBcIidcIikge1xuICAgICAgICBpZiAoc3RhdGUgPT09IFNUQVRFX0NIQVJTRVQpIHtcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0xBTkdcbiAgICAgICAgICBjaGFyc2V0ID0gdG1wLnN1YnN0cmluZygxKVxuICAgICAgICB9IGVsc2UgeyBzdGF0ZSA9IFNUQVRFX1ZBTFVFIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IFNUQVRFX0tFWSAmJlxuICAgICAgICAoY2hhciA9PT0gJyonIHx8IGNoYXIgPT09ICc9JykgJiZcbiAgICAgICAgcmVzLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZSA9IGNoYXIgPT09ICcqJ1xuICAgICAgICAgID8gU1RBVEVfQ0hBUlNFVFxuICAgICAgICAgIDogU1RBVEVfVkFMVUVcbiAgICAgICAgcmVzW3BdID0gW3RtcCwgdW5kZWZpbmVkXVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiBjaGFyID09PSAnOycpIHtcbiAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgaWYgKGNoYXJzZXQpIHtcbiAgICAgICAgICBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgICAgICAgICAnYmluYXJ5JyxcbiAgICAgICAgICAgICAgY2hhcnNldClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hhcnNldCA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCkge1xuICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkgeyByZXNbcF0gPSB0bXAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgKytwXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKCFpbnF1b3RlICYmIChjaGFyID09PSAnICcgfHwgY2hhciA9PT0gJ1xcdCcpKSB7IGNvbnRpbnVlIH1cbiAgICB9XG4gICAgdG1wICs9IGNoYXJcbiAgfVxuICBpZiAoY2hhcnNldCAmJiB0bXAubGVuZ3RoKSB7XG4gICAgdG1wID0gZGVjb2RlVGV4dCh0bXAucmVwbGFjZShSRV9FTkNPREVELCBlbmNvZGVkUmVwbGFjZXIpLFxuICAgICAgJ2JpbmFyeScsXG4gICAgICBjaGFyc2V0KVxuICB9IGVsc2UgaWYgKHRtcCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLCAnYmluYXJ5JywgJ3V0ZjgnKVxuICB9XG5cbiAgaWYgKHJlc1twXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRtcCkgeyByZXNbcF0gPSB0bXAgfVxuICB9IGVsc2UgeyByZXNbcF1bMV0gPSB0bXAgfVxuXG4gIHJldHVybiByZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVBhcmFtc1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJhc2VuYW1lIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHsgcmV0dXJuICcnIH1cbiAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBzd2l0Y2ggKHBhdGguY2hhckNvZGVBdChpKSkge1xuICAgICAgY2FzZSAweDJGOiAvLyAnLydcbiAgICAgIGNhc2UgMHg1QzogLy8gJ1xcJ1xuICAgICAgICBwYXRoID0gcGF0aC5zbGljZShpICsgMSlcbiAgICAgICAgcmV0dXJuIChwYXRoID09PSAnLi4nIHx8IHBhdGggPT09ICcuJyA/ICcnIDogcGF0aClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIChwYXRoID09PSAnLi4nIHx8IHBhdGggPT09ICcuJyA/ICcnIDogcGF0aClcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gVE9ETzpcbi8vICAqIHN1cHBvcnQgMSBuZXN0ZWQgbXVsdGlwYXJ0IGxldmVsXG4vLyAgICAoc2VlIHNlY29uZCBtdWx0aXBhcnQgZXhhbXBsZSBoZXJlOlxuLy8gICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNkaWR4LW11bHRpcGFydGZvcm0tZGF0YSlcbi8vICAqIHN1cHBvcnQgbGltaXRzLmZpZWxkTmFtZVNpemVcbi8vICAgICAtLSB0aGlzIHdpbGwgcmVxdWlyZSBtb2RpZmljYXRpb25zIHRvIHV0aWxzLnBhcnNlUGFyYW1zXG5cbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4uL3V0aWxzL3BhcnNlUGFyYW1zJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGJhc2VuYW1lID0gcmVxdWlyZSgnLi4vdXRpbHMvYmFzZW5hbWUnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0JPVU5EQVJZID0gL15ib3VuZGFyeSQvaVxuY29uc3QgUkVfRklFTEQgPSAvXmZvcm0tZGF0YSQvaVxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuY29uc3QgUkVfRklMRU5BTUUgPSAvXmZpbGVuYW1lJC9pXG5jb25zdCBSRV9OQU1FID0gL15uYW1lJC9pXG5cbk11bHRpcGFydC5kZXRlY3QgPSAvXm11bHRpcGFydFxcL2Zvcm0tZGF0YS9pXG5mdW5jdGlvbiBNdWx0aXBhcnQgKGJveSwgY2ZnKSB7XG4gIGxldCBpXG4gIGxldCBsZW5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IGJvdW5kYXJ5XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgaXNQYXJ0QUZpbGUgPSBjZmcuaXNQYXJ0QUZpbGUgfHwgKChmaWVsZE5hbWUsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkgPT4gKGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB8fCBmaWxlTmFtZSAhPT0gdW5kZWZpbmVkKSlcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlIHx8IFtdXG4gIGNvbnN0IGRlZkNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCdcbiAgY29uc3QgcHJlc2VydmVQYXRoID0gY2ZnLnByZXNlcnZlUGF0aFxuICBjb25zdCBmaWxlT3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLmZpbGVId20gfVxuXG4gIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgUkVfQk9VTkRBUlkudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgYm91bmRhcnkgPSBwYXJzZWRDb25UeXBlW2ldWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRmluaXNoZWQgKCkge1xuICAgIGlmIChuZW5kcyA9PT0gMCAmJiBmaW5pc2hlZCAmJiAhYm95Ll9kb25lKSB7XG4gICAgICBmaW5pc2hlZCA9IGZhbHNlXG4gICAgICBzZWxmLmVuZCgpXG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBib3VuZGFyeSAhPT0gJ3N0cmluZycpIHsgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBhcnQ6IEJvdW5kYXJ5IG5vdCBmb3VuZCcpIH1cblxuICBjb25zdCBmaWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgY29uc3QgZmlsZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVTaXplJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpbGVzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlcycsIEluZmluaXR5KVxuICBjb25zdCBmaWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuICBjb25zdCBwYXJ0c0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAncGFydHMnLCBJbmZpbml0eSlcbiAgY29uc3QgaGVhZGVyUGFpcnNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclBhaXJzJywgMjAwMClcbiAgY29uc3QgaGVhZGVyU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyU2l6ZScsIDgwICogMTAyNClcblxuICBsZXQgbmZpbGVzID0gMFxuICBsZXQgbmZpZWxkcyA9IDBcbiAgbGV0IG5lbmRzID0gMFxuICBsZXQgY3VyRmlsZVxuICBsZXQgY3VyRmllbGRcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICB0aGlzLl9uZWVkRHJhaW4gPSBmYWxzZVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX25wYXJ0cyA9IDBcbiAgdGhpcy5fYm95ID0gYm95XG5cbiAgY29uc3QgcGFyc2VyQ2ZnID0ge1xuICAgIGJvdW5kYXJ5LFxuICAgIG1heEhlYWRlclBhaXJzOiBoZWFkZXJQYWlyc0xpbWl0LFxuICAgIG1heEhlYWRlclNpemU6IGhlYWRlclNpemVMaW1pdCxcbiAgICBwYXJ0SHdtOiBmaWxlT3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGhpZ2hXYXRlck1hcms6IGNmZy5oaWdoV2F0ZXJNYXJrXG4gIH1cblxuICB0aGlzLnBhcnNlciA9IG5ldyBEaWNlcihwYXJzZXJDZmcpXG4gIHRoaXMucGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9uZWVkRHJhaW4gPSBmYWxzZVxuICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fcGF1c2UpIHtcbiAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICBjYigpXG4gICAgfVxuICB9KS5vbigncGFydCcsIGZ1bmN0aW9uIG9uUGFydCAocGFydCkge1xuICAgIGlmICgrK3NlbGYuX25wYXJ0cyA+IHBhcnRzTGltaXQpIHtcbiAgICAgIHNlbGYucGFyc2VyLnJlbW92ZUxpc3RlbmVyKCdwYXJ0Jywgb25QYXJ0KVxuICAgICAgc2VsZi5wYXJzZXIub24oJ3BhcnQnLCBza2lwUGFydClcbiAgICAgIGJveS5oaXRQYXJ0c0xpbWl0ID0gdHJ1ZVxuICAgICAgYm95LmVtaXQoJ3BhcnRzTGltaXQnKVxuICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgfVxuXG4gICAgLy8gaGFjayBiZWNhdXNlIHN0cmVhbXMyIF9hbHdheXNfIGRvZXNuJ3QgZW1pdCAnZW5kJyB1bnRpbCBuZXh0VGljaywgc28gbGV0XG4gICAgLy8gdXMgZW1pdCAnZW5kJyBlYXJseSBzaW5jZSB3ZSBrbm93IHRoZSBwYXJ0IGhhcyBlbmRlZCBpZiB3ZSBhcmUgYWxyZWFkeVxuICAgIC8vIHNlZWluZyB0aGUgbmV4dCBwYXJ0XG4gICAgaWYgKGN1ckZpZWxkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGN1ckZpZWxkXG4gICAgICBmaWVsZC5lbWl0KCdlbmQnKVxuICAgICAgZmllbGQucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKVxuICAgIH1cblxuICAgIHBhcnQub24oJ2hlYWRlcicsIGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgIGxldCBjb250eXBlXG4gICAgICBsZXQgZmllbGRuYW1lXG4gICAgICBsZXQgcGFyc2VkXG4gICAgICBsZXQgY2hhcnNldFxuICAgICAgbGV0IGVuY29kaW5nXG4gICAgICBsZXQgZmlsZW5hbWVcbiAgICAgIGxldCBuc2l6ZSA9IDBcblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10eXBlJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LXR5cGUnXVswXSlcbiAgICAgICAgaWYgKHBhcnNlZFswXSkge1xuICAgICAgICAgIGNvbnR5cGUgPSBwYXJzZWRbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKFJFX0NIQVJTRVQudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJzZWRbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udHlwZSA9PT0gdW5kZWZpbmVkKSB7IGNvbnR5cGUgPSAndGV4dC9wbGFpbicgfVxuICAgICAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gZGVmQ2hhcnNldCB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXVswXSlcbiAgICAgICAgaWYgKCFSRV9GSUVMRC50ZXN0KHBhcnNlZFswXSkpIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgaWYgKFJFX05BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWVsZG5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICB9IGVsc2UgaWYgKFJFX0ZJTEVOQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZWRbaV1bMV1cbiAgICAgICAgICAgIGlmICghcHJlc2VydmVQYXRoKSB7IGZpbGVuYW1lID0gYmFzZW5hbWUoZmlsZW5hbWUpIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSkgeyBlbmNvZGluZyA9IGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddWzBdLnRvTG93ZXJDYXNlKCkgfSBlbHNlIHsgZW5jb2RpbmcgPSAnN2JpdCcgfVxuXG4gICAgICBsZXQgb25EYXRhLFxuICAgICAgICBvbkVuZFxuXG4gICAgICBpZiAoaXNQYXJ0QUZpbGUoZmllbGRuYW1lLCBjb250eXBlLCBmaWxlbmFtZSkpIHtcbiAgICAgICAgLy8gZmlsZS9iaW5hcnkgZmllbGRcbiAgICAgICAgaWYgKG5maWxlcyA9PT0gZmlsZXNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpbGVzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWxlc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpbGVzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpbGVzXG5cbiAgICAgICAgaWYgKGJveS5saXN0ZW5lckNvdW50KCdmaWxlJykgPT09IDApIHtcbiAgICAgICAgICBzZWxmLnBhcnNlci5faWdub3JlKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlU3RyZWFtKGZpbGVPcHRzKVxuICAgICAgICBjdXJGaWxlID0gZmlsZVxuICAgICAgICBmaWxlLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGZpbGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgIGlmICghc2VsZi5fcGF1c2UpIHsgcmV0dXJuIH1cbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJveS5lbWl0KCdmaWxlJywgZmllbGRuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIGNvbnR5cGUpXG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpbGVTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gZmlsZVNpemVMaW1pdCAtIG5zaXplICsgZGF0YS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChleHRyYWxlbiA+IDApIHsgZmlsZS5wdXNoKGRhdGEuc2xpY2UoMCwgZXh0cmFsZW4pKSB9XG4gICAgICAgICAgICBmaWxlLnRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gZmlsZVNpemVMaW1pdFxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgICAgZmlsZS5lbWl0KCdsaW1pdCcpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWxlLnB1c2goZGF0YSkpIHsgc2VsZi5fcGF1c2UgPSB0cnVlIH1cblxuICAgICAgICAgIGZpbGUuYnl0ZXNSZWFkID0gbnNpemVcbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICBmaWxlLnB1c2gobnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9uLWZpbGUgZmllbGRcbiAgICAgICAgaWYgKG5maWVsZHMgPT09IGZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgICAgICAgIGJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmllbGRzXG4gICAgICAgICsrbmVuZHNcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCB0cnVuY2F0ZWQgPSBmYWxzZVxuICAgICAgICBjdXJGaWVsZCA9IHBhcnRcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhbGVuID0gKGZpZWxkU2l6ZUxpbWl0IC0gKG5zaXplIC0gZGF0YS5sZW5ndGgpKVxuICAgICAgICAgICAgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIDAsIGV4dHJhbGVuKVxuICAgICAgICAgICAgdHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgcGFydC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKVxuICAgICAgICAgIH0gZWxzZSB7IGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknKSB9XG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWVsZCA9IHVuZGVmaW5lZFxuICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7IGJ1ZmZlciA9IGRlY29kZVRleHQoYnVmZmVyLCAnYmluYXJ5JywgY2hhcnNldCkgfVxuICAgICAgICAgIGJveS5lbWl0KCdmaWVsZCcsIGZpZWxkbmFtZSwgYnVmZmVyLCBmYWxzZSwgdHJ1bmNhdGVkLCBlbmNvZGluZywgY29udHlwZSlcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQXMgb2Ygbm9kZUAyZWZlNGFiNzYxNjY2ICh2MC4xMC4yOSsvdjAuMTEuMTQrKSwgYnVzYm95IGhhZCBiZWNvbWVcbiAgICAgICAgIGJyb2tlbi4gU3RyZWFtczIvc3RyZWFtczMgaXMgYSBodWdlIGJsYWNrIGJveCBvZiBjb25mdXNpb24sIGJ1dFxuICAgICAgICAgc29tZWhvdyBvdmVycmlkaW5nIHRoZSBzeW5jIHN0YXRlIHNlZW1zIHRvIGZpeCB0aGluZ3MgYWdhaW4gKGFuZCBzdGlsbFxuICAgICAgICAgc2VlbXMgdG8gd29yayBmb3IgcHJldmlvdXMgbm9kZSB2ZXJzaW9ucykuXG4gICAgICAqL1xuICAgICAgcGFydC5fcmVhZGFibGVTdGF0ZS5zeW5jID0gZmFsc2VcblxuICAgICAgcGFydC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAgIHBhcnQub24oJ2VuZCcsIG9uRW5kKVxuICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChjdXJGaWxlKSB7IGN1ckZpbGUuZW1pdCgnZXJyb3InLCBlcnIpIH1cbiAgICB9KVxuICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYm95LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9KS5vbignZmluaXNoJywgZnVuY3Rpb24gKCkge1xuICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgIGNoZWNrRmluaXNoZWQoKVxuICB9KVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBjYikge1xuICBjb25zdCByID0gdGhpcy5wYXJzZXIud3JpdGUoY2h1bmspXG4gIGlmIChyICYmICF0aGlzLl9wYXVzZSkge1xuICAgIGNiKClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9uZWVkRHJhaW4gPSAhclxuICAgIHRoaXMuX2NiID0gY2JcbiAgfVxufVxuXG5NdWx0aXBhcnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICBpZiAoc2VsZi5wYXJzZXIud3JpdGFibGUpIHtcbiAgICBzZWxmLnBhcnNlci5lbmQoKVxuICB9IGVsc2UgaWYgKCFzZWxmLl9ib3kuX2RvbmUpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2JveS5fZG9uZSA9IHRydWVcbiAgICAgIHNlbGYuX2JveS5lbWl0KCdmaW5pc2gnKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gc2tpcFBhcnQgKHBhcnQpIHtcbiAgcGFydC5yZXN1bWUoKVxufVxuXG5mdW5jdGlvbiBGaWxlU3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0cylcblxuICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICB0aGlzLnRydW5jYXRlZCA9IGZhbHNlXG59XG5cbmluaGVyaXRzKEZpbGVTdHJlYW0sIFJlYWRhYmxlKVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IE11bHRpcGFydFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSRV9QTFVTID0gL1xcKy9nXG5cbmNvbnN0IEhFWCA9IFtcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCxcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMFxuXVxuXG5mdW5jdGlvbiBEZWNvZGVyICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cbkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKHN0cikge1xuICAvLyBSZXBsYWNlICcrJyB3aXRoICcgJyBiZWZvcmUgZGVjb2RpbmdcbiAgc3RyID0gc3RyLnJlcGxhY2UoUkVfUExVUywgJyAnKVxuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSAwOyBsZXQgcCA9IDA7IGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcbiAgZm9yICg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzLmJ1ZmZlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIUhFWFtzdHIuY2hhckNvZGVBdChpKV0pIHtcbiAgICAgICAgcmVzICs9ICclJyArIHRoaXMuYnVmZmVyXG4gICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIC0taSAvLyByZXRyeSBjaGFyYWN0ZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnVmZmVyICs9IHN0cltpXVxuICAgICAgICArK3BcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHRoaXMuYnVmZmVyLCAxNikpXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSAnJScpIHtcbiAgICAgIGlmIChpID4gcCkge1xuICAgICAgICByZXMgKz0gc3RyLnN1YnN0cmluZyhwLCBpKVxuICAgICAgICBwID0gaVxuICAgICAgfVxuICAgICAgdGhpcy5idWZmZXIgPSAnJ1xuICAgICAgKytwXG4gICAgfVxuICB9XG4gIGlmIChwIDwgbGVuICYmIHRoaXMuYnVmZmVyID09PSB1bmRlZmluZWQpIHsgcmVzICs9IHN0ci5zdWJzdHJpbmcocCkgfVxuICByZXR1cm4gcmVzXG59XG5EZWNvZGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEZWNvZGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERlY29kZXIgPSByZXF1aXJlKCcuLi91dGlscy9EZWNvZGVyJylcbmNvbnN0IGRlY29kZVRleHQgPSByZXF1aXJlKCcuLi91dGlscy9kZWNvZGVUZXh0JylcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBSRV9DSEFSU0VUID0gL15jaGFyc2V0JC9pXG5cblVybEVuY29kZWQuZGV0ZWN0ID0gL15hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC9pXG5mdW5jdGlvbiBVcmxFbmNvZGVkIChib3ksIGNmZykge1xuICBjb25zdCBsaW1pdHMgPSBjZmcubGltaXRzXG4gIGNvbnN0IHBhcnNlZENvblR5cGUgPSBjZmcucGFyc2VkQ29uVHlwZVxuICB0aGlzLmJveSA9IGJveVxuXG4gIHRoaXMuZmllbGRTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZFNpemUnLCAxICogMTAyNCAqIDEwMjQpXG4gIHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGROYW1lU2l6ZScsIDEwMClcbiAgdGhpcy5maWVsZHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkcycsIEluZmluaXR5KVxuXG4gIGxldCBjaGFyc2V0XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXJzZWRDb25UeXBlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkQ29uVHlwZVtpXSkgJiZcbiAgICAgICAgUkVfQ0hBUlNFVC50ZXN0KHBhcnNlZENvblR5cGVbaV1bMF0pKSB7XG4gICAgICBjaGFyc2V0ID0gcGFyc2VkQ29uVHlwZVtpXVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChjaGFyc2V0ID09PSB1bmRlZmluZWQpIHsgY2hhcnNldCA9IGNmZy5kZWZDaGFyc2V0IHx8ICd1dGY4JyB9XG5cbiAgdGhpcy5kZWNvZGVyID0gbmV3IERlY29kZXIoKVxuICB0aGlzLmNoYXJzZXQgPSBjaGFyc2V0XG4gIHRoaXMuX2ZpZWxkcyA9IDBcbiAgdGhpcy5fc3RhdGUgPSAna2V5J1xuICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgdGhpcy5fYnl0ZXNWYWwgPSAwXG4gIHRoaXMuX2tleSA9ICcnXG4gIHRoaXMuX3ZhbCA9ICcnXG4gIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgdGhpcy5fdmFsVHJ1bmMgPSBmYWxzZVxuICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG59XG5cblVybEVuY29kZWQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGNiKSB7XG4gIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHtcbiAgICBpZiAoIXRoaXMuYm95LmhpdEZpZWxkc0xpbWl0KSB7XG4gICAgICB0aGlzLmJveS5oaXRGaWVsZHNMaW1pdCA9IHRydWVcbiAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkc0xpbWl0JylcbiAgICB9XG4gICAgcmV0dXJuIGNiKClcbiAgfVxuXG4gIGxldCBpZHhlcTsgbGV0IGlkeGFtcDsgbGV0IGk7IGxldCBwID0gMDsgY29uc3QgbGVuID0gZGF0YS5sZW5ndGhcblxuICB3aGlsZSAocCA8IGxlbikge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2tleScpIHtcbiAgICAgIGlkeGVxID0gaWR4YW1wID0gdW5kZWZpbmVkXG4gICAgICBmb3IgKGkgPSBwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrcCB9XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAweDNELyogPSAqLykge1xuICAgICAgICAgIGlkeGVxID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YVtpXSA9PT0gMHgyNi8qICYgKi8pIHtcbiAgICAgICAgICBpZHhhbXAgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcyAmJiB0aGlzLl9ieXRlc0tleSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc0tleSB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhlcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGtleSB3aXRoIGFzc2lnbm1lbnRcbiAgICAgICAgaWYgKGlkeGVxID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGVxKSkgfVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICd2YWwnXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl92YWwgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgICAgICAgdGhpcy5fdmFsVHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhlcSArIDFcbiAgICAgIH0gZWxzZSBpZiAoaWR4YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggbm8gYXNzaWdubWVudFxuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBsZXQga2V5OyBjb25zdCBrZXlUcnVuYyA9IHRoaXMuX2tleVRydW5jXG4gICAgICAgIGlmIChpZHhhbXAgPiBwKSB7IGtleSA9ICh0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpKSB9IGVsc2UgeyBrZXkgPSB0aGlzLl9rZXkgfVxuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fa2V5ID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gICAgICAgIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBpZiAoa2V5Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dChrZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBrZXlUcnVuYyxcbiAgICAgICAgICAgIGZhbHNlKVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IGlkeGFtcCArIDFcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkgeyByZXR1cm4gY2IoKSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpdExpbWl0KSB7XG4gICAgICAgIC8vIHdlIG1heSBub3QgaGF2ZSBoaXQgdGhlIGFjdHVhbCBsaW1pdCBpZiB0aGVyZSBhcmUgZW5jb2RlZCBieXRlcy4uLlxuICAgICAgICBpZiAoaSA+IHApIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpKSkgfVxuICAgICAgICBwID0gaVxuICAgICAgICBpZiAoKHRoaXMuX2J5dGVzS2V5ID0gdGhpcy5fa2V5Lmxlbmd0aCkgPT09IHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgLy8geWVwLCB3ZSBhY3R1YWxseSBkaWQgaGl0IHRoZSBsaW1pdFxuICAgICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuX2tleVRydW5jID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocCA8IGxlbikgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHApKSB9XG4gICAgICAgIHAgPSBsZW5cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWR4YW1wID0gdW5kZWZpbmVkXG4gICAgICBmb3IgKGkgPSBwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrcCB9XG4gICAgICAgIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzVmFsID09PSB0aGlzLmZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgdGhpcy5faGl0TGltaXQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrdGhpcy5fYnl0ZXNWYWwgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWR4YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKyt0aGlzLl9maWVsZHNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhhbXApKSB9XG4gICAgICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIGRlY29kZVRleHQodGhpcy5fdmFsLCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYylcbiAgICAgICAgdGhpcy5fc3RhdGUgPSAna2V5J1xuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fa2V5ID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gICAgICAgIHRoaXMuX2tleVRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fdmFsID09PSAnJyAmJiB0aGlzLmZpZWxkU2l6ZUxpbWl0ID09PSAwKSB8fFxuICAgICAgICAgICAgKHRoaXMuX2J5dGVzVmFsID0gdGhpcy5fdmFsLmxlbmd0aCkgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fdmFsVHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYigpXG59XG5cblVybEVuY29kZWQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYm95Ll9kb25lKSB7IHJldHVybiB9XG5cbiAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5JyAmJiB0aGlzLl9rZXkubGVuZ3RoID4gMCkge1xuICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgJycsXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIGZhbHNlKVxuICB9IGVsc2UgaWYgKHRoaXMuX3N0YXRlID09PSAndmFsJykge1xuICAgIHRoaXMuYm95LmVtaXQoJ2ZpZWxkJywgZGVjb2RlVGV4dCh0aGlzLl9rZXksICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICB0aGlzLl92YWxUcnVuYylcbiAgfVxuICB0aGlzLmJveS5fZG9uZSA9IHRydWVcbiAgdGhpcy5ib3kuZW1pdCgnZmluaXNoJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBVcmxFbmNvZGVkXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IERpY2VyID0gcmVxdWlyZSgnLi4vZGVwcy9kaWNlci9saWIvRGljZXInKVxuXG5jb25zdCBNdWx0aXBhcnRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL211bHRpcGFydCcpXG5jb25zdCBVcmxlbmNvZGVkUGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy91cmxlbmNvZGVkJylcbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi91dGlscy9wYXJzZVBhcmFtcycpXG5cbmZ1bmN0aW9uIEJ1c2JveSAob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQnVzYm95KSkgeyByZXR1cm4gbmV3IEJ1c2JveShvcHRzKSB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdC4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0J1c2JveSBleHBlY3RlZCBhbiBvcHRpb25zLU9iamVjdCB3aXRoIGhlYWRlcnMtYXR0cmlidXRlLicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgQ29udGVudC1UeXBlLWhlYWRlci4nKVxuICB9XG5cbiAgY29uc3Qge1xuICAgIGhlYWRlcnMsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9ID0gb3B0c1xuXG4gIHRoaXMub3B0cyA9IHtcbiAgICBhdXRvRGVzdHJveTogZmFsc2UsXG4gICAgLi4uc3RyZWFtT3B0aW9uc1xuICB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgdGhpcy5vcHRzKVxuXG4gIHRoaXMuX2RvbmUgPSBmYWxzZVxuICB0aGlzLl9wYXJzZXIgPSB0aGlzLmdldFBhcnNlckJ5SGVhZGVycyhoZWFkZXJzKVxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG59XG5pbmhlcml0cyhCdXNib3ksIFdyaXRhYmxlU3RyZWFtKVxuXG5CdXNib3kucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJykge1xuICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcGFyc2VyPy5lbmQoKVxuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIGlmICh0aGlzLl9maW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZVxuICB9XG4gIFdyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS5lbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5nZXRQYXJzZXJCeUhlYWRlcnMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJzWydjb250ZW50LXR5cGUnXSlcblxuICBjb25zdCBjZmcgPSB7XG4gICAgZGVmQ2hhcnNldDogdGhpcy5vcHRzLmRlZkNoYXJzZXQsXG4gICAgZmlsZUh3bTogdGhpcy5vcHRzLmZpbGVId20sXG4gICAgaGVhZGVycyxcbiAgICBoaWdoV2F0ZXJNYXJrOiB0aGlzLm9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBpc1BhcnRBRmlsZTogdGhpcy5vcHRzLmlzUGFydEFGaWxlLFxuICAgIGxpbWl0czogdGhpcy5vcHRzLmxpbWl0cyxcbiAgICBwYXJzZWRDb25UeXBlOiBwYXJzZWQsXG4gICAgcHJlc2VydmVQYXRoOiB0aGlzLm9wdHMucHJlc2VydmVQYXRoXG4gIH1cblxuICBpZiAoTXVsdGlwYXJ0UGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IE11bHRpcGFydFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgaWYgKFVybGVuY29kZWRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgVXJsZW5jb2RlZFBhcnNlcih0aGlzLCBjZmcpXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBDb250ZW50LVR5cGUuJylcbn1cblxuQnVzYm95LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICB0aGlzLl9wYXJzZXIud3JpdGUoY2h1bmssIGNiKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IEJ1c2JveVxubW9kdWxlLmV4cG9ydHMuQnVzYm95ID0gQnVzYm95XG5cbm1vZHVsZS5leHBvcnRzLkRpY2VyID0gRGljZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNZXNzYWdlQ2hhbm5lbCwgcmVjZWl2ZU1lc3NhZ2VPblBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJylcblxuY29uc3QgY29yc1NhZmVMaXN0ZWRNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdQT1NUJ11cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IFsxMDEsIDIwNCwgMjA1LCAzMDRdXG5cbmNvbnN0IHJlZGlyZWN0U3RhdHVzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuY29uc3QgcmVkaXJlY3RTdGF0dXNTZXQgPSBuZXcgU2V0KHJlZGlyZWN0U3RhdHVzKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYmxvY2stYmFkLXBvcnRcbmNvbnN0IGJhZFBvcnRzID0gW1xuICAnMScsICc3JywgJzknLCAnMTEnLCAnMTMnLCAnMTUnLCAnMTcnLCAnMTknLCAnMjAnLCAnMjEnLCAnMjInLCAnMjMnLCAnMjUnLCAnMzcnLCAnNDInLCAnNDMnLCAnNTMnLCAnNjknLCAnNzcnLCAnNzknLFxuICAnODcnLCAnOTUnLCAnMTAxJywgJzEwMicsICcxMDMnLCAnMTA0JywgJzEwOScsICcxMTAnLCAnMTExJywgJzExMycsICcxMTUnLCAnMTE3JywgJzExOScsICcxMjMnLCAnMTM1JywgJzEzNycsXG4gICcxMzknLCAnMTQzJywgJzE2MScsICcxNzknLCAnMzg5JywgJzQyNycsICc0NjUnLCAnNTEyJywgJzUxMycsICc1MTQnLCAnNTE1JywgJzUyNicsICc1MzAnLCAnNTMxJywgJzUzMicsXG4gICc1NDAnLCAnNTQ4JywgJzU1NCcsICc1NTYnLCAnNTYzJywgJzU4NycsICc2MDEnLCAnNjM2JywgJzk4OScsICc5OTAnLCAnOTkzJywgJzk5NScsICcxNzE5JywgJzE3MjAnLCAnMTcyMycsXG4gICcyMDQ5JywgJzM2NTknLCAnNDA0NScsICc1MDYwJywgJzUwNjEnLCAnNjAwMCcsICc2NTY2JywgJzY2NjUnLCAnNjY2NicsICc2NjY3JywgJzY2NjgnLCAnNjY2OScsICc2Njk3JyxcbiAgJzEwMDgwJ1xuXVxuXG5jb25zdCBiYWRQb3J0c1NldCA9IG5ldyBTZXQoYmFkUG9ydHMpXG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuY29uc3QgcmVmZXJyZXJQb2xpY3kgPSBbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl1cbmNvbnN0IHJlZmVycmVyUG9saWN5U2V0ID0gbmV3IFNldChyZWZlcnJlclBvbGljeSlcblxuY29uc3QgcmVxdWVzdFJlZGlyZWN0ID0gWydmb2xsb3cnLCAnbWFudWFsJywgJ2Vycm9yJ11cblxuY29uc3Qgc2FmZU1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXVxuY29uc3Qgc2FmZU1ldGhvZHNTZXQgPSBuZXcgU2V0KHNhZmVNZXRob2RzKVxuXG5jb25zdCByZXF1ZXN0TW9kZSA9IFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ11cblxuY29uc3QgcmVxdWVzdENyZWRlbnRpYWxzID0gWydvbWl0JywgJ3NhbWUtb3JpZ2luJywgJ2luY2x1ZGUnXVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSBbXG4gICdkZWZhdWx0JyxcbiAgJ25vLXN0b3JlJyxcbiAgJ3JlbG9hZCcsXG4gICduby1jYWNoZScsXG4gICdmb3JjZS1jYWNoZScsXG4gICdvbmx5LWlmLWNhY2hlZCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuY29uc3QgcmVxdWVzdEJvZHlIZWFkZXIgPSBbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2VudW1kZWYtcmVxdWVzdGR1cGxleFxuY29uc3QgcmVxdWVzdER1cGxleCA9IFtcbiAgJ2hhbGYnXG5dXG5cbi8vIGh0dHA6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZvcmJpZGRlbi1tZXRob2RcbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnVFJBQ0UnLCAnVFJBQ0snXVxuY29uc3QgZm9yYmlkZGVuTWV0aG9kc1NldCA9IG5ldyBTZXQoZm9yYmlkZGVuTWV0aG9kcylcblxuY29uc3Qgc3VicmVzb3VyY2UgPSBbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXVxuY29uc3Qgc3VicmVzb3VyY2VTZXQgPSBuZXcgU2V0KHN1YnJlc291cmNlKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0RPTUV4Y2VwdGlvbiddfSAqL1xuY29uc3QgRE9NRXhjZXB0aW9uID0gZ2xvYmFsVGhpcy5ET01FeGNlcHRpb24gPz8gKCgpID0+IHtcbiAgLy8gRE9NRXhjZXB0aW9uIHdhcyBvbmx5IG1hZGUgYSBnbG9iYWwgaW4gTm9kZSB2MTcuMC4wLFxuICAvLyBidXQgZmV0Y2ggc3VwcG9ydHMgPj0gdjE2LjguXG4gIHRyeSB7XG4gICAgYXRvYignficpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZXJyKS5jb25zdHJ1Y3RvclxuICB9XG59KSgpXG5cbmxldCBjaGFubmVsXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snc3RydWN0dXJlZENsb25lJ119ICovXG5jb25zdCBzdHJ1Y3R1cmVkQ2xvbmUgPVxuICBnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZSA/P1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9iMjdhZTI0ZGNjNDI1MWJhZDcyNmQ5ZDg0YmFmNjc4ZDFmNzA3ZmVkL2xpYi9pbnRlcm5hbC9zdHJ1Y3R1cmVkX2Nsb25lLmpzXG4gIC8vIHN0cnVjdHVyZWRDbG9uZSB3YXMgYWRkZWQgaW4gdjE3LjAuMCwgYnV0IGZldGNoIHN1cHBvcnRzIHYxNi44XG4gIGZ1bmN0aW9uIHN0cnVjdHVyZWRDbG9uZSAodmFsdWUsIG9wdGlvbnMgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzc2luZyBhcmd1bWVudCcpXG4gICAgfVxuXG4gICAgaWYgKCFjaGFubmVsKSB7XG4gICAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKClcbiAgICB9XG4gICAgY2hhbm5lbC5wb3J0MS51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0Mi51bnJlZigpXG4gICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh2YWx1ZSwgb3B0aW9ucz8udHJhbnNmZXIpXG4gICAgcmV0dXJuIHJlY2VpdmVNZXNzYWdlT25Qb3J0KGNoYW5uZWwucG9ydDIpLm1lc3NhZ2VcbiAgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRE9NRXhjZXB0aW9uLFxuICBzdHJ1Y3R1cmVkQ2xvbmUsXG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyByZWRpcmVjdFN0YXR1c1NldCwgcmVmZXJyZXJQb2xpY3lTZXQ6IHJlZmVycmVyUG9saWN5VG9rZW5zLCBiYWRQb3J0c1NldCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IHJlcXVpcmUoJ3BlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgUmVhZGFibGVTdHJlYW1Gcm9tIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKXx1bmRlZmluZWR9ICovXG5sZXQgY3J5cHRvXG5cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG4gIGNvbnN0IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMgPSBbJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJ11cbiAgc3VwcG9ydGVkSGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpLmZpbHRlcigoaGFzaCkgPT4gcG9zc2libGVSZWxldmFudEhhc2hlcy5pbmNsdWRlcyhoYXNoKSlcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xufVxuXG5mdW5jdGlvbiByZXNwb25zZVVSTCAocmVzcG9uc2UpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlc1xuICAvLyBBIHJlc3BvbnNlIGhhcyBhbiBhc3NvY2lhdGVkIFVSTC4gSXQgaXMgYSBwb2ludGVyIHRvIHRoZSBsYXN0IFVSTFxuICAvLyBpbiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgYW5kIG51bGwgaWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIGVtcHR5LlxuICBjb25zdCB1cmxMaXN0ID0gcmVzcG9uc2UudXJsTGlzdFxuICBjb25zdCBsZW5ndGggPSB1cmxMaXN0Lmxlbmd0aFxuICByZXR1cm4gbGVuZ3RoID09PSAwID8gbnVsbCA6IHVybExpc3RbbGVuZ3RoIC0gMV0udG9TdHJpbmcoKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1sb2NhdGlvbi11cmxcbmZ1bmN0aW9uIHJlc3BvbnNlTG9jYXRpb25VUkwgKHJlc3BvbnNlLCByZXF1ZXN0RnJhZ21lbnQpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gcmV0dXJuIG51bGwuXG4gIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gMi4gTGV0IGxvY2F0aW9uIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW5cbiAgLy8gYExvY2F0aW9uYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBsZXQgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJylcblxuICAvLyAzLiBJZiBsb2NhdGlvbiBpcyBhIGhlYWRlciB2YWx1ZSwgdGhlbiBzZXQgbG9jYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBwYXJzaW5nIGxvY2F0aW9uIHdpdGggcmVzcG9uc2VcdTIwMTlzIFVSTC5cbiAgaWYgKGxvY2F0aW9uICE9PSBudWxsICYmIGlzVmFsaWRIZWFkZXJWYWx1ZShsb2NhdGlvbikpIHtcbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKi9cbmZ1bmN0aW9uIGlzVG9rZW5DaGFyQ29kZSAoYykge1xuICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlIDB4MjI6XG4gICAgY2FzZSAweDI4OlxuICAgIGNhc2UgMHgyOTpcbiAgICBjYXNlIDB4MmM6XG4gICAgY2FzZSAweDJmOlxuICAgIGNhc2UgMHgzYTpcbiAgICBjYXNlIDB4M2I6XG4gICAgY2FzZSAweDNjOlxuICAgIGNhc2UgMHgzZDpcbiAgICBjYXNlIDB4M2U6XG4gICAgY2FzZSAweDNmOlxuICAgIGNhc2UgMHg0MDpcbiAgICBjYXNlIDB4NWI6XG4gICAgY2FzZSAweDVjOlxuICAgIGNhc2UgMHg1ZDpcbiAgICBjYXNlIDB4N2I6XG4gICAgY2FzZSAweDdkOlxuICAgICAgLy8gRFFVT1RFIGFuZCBcIigpLC86Ozw9Pj9AW1xcXXt9XCJcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWQ0hBUiAleDIxLTdFXG4gICAgICByZXR1cm4gYyA+PSAweDIxICYmIGMgPD0gMHg3ZVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlcnNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhUVFBUb2tlbiAoY2hhcmFjdGVycykge1xuICBpZiAoY2hhcmFjdGVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIWlzVG9rZW5DaGFyQ29kZShjaGFyYWN0ZXJzLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lIChwb3RlbnRpYWxWYWx1ZSkge1xuICByZXR1cm4gaXNWYWxpZEhUVFBUb2tlbihwb3RlbnRpYWxWYWx1ZSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyVmFsdWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vIC0gSGFzIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMuXG4gIC8vIC0gQ29udGFpbnMgbm8gMHgwMCAoTlVMKSBvciBIVFRQIG5ld2xpbmUgYnl0ZXMuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJyAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCdcXHQnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmVuZHNXaXRoKCcgJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcMCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xccicpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuaW5jbHVkZXMoJ1xcbicpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3NldC1yZXF1ZXN0cy1yZWZlcnJlci1wb2xpY3ktb24tcmVkaXJlY3RcbmZ1bmN0aW9uIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QgKHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKSB7XG4gIC8vICBHaXZlbiBhIHJlcXVlc3QgcmVxdWVzdCBhbmQgYSByZXNwb25zZSBhY3R1YWxSZXNwb25zZSwgdGhpcyBhbGdvcml0aG1cbiAgLy8gIHVwZGF0ZXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IGFjY29yZGluZyB0byB0aGUgUmVmZXJyZXItUG9saWN5XG4gIC8vICBoZWFkZXIgKGlmIGFueSkgaW4gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gMS4gTGV0IHBvbGljeSBiZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBcdTAwQTcgOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5XG4gIC8vIGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyIG9uIGFjdHVhbFJlc3BvbnNlLlxuXG4gIC8vIDguMSBQYXJzZSBhIHJlZmVycmVyIHBvbGljeSBmcm9tIGEgUmVmZXJyZXItUG9saWN5IGhlYWRlclxuICAvLyAxLiBMZXQgcG9saWN5LXRva2VucyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuIGBSZWZlcnJlci1Qb2xpY3lgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IGFjdHVhbFJlc3BvbnNlXG4gIC8vIDIuIExldCBwb2xpY3kgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gaW4gcG9saWN5LXRva2VucywgaWYgdG9rZW4gaXMgYSByZWZlcnJlciBwb2xpY3kgYW5kIHRva2VuIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCBwb2xpY3kgdG8gdG9rZW4uXG4gIC8vIDQuIFJldHVybiBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeUhlYWRlciA9IChoZWFkZXJzTGlzdC5nZXQoJ3JlZmVycmVyLXBvbGljeScpID8/ICcnKS5zcGxpdCgnLCcpXG5cbiAgLy8gTm90ZTogQXMgdGhlIHJlZmVycmVyLXBvbGljeSBjYW4gY29udGFpbiBtdWx0aXBsZSBwb2xpY2llc1xuICAvLyBzZXBhcmF0ZWQgYnkgY29tbWEsIHdlIG5lZWQgdG8gbG9vcCB0aHJvdWdoIGFsbCBvZiB0aGVtXG4gIC8vIGFuZCBwaWNrIHRoZSBmaXJzdCB2YWxpZCBvbmUuXG4gIC8vIFJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL1JlZmVycmVyLVBvbGljeSNzcGVjaWZ5X2FfZmFsbGJhY2tfcG9saWN5XG4gIGxldCBwb2xpY3kgPSAnJ1xuICBpZiAocG9saWN5SGVhZGVyLmxlbmd0aCA+IDApIHtcbiAgICAvLyBUaGUgcmlnaHQtbW9zdCBwb2xpY3kgdGFrZXMgcHJlY2VkZW5jZS5cbiAgICAvLyBUaGUgbGVmdC1tb3N0IHBvbGljeSBpcyB0aGUgZmFsbGJhY2suXG4gICAgZm9yIChsZXQgaSA9IHBvbGljeUhlYWRlci5sZW5ndGg7IGkgIT09IDA7IGktLSkge1xuICAgICAgY29uc3QgdG9rZW4gPSBwb2xpY3lIZWFkZXJbaSAtIDFdLnRyaW0oKVxuICAgICAgaWYgKHJlZmVycmVyUG9saWN5VG9rZW5zLmhhcyh0b2tlbikpIHtcbiAgICAgICAgcG9saWN5ID0gdG9rZW5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAyLiBJZiBwb2xpY3kgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSB0byBwb2xpY3kuXG4gIGlmIChwb2xpY3kgIT09ICcnKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IHBvbGljeVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5LWNoZWNrXG5mdW5jdGlvbiBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnYWxsb3dlZCdcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtY29ycy1jaGVja1xuZnVuY3Rpb24gY29yc0NoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ3N1Y2Nlc3MnXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXRhby1jaGVja1xuZnVuY3Rpb24gVEFPQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuZnVuY3Rpb24gYXBwZW5kRmV0Y2hNZXRhZGF0YSAoaHR0cFJlcXVlc3QpIHtcbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1kZXN0LWhlYWRlclxuICAvLyAgVE9ET1xuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtbW9kZS1oZWFkZXJcblxuICAvLyAgMS4gQXNzZXJ0OiByXHUyMDE5cyB1cmwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwuXG4gIC8vICBUT0RPXG5cbiAgLy8gIDIuIExldCBoZWFkZXIgYmUgYSBTdHJ1Y3R1cmVkIEhlYWRlciB3aG9zZSB2YWx1ZSBpcyBhIHRva2VuLlxuICBsZXQgaGVhZGVyID0gbnVsbFxuXG4gIC8vICAzLiBTZXQgaGVhZGVyXHUyMDE5cyB2YWx1ZSB0byByXHUyMDE5cyBtb2RlLlxuICBoZWFkZXIgPSBodHRwUmVxdWVzdC5tb2RlXG5cbiAgLy8gIDQuIFNldCBhIHN0cnVjdHVyZWQgZmllbGQgdmFsdWUgYFNlYy1GZXRjaC1Nb2RlYC9oZWFkZXIgaW4gclx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LnNldCgnc2VjLWZldGNoLW1vZGUnLCBoZWFkZXIpXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1zaXRlLWhlYWRlclxuICAvLyAgVE9ET1xuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtdXNlci1oZWFkZXJcbiAgLy8gIFRPRE9cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcGVuZC1hLXJlcXVlc3Qtb3JpZ2luLWhlYWRlclxuZnVuY3Rpb24gYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgc2VyaWFsaXplZE9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIGJ5dGUtc2VyaWFsaXppbmcgYSByZXF1ZXN0IG9yaWdpbiB3aXRoIHJlcXVlc3QuXG4gIGxldCBzZXJpYWxpemVkT3JpZ2luID0gcmVxdWVzdC5vcmlnaW5cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyB8fCByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdvcmlnaW4nLCBzZXJpYWxpemVkT3JpZ2luKVxuICAgIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIGlmIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBuZWl0aGVyIGBHRVRgIG5vciBgSEVBRGAsIHRoZW46XG4gIH0gZWxzZSBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAvLyAxLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5OlxuICAgIHN3aXRjaCAocmVxdWVzdC5yZWZlcnJlclBvbGljeSkge1xuICAgICAgY2FzZSAnbm8tcmVmZXJyZXInOlxuICAgICAgICAvLyBTZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSc6XG4gICAgICBjYXNlICdzdHJpY3Qtb3JpZ2luJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgYSB0dXBsZSBvcmlnaW4sIGl0cyBzY2hlbWUgaXMgXCJodHRwc1wiLCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgXCJodHRwc1wiLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKHJlcXVlc3Qub3JpZ2luICYmIHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3Qub3JpZ2luKSAmJiAhdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiBzZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0LCByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkT3JpZ2luKSB7XG4gICAgICAvLyAyLiBBcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdvcmlnaW4nLCBzZXJpYWxpemVkT3JpZ2luKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuY29uc3Qgbm9ybWFsaXplTWV0aG9kUmVjb3JkID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKG5vcm1hbGl6ZU1ldGhvZFJlY29yZCwgbnVsbClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7KCkgPT4gdW5rbm93bltdfSBpdGVyYXRvclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgaW5zdGFuY2VcbiAqIEBwYXJhbSB7J2tleSd8J3ZhbHVlJ3wna2V5K3ZhbHVlJ30ga2luZFxuICovXG5mdW5jdGlvbiBtYWtlSXRlcmF0b3IgKGl0ZXJhdG9yLCBuYW1lLCBraW5kKSB7XG4gIGNvbnN0IG9iamVjdCA9IHtcbiAgICBpbmRleDogMCxcbiAgICBraW5kLFxuICAgIHRhcmdldDogaXRlcmF0b3JcbiAgfVxuXG4gIGNvbnN0IGkgPSB7XG4gICAgbmV4dCAoKSB7XG4gICAgICAvLyAxLiBMZXQgaW50ZXJmYWNlIGJlIHRoZSBpbnRlcmZhY2UgZm9yIHdoaWNoIHRoZSBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGV4aXN0cy5cblxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cblxuICAgICAgLy8gMy4gTGV0IG9iamVjdCBiZSA/IFRvT2JqZWN0KHRoaXNWYWx1ZSkuXG5cbiAgICAgIC8vIDQuIElmIG9iamVjdCBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbiBwZXJmb3JtIGEgc2VjdXJpdHlcbiAgICAgIC8vICAgIGNoZWNrLCBwYXNzaW5nOlxuXG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpICE9PSBpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCB7IGluZGV4LCBraW5kLCB0YXJnZXQgfSA9IG9iamVjdFxuICAgICAgY29uc3QgdmFsdWVzID0gdGFyZ2V0KClcblxuICAgICAgLy8gOS4gTGV0IGxlbiBiZSB0aGUgbGVuZ3RoIG9mIHZhbHVlcy5cbiAgICAgIGNvbnN0IGxlbiA9IHZhbHVlcy5sZW5ndGhcblxuICAgICAgLy8gMTAuIElmIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBsZW4sIHRoZW4gcmV0dXJuXG4gICAgICAvLyAgICAgQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpLlxuICAgICAgaWYgKGluZGV4ID49IGxlbikge1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH1cbiAgICAgIH1cblxuICAgICAgLy8gMTEuIExldCBwYWlyIGJlIHRoZSBlbnRyeSBpbiB2YWx1ZXMgYXQgaW5kZXggaW5kZXguXG4gICAgICBjb25zdCBwYWlyID0gdmFsdWVzW2luZGV4XVxuXG4gICAgICAvLyAxMi4gU2V0IG9iamVjdFx1MjAxOXMgaW5kZXggdG8gaW5kZXggKyAxLlxuICAgICAgb2JqZWN0LmluZGV4ID0gaW5kZXggKyAxXG5cbiAgICAgIC8vIDEzLiBSZXR1cm4gdGhlIGl0ZXJhdG9yIHJlc3VsdCBmb3IgcGFpciBhbmQga2luZC5cbiAgICAgIHJldHVybiBpdGVyYXRvclJlc3VsdChwYWlyLCBraW5kKVxuICAgIH0sXG4gICAgLy8gVGhlIGNsYXNzIHN0cmluZyBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IGZvciBhIGdpdmVuIGludGVyZmFjZSBpcyB0aGVcbiAgICAvLyByZXN1bHQgb2YgY29uY2F0ZW5hdGluZyB0aGUgaWRlbnRpZmllciBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUgc3RyaW5nIFwiIEl0ZXJhdG9yXCIuXG4gICAgW1N5bWJvbC50b1N0cmluZ1RhZ106IGAke25hbWV9IEl0ZXJhdG9yYFxuICB9XG5cbiAgLy8gVGhlIFtbUHJvdG90eXBlXV0gaW50ZXJuYWwgc2xvdCBvZiBhbiBpdGVyYXRvciBwcm90b3R5cGUgb2JqZWN0IG11c3QgYmUgJUl0ZXJhdG9yUHJvdG90eXBlJS5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGksIGVzSXRlcmF0b3JQcm90b3R5cGUpXG4gIC8vIGVzSXRlcmF0b3JQcm90b3R5cGUgbmVlZHMgdG8gYmUgdGhlIHByb3RvdHlwZSBvZiBpXG4gIC8vIHdoaWNoIGlzIHRoZSBwcm90b3R5cGUgb2YgYW4gZW1wdHkgb2JqZWN0LiBZZXMsIGl0J3MgY29uZnVzaW5nLlxuICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHt9LCBpKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2l0ZXJhdG9yLXJlc3VsdFxuZnVuY3Rpb24gaXRlcmF0b3JSZXN1bHQgKHBhaXIsIGtpbmQpIHtcbiAgbGV0IHJlc3VsdFxuXG4gIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICBzd2l0Y2ggKGtpbmQpIHtcbiAgICBjYXNlICdrZXknOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgIC8vIDIuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDMuIHJlc3VsdCBpcyBrZXkuXG4gICAgICByZXN1bHQgPSBwYWlyWzBdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICd2YWx1ZSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxWYWx1ZSBiZSBwYWlyXHUyMDE5cyB2YWx1ZS5cbiAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMgdmFsdWUuXG4gICAgICByZXN1bHQgPSBwYWlyWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlICdrZXkrdmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgIC8vIDIuIExldCBpZGxWYWx1ZSBiZSBwYWlyXHUyMDE5cyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBrZXkgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbEtleSB0byBhblxuICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDQuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsVmFsdWUgdG9cbiAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgIC8vIDYuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMFwiLCBrZXkpLlxuICAgICAgLy8gNy4gQ2FsbCAhIENyZWF0ZURhdGFQcm9wZXJ0eShhcnJheSwgXCIxXCIsIHZhbHVlKS5cbiAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgIHJlc3VsdCA9IHBhaXJcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocmVzdWx0LCBmYWxzZSkuXG4gIHJldHVybiB7IHZhbHVlOiByZXN1bHQsIGRvbmU6IGZhbHNlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LWZ1bGx5LXJlYWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZnVsbHlSZWFkQm9keSAoYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpIHtcbiAgLy8gMS4gSWYgdGFza0Rlc3RpbmF0aW9uIGlzIG51bGwsIHRoZW4gc2V0IHRhc2tEZXN0aW5hdGlvbiB0b1xuICAvLyAgICB0aGUgcmVzdWx0IG9mIHN0YXJ0aW5nIGEgbmV3IHBhcmFsbGVsIHF1ZXVlLlxuXG4gIC8vIDIuIExldCBzdWNjZXNzU3RlcHMgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzIGJlIHRvIHF1ZXVlIGFcbiAgLy8gICAgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHkgZ2l2ZW4gYnl0ZXMsIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSBwcm9jZXNzQm9keVxuXG4gIC8vIDMuIExldCBlcnJvclN0ZXBzIGJlIHRvIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHlFcnJvcixcbiAgLy8gICAgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IGVycm9yU3RlcHMgPSBwcm9jZXNzQm9keUVycm9yXG5cbiAgLy8gNC4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZm9yIGJvZHlcdTIwMTlzIHN0cmVhbS5cbiAgLy8gICAgSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHMgd2l0aCB0aGF0XG4gIC8vICAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuLlxuICBsZXQgcmVhZGVyXG5cbiAgdHJ5IHtcbiAgICByZWFkZXIgPSBib2R5LnN0cmVhbS5nZXRSZWFkZXIoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNS4gUmVhZCBhbGwgYnl0ZXMgZnJvbSByZWFkZXIsIGdpdmVuIHN1Y2Nlc3NTdGVwcyBhbmQgZXJyb3JTdGVwcy5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKVxuICAgIHN1Y2Nlc3NTdGVwcyhyZXN1bHQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gIH1cbn1cblxuLyoqIEB0eXBlIHtSZWFkYWJsZVN0cmVhbX0gKi9cbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2UgKHN0cmVhbSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbmNvbnN0IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIID0gNjU1MzVcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNpc29tb3JwaGljLWRlY29kZVxuICogQHBhcmFtIHtudW1iZXJbXXxVaW50OEFycmF5fSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBUbyBpc29tb3JwaGljIGRlY29kZSBhIGJ5dGUgc2VxdWVuY2UgaW5wdXQsIHJldHVybiBhIHN0cmluZyB3aG9zZSBjb2RlIHBvaW50XG4gIC8vICAgIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgbGVuZ3RoIGFuZCB3aG9zZSBjb2RlIHBvaW50cyBoYXZlIHRoZSBzYW1lIHZhbHVlc1xuICAvLyAgICBhcyB0aGUgdmFsdWVzIG9mIGlucHV0XHUyMDE5cyBieXRlcywgaW4gdGhlIHNhbWUgb3JkZXIuXG5cbiAgaWYgKGlucHV0Lmxlbmd0aCA8IE1BWElNVU1fQVJHVU1FTlRfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uaW5wdXQpXG4gIH1cblxuICByZXR1cm4gaW5wdXQucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gcHJldmlvdXMgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGN1cnJlbnQpLCAnJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjxVaW50OEFycmF5Pn0gY29udHJvbGxlclxuICovXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUNsb3NlIChjb250cm9sbGVyKSB7XG4gIHRyeSB7XG4gICAgY29udHJvbGxlci5jbG9zZSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRPRE86IGFkZCBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHRoaXMgZXJyb3Igb2NjdXJzLlxuICAgIGlmICghZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ0NvbnRyb2xsZXIgaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1lbmNvZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICovXG5mdW5jdGlvbiBpc29tb3JwaGljRW5jb2RlIChpbnB1dCkge1xuICAvLyAxLiBBc3NlcnQ6IGlucHV0IGNvbnRhaW5zIG5vIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiBVKzAwRkYuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChpKSA8PSAweEZGKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIGEgYnl0ZSBzZXF1ZW5jZSB3aG9zZSBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXRcdTIwMTlzIGNvZGVcbiAgLy8gICAgcG9pbnQgbGVuZ3RoIGFuZCB3aG9zZSBieXRlcyBoYXZlIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGVcbiAgLy8gICAgdmFsdWVzIG9mIGlucHV0XHUyMDE5cyBjb2RlIHBvaW50cywgaW4gdGhlIHNhbWUgb3JkZXJcbiAgcmV0dXJuIGlucHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbWRlZmF1bHRyZWFkZXItcmVhZC1hbGwtYnl0ZXNcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZC1sb29wXG4gKiBAcGFyYW0ge1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcn0gcmVhZGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRBbGxCeXRlcyAocmVhZGVyKSB7XG4gIGNvbnN0IGJ5dGVzID0gW11cbiAgbGV0IGJ5dGVMZW5ndGggPSAwXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlOiBjaHVuayB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIC8vIDEuIENhbGwgc3VjY2Vzc1N0ZXBzIHdpdGggYnl0ZXMuXG4gICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChieXRlcywgYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjaHVuayBpcyBub3QgYSBVaW50OEFycmF5IG9iamVjdCwgY2FsbCBmYWlsdXJlU3RlcHNcbiAgICAvLyAgICB3aXRoIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlY2VpdmVkIG5vbi1VaW50OEFycmF5IGNodW5rJylcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBlbmQgdGhlIGJ5dGVzIHJlcHJlc2VudGVkIGJ5IGNodW5rIHRvIGJ5dGVzLlxuICAgIGJ5dGVzLnB1c2goY2h1bmspXG4gICAgYnl0ZUxlbmd0aCArPSBjaHVuay5sZW5ndGhcblxuICAgIC8vIDMuIFJlYWQtbG9vcCBnaXZlbiByZWFkZXIsIGJ5dGVzLCBzdWNjZXNzU3RlcHMsIGFuZCBmYWlsdXJlU3RlcHMuXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNpcy1sb2NhbFxuICogQHBhcmFtIHtVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxJc0xvY2FsICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2Fib3V0OicgfHwgcHJvdG9jb2wgPT09ICdibG9iOicgfHwgcHJvdG9jb2wgPT09ICdkYXRhOidcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxIYXNIdHRwc1NjaGVtZSAodXJsKSB7XG4gIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnaHR0cHM6JylcbiAgfVxuXG4gIHJldHVybiB1cmwucHJvdG9jb2wgPT09ICdodHRwczonXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1zY2hlbWVcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNIdHRwSHR0cHNTY2hlbWUgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonIHx8IHByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEZldGNoIHN1cHBvcnRzIG5vZGUgPj0gMTYuOC4wLCBidXQgT2JqZWN0Lmhhc093biB3YXMgYWRkZWQgaW4gdjE2LjkuMC5cbiAqL1xuY29uc3QgaGFzT3duID0gT2JqZWN0Lmhhc093biB8fCAoKGRpY3QsIGtleSkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpY3QsIGtleSkpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0Fib3J0ZWQsXG4gIGlzQ2FuY2VsbGVkLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgdG9VU1ZTdHJpbmcsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICBUQU9DaGVjayxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHJlcXVlc3RCYWRQb3J0LFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgcmVzcG9uc2VVUkwsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIGlzQmxvYkxpa2UsXG4gIGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeSxcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgc2FtZU9yaWdpbixcbiAgbm9ybWFsaXplTWV0aG9kLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIG1ha2VJdGVyYXRvcixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaGFzT3duLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgYnl0ZXNNYXRjaCxcbiAgaXNSZWFkYWJsZVN0cmVhbUxpa2UsXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIGlzb21vcnBoaWNEZWNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybEhhc0h0dHBzU2NoZW1lLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgcmVhZEFsbEJ5dGVzLFxuICBub3JtYWxpemVNZXRob2RSZWNvcmQsXG4gIHBhcnNlTWV0YWRhdGFcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtHdWFyZDogU3ltYm9sKCdndWFyZCcpLFxuICBrUmVhbG06IFN5bWJvbCgncmVhbG0nKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgaGFzT3duLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYmlkbCcpLldlYmlkbH0gKi9cbmNvbnN0IHdlYmlkbCA9IHt9XG53ZWJpZGwuY29udmVydGVycyA9IHt9XG53ZWJpZGwudXRpbCA9IHt9XG53ZWJpZGwuZXJyb3JzID0ge31cblxud2ViaWRsLmVycm9ycy5leGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihgJHttZXNzYWdlLmhlYWRlcn06ICR7bWVzc2FnZS5tZXNzYWdlfWApXG59XG5cbndlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHBsdXJhbCA9IGNvbnRleHQudHlwZXMubGVuZ3RoID09PSAxID8gJycgOiAnIG9uZSBvZidcbiAgY29uc3QgbWVzc2FnZSA9XG4gICAgYCR7Y29udGV4dC5hcmd1bWVudH0gY291bGQgbm90IGJlIGNvbnZlcnRlZCB0b2AgK1xuICAgIGAke3BsdXJhbH06ICR7Y29udGV4dC50eXBlcy5qb2luKCcsICcpfS5gXG5cbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxud2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZTogYFwiJHtjb250ZXh0LnZhbHVlfVwiIGlzIGFuIGludmFsaWQgJHtjb250ZXh0LnR5cGV9LmBcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpbXBsZW1lbnRzXG53ZWJpZGwuYnJhbmRDaGVjayA9IGZ1bmN0aW9uIChWLCBJLCBvcHRzID0gdW5kZWZpbmVkKSB7XG4gIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIEkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gVj8uW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IEkucHJvdG90eXBlW1N5bWJvbC50b1N0cmluZ1RhZ11cbiAgfVxufVxuXG53ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayA9IGZ1bmN0aW9uICh7IGxlbmd0aCB9LCBtaW4sIGN0eCkge1xuICBpZiAobGVuZ3RoIDwgbWluKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgbWVzc2FnZTogYCR7bWlufSBhcmd1bWVudCR7bWluICE9PSAxID8gJ3MnIDogJyd9IHJlcXVpcmVkLCBgICtcbiAgICAgICAgICAgICAgIGBidXQke2xlbmd0aCA/ICcgb25seScgOiAnJ30gJHtsZW5ndGh9IGZvdW5kLmAsXG4gICAgICAuLi5jdHhcbiAgICB9KVxuICB9XG59XG5cbndlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6ICdUeXBlRXJyb3InLFxuICAgIG1lc3NhZ2U6ICdJbGxlZ2FsIGNvbnN0cnVjdG9yJ1xuICB9KVxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG53ZWJpZGwudXRpbC5UeXBlID0gZnVuY3Rpb24gKFYpIHtcbiAgc3dpdGNoICh0eXBlb2YgVikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6IHJldHVybiAnVW5kZWZpbmVkJ1xuICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ0Jvb2xlYW4nXG4gICAgY2FzZSAnc3RyaW5nJzogcmV0dXJuICdTdHJpbmcnXG4gICAgY2FzZSAnc3ltYm9sJzogcmV0dXJuICdTeW1ib2wnXG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdOdW1iZXInXG4gICAgY2FzZSAnYmlnaW50JzogcmV0dXJuICdCaWdJbnQnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnTnVsbCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdPYmplY3QnXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzID0ge30pIHtcbiAgbGV0IHVwcGVyQm91bmRcbiAgbGV0IGxvd2VyQm91bmRcblxuICAvLyAxLiBJZiBiaXRMZW5ndGggaXMgNjQsIHRoZW46XG4gIGlmIChiaXRMZW5ndGggPT09IDY0KSB7XG4gICAgLy8gMS4gTGV0IHVwcGVyQm91bmQgYmUgMl41MyBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgNTMpIC0gMVxuXG4gICAgLy8gMi4gSWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW4gbGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgICAgbG93ZXJCb3VuZCA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlIGxldCBsb3dlckJvdW5kIGJlIFx1MjIxMjJeNTMgKyAxLlxuICAgICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCA1MykgKyAxXG4gICAgfVxuICB9IGVsc2UgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgMC5cbiAgICBsb3dlckJvdW5kID0gMFxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGggXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IGxvd2VyQm91bmQgYmUgLTJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgYml0TGVuZ3RoKSAtIDFcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGggLSAxKSAtIDFcbiAgfVxuXG4gIC8vIDQuIExldCB4IGJlID8gVG9OdW1iZXIoVikuXG4gIGxldCB4ID0gTnVtYmVyKFYpXG5cbiAgLy8gNS4gSWYgeCBpcyBcdTIyMTIwLCB0aGVuIHNldCB4IHRvICswLlxuICBpZiAoeCA9PT0gMCkge1xuICAgIHggPSAwXG4gIH1cblxuICAvLyA2LiBJZiB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtFbmZvcmNlUmFuZ2VdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKG9wdHMuZW5mb3JjZVJhbmdlID09PSB0cnVlKSB7XG4gICAgLy8gMS4gSWYgeCBpcyBOYU4sICtcdTIyMUUsIG9yIFx1MjIxMlx1MjIxRSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGFuIGludGVnZXIuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAgIC8vIDMuIElmIHggPCBsb3dlckJvdW5kIG9yIHggPiB1cHBlckJvdW5kLCB0aGVuXG4gICAgLy8gICAgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHggPCBsb3dlckJvdW5kIHx8IHggPiB1cHBlckJvdW5kKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0ludGVnZXIgY29udmVyc2lvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gJHtsb3dlckJvdW5kfS0ke3VwcGVyQm91bmR9LCBnb3QgJHt4fS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA3LiBJZiB4IGlzIG5vdCBOYU4gYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETFxuICAvLyAgICB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0NsYW1wXSBleHRlbmRlZFxuICAvLyAgICBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmICghTnVtYmVyLmlzTmFOKHgpICYmIG9wdHMuY2xhbXAgPT09IHRydWUpIHtcbiAgICAvLyAxLiBTZXQgeCB0byBtaW4obWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKS5cbiAgICB4ID0gTWF0aC5taW4oTWF0aC5tYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpXG5cbiAgICAvLyAyLiBSb3VuZCB4IHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGNob29zaW5nIHRoZVxuICAgIC8vICAgIGV2ZW4gaW50ZWdlciBpZiBpdCBsaWVzIGhhbGZ3YXkgYmV0d2VlbiB0d28sXG4gICAgLy8gICAgYW5kIGNob29zaW5nICswIHJhdGhlciB0aGFuIFx1MjIxMjAuXG4gICAgaWYgKE1hdGguZmxvb3IoeCkgJSAyID09PSAwKSB7XG4gICAgICB4ID0gTWF0aC5mbG9vcih4KVxuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gTWF0aC5jZWlsKHgpXG4gICAgfVxuXG4gICAgLy8gMy4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDguIElmIHggaXMgTmFOLCArMCwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHJldHVybiArMC5cbiAgaWYgKFxuICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICh4ID09PSAwICYmIE9iamVjdC5pcygwLCB4KSkgfHxcbiAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIC8vIDkuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICB4ID0gd2ViaWRsLnV0aWwuSW50ZWdlclBhcnQoeClcblxuICAvLyAxMC4gU2V0IHggdG8geCBtb2R1bG8gMl5iaXRMZW5ndGguXG4gIHggPSB4ICUgTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuXG4gIC8vIDExLiBJZiBzaWduZWRuZXNzIGlzIFwic2lnbmVkXCIgYW5kIHggXHUyMjY1IDJeYml0TGVuZ3RoIFx1MjIxMiAxLFxuICAvLyAgICB0aGVuIHJldHVybiB4IFx1MjIxMiAyXmJpdExlbmd0aC5cbiAgaWYgKHNpZ25lZG5lc3MgPT09ICdzaWduZWQnICYmIHggPj0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDEpIHtcbiAgICByZXR1cm4geCAtIE1hdGgucG93KDIsIGJpdExlbmd0aClcbiAgfVxuXG4gIC8vIDEyLiBPdGhlcndpc2UsIHJldHVybiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWludGVnZXJwYXJ0XG53ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCA9IGZ1bmN0aW9uIChuKSB7XG4gIC8vIDEuIExldCByIGJlIGZsb29yKGFicyhuKSkuXG4gIGNvbnN0IHIgPSBNYXRoLmZsb29yKE1hdGguYWJzKG4pKVxuXG4gIC8vIDIuIElmIG4gPCAwLCB0aGVuIHJldHVybiAtMSBcdTAwRDcgci5cbiAgaWYgKG4gPCAwKSB7XG4gICAgcmV0dXJuIC0xICogclxuICB9XG5cbiAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gci5cbiAgcmV0dXJuIHJcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1zZXF1ZW5jZVxud2ViaWRsLnNlcXVlbmNlQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICByZXR1cm4gKFYpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBvZiB0eXBlICR7d2ViaWRsLnV0aWwuVHlwZShWKX0gaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBtZXRob2QgYmUgPyBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuXG4gICAgLyoqIEB0eXBlIHtHZW5lcmF0b3J9ICovXG4gICAgY29uc3QgbWV0aG9kID0gVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cblxuICAgIC8vIDMuIElmIG1ldGhvZCBpcyB1bmRlZmluZWQsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIG1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0eXBlb2YgbWV0aG9kLm5leHQgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnU2VxdWVuY2UnLFxuICAgICAgICBtZXNzYWdlOiAnT2JqZWN0IGlzIG5vdCBhbiBpdGVyYXRvci4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLXNlcXVlbmNlLWZyb20taXRlcmFibGVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gbWV0aG9kLm5leHQoKVxuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBzZXEucHVzaChjb252ZXJ0ZXIodmFsdWUpKVxuICAgIH1cblxuICAgIHJldHVybiBzZXFcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXRvLXJlY29yZFxud2ViaWRsLnJlY29yZENvbnZlcnRlciA9IGZ1bmN0aW9uIChrZXlDb252ZXJ0ZXIsIHZhbHVlQ29udmVydGVyKSB7XG4gIHJldHVybiAoTykgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoTykgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlY29yZCcsXG4gICAgICAgIG1lc3NhZ2U6IGBWYWx1ZSBvZiB0eXBlICR7d2ViaWRsLnV0aWwuVHlwZShPKX0gaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIE9iamVjdC5rZXlzIG9ubHkgcmV0dXJucyBlbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhPKVxuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuXG4gICAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5Q29udmVydGVyKGtleSlcblxuICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS5cbiAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuXG4gICAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB2YWx1ZUNvbnZlcnRlcihPW2tleV0pXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3VsdFt0eXBlZEtleV0gdG8gdHlwZWRWYWx1ZS5cbiAgICAgICAgcmVzdWx0W3R5cGVkS2V5XSA9IHR5cGVkVmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLlxuICAgIGNvbnN0IGtleXMgPSBSZWZsZWN0Lm93bktleXMoTylcblxuICAgIC8vIDQuIEZvciBlYWNoIGtleSBvZiBrZXlzLlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkpXG5cbiAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOlxuICAgICAgaWYgKGRlc2M/LmVudW1lcmFibGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIFJldHVybiByZXN1bHQuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbndlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoaSkge1xuICByZXR1cm4gKFYsIG9wdHMgPSB7fSkgPT4ge1xuICAgIGlmIChvcHRzLnN0cmljdCAhPT0gZmFsc2UgJiYgIShWIGluc3RhbmNlb2YgaSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiBpLm5hbWUsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke1Z9IHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnkpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghaGFzT3duKGRpY3Rpb25hcnksIGtleSkpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBNaXNzaW5nIHJlcXVpcmVkIGtleSBcIiR7a2V5fVwiLmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCB2YWx1ZSA9IGRpY3Rpb25hcnlba2V5XVxuICAgICAgY29uc3QgaGFzRGVmYXVsdCA9IGhhc093bihvcHRpb25zLCAnZGVmYXVsdFZhbHVlJylcblxuICAgICAgLy8gT25seSB1c2UgZGVmYXVsdFZhbHVlIGlmIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmRcbiAgICAgIC8vIGEgZGVmYXVsdFZhbHVlIG9wdGlvbnMgd2FzIHByb3ZpZGVkLlxuICAgICAgaWYgKGhhc0RlZmF1bHQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/PyBkZWZhdWx0VmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSlcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoVilcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBWIGlzIG51bGwgYW5kIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETCB0eXBlXG4gIC8vICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgW0xlZ2FjeU51bGxUb0VtcHR5U3RyaW5nXVxuICAvLyAgICBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW4gcmV0dXJuIHRoZSBET01TdHJpbmcgdmFsdWVcbiAgLy8gICAgdGhhdCByZXByZXNlbnRzIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGlmIChWID09PSBudWxsICYmIG9wdHMubGVnYWN5TnVsbFRvRW1wdHlTdHJpbmcpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDIuIExldCB4IGJlID8gVG9TdHJpbmcoVikuXG4gIGlmICh0eXBlb2YgViA9PT0gJ3N5bWJvbCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlIHN5bWJvbCB0byBzdHJpbmcuJylcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgSURMIERPTVN0cmluZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlXG4gIC8vICAgIHNhbWUgc2VxdWVuY2Ugb2YgY29kZSB1bml0cyBhcyB0aGUgb25lIHRoZVxuICAvLyAgICBFQ01BU2NyaXB0IFN0cmluZyB2YWx1ZSB4IHJlcHJlc2VudHMuXG4gIHJldHVybiBTdHJpbmcoVilcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1CeXRlU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgLy8gTm90ZTogRE9NU3RyaW5nIGNvbnZlcnRlciBwZXJmb3JtID8gVG9TdHJpbmcoVilcbiAgY29uc3QgeCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxuXG4gIC8vIDIuIElmIHRoZSB2YWx1ZSBvZiBhbnkgZWxlbWVudCBvZiB4IGlzIGdyZWF0ZXIgdGhhblxuICAvLyAgICAyNTUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB4Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlmICh4LmNoYXJDb2RlQXQoaW5kZXgpID4gMjU1KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgdG8gYSBCeXRlU3RyaW5nIGJlY2F1c2UgdGhlIGNoYXJhY3RlciBhdCAnICtcbiAgICAgICAgYGluZGV4ICR7aW5kZXh9IGhhcyBhIHZhbHVlIG9mICR7eC5jaGFyQ29kZUF0KGluZGV4KX0gd2hpY2ggaXMgZ3JlYXRlciB0aGFuIDI1NS5gXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGFuIElETCBCeXRlU3RyaW5nIHZhbHVlIHdob3NlIGxlbmd0aCBpcyB0aGVcbiAgLy8gICAgbGVuZ3RoIG9mIHgsIGFuZCB3aGVyZSB0aGUgdmFsdWUgb2YgZWFjaCBlbGVtZW50IGlzXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtVVNWU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcgPSB0b1VTVlN0cmluZ1xuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWJvb2xlYW5cbndlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSB0aGUgcmVzdWx0IG9mIGNvbXB1dGluZyBUb0Jvb2xlYW4oVikuXG4gIGNvbnN0IHggPSBCb29sZWFuKFYpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgYm9vbGVhbiB2YWx1ZSB0aGF0IGlzIHRoZSBvbmUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIHRydXRoIHZhbHVlIGFzIHRoZSBFQ01BU2NyaXB0IEJvb2xlYW4gdmFsdWUgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1hbnlcbndlYmlkbC5jb252ZXJ0ZXJzLmFueSA9IGZ1bmN0aW9uIChWKSB7XG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJzaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICdzaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDMyLCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDMyLCAndW5zaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1zaG9ydFxud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10gPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCAxNiwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCAxNiwgJ3Vuc2lnbmVkJywgb3B0cylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2lkbC1BcnJheUJ1ZmZlclxud2ViaWRsLmNvbnZlcnRlcnMuQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFuXG4gIC8vICAgIFtbQXJyYXlCdWZmZXJEYXRhXV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgLy8gc2VlOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLWFycmF5YnVmZmVyLWluc3RhbmNlc1xuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtc2hhcmVkYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIGlmIChcbiAgICB3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fFxuICAgICF0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6IGAke1Z9YCxcbiAgICAgIGFyZ3VtZW50OiBgJHtWfWAsXG4gICAgICB0eXBlczogWydBcnJheUJ1ZmZlciddXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgQXJyYXlCdWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbC5cblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBBcnJheUJ1ZmZlciB2YWx1ZSB0aGF0IGlzIGFcbiAgLy8gICAgcmVmZXJlbmNlIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5ID0gZnVuY3Rpb24gKFYsIFQsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBMZXQgVCBiZSB0aGUgSURMIHR5cGUgViBpcyBiZWluZyBjb252ZXJ0ZWQgdG8uXG5cbiAgLy8gMi4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW1R5cGVkQXJyYXlOYW1lXV0gaW50ZXJuYWwgc2xvdCB3aXRoIGEgdmFsdWVcbiAgLy8gICAgZXF1YWwgdG8gVFx1MjAxOXMgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzVHlwZWRBcnJheShWKSB8fFxuICAgIFYuY29uc3RydWN0b3IubmFtZSAhPT0gVC5uYW1lXG4gICkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6IGAke1QubmFtZX1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbVC5uYW1lXVxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIGFycmF5IGJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsXG5cbiAgLy8gNS4gUmV0dXJuIHRoZSBJREwgdmFsdWUgb2YgdHlwZSBUIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRhdGFWaWV3ID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbRGF0YVZpZXddXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHwgIXR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdEYXRhVmlldycsXG4gICAgICBtZXNzYWdlOiAnT2JqZWN0IGlzIG5vdCBhIERhdGFWaWV3LidcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpcyB0cnVlLFxuICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWLmJ1ZmZlcikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsXG5cbiAgLy8gNC4gUmV0dXJuIHRoZSBJREwgRGF0YVZpZXcgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNCdWZmZXJTb3VyY2VcbndlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZSA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgaWYgKHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQXJyYXlCdWZmZXIoViwgb3B0cylcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcoViwgb3B0cylcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYENvdWxkIG5vdCBjb252ZXJ0ICR7Vn0gdG8gYSBCdWZmZXJTb3VyY2UuYClcbn1cblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJ5dGVTdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXVxuKVxuXG53ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10gPSB3ZWJpZGwucmVjb3JkQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWJpZGxcbn1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBhdG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBpc29tb3JwaGljRGVjb2RlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorLS5eX3x+QS1aYS16MC05XSskL1xuY29uc3QgSFRUUF9XSElURVNQQUNFX1JFR0VYID0gLyhcXHUwMDBBfFxcdTAwMER8XFx1MDAwOXxcXHUwMDIwKS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1xdW90ZWQtc3RyaW5nLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUyA9IC9bXFx1MDAwOXxcXHUwMDIwLVxcdTAwN0V8XFx1MDA4MC1cXHUwMEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtcHJvY2Vzc29yXG4vKiogQHBhcmFtIHtVUkx9IGRhdGFVUkwgKi9cbmZ1bmN0aW9uIGRhdGFVUkxQcm9jZXNzb3IgKGRhdGFVUkwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBkYXRhVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCIuXG4gIGFzc2VydChkYXRhVVJMLnByb3RvY29sID09PSAnZGF0YTonKVxuXG4gIC8vIDIuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIFVSTFxuICAvLyBzZXJpYWxpemVyIG9uIGRhdGFVUkwgd2l0aCBleGNsdWRlIGZyYWdtZW50XG4gIC8vIHNldCB0byB0cnVlLlxuICBsZXQgaW5wdXQgPSBVUkxTZXJpYWxpemVyKGRhdGFVUkwsIHRydWUpXG5cbiAgLy8gMy4gUmVtb3ZlIHRoZSBsZWFkaW5nIFwiZGF0YTpcIiBzdHJpbmcgZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSBpbnB1dC5zbGljZSg1KVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBwb2ludCBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gNS4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBlcXVhbFxuICAvLyB0byBVKzAwMkMgKCwpLCBnaXZlbiBwb3NpdGlvbi5cbiAgbGV0IG1pbWVUeXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJywnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA2LiBTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gbWltZVR5cGUuXG4gIC8vIFVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB3ZSBuZWVkIHRvIHN0b3JlIHRoZVxuICAvLyBsZW5ndGggYmVjYXVzZSBpZiB0aGUgbWltZXR5cGUgaGFzIHNwYWNlcyByZW1vdmVkLFxuICAvLyB0aGUgd3JvbmcgYW1vdW50IHdpbGwgYmUgc2xpY2VkIGZyb20gdGhlIGlucHV0IGluXG4gIC8vIHN0ZXAgIzlcbiAgY29uc3QgbWltZVR5cGVMZW5ndGggPSBtaW1lVHlwZS5sZW5ndGhcbiAgbWltZVR5cGUgPSByZW1vdmVBU0NJSVdoaXRlc3BhY2UobWltZVR5cGUsIHRydWUsIHRydWUpXG5cbiAgLy8gNy4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuXG4gIC8vIHJldHVybiBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA4LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA5LiBMZXQgZW5jb2RlZEJvZHkgYmUgdGhlIHJlbWFpbmRlciBvZiBpbnB1dC5cbiAgY29uc3QgZW5jb2RlZEJvZHkgPSBpbnB1dC5zbGljZShtaW1lVHlwZUxlbmd0aCArIDEpXG5cbiAgLy8gMTAuIExldCBib2R5IGJlIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGVuY29kZWRCb2R5LlxuICBsZXQgYm9keSA9IHN0cmluZ1BlcmNlbnREZWNvZGUoZW5jb2RlZEJvZHkpXG5cbiAgLy8gMTEuIElmIG1pbWVUeXBlIGVuZHMgd2l0aCBVKzAwM0IgKDspLCBmb2xsb3dlZCBieVxuICAvLyB6ZXJvIG9yIG1vcmUgVSswMDIwIFNQQUNFLCBmb2xsb3dlZCBieSBhbiBBU0NJSVxuICAvLyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBcImJhc2U2NFwiLCB0aGVuOlxuICBpZiAoLzsoXFx1MDAyMCl7MCx9YmFzZTY0JC9pLnRlc3QobWltZVR5cGUpKSB7XG4gICAgLy8gMS4gTGV0IHN0cmluZ0JvZHkgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2RlIG9mIGJvZHkuXG4gICAgY29uc3Qgc3RyaW5nQm9keSA9IGlzb21vcnBoaWNEZWNvZGUoYm9keSlcblxuICAgIC8vIDIuIFNldCBib2R5IHRvIHRoZSBmb3JnaXZpbmctYmFzZTY0IGRlY29kZSBvZlxuICAgIC8vIHN0cmluZ0JvZHkuXG4gICAgYm9keSA9IGZvcmdpdmluZ0Jhc2U2NChzdHJpbmdCb2R5KVxuXG4gICAgLy8gMy4gSWYgYm9keSBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAgIGlmIChib2R5ID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9XG5cbiAgICAvLyA0LiBSZW1vdmUgdGhlIGxhc3QgNiBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTYpXG5cbiAgICAvLyA1LiBSZW1vdmUgdHJhaWxpbmcgVSswMDIwIFNQQUNFIGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUsXG4gICAgLy8gaWYgYW55LlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUucmVwbGFjZSgvKFxcdTAwMjApKyQvLCAnJylcblxuICAgIC8vIDYuIFJlbW92ZSB0aGUgbGFzdCBVKzAwM0IgKDspIGNvZGUgcG9pbnQgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC0xKVxuICB9XG5cbiAgLy8gMTIuIElmIG1pbWVUeXBlIHN0YXJ0cyB3aXRoIFUrMDAzQiAoOyksIHRoZW4gcHJlcGVuZFxuICAvLyBcInRleHQvcGxhaW5cIiB0byBtaW1lVHlwZS5cbiAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoJzsnKSkge1xuICAgIG1pbWVUeXBlID0gJ3RleHQvcGxhaW4nICsgbWltZVR5cGVcbiAgfVxuXG4gIC8vIDEzLiBMZXQgbWltZVR5cGVSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nXG4gIC8vIG1pbWVUeXBlLlxuICBsZXQgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gIC8vIDE0LiBJZiBtaW1lVHlwZVJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHNldFxuICAvLyBtaW1lVHlwZVJlY29yZCB0byB0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkuXG4gIGlmIChtaW1lVHlwZVJlY29yZCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgbWltZVR5cGVSZWNvcmQgPSBwYXJzZU1JTUVUeXBlKCd0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUknKVxuICB9XG5cbiAgLy8gMTUuIFJldHVybiBhIG5ldyBkYXRhOiBVUkwgc3RydWN0IHdob3NlIE1JTUVcbiAgLy8gdHlwZSBpcyBtaW1lVHlwZVJlY29yZCBhbmQgYm9keSBpcyBib2R5LlxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZGF0YS11cmwtc3RydWN0XG4gIHJldHVybiB7IG1pbWVUeXBlOiBtaW1lVHlwZVJlY29yZCwgYm9keSB9XG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuLyoqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVGcmFnbWVudFxuICovXG5mdW5jdGlvbiBVUkxTZXJpYWxpemVyICh1cmwsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGlmICghZXhjbHVkZUZyYWdtZW50KSB7XG4gICAgcmV0dXJuIHVybC5ocmVmXG4gIH1cblxuICBjb25zdCBocmVmID0gdXJsLmhyZWZcbiAgY29uc3QgaGFzaExlbmd0aCA9IHVybC5oYXNoLmxlbmd0aFxuXG4gIHJldHVybiBoYXNoTGVuZ3RoID09PSAwID8gaHJlZiA6IGhyZWYuc3Vic3RyaW5nKDAsIGhyZWYubGVuZ3RoIC0gaGFzaExlbmd0aClcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYS1zZXF1ZW5jZS1vZi1jb2RlLXBvaW50c1xuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBzdHJpbmcpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIChjb25kaXRpb24sIGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCByZXN1bHQgPSAnJ1xuXG4gIC8vIDIuIFdoaWxlIHBvc2l0aW9uIGRvZXNuXHUyMDE5dCBwb2ludCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQgYW5kIHRoZVxuICAvLyBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBtZWV0cyB0aGUgY29uZGl0aW9uIGNvbmRpdGlvbjpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGNvbmRpdGlvbihpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0pKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoYXQgY29kZSBwb2ludCB0byB0aGUgZW5kIG9mIHJlc3VsdC5cbiAgICByZXN1bHQgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEEgZmFzdGVyIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgdGhhdCBvbmx5IHdvcmtzIHdoZW4gY29tcGFyaW5nIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IChjaGFyLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgY29uc3QgaWR4ID0gaW5wdXQuaW5kZXhPZihjaGFyLCBwb3NpdGlvbi5wb3NpdGlvbilcbiAgY29uc3Qgc3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIGlmIChpZHggPT09IC0xKSB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbnB1dC5sZW5ndGhcbiAgICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQpXG4gIH1cblxuICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlkeFxuICByZXR1cm4gaW5wdXQuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3N0cmluZy1wZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gc3RyaW5nUGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBpbnB1dC5cbiAgY29uc3QgYnl0ZXMgPSBlbmNvZGVyLmVuY29kZShpbnB1dClcblxuICAvLyAyLiBSZXR1cm4gdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgYnl0ZXMuXG4gIHJldHVybiBwZXJjZW50RGVjb2RlKGJ5dGVzKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gTGV0IG91dHB1dCBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGJ5dGUgYnl0ZSBpbiBpbnB1dDpcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSBpbnB1dFtpXVxuXG4gICAgLy8gMS4gSWYgYnl0ZSBpcyBub3QgMHgyNSAoJSksIHRoZW4gYXBwZW5kIGJ5dGUgdG8gb3V0cHV0LlxuICAgIGlmIChieXRlICE9PSAweDI1KSB7XG4gICAgICBvdXRwdXQucHVzaChieXRlKVxuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBieXRlIGlzIDB4MjUgKCUpIGFuZCB0aGUgbmV4dCB0d28gYnl0ZXNcbiAgICAvLyBhZnRlciBieXRlIGluIGlucHV0IGFyZSBub3QgaW4gdGhlIHJhbmdlc1xuICAgIC8vIDB4MzAgKDApIHRvIDB4MzkgKDkpLCAweDQxIChBKSB0byAweDQ2IChGKSxcbiAgICAvLyBhbmQgMHg2MSAoYSkgdG8gMHg2NiAoZiksIGFsbCBpbmNsdXNpdmUsIGFwcGVuZCBieXRlXG4gICAgLy8gdG8gb3V0cHV0LlxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBieXRlID09PSAweDI1ICYmXG4gICAgICAhL15bMC05QS1GYS1mXXsyfSQvaS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pKVxuICAgICkge1xuICAgICAgb3V0cHV0LnB1c2goMHgyNSlcblxuICAgIC8vIDMuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gTGV0IGJ5dGVQb2ludCBiZSB0aGUgdHdvIGJ5dGVzIGFmdGVyIGJ5dGUgaW4gaW5wdXQsXG4gICAgICAvLyBkZWNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRlZCBhcyBoZXhhZGVjaW1hbCBudW1iZXIuXG4gICAgICBjb25zdCBuZXh0VHdvQnl0ZXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKVxuICAgICAgY29uc3QgYnl0ZVBvaW50ID0gTnVtYmVyLnBhcnNlSW50KG5leHRUd29CeXRlcywgMTYpXG5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dC5wdXNoKGJ5dGVQb2ludClcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKG91dHB1dClcbn1cblxuLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1hLW1pbWUtdHlwZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAqL1xuZnVuY3Rpb24gcGFyc2VNSU1FVHlwZSAoaW5wdXQpIHtcbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBpbnB1dC5cbiAgaW5wdXQgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShpbnB1dCwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsXG4gIC8vIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2VcbiAgLy8gb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAyRiAoLykgZnJvbVxuICAvLyBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gIGNvbnN0IHR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDQuIElmIHR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICBpZiAodHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIHJldHVyblxuICAvLyBmYWlsdXJlXG4gIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDYuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwMkYgKC8pLilcbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDcuIExldCBzdWJ0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mXG4gIC8vIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuXG4gIC8vIHBvc2l0aW9uLlxuICBsZXQgc3VidHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICc7JyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOC4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBzdWJ0eXBlLlxuICBzdWJ0eXBlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2Uoc3VidHlwZSwgZmFsc2UsIHRydWUpXG5cbiAgLy8gOS4gSWYgc3VidHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChzdWJ0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3Qoc3VidHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCB0eXBlTG93ZXJjYXNlID0gdHlwZS50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IHN1YnR5cGVMb3dlcmNhc2UgPSBzdWJ0eXBlLnRvTG93ZXJDYXNlKClcblxuICAvLyAxMC4gTGV0IG1pbWVUeXBlIGJlIGEgbmV3IE1JTUUgdHlwZSByZWNvcmQgd2hvc2UgdHlwZVxuICAvLyBpcyB0eXBlLCBpbiBBU0NJSSBsb3dlcmNhc2UsIGFuZCBzdWJ0eXBlIGlzIHN1YnR5cGUsXG4gIC8vIGluIEFTQ0lJIGxvd2VyY2FzZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGVcbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogdHlwZUxvd2VyY2FzZSxcbiAgICBzdWJ0eXBlOiBzdWJ0eXBlTG93ZXJjYXNlLFxuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBwYXJhbWV0ZXJzOiBuZXcgTWFwKCksXG4gICAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNtaW1lLXR5cGUtZXNzZW5jZVxuICAgIGVzc2VuY2U6IGAke3R5cGVMb3dlcmNhc2V9LyR7c3VidHlwZUxvd2VyY2FzZX1gXG4gIH1cblxuICAvLyAxMS4gV2hpbGUgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dDpcbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzQiAoOykuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQXG4gICAgLy8gd2hpdGVzcGFjZSBmcm9tIGlucHV0IGdpdmVuIHBvc2l0aW9uLlxuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gICAgICBjaGFyID0+IEhUVFBfV0hJVEVTUEFDRV9SRUdFWC50ZXN0KGNoYXIpLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDMuIExldCBwYXJhbWV0ZXJOYW1lIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhXG4gICAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAvLyBvciBVKzAwM0QgKD0pIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnOycgJiYgY2hhciAhPT0gJz0nLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDQuIFNldCBwYXJhbWV0ZXJOYW1lIHRvIHBhcmFtZXRlck5hbWUsIGluIEFTQ0lJXG4gICAgLy8gbG93ZXJjYXNlLlxuICAgIHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAgIC8vIFUrMDAzQiAoOyksIHRoZW4gY29udGludWUuXG4gICAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnOycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAzRCAoPSkuKVxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuICAgIH1cblxuICAgIC8vIDYuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IHBhcmFtZXRlclZhbHVlIGJlIG51bGwuXG4gICAgbGV0IHBhcmFtZXRlclZhbHVlID0gbnVsbFxuXG4gICAgLy8gOC4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgLy8gVSswMDIyIChcIiksIHRoZW46XG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJykge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uXG4gICAgICAvLyBhbmQgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZy5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhpbnB1dCwgcG9zaXRpb24sIHRydWUpXG5cbiAgICAgIC8vIDIuIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3RcbiAgICAgIC8vIFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgIC8vIDkuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gU2V0IHBhcmFtZXRlclZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZ1xuICAgICAgLy8gYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgICAgLy8gZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgICAvLyAyLiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHBhcmFtZXRlclZhbHVlLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShwYXJhbWV0ZXJWYWx1ZSwgZmFsc2UsIHRydWUpXG5cbiAgICAgIC8vIDMuIElmIHBhcmFtZXRlclZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gY29udGludWUuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gLSBwYXJhbWV0ZXJOYW1lIHNvbGVseSBjb250YWlucyBIVFRQIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBwYXJhbWV0ZXJWYWx1ZSBzb2xlbHkgY29udGFpbnMgSFRUUCBxdW90ZWQtc3RyaW5nIHRva2VuIGNvZGUgcG9pbnRzXG4gICAgLy8gLSBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSBkb2VzIG5vdCBleGlzdFxuICAgIC8vIHRoZW4gc2V0IG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIHRvIHBhcmFtZXRlclZhbHVlLlxuICAgIGlmIChcbiAgICAgIHBhcmFtZXRlck5hbWUubGVuZ3RoICE9PSAwICYmXG4gICAgICBIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChwYXJhbWV0ZXJOYW1lKSAmJlxuICAgICAgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCB8fCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TLnRlc3QocGFyYW1ldGVyVmFsdWUpKSAmJlxuICAgICAgIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKHBhcmFtZXRlck5hbWUpXG4gICAgKSB7XG4gICAgICBtaW1lVHlwZS5wYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBwYXJhbWV0ZXJWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2ZvcmdpdmluZy1iYXNlNjQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGRhdGEgKi9cbmZ1bmN0aW9uIGZvcmdpdmluZ0Jhc2U2NCAoZGF0YSkge1xuICAvLyAxLiBSZW1vdmUgYWxsIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBkYXRhLlxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9bXFx1MDAwOVxcdTAwMEFcXHUwMDBDXFx1MDAwRFxcdTAwMjBdL2csICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIC8vIDIuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIG5vIHJlbWFpbmRlciwgdGhlbjpcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMCkge1xuICAgIC8vIDEuIElmIGRhdGEgZW5kcyB3aXRoIG9uZSBvciB0d28gVSswMDNEICg9KSBjb2RlIHBvaW50cyxcbiAgICAvLyB0aGVuIHJlbW92ZSB0aGVtIGZyb20gZGF0YS5cbiAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC89Pz0kLywgJycpXG4gIH1cblxuICAvLyAzLiBJZiBkYXRhXHUyMDE5cyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBhIHJlbWFpbmRlciBvZiAxLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAxKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNC4gSWYgZGF0YSBjb250YWlucyBhIGNvZGUgcG9pbnQgdGhhdCBpcyBub3Qgb25lIG9mXG4gIC8vICBVKzAwMkIgKCspXG4gIC8vICBVKzAwMkYgKC8pXG4gIC8vICBBU0NJSSBhbHBoYW51bWVyaWNcbiAgLy8gdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKC9bXisvMC05QS1aYS16XS8udGVzdChkYXRhKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoZGF0YSlcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnkubGVuZ3RoKVxuXG4gIGZvciAobGV0IGJ5dGUgPSAwOyBieXRlIDwgYmluYXJ5Lmxlbmd0aDsgYnl0ZSsrKSB7XG4gICAgYnl0ZXNbYnl0ZV0gPSBiaW5hcnkuY2hhckNvZGVBdChieXRlKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VyZW5jZSBvZiBVKzAwMjIgKFwiKSBvclxuICAgICAgLy8gICAgVSswMDVDIChcXCkgaW4gdmFsdWUgd2l0aCBVKzAwNUMgKFxcKS5cbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvKFxcXFx8XCIpL2csICdcXFxcJDEnKVxuXG4gICAgICAvLyAyLiBQcmVwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgPSAnXCInICsgdmFsdWVcblxuICAgICAgLy8gMy4gQXBwZW5kIFUrMDAyMiAoXCIpIHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gJ1wiJ1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCB2YWx1ZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gdmFsdWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBzZXJpYWxpemF0aW9uLlxuICByZXR1cm4gc2VyaWFsaXphdGlvblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnXFxmJyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1sZWFkaW5nLWFuZC10cmFpbGluZy1hc2NpaS13aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzQVNDSUlXaGl0ZXNwYWNlKHN0clt0cmFpbF0pOyB0cmFpbC0tKTtcbiAgfVxuXG4gIHJldHVybiBzdHIuc2xpY2UobGVhZCwgdHJhaWwgKyAxKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGF0YVVSTFByb2Nlc3NvcixcbiAgVVJMU2VyaWFsaXplcixcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyxcbiAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsXG4gIHN0cmluZ1BlcmNlbnREZWNvZGUsXG4gIHBhcnNlTUlNRVR5cGUsXG4gIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcsXG4gIHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbmNsYXNzIEZpbGUgZXh0ZW5kcyBCbG9iIHtcbiAgY29uc3RydWN0b3IgKGZpbGVCaXRzLCBmaWxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGaWxlIGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgZmlsZUJpdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10oZmlsZUJpdHMpXG4gICAgZmlsZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZU5hbWUpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyhvcHRpb25zKVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG4gICAgLy8gTm90ZTogQmxvYiBoYW5kbGVzIHRoaXMgZm9yIHVzXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIGxldCB0ID0gb3B0aW9ucy50eXBlXG4gICAgbGV0IGRcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICBzdWJzdGVwOiB7XG4gICAgICBpZiAodCkge1xuICAgICAgICB0ID0gcGFyc2VNSU1FVHlwZSh0KVxuXG4gICAgICAgIGlmICh0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICB0ID0gJydcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgICAgICAgYnJlYWsgc3Vic3RlcFxuICAgICAgICB9XG5cbiAgICAgICAgdCA9IHNlcmlhbGl6ZUFNaW1lVHlwZSh0KS50b0xvd2VyQ2FzZSgpXG4gICAgICB9XG5cbiAgICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgICAvLyAgICBsYXN0TW9kaWZpZWQgZGljdGlvbmFyeSBtZW1iZXIuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgc2V0IGQgdG8gdGhlXG4gICAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgICAgZCA9IG9wdGlvbnMubGFzdE1vZGlmaWVkXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgc3VwZXIocHJvY2Vzc0Jsb2JQYXJ0cyhmaWxlQml0cywgb3B0aW9ucyksIHsgdHlwZTogdCB9KVxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIG5hbWU6IG4sXG4gICAgICBsYXN0TW9kaWZpZWQ6IGQsXG4gICAgICB0eXBlOiB0XG4gICAgfVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxhc3RNb2RpZmllZFxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGUpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxufVxuXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbmFtZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGFzdE1vZGlmaWVkOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihCbG9iKVxuXG53ZWJpZGwuY29udmVydGVycy5CbG9iUGFydCA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHxcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgICApIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoViwgb3B0cylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIG9wdHMpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCbG9iUGFydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnRcbilcblxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2Rmbi1GaWxlUHJvcGVydHlCYWdcbndlYmlkbC5jb252ZXJ0ZXJzLkZpbGVQcm9wZXJ0eUJhZyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xhc3RNb2RpZmllZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gRGF0ZS5ub3coKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ3R5cGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2VuZGluZ3MnLFxuICAgIGNvbnZlcnRlcjogKHZhbHVlKSA9PiB7XG4gICAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh2YWx1ZSlcbiAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKVxuXG4gICAgICBpZiAodmFsdWUgIT09ICduYXRpdmUnKSB7XG4gICAgICAgIHZhbHVlID0gJ3RyYW5zcGFyZW50J1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogJ3RyYW5zcGFyZW50J1xuICB9XG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI3Byb2Nlc3MtYmxvYi1wYXJ0c1xuICogQHBhcmFtIHsoTm9kZUpTLlR5cGVkQXJyYXl8QmxvYnxzdHJpbmcpW119IHBhcnRzXG4gKiBAcGFyYW0ge3sgdHlwZTogc3RyaW5nLCBlbmRpbmdzOiBzdHJpbmcgfX0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBwcm9jZXNzQmxvYlBhcnRzIChwYXJ0cywgb3B0aW9ucykge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgc2VxdWVuY2Ugb2YgYnl0ZXMuXG4gIC8qKiBAdHlwZSB7Tm9kZUpTLlR5cGVkQXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDIuIEZvciBlYWNoIGVsZW1lbnQgaW4gcGFydHM6XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJ0cykge1xuICAgIC8vIDEuIElmIGVsZW1lbnQgaXMgYSBVU1ZTdHJpbmcsIHJ1biB0aGUgZm9sbG93aW5nIHN1YnN0ZXBzOlxuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBzIGJlIGVsZW1lbnQuXG4gICAgICBsZXQgcyA9IGVsZW1lbnRcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuZGluZ3MgbWVtYmVyIG9mIG9wdGlvbnMgaXMgXCJuYXRpdmVcIiwgc2V0IHNcbiAgICAgIC8vICAgIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBsaW5lIGVuZGluZ3MgdG8gbmF0aXZlXG4gICAgICAvLyAgICBvZiBlbGVtZW50LlxuICAgICAgaWYgKG9wdGlvbnMuZW5kaW5ncyA9PT0gJ25hdGl2ZScpIHtcbiAgICAgICAgcyA9IGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZShzKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBVVEYtOCBlbmNvZGluZyBzIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbmNvZGVyLmVuY29kZShzKSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihlbGVtZW50KSB8fFxuICAgICAgdHlwZXMuaXNUeXBlZEFycmF5KGVsZW1lbnQpXG4gICAgKSB7XG4gICAgICAvLyAyLiBJZiBlbGVtZW50IGlzIGEgQnVmZmVyU291cmNlLCBnZXQgYSBjb3B5IG9mIHRoZVxuICAgICAgLy8gICAgYnl0ZXMgaGVsZCBieSB0aGUgYnVmZmVyIHNvdXJjZSwgYW5kIGFwcGVuZCB0aG9zZVxuICAgICAgLy8gICAgYnl0ZXMgdG8gYnl0ZXMuXG4gICAgICBpZiAoIWVsZW1lbnQuYnVmZmVyKSB7IC8vIEFycmF5QnVmZmVyXG4gICAgICAgIGJ5dGVzLnB1c2gobmV3IFVpbnQ4QXJyYXkoZWxlbWVudCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBieXRlcy5wdXNoKFxuICAgICAgICAgIG5ldyBVaW50OEFycmF5KGVsZW1lbnQuYnVmZmVyLCBlbGVtZW50LmJ5dGVPZmZzZXQsIGVsZW1lbnQuYnl0ZUxlbmd0aClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShlbGVtZW50KSkge1xuICAgICAgLy8gMy4gSWYgZWxlbWVudCBpcyBhIEJsb2IsIGFwcGVuZCB0aGUgYnl0ZXMgaXQgcmVwcmVzZW50c1xuICAgICAgLy8gICAgdG8gYnl0ZXMuXG4gICAgICBieXRlcy5wdXNoKGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGJ5dGVzLlxuICByZXR1cm4gYnl0ZXNcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNjb252ZXJ0LWxpbmUtZW5kaW5ncy10by1uYXRpdmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lRW5kaW5nc05hdGl2ZSAocykge1xuICAvLyAxLiBMZXQgbmF0aXZlIGxpbmUgZW5kaW5nIGJlIGJlIHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgbGV0IG5hdGl2ZUxpbmVFbmRpbmcgPSAnXFxuJ1xuXG4gIC8vIDIuIElmIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtXHUyMDE5cyBjb252ZW50aW9ucyBhcmUgdG9cbiAgLy8gICAgcmVwcmVzZW50IG5ld2xpbmVzIGFzIGEgY2FycmlhZ2UgcmV0dXJuIGFuZCBsaW5lIGZlZWRcbiAgLy8gICAgc2VxdWVuY2UsIHNldCBuYXRpdmUgbGluZSBlbmRpbmcgdG8gdGhlIGNvZGUgcG9pbnRcbiAgLy8gICAgVSswMDBEIENSIGZvbGxvd2VkIGJ5IHRoZSBjb2RlIHBvaW50IFUrMDAwQSBMRi5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcclxcbidcbiAgfVxuXG4gIHJldHVybiBzLnJlcGxhY2UoL1xccj9cXG4vZywgbmF0aXZlTGluZUVuZGluZylcbn1cblxuLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBtb3ZlZCB0byAuL3V0aWwuanMsIHNvbWUgdG9vbHMgKHN1Y2ggYXNcbi8vIHJvbGx1cCkgd2lsbCB3YXJuIGFib3V0IGNpcmN1bGFyIGRlcGVuZGVuY2llcy4gU2VlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE2MjlcbmZ1bmN0aW9uIGlzRmlsZUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIChOYXRpdmVGaWxlICYmIG9iamVjdCBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8XG4gICAgb2JqZWN0IGluc3RhbmNlb2YgRmlsZSB8fCAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGUsIEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCB0b1VTVlN0cmluZywgbWFrZUl0ZXJhdG9yIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUsIEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydGaWxlJ119ICovXG5jb25zdCBGaWxlID0gTmF0aXZlRmlsZSA/PyBVbmRpY2lGaWxlXG5cbi8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jZm9ybWRhdGFcbmNsYXNzIEZvcm1EYXRhIHtcbiAgY29uc3RydWN0b3IgKGZvcm0pIHtcbiAgICBpZiAoZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgICBwcmVmaXg6ICdGb3JtRGF0YSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgICAgIHR5cGVzOiBbJ3VuZGVmaW5lZCddXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba1N0YXRlXSA9IFtdXG4gIH1cblxuICBhcHBlbmQgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmFwcGVuZCcgfSlcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICFpc0Jsb2JMaWtlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXBwZW5kJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMiBpcyBub3Qgb2YgdHlwZSAnQmxvYidcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgICAgOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodmFsdWUpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmRlbGV0ZScgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBkZWxldGUobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZW1vdmUgYWxsIGVudHJpZXMgd2hvc2UgbmFtZVxuICAgIC8vIGlzIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHRoaXNba1N0YXRlXS5maWx0ZXIoZW50cnkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgfVxuXG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LFxuICAgIC8vIHRoZW4gcmV0dXJuIG51bGwuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGZyb21cbiAgICAvLyB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV1baWR4XS52YWx1ZVxuICB9XG5cbiAgZ2V0QWxsIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0QWxsJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyBUaGUgaGFzKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYW4gZW50cnlcbiAgICAvLyB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSkgIT09IC0xXG4gIH1cblxuICBzZXQgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLnNldCcgfSlcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICFpc0Jsb2JMaWtlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0JyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMiBpcyBub3Qgb2YgdHlwZSAnQmxvYidcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIFRoZSBzZXQobmFtZSwgdmFsdWUpIGFuZCBzZXQobmFtZSwgYmxvYlZhbHVlLCBmaWxlbmFtZSkgbWV0aG9kIHN0ZXBzXG4gICAgLy8gYXJlOlxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gdG9VU1ZTdHJpbmcoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXkrdmFsdWUnXG4gICAgKVxuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAna2V5J1xuICAgIClcbiAgfVxuXG4gIHZhbHVlcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAndmFsdWUnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzZWxmOiBGb3JtRGF0YSkgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZm9yRWFjaCcgfSlcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxufVxuXG5Gb3JtRGF0YS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEZvcm1EYXRhLnByb3RvdHlwZS5lbnRyaWVzXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZvcm1EYXRhLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRm9ybURhdGEnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjY3JlYXRlLWFuLWVudHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd8QmxvYn0gdmFsdWVcbiAqIEBwYXJhbSB7P3N0cmluZ30gZmlsZW5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIG1ha2VFbnRyeSAobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSB7XG4gIC8vIDEuIFNldCBuYW1lIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBuYW1lIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICAvLyBcIlRvIGNvbnZlcnQgYSBzdHJpbmcgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcsIHJlcGxhY2UgYW55IHN1cnJvZ2F0ZXNcbiAgLy8gIHdpdGggVStGRkZELlwiXG4gIC8vIHNlZTogaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0LXYxOC54L2RvY3MvYXBpL2J1ZmZlci5odG1sI2J1ZnRvc3RyaW5nZW5jb2Rpbmctc3RhcnQtZW5kXG4gIG5hbWUgPSBCdWZmZXIuZnJvbShuYW1lKS50b1N0cmluZygndXRmOCcpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgYSBzdHJpbmcsIHRoZW4gc2V0IHZhbHVlIHRvIHRoZSByZXN1bHQgb2YgY29udmVydGluZ1xuICAvLyAgICB2YWx1ZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IEJ1ZmZlci5mcm9tKHZhbHVlKS50b1N0cmluZygndXRmOCcpXG4gIH0gZWxzZSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gSWYgdmFsdWUgaXMgbm90IGEgRmlsZSBvYmplY3QsIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgdmFsdWUgaXMgXCJibG9iXCJcbiAgICBpZiAoIWlzRmlsZUxpa2UodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgQmxvYlxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgICAgIDogbmV3IEZpbGVMaWtlKHZhbHVlLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgIH1cblxuICAgIC8vIDIuIElmIGZpbGVuYW1lIGlzIGdpdmVuLCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIGlzIGZpbGVuYW1lLlxuICAgIGlmIChmaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiogQHR5cGUge0ZpbGVQcm9wZXJ0eUJhZ30gKi9cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgIGxhc3RNb2RpZmllZDogdmFsdWUubGFzdE1vZGlmaWVkXG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gKE5hdGl2ZUZpbGUgJiYgdmFsdWUgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVuZGljaUZpbGVcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCBmaWxlbmFtZSwgb3B0aW9ucylcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBhbiBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgYW5kIHdob3NlIHZhbHVlIGlzIHZhbHVlLlxuICByZXR1cm4geyBuYW1lLCB2YWx1ZSB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGb3JtRGF0YSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEJ1c2JveSA9IHJlcXVpcmUoJ0BmYXN0aWZ5L2J1c2JveScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0Jsb2JMaWtlLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBmdWxseVJlYWRCb2R5XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24sIHN0cnVjdHVyZWRDbG9uZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc0Vycm9yZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGlzVWludDhBcnJheSwgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5jb25zdCB7IEZpbGU6IFVuZGljaUZpbGUgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcblxubGV0IHJhbmRvbVxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydGaWxlJ119ICovXG5jb25zdCBGaWxlID0gTmF0aXZlRmlsZSA/PyBVbmRpY2lGaWxlXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHlpbml0LWV4dHJhY3RcbmZ1bmN0aW9uIGV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbS5cbiAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoXG4gICAgICAgICAgdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgPyB0ZXh0RW5jb2Rlci5lbmNvZGUoc291cmNlKSA6IHNvdXJjZVxuICAgICAgICApXG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHJlYWRhYmxlU3RyZWFtQ2xvc2UoY29udHJvbGxlcikpXG4gICAgICB9LFxuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0nICsgYm91bmRhcnlcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN0XHUyMDE5cyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3RcdTIwMTlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZVx1MjAxOXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiB1bmRlZmluZWRcbiAgICB9KVxuICB9XG5cbiAgLy8gMTMuIExldCBib2R5IGJlIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLCBzb3VyY2UgaXMgc291cmNlLFxuICAvLyBhbmQgbGVuZ3RoIGlzIGxlbmd0aC5cbiAgY29uc3QgYm9keSA9IHsgc3RyZWFtLCBzb3VyY2UsIGxlbmd0aCB9XG5cbiAgLy8gMTQuIFJldHVybiAoYm9keSwgdHlwZSkuXG4gIHJldHVybiBbYm9keSwgdHlwZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0LXNhZmVseS1leHRyYWN0XG5mdW5jdGlvbiBzYWZlbHlFeHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChib2R5KSB7XG4gIC8vIFRvIGNsb25lIGEgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jbG9uZVxuXG4gIC8vIDEuIExldCBcdTAwQUIgb3V0MSwgb3V0MiBcdTAwQkIgYmUgdGhlIHJlc3VsdCBvZiB0ZWVpbmcgYm9keVx1MjAxOXMgc3RyZWFtLlxuICBjb25zdCBbb3V0MSwgb3V0Ml0gPSBib2R5LnN0cmVhbS50ZWUoKVxuICBjb25zdCBvdXQyQ2xvbmUgPSBzdHJ1Y3R1cmVkQ2xvbmUob3V0MiwgeyB0cmFuc2ZlcjogW291dDJdIH0pXG4gIC8vIFRoaXMsIGZvciB3aGF0ZXZlciByZWFzb25zLCB1bnJlZnMgb3V0MkNsb25lIHdoaWNoIGFsbG93c1xuICAvLyB0aGUgcHJvY2VzcyB0byBleGl0IGJ5IGl0c2VsZi5cbiAgY29uc3QgWywgZmluYWxDbG9uZV0gPSBvdXQyQ2xvbmUudGVlKClcblxuICAvLyAyLiBTZXQgYm9keVx1MjAxOXMgc3RyZWFtIHRvIG91dDEuXG4gIGJvZHkuc3RyZWFtID0gb3V0MVxuXG4gIC8vIDMuIFJldHVybiBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIG91dDIgYW5kIG90aGVyIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIGJvZHkuXG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiBmaW5hbENsb25lLFxuICAgIGxlbmd0aDogYm9keS5sZW5ndGgsXG4gICAgc291cmNlOiBib2R5LnNvdXJjZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uICogY29uc3VtZUJvZHkgKGJvZHkpIHtcbiAgaWYgKGJvZHkpIHtcbiAgICBpZiAoaXNVaW50OEFycmF5KGJvZHkpKSB7XG4gICAgICB5aWVsZCBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGJvZHkuc3RyZWFtXG5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKHN0cmVhbSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLmxvY2tlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICAgICAgfVxuXG4gICAgICAvLyBDb21wYXQuXG4gICAgICBzdHJlYW1ba0JvZHlVc2VkXSA9IHRydWVcblxuICAgICAgeWllbGQgKiBzdHJlYW1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJZkFib3J0ZWQgKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm9keU1peGluTWV0aG9kcyAoaW5zdGFuY2UpIHtcbiAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICBibG9iICgpIHtcbiAgICAgIC8vIFRoZSBibG9iKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgQmxvYiB3aG9zZVxuICAgICAgLy8gY29udGVudHMgYXJlIGJ5dGVzIGFuZCB3aG9zZSB0eXBlIGF0dHJpYnV0ZSBpcyB0aGlzXHUyMDE5c1xuICAgICAgLy8gTUlNRSB0eXBlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgbGV0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgaWYgKG1pbWVUeXBlID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9ICcnXG4gICAgICAgIH0gZWxzZSBpZiAobWltZVR5cGUpIHtcbiAgICAgICAgICBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShtaW1lVHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBhIEJsb2Igd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzIGFuZCB0eXBlIGF0dHJpYnV0ZVxuICAgICAgICAvLyBpcyBtaW1lVHlwZS5cbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKFtieXRlc10sIHsgdHlwZTogbWltZVR5cGUgfSlcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhcnJheUJ1ZmZlciAoKSB7XG4gICAgICAvLyBUaGUgYXJyYXlCdWZmZXIoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0XG4gICAgICAvLyBvZiBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXJcbiAgICAgIC8vIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcykuYnVmZmVyXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgdGV4dCAoKSB7XG4gICAgICAvLyBUaGUgdGV4dCgpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgVVRGLTggZGVjb2RlLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCB1dGY4RGVjb2RlQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBqc29uICgpIHtcbiAgICAgIC8vIFRoZSBqc29uKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBwYXJzZSBKU09OIGZyb20gYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIHBhcnNlSlNPTkZyb21CeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIGluc3RhbmNlKVxuXG4gICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJylcblxuICAgICAgLy8gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsIHRoZW46XG4gICAgICBpZiAoL211bHRpcGFydFxcL2Zvcm0tZGF0YS8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHt9XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuaGVhZGVycykgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgIGxldCBidXNib3lcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJ1c2JveSA9IG5ldyBCdXNib3koe1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHByZXNlcnZlUGF0aDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYCR7ZXJyfWAsICdBYm9ydEVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1c2JveS5vbignZmllbGQnLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgYnVzYm95Lm9uKCdmaWxlJywgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSwgZW5jb2RpbmcsIG1pbWVUeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2h1bmtzID0gW11cblxuICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2Jhc2U2NCcgfHwgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgICAgICAgIGxldCBiYXNlNjRjaHVuayA9ICcnXG5cbiAgICAgICAgICAgIHZhbHVlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rICs9IGNodW5rLnRvU3RyaW5nKCkucmVwbGFjZSgvW1xcclxcbl0vZ20sICcnKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGVuZCA9IGJhc2U2NGNodW5rLmxlbmd0aCAtIGJhc2U2NGNodW5rLmxlbmd0aCAlIDRcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oYmFzZTY0Y2h1bmsuc2xpY2UoMCwgZW5kKSwgJ2Jhc2U2NCcpKVxuXG4gICAgICAgICAgICAgIGJhc2U2NGNodW5rID0gYmFzZTY0Y2h1bmsuc2xpY2UoZW5kKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHZhbHVlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLCAnYmFzZTY0JykpXG4gICAgICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIG5ldyBGaWxlKGNodW5rcywgZmlsZW5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgYnVzYm95UmVzb2x2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBidXNib3kub24oJ2ZpbmlzaCcsIHJlc29sdmUpXG4gICAgICAgICAgYnVzYm95Lm9uKCdlcnJvcicsIChlcnIpID0+IHJlamVjdChuZXcgVHlwZUVycm9yKGVycikpKVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLmJvZHkgIT09IG51bGwpIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSBidXNib3kud3JpdGUoY2h1bmspXG4gICAgICAgIGJ1c2JveS5lbmQoKVxuICAgICAgICBhd2FpdCBidXNib3lSZXNvbHZlXG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRm9ybURhdGFcbiAgICAgIH0gZWxzZSBpZiAoL2FwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsIHRoZW46XG5cbiAgICAgICAgLy8gMS4gTGV0IGVudHJpZXMgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGJ5dGVzLlxuICAgICAgICBsZXQgZW50cmllc1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCB0ZXh0ID0gJydcbiAgICAgICAgICAvLyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgcGFyc2VyIHdpbGwga2VlcCB0aGUgQk9NLlxuICAgICAgICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmxlbmNvZGVkLXBhcnNlclxuICAgICAgICAgIC8vIE5vdGUgdGhhdCBzdHJlYW1pbmcgZGVjb2RlciBpcyBzdGF0ZWZ1bCBhbmQgY2Fubm90IGJlIHJldXNlZFxuICAgICAgICAgIGNvbnN0IHN0cmVhbWluZ0RlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBpZ25vcmVCT006IHRydWUgfSlcblxuICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY29uc3VtZUJvZHkodGhpc1trU3RhdGVdLmJvZHkpKSB7XG4gICAgICAgICAgICBpZiAoIWlzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgVWludDhBcnJheSBjaHVuaycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKGNodW5rLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0ICs9IHN0cmVhbWluZ0RlY29kZXIuZGVjb2RlKClcbiAgICAgICAgICBlbnRyaWVzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0ZXh0KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogVW5jbGVhciB3aGVuIG5ldyBVUkxTZWFyY2hQYXJhbXMgY2FuIGZhaWwgb24gYSBzdHJpbmcuXG4gICAgICAgICAgLy8gMi4gSWYgZW50cmllcyBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcigpLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3Qgd2hvc2UgZW50cmllcyBhcmUgZW50cmllcy5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybURhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdhaXQgYSB0aWNrIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAgICAvLyBPdGhlcndpc2UsIGEgVHlwZUVycm9yIGNhbiBiZSB0aHJvd24gd2hlbiBhbiBBYm9ydEVycm9yIHNob3VsZC5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcblxuICAgICAgICB0aHJvd0lmQWJvcnRlZCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogYCR7aW5zdGFuY2UubmFtZX0uZm9ybURhdGFgLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgcGFyc2UgY29udGVudCBhcyBGb3JtRGF0YS4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHNcbn1cblxuZnVuY3Rpb24gbWl4aW5Cb2R5IChwcm90b3R5cGUpIHtcbiAgT2JqZWN0LmFzc2lnbihwcm90b3R5cGUucHJvdG90eXBlLCBib2R5TWl4aW5NZXRob2RzKHByb3RvdHlwZSkpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNvbnN1bWUtYm9keVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBvYmplY3RcbiAqIEBwYXJhbSB7KHZhbHVlOiB1bmtub3duKSA9PiB1bmtub3dufSBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gaW5zdGFuY2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3BlY0NvbnN1bWVCb2R5IChvYmplY3QsIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZSwgaW5zdGFuY2UpIHtcbiAgd2ViaWRsLmJyYW5kQ2hlY2sob2JqZWN0LCBpbnN0YW5jZSlcblxuICB0aHJvd0lmQWJvcnRlZChvYmplY3Rba1N0YXRlXSlcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgdW51c2FibGUsIHRoZW4gcmV0dXJuIGEgcHJvbWlzZSByZWplY3RlZFxuICAvLyAgICB3aXRoIGEgVHlwZUVycm9yLlxuICBpZiAoYm9keVVudXNhYmxlKG9iamVjdFtrU3RhdGVdLmJvZHkpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBpcyB1bnVzYWJsZScpXG4gIH1cblxuICAvLyAyLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBnaXZlbiBlcnJvciBiZSB0byByZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBjb25zdCBlcnJvclN0ZXBzID0gKGVycm9yKSA9PiBwcm9taXNlLnJlamVjdChlcnJvcilcblxuICAvLyA0LiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBkYXRhIGJlIHRvIHJlc29sdmVcbiAgLy8gICAgcHJvbWlzZSB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAgLy8gICAgd2l0aCBkYXRhLiBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwc1xuICAvLyAgICB3aXRoIHRoYXQgZXhjZXB0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSAoZGF0YSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoY29udmVydEJ5dGVzVG9KU1ZhbHVlKGRhdGEpKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yU3RlcHMoZSlcbiAgICB9XG4gIH1cblxuICAvLyA1LiBJZiBvYmplY3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gc3VjY2Vzc1N0ZXBzIHdpdGggYW5cbiAgLy8gICAgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgaWYgKG9iamVjdFtrU3RhdGVdLmJvZHkgPT0gbnVsbCkge1xuICAgIHN1Y2Nlc3NTdGVwcyhuZXcgVWludDhBcnJheSgpKVxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCBvYmplY3RcdTIwMTlzIGJvZHkgZ2l2ZW4gc3VjY2Vzc1N0ZXBzLFxuICAvLyAgICBlcnJvclN0ZXBzLCBhbmQgb2JqZWN0XHUyMDE5cyByZWxldmFudCBnbG9iYWwgb2JqZWN0LlxuICBhd2FpdCBmdWxseVJlYWRCb2R5KG9iamVjdFtrU3RhdGVdLmJvZHksIHN1Y2Nlc3NTdGVwcywgZXJyb3JTdGVwcylcblxuICAvLyA3LiBSZXR1cm4gcHJvbWlzZS5cbiAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gYm9keVVudXNhYmxlIChib2R5KSB7XG4gIC8vIEFuIG9iamVjdCBpbmNsdWRpbmcgdGhlIEJvZHkgaW50ZXJmYWNlIG1peGluIGlzXG4gIC8vIHNhaWQgdG8gYmUgdW51c2FibGUgaWYgaXRzIGJvZHkgaXMgbm9uLW51bGwgYW5kXG4gIC8vIGl0cyBib2R5XHUyMDE5cyBzdHJlYW0gaXMgZGlzdHVyYmVkIG9yIGxvY2tlZC5cbiAgcmV0dXJuIGJvZHkgIT0gbnVsbCAmJiAoYm9keS5zdHJlYW0ubG9ja2VkIHx8IHV0aWwuaXNEaXN0dXJiZWQoYm9keS5zdHJlYW0pKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI3V0Zi04LWRlY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5mdW5jdGlvbiB1dGY4RGVjb2RlQnl0ZXMgKGJ1ZmZlcikge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMS4gTGV0IGJ1ZmZlciBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgdGhyZWUgYnl0ZXMgZnJvbVxuICAvLyAgICBpb1F1ZXVlLCBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuXG4gIC8vIDIuIElmIGJ1ZmZlciBpcyAweEVGIDB4QkIgMHhCRiwgdGhlbiByZWFkIHRocmVlXG4gIC8vICAgIGJ5dGVzIGZyb20gaW9RdWV1ZS4gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gIGlmIChidWZmZXJbMF0gPT09IDB4RUYgJiYgYnVmZmVyWzFdID09PSAweEJCICYmIGJ1ZmZlclsyXSA9PT0gMHhCRikge1xuICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheSgzKVxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgVVRGLThcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cbiAgY29uc3Qgb3V0cHV0ID0gdGV4dERlY29kZXIuZGVjb2RlKGJ1ZmZlcilcblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtanNvbi1ieXRlcy10by1hLWphdmFzY3JpcHQtdmFsdWVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VKU09ORnJvbUJ5dGVzIChieXRlcykge1xuICByZXR1cm4gSlNPTi5wYXJzZSh1dGY4RGVjb2RlQnl0ZXMoYnl0ZXMpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1taW1lLXR5cGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3Jlc3BvbnNlJykuUmVzcG9uc2V8aW1wb3J0KCcuL3JlcXVlc3QnKS5SZXF1ZXN0fSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYm9keU1pbWVUeXBlIChvYmplY3QpIHtcbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gb2JqZWN0W2tTdGF0ZV1cbiAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzTGlzdC5nZXQoJ2NvbnRlbnQtdHlwZScpXG5cbiAgaWYgKGNvbnRlbnRUeXBlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlTUlNRVR5cGUoY29udGVudFR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBleHRyYWN0Qm9keSxcbiAgc2FmZWx5RXh0cmFjdEJvZHksXG4gIGNsb25lQm9keSxcbiAgbWl4aW5Cb2R5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIE5vdFN1cHBvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsga0hUVFAyQnVpbGRSZXF1ZXN0LCBrSFRUUDJDb3B5SGVhZGVycywga0hUVFAxQnVpbGRSZXF1ZXN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8vIHRva2VuUmVnRXhwIGFuZCBoZWFkZXJDaGFyUmVnZXggaGF2ZSBiZWVuIGxpZnRlZCBmcm9tXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYWluL2xpYi9faHR0cF9jb21tb24uanNcblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHRoZSBnaXZlbiB2YWwgaXMgYSB2YWxpZCBIVFRQIHRva2VuXG4gKiBwZXIgdGhlIHJ1bGVzIGRlZmluZWQgaW4gUkZDIDcyMzBcbiAqIFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi42XG4gKi9cbmNvbnN0IHRva2VuUmVnRXhwID0gL15bXFxeX2BhLXpBLVpcXC0wLTkhIyQlJicqKy58fl0rJC9cblxuLyoqXG4gKiBNYXRjaGVzIGlmIHZhbCBjb250YWlucyBhbiBpbnZhbGlkIGZpZWxkLXZjaGFyXG4gKiAgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKVxuICogIGZpZWxkLWNvbnRlbnQgID0gZmllbGQtdmNoYXIgWyAxKiggU1AgLyBIVEFCICkgZmllbGQtdmNoYXIgXVxuICogIGZpZWxkLXZjaGFyICAgID0gVkNIQVIgLyBvYnMtdGV4dFxuICovXG5jb25zdCBoZWFkZXJDaGFyUmVnZXggPSAvW15cXHRcXHgyMC1cXHg3ZVxceDgwLVxceGZmXS9cblxuLy8gVmVyaWZpZXMgdGhhdCBhIGdpdmVuIHBhdGggaXMgdmFsaWQgZG9lcyBub3QgY29udGFpbiBjb250cm9sIGNoYXJzIFxceDAwIHRvIFxceDIwXG5jb25zdCBpbnZhbGlkUGF0aFJlZ2V4ID0gL1teXFx1MDAyMS1cXHUwMGZmXS9cblxuY29uc3Qga0hhbmRsZXIgPSBTeW1ib2woJ2hhbmRsZXInKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5cbmxldCBleHRyYWN0Qm9keVxuXG50cnkge1xuICBjb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbiAgY2hhbm5lbHMuY3JlYXRlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmNyZWF0ZScpXG4gIGNoYW5uZWxzLmJvZHlTZW50ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmJvZHlTZW50JylcbiAgY2hhbm5lbHMuaGVhZGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpoZWFkZXJzJylcbiAgY2hhbm5lbHMudHJhaWxlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6dHJhaWxlcnMnKVxuICBjaGFubmVscy5lcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDplcnJvcicpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuY3JlYXRlID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5ib2R5U2VudCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuaGVhZGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMudHJhaWxlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmVycm9yID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeSxcbiAgICBpZGVtcG90ZW50LFxuICAgIGJsb2NraW5nLFxuICAgIHVwZ3JhZGUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgcmVzZXQsXG4gICAgdGhyb3dPbkVycm9yLFxuICAgIGV4cGVjdENvbnRpbnVlXG4gIH0sIGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHBhdGhbMF0gIT09ICcvJyAmJlxuICAgICAgIShwYXRoLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpICYmXG4gICAgICBtZXRob2QgIT09ICdDT05ORUNUJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYW4gYWJzb2x1dGUgVVJMIG9yIHN0YXJ0IHdpdGggYSBzbGFzaCcpXG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUGF0aFJlZ2V4LmV4ZWMocGF0aCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IHBhdGgnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWV0aG9kICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtZXRob2QgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfSBlbHNlIGlmICh0b2tlblJlZ0V4cC5leGVjKG1ldGhvZCkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXF1ZXN0IG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUgJiYgdHlwZW9mIHVwZ3JhZGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3VwZ3JhZGUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXJzVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBib2R5VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKHJlc2V0ICE9IG51bGwgJiYgdHlwZW9mIHJlc2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCByZXNldCcpXG4gICAgfVxuXG4gICAgaWYgKGV4cGVjdENvbnRpbnVlICE9IG51bGwgJiYgdHlwZW9mIGV4cGVjdENvbnRpbnVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBleHBlY3RDb250aW51ZScpXG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJzVGltZW91dCA9IGhlYWRlcnNUaW1lb3V0XG5cbiAgICB0aGlzLmJvZHlUaW1lb3V0ID0gYm9keVRpbWVvdXRcblxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yID09PSB0cnVlXG5cbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZFxuXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGlmIChib2R5ID09IG51bGwpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcblxuICAgICAgY29uc3QgclN0YXRlID0gdGhpcy5ib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgICBpZiAoIXJTdGF0ZSB8fCAhclN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgICAgIHRoaXMuZW5kSGFuZGxlciA9IGZ1bmN0aW9uIGF1dG9EZXN0cm95ICgpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gYm9keSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5idWZmZXIuYnl0ZUxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkuYnVmZmVyLCBib2R5LmJ5dGVPZmZzZXQsIGJvZHkuYnl0ZUxlbmd0aCkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5Lmxlbmd0aCA/IEJ1ZmZlci5mcm9tKGJvZHkpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShib2R5KSB8fCB1dGlsLmlzSXRlcmFibGUoYm9keSkgfHwgdXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keSBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSBSZWFkYWJsZSBzdHJlYW0sIGFuIGl0ZXJhYmxlLCBvciBhbiBhc3luYyBpdGVyYWJsZScpXG4gICAgfVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcblxuICAgIHRoaXMudXBncmFkZSA9IHVwZ3JhZGUgfHwgbnVsbFxuXG4gICAgdGhpcy5wYXRoID0gcXVlcnkgPyB1dGlsLmJ1aWxkVVJMKHBhdGgsIHF1ZXJ5KSA6IHBhdGhcblxuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luXG5cbiAgICB0aGlzLmlkZW1wb3RlbnQgPSBpZGVtcG90ZW50ID09IG51bGxcbiAgICAgID8gbWV0aG9kID09PSAnSEVBRCcgfHwgbWV0aG9kID09PSAnR0VUJ1xuICAgICAgOiBpZGVtcG90ZW50XG5cbiAgICB0aGlzLmJsb2NraW5nID0gYmxvY2tpbmcgPT0gbnVsbCA/IGZhbHNlIDogYmxvY2tpbmdcblxuICAgIHRoaXMucmVzZXQgPSByZXNldCA9PSBudWxsID8gbnVsbCA6IHJlc2V0XG5cbiAgICB0aGlzLmhvc3QgPSBudWxsXG5cbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBudWxsXG5cbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gJydcblxuICAgIC8vIE9ubHkgZm9yIEgyXG4gICAgdGhpcy5leHBlY3RDb250aW51ZSA9IGV4cGVjdENvbnRpbnVlICE9IG51bGwgPyBleHBlY3RDb250aW51ZSA6IGZhbHNlXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgYXJyYXkgbXVzdCBiZSBldmVuJylcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgICB9XG5cbiAgICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZSh0aGlzLmJvZHkpKSB7XG4gICAgICBpZiAodXRpbC5ub2RlTWFqb3IgPCAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yIDwgOCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdGb3JtLURhdGEgYm9kaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBub2RlIHYxNi44IGFuZCBuZXdlci4nKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4dHJhY3RCb2R5KSB7XG4gICAgICAgIGV4dHJhY3RCb2R5ID0gcmVxdWlyZSgnLi4vZmV0Y2gvYm9keS5qcycpLmV4dHJhY3RCb2R5XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtib2R5U3RyZWFtLCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgICAgaWYgKHRoaXMuY29udGVudFR5cGUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbiAgICAgICAgdGhpcy5oZWFkZXJzICs9IGBjb250ZW50LXR5cGU6ICR7Y29udGVudFR5cGV9XFxyXFxuYFxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5ID0gYm9keVN0cmVhbS5zdHJlYW1cbiAgICAgIHRoaXMuY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkgJiYgdGhpcy5jb250ZW50VHlwZSA9PSBudWxsICYmIGJvZHkudHlwZSkge1xuICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGJvZHkudHlwZVxuICAgICAgdGhpcy5oZWFkZXJzICs9IGBjb250ZW50LXR5cGU6ICR7Ym9keS50eXBlfVxcclxcbmBcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSB1dGlsLmdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKGNoYW5uZWxzLmhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmhlYWRlcnMucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIHJlc3BvbnNlOiB7IHN0YXR1c0NvZGUsIGhlYWRlcnMsIHN0YXR1c1RleHQgfSB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkRhdGEoY2h1bmspXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcblxuICAgIHRoaXMuY29tcGxldGVkID0gdHJ1ZVxuICAgIGlmIChjaGFubmVscy50cmFpbGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMudHJhaWxlcnMucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIHRyYWlsZXJzIH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbXBsZXRlKHRyYWlsZXJzKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETyAoZml4KTogVGhpcyBtaWdodCBiZSBhIGJhZCBpZGVhP1xuICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICB9XG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGlmIChjaGFubmVscy5lcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuZXJyb3IucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMsIGVycm9yIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuYWJvcnRlZCA9IHRydWVcblxuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25GaW5hbGx5ICgpIHtcbiAgICBpZiAodGhpcy5lcnJvckhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmRIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlbmQnLCB0aGlzLmVuZEhhbmRsZXIpXG4gICAgICB0aGlzLmVuZEhhbmRsZXIgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogYWRqdXN0IHRvIHN1cHBvcnQgSDJcbiAgYWRkSGVhZGVyIChrZXksIHZhbHVlKSB7XG4gICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBrZXksIHZhbHVlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMUJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIC8vIFRPRE86IE1pZ3JhdGUgaGVhZGVyIHBhcnNpbmcgaGVyZSwgdG8gbWFrZSBSZXF1ZXN0c1xuICAgIC8vIEhUVFAgYWdub3N0aWNcbiAgICByZXR1cm4gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgc3RhdGljIFtrSFRUUDJCdWlsZFJlcXVlc3RdIChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gb3B0cy5oZWFkZXJzXG4gICAgb3B0cyA9IHsgLi4ub3B0cywgaGVhZGVyczogbnVsbCB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3Qob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzID0ge31cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHJlcXVlc3QsIGtleSwgaGVhZGVyc1trZXldLCB0cnVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0XG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkNvcHlIZWFkZXJzXSAocmF3KSB7XG4gICAgY29uc3QgcmF3SGVhZGVycyA9IHJhdy5zcGxpdCgnXFxyXFxuJylcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHJhd0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGhlYWRlci5zcGxpdCgnOiAnKVxuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIGNvbnRpbnVlXG5cbiAgICAgIGlmIChoZWFkZXJzW2tleV0pIGhlYWRlcnNba2V5XSArPSBgLCR7dmFsdWV9YFxuICAgICAgZWxzZSBoZWFkZXJzW2tleV0gPSB2YWx1ZVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0hlYWRlclZhbHVlIChrZXksIHZhbCwgc2tpcEFwcGVuZCkge1xuICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9XG5cbiAgdmFsID0gdmFsICE9IG51bGwgPyBgJHt2YWx9YCA6ICcnXG5cbiAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICByZXR1cm4gc2tpcEFwcGVuZCA/IHZhbCA6IGAke2tleX06ICR7dmFsfVxcclxcbmBcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0hlYWRlciAocmVxdWVzdCwga2V5LCB2YWwsIHNraXBBcHBlbmQgPSBmYWxzZSkge1xuICBpZiAodmFsICYmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfSBlbHNlIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKFxuICAgIHJlcXVlc3QuaG9zdCA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2hvc3QnXG4gICkge1xuICAgIGlmIChoZWFkZXJDaGFyUmVnZXguZXhlYyh2YWwpICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgfVxuICAgIC8vIENvbnN1bWVkIGJ5IENsaWVudFxuICAgIHJlcXVlc3QuaG9zdCA9IHZhbFxuICB9IGVsc2UgaWYgKFxuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDE0ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID0gcGFyc2VJbnQodmFsLCAxMClcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXF1ZXN0LmNvbnRlbnRMZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC1sZW5ndGggaGVhZGVyJylcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9PT0gbnVsbCAmJlxuICAgIGtleS5sZW5ndGggPT09IDEyICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnXG4gICkge1xuICAgIHJlcXVlc3QuY29udGVudFR5cGUgPSB2YWxcbiAgICBpZiAoc2tpcEFwcGVuZCkgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwsIHNraXBBcHBlbmQpXG4gICAgZWxzZSByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDE3ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd0cmFuc2Zlci1lbmNvZGluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHRyYW5zZmVyLWVuY29kaW5nIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTAgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nXG4gICkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwudG9Mb3dlckNhc2UoKSA6IG51bGxcbiAgICBpZiAodmFsdWUgIT09ICdjbG9zZScgJiYgdmFsdWUgIT09ICdrZWVwLWFsaXZlJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb24gaGVhZGVyJylcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnY2xvc2UnKSB7XG4gICAgICByZXF1ZXN0LnJlc2V0ID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZSdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXAtYWxpdmUgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSA3ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd1cGdyYWRlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXBncmFkZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDYgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2V4cGVjdCdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKCdleHBlY3QgaGVhZGVyIG5vdCBzdXBwb3J0ZWQnKVxuICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMoa2V5KSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoc2tpcEFwcGVuZCkge1xuICAgICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcnNba2V5XSkgcmVxdWVzdC5oZWFkZXJzW2tleV0gKz0gYCwke3Byb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZCl9YFxuICAgICAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0sIHNraXBBcHBlbmQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2tpcEFwcGVuZCkgcmVxdWVzdC5oZWFkZXJzW2tleV0gPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwsIHNraXBBcHBlbmQpXG4gICAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVxdWVzdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXInKVxuY29uc3Qge1xuICBDbGllbnREZXN0cm95ZWRFcnJvcixcbiAgQ2xpZW50Q2xvc2VkRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtEZXN0cm95LCBrQ2xvc2UsIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBrRGVzdHJveWVkID0gU3ltYm9sKCdkZXN0cm95ZWQnKVxuY29uc3Qga0Nsb3NlZCA9IFN5bWJvbCgnY2xvc2VkJylcbmNvbnN0IGtPbkRlc3Ryb3llZCA9IFN5bWJvbCgnb25EZXN0cm95ZWQnKVxuY29uc3Qga09uQ2xvc2VkID0gU3ltYm9sKCdvbkNsb3NlZCcpXG5jb25zdCBrSW50ZXJjZXB0ZWREaXNwYXRjaCA9IFN5bWJvbCgnSW50ZXJjZXB0ZWQgRGlzcGF0Y2gnKVxuXG5jbGFzcyBEaXNwYXRjaGVyQmFzZSBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IGZhbHNlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgIHRoaXNba0Nsb3NlZF0gPSBmYWxzZVxuICAgIHRoaXNba09uQ2xvc2VkXSA9IFtdXG4gIH1cblxuICBnZXQgZGVzdHJveWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trRGVzdHJveWVkXVxuICB9XG5cbiAgZ2V0IGNsb3NlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nsb3NlZF1cbiAgfVxuXG4gIGdldCBpbnRlcmNlcHRvcnMgKCkge1xuICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRvcnNdXG4gIH1cblxuICBzZXQgaW50ZXJjZXB0b3JzIChuZXdJbnRlcmNlcHRvcnMpIHtcbiAgICBpZiAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgICBmb3IgKGxldCBpID0gbmV3SW50ZXJjZXB0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gdGhpc1trSW50ZXJjZXB0b3JzXVtpXVxuICAgICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnRlcmNlcHRvciBtdXN0IGJlIGFuIGZ1bmN0aW9uJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBuZXdJbnRlcmNlcHRvcnNcbiAgfVxuXG4gIGNsb3NlIChjYWxsYmFjaykge1xuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpLCBudWxsKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICBpZiAodGhpc1trT25DbG9zZWRdKSB7XG4gICAgICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobnVsbCwgbnVsbCkpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzW2tDbG9zZWRdID0gdHJ1ZVxuICAgIHRoaXNba09uQ2xvc2VkXS5wdXNoKGNhbGxiYWNrKVxuXG4gICAgY29uc3Qgb25DbG9zZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzW2tPbkNsb3NlZF1cbiAgICAgIHRoaXNba09uQ2xvc2VkXSA9IG51bGxcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShudWxsLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNob3VsZCBub3QgZXJyb3IuXG4gICAgdGhpc1trQ2xvc2VdKClcbiAgICAgIC50aGVuKCgpID0+IHRoaXMuZGVzdHJveSgpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhvbkNsb3NlZClcbiAgICAgIH0pXG4gIH1cblxuICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gZXJyXG4gICAgICBlcnIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuZGVzdHJveShlcnIsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyID8gLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBuZXZlciBlcnJvciAqLyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRGVzdHJveWVkXSkge1xuICAgICAgaWYgKHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIGVyciA9IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpc1trRGVzdHJveWVkXSA9IHRydWVcbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSB0aGlzW2tPbkRlc3Ryb3llZF0gfHwgW11cbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uRGVzdHJveWVkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25EZXN0cm95ZWRdXG4gICAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Rlc3Ryb3ldKGVycikudGhlbigoKSA9PiB7XG4gICAgICBxdWV1ZU1pY3JvdGFzayhvbkRlc3Ryb3llZClcbiAgICB9KVxuICB9XG5cbiAgW2tJbnRlcmNlcHRlZERpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghdGhpc1trSW50ZXJjZXB0b3JzXSB8fCB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0gPSB0aGlzW2tEaXNwYXRjaF1cbiAgICAgIHJldHVybiB0aGlzW2tEaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9XG5cbiAgICBsZXQgZGlzcGF0Y2ggPSB0aGlzW2tEaXNwYXRjaF0uYmluZCh0aGlzKVxuICAgIGZvciAobGV0IGkgPSB0aGlzW2tJbnRlcmNlcHRvcnNdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBkaXNwYXRjaCA9IHRoaXNba0ludGVyY2VwdG9yc11baV0oZGlzcGF0Y2gpXG4gICAgfVxuICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gZGlzcGF0Y2hcbiAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoYW5kbGVyIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0gfHwgdGhpc1trT25EZXN0cm95ZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tDbG9zZWRdKSB7XG4gICAgICAgIHRocm93IG5ldyBDbGllbnRDbG9zZWRFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXShvcHRzLCBoYW5kbGVyKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaGFuZGxlci5vbkVycm9yKGVycilcblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzcGF0Y2hlckJhc2VcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIENvbm5lY3RUaW1lb3V0RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIXByb2Nlc3MuZW52Lk5PREVfVjhfQ09WRVJBR0UpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCd0bHMnKVxuICAgICAgfVxuICAgICAgc2VydmVybmFtZSA9IHNlcnZlcm5hbWUgfHwgb3B0aW9ucy5zZXJ2ZXJuYW1lIHx8IHV0aWwuZ2V0U2VydmVyTmFtZShob3N0KSB8fCBudWxsXG5cbiAgICAgIGNvbnN0IHNlc3Npb25LZXkgPSBzZXJ2ZXJuYW1lIHx8IGhvc3RuYW1lXG4gICAgICBjb25zdCBzZXNzaW9uID0gc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KSB8fCBudWxsXG5cbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDE2Mzg0LCAvLyBUTFMgaW4gbm9kZSBjYW4ndCBoYXZlIGJpZ2dlciBIV00gYW55d2F5Li4uXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHNlcnZlcm5hbWUsXG4gICAgICAgIHNlc3Npb24sXG4gICAgICAgIGxvY2FsQWRkcmVzcyxcbiAgICAgICAgLy8gVE9ETyhIVFRQLzIpOiBBZGQgc3VwcG9ydCBmb3IgaDJjXG4gICAgICAgIEFMUE5Qcm90b2NvbHM6IGFsbG93SDIgPyBbJ2h0dHAvMS4xJywgJ2gyJ10gOiBbJ2h0dHAvMS4xJ10sXG4gICAgICAgIHNvY2tldDogaHR0cFNvY2tldCwgLy8gdXBncmFkZSBzb2NrZXQgY29ubmVjdGlvblxuICAgICAgICBwb3J0OiBwb3J0IHx8IDQ0MyxcbiAgICAgICAgaG9zdDogaG9zdG5hbWVcbiAgICAgIH0pXG5cbiAgICAgIHNvY2tldFxuICAgICAgICAub24oJ3Nlc3Npb24nLCBmdW5jdGlvbiAoc2Vzc2lvbikge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IENhbiBhIHNlc3Npb24gYmVjb21lIGludmFsaWQgb25jZSBlc3RhYmxpc2hlZD8gRG9uJ3QgdGhpbmsgc28/XG4gICAgICAgICAgc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoIWh0dHBTb2NrZXQsICdodHRwU29ja2V0IGNhbiBvbmx5IGJlIHNlbnQgb24gVExTIHVwZGF0ZScpXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0OiBwb3J0IHx8IDgwLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNhbmNlbFRpbWVvdXQgPSBzZXR1cFRpbWVvdXQoKCkgPT4gb25Db25uZWN0VGltZW91dChzb2NrZXQpLCB0aW1lb3V0KVxuXG4gICAgc29ja2V0XG4gICAgICAuc2V0Tm9EZWxheSh0cnVlKVxuICAgICAgLm9uY2UocHJvdG9jb2wgPT09ICdodHRwczonID8gJ3NlY3VyZUNvbm5lY3QnIDogJ2Nvbm5lY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQoKVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKGVycilcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHJldHVybiBzb2NrZXRcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFRpbWVvdXQgKG9uQ29ubmVjdFRpbWVvdXQsIHRpbWVvdXQpIHtcbiAgaWYgKCF0aW1lb3V0KSB7XG4gICAgcmV0dXJuICgpID0+IHt9XG4gIH1cblxuICBsZXQgczEgPSBudWxsXG4gIGxldCBzMiA9IG51bGxcbiAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW90b3Jpc2Ugc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgczIgPSBzZXRJbW1lZGlhdGUoKCkgPT4gb25Db25uZWN0VGltZW91dCgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25Db25uZWN0VGltZW91dCgpXG4gICAgICB9XG4gICAgfSlcbiAgfSwgdGltZW91dClcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgIGNsZWFySW1tZWRpYXRlKHMyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uQ29ubmVjdFRpbWVvdXQgKHNvY2tldCkge1xuICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgQ29ubmVjdFRpbWVvdXRFcnJvcigpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkQ29ubmVjdG9yXG4iLCBudWxsLCBudWxsLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrQm9keVVzZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuXG5jb25zdCByZWRpcmVjdGFibGVTdGF0dXNDb2RlcyA9IFszMDAsIDMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5jb25zdCBrQm9keSA9IFN5bWJvbCgnYm9keScpXG5cbmNsYXNzIEJvZHlBc3luY0l0ZXJhYmxlIHtcbiAgY29uc3RydWN0b3IgKGJvZHkpIHtcbiAgICB0aGlzW2tCb2R5XSA9IGJvZHlcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSBmYWxzZVxuICB9XG5cbiAgYXN5bmMgKiBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdICgpIHtcbiAgICBhc3NlcnQoIXRoaXNba0JvZHlVc2VkXSwgJ2Rpc3R1cmJlZCcpXG4gICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgIHlpZWxkICogdGhpc1trQm9keV1cbiAgfVxufVxuXG5jbGFzcyBSZWRpcmVjdEhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcikge1xuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgdXRpbC52YWxpZGF0ZUhhbmRsZXIoaGFuZGxlciwgb3B0cy5tZXRob2QsIG9wdHMudXBncmFkZSlcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBkaXNwYXRjaFxuICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLm9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIG9wdHMgbXVzdCBiZSBhIGNvcHlcbiAgICB0aGlzLm1heFJlZGlyZWN0aW9ucyA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmhpc3RvcnkgPSBbXVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0odGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBQcm92aWRlIHNvbWUgd2F5IGZvciB0aGUgdXNlciB0byBjYWNoZSB0aGUgZmlsZSB0byBlLmcuIC90bXBcbiAgICAgIC8vIHNvIHRoYXQgaXQgY2FuIGJlIGRpc3BhdGNoZWQgYWdhaW4/XG4gICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIDEwMC1leHBlY3Qgc3VwcG9ydCB0byBwcm92aWRlIGEgd2F5IHRvIGRvIHRoaXMgcHJvcGVybHk/XG4gICAgICBpZiAodXRpbC5ib2R5TGVuZ3RoKHRoaXMub3B0cy5ib2R5KSA9PT0gMCkge1xuICAgICAgICB0aGlzLm9wdHMuYm9keVxuICAgICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSlcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5ib2R5LnJlYWRhYmxlRGlkUmVhZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5W2tCb2R5VXNlZF0gPSBmYWxzZVxuICAgICAgICBFRS5wcm90b3R5cGUub24uY2FsbCh0aGlzLm9wdHMuYm9keSwgJ2RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpc1trQm9keVVzZWRdID0gdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmJvZHkgJiYgdHlwZW9mIHRoaXMub3B0cy5ib2R5LnBpcGVUbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVE9ETyAoZml4KTogV2UgY2FuJ3QgYWNjZXNzIFJlYWRhYmxlU3RyZWFtIGludGVybmFsIHN0YXRlXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gZGlzdHVyYmVkLiBUaGlzIGlzIGp1c3RcbiAgICAgIC8vIGEgd29ya2Fyb3VuZC5cbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbmV3IEJvZHlBc3luY0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLm9wdHMuYm9keSAmJlxuICAgICAgdHlwZW9mIHRoaXMub3B0cy5ib2R5ICE9PSAnc3RyaW5nJyAmJlxuICAgICAgIUFycmF5QnVmZmVyLmlzVmlldyh0aGlzLm9wdHMuYm9keSkgJiZcbiAgICAgIHV0aWwuaXNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBhbGxvdyByZS11c2luZyBpdGVyYWJsZSBpZiAhdGhpcy5vcHRzLmlkZW1wb3RlbnRcbiAgICAgIC8vIG9yIHRocm91Z2ggc29tZSBvdGhlciBmbGFnP1xuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoYWJvcnQsIHsgaGlzdG9yeTogdGhpcy5oaXN0b3J5IH0pXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgdGhpcy5sb2NhdGlvbiA9IHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMgfHwgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSlcbiAgICAgID8gbnVsbFxuICAgICAgOiBwYXJzZUxvY2F0aW9uKHN0YXR1c0NvZGUsIGhlYWRlcnMpXG5cbiAgICBpZiAodGhpcy5vcHRzLm9yaWdpbikge1xuICAgICAgdGhpcy5oaXN0b3J5LnB1c2gobmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfVxuXG4gICAgY29uc3QgeyBvcmlnaW4sIHBhdGhuYW1lLCBzZWFyY2ggfSA9IHV0aWwucGFyc2VVUkwobmV3IFVSTCh0aGlzLmxvY2F0aW9uLCB0aGlzLm9wdHMub3JpZ2luICYmIG5ldyBVUkwodGhpcy5vcHRzLnBhdGgsIHRoaXMub3B0cy5vcmlnaW4pKSlcbiAgICBjb25zdCBwYXRoID0gc2VhcmNoID8gYCR7cGF0aG5hbWV9JHtzZWFyY2h9YCA6IHBhdGhuYW1lXG5cbiAgICAvLyBSZW1vdmUgaGVhZGVycyByZWZlcnJpbmcgdG8gdGhlIG9yaWdpbmFsIFVSTC5cbiAgICAvLyBCeSBkZWZhdWx0IGl0IGlzIEhvc3Qgb25seSwgdW5sZXNzIGl0J3MgYSAzMDMgKHNlZSBiZWxvdyksIHdoaWNoIHJlbW92ZXMgYWxzbyBhbGwgQ29udGVudC0qIGhlYWRlcnMuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbiAgICB0aGlzLm9wdHMuaGVhZGVycyA9IGNsZWFuUmVxdWVzdEhlYWRlcnModGhpcy5vcHRzLmhlYWRlcnMsIHN0YXR1c0NvZGUgPT09IDMwMywgdGhpcy5vcHRzLm9yaWdpbiAhPT0gb3JpZ2luKVxuICAgIHRoaXMub3B0cy5wYXRoID0gcGF0aFxuICAgIHRoaXMub3B0cy5vcmlnaW4gPSBvcmlnaW5cbiAgICB0aGlzLm9wdHMubWF4UmVkaXJlY3Rpb25zID0gMFxuICAgIHRoaXMub3B0cy5xdWVyeSA9IG51bGxcblxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbiAgICAvLyBJbiBjYXNlIG9mIEhUVFAgMzAzLCBhbHdheXMgcmVwbGFjZSBtZXRob2QgdG8gYmUgZWl0aGVyIEhFQUQgb3IgR0VUXG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDMwMyAmJiB0aGlzLm9wdHMubWV0aG9kICE9PSAnSEVBRCcpIHtcbiAgICAgIHRoaXMub3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAvKlxuICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuXG4gICAgICAgIFRMRFI6IHVuZGljaSBhbHdheXMgaWdub3JlcyAzeHggcmVzcG9uc2UgYm9kaWVzLlxuXG4gICAgICAgIFJlZGlyZWN0aW9uIGlzIHVzZWQgdG8gc2VydmUgdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBmcm9tIGFub3RoZXIgVVJMLCBzbyBpdCBpcyBhc3N1bWVzIHRoYXRcbiAgICAgICAgbm8gYm9keSBpcyBnZW5lcmF0ZWQgKGFuZCB0aHVzIGNhbiBiZSBpZ25vcmVkKS4gRXZlbiB0aG91Z2ggZ2VuZXJhdGluZyBhIGJvZHkgaXMgbm90IHByb2hpYml0ZWQuXG5cbiAgICAgICAgRm9yIHN0YXR1cyAzMDEsIDMwMiwgMzAzLCAzMDcgYW5kIDMwOCAodGhlIGxhdHRlciBmcm9tIFJGQyA3MjM4KSwgdGhlIHNwZWNzIG1lbnRpb24gdGhhdCB0aGUgYm9keSB1c3VhbGx5XG4gICAgICAgICh3aGljaCBtZWFucyBpdCdzIG9wdGlvbmFsIGFuZCBub3QgbWFuZGF0ZWQpIGNvbnRhaW4ganVzdCBhbiBoeXBlcmxpbmsgdG8gdGhlIHZhbHVlIG9mXG4gICAgICAgIHRoZSBMb2NhdGlvbiByZXNwb25zZSBoZWFkZXIsIHNvIHRoZSBib2R5IGNhbiBiZSBpZ25vcmVkIHNhZmVseS5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMCwgd2hpY2ggaXMgXCJNdWx0aXBsZSBDaG9pY2VzXCIsIHRoZSBzcGVjIG1lbnRpb25zIGJvdGggZ2VuZXJhdGluZyBhIExvY2F0aW9uXG4gICAgICAgIHJlc3BvbnNlIGhlYWRlciBBTkQgYSByZXNwb25zZSBib2R5IHdpdGggdGhlIG90aGVyIHBvc3NpYmxlIGxvY2F0aW9uIHRvIGZvbGxvdy5cbiAgICAgICAgU2luY2UgdGhlIHNwZWMgZXhwbGljaXRpbHkgY2hvb3NlcyBub3QgdG8gc3BlY2lmeSBhIGZvcm1hdCBmb3Igc3VjaCBib2R5IGFuZCBsZWF2ZSBpdCB0b1xuICAgICAgICBzZXJ2ZXJzIGFuZCBicm93c2VycyBpbXBsZW1lbnRvcnMsIHdlIGlnbm9yZSB0aGUgYm9keSBhcyB0aGVyZSBpcyBubyBzcGVjaWZpZWQgd2F5IHRvIGV2ZW50dWFsbHkgcGFyc2UgaXQuXG4gICAgICAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGlmICh0aGlzLmxvY2F0aW9uKSB7XG4gICAgICAvKlxuICAgICAgICBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuXG4gICAgICAgIFRMRFI6IHVuZGljaSBhbHdheXMgaWdub3JlcyAzeHggcmVzcG9uc2UgdHJhaWxlcnMgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIGluIGNhc2Ugb2YgcmVkaXJlY3Rpb25zXG4gICAgICAgIGFuZCBuZWl0aGVyIGFyZSB1c2VmdWwgaWYgcHJlc2VudC5cblxuICAgICAgICBTZWUgY29tbWVudCBvbiBvbkRhdGEgbWV0aG9kIGFib3ZlIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9ucy5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgKHsgbWF4UmVkaXJlY3Rpb25zOiBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0pIHtcbiAgcmV0dXJuIChkaXNwYXRjaCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBJbnRlcmNlcHQgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHsgbWF4UmVkaXJlY3Rpb25zID0gZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9ID0gb3B0c1xuXG4gICAgICBpZiAoIW1heFJlZGlyZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gbmV3IFJlZGlyZWN0SGFuZGxlcihkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgb3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gU3RvcCBzdWIgZGlzcGF0Y2hlciBmcm9tIGFsc28gcmVkaXJlY3RpbmcuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcbiIsICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDc0xnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMWtBSUFCQkdHcENBRGNEQUNBQVFnQTNBd0FnQUVFNGFrSUFOd01BSUFCQk1HcENBRGNEQUNBQVFTaHFRZ0EzQXdBZ0FFRWdha0lBTndNQUlBQkJFR3BDQURjREFDQUFRUWhxUWdBM0F3QWdBRUhkQVRZQ0hFRUFDM3NCQVg4Q1FDQUFLQUlNSWdNTkFBSkFJQUFvQWdSRkRRQWdBQ0FCTmdJRUN3SkFJQUFnQVNBQ0VNU0FnSUFBSWdNTkFDQUFLQUlNRHdzZ0FDQUROZ0ljUVFBaEF5QUFLQUlFSWdGRkRRQWdBQ0FCSUFJZ0FDZ0NDQkdCZ0lDQUFBQWlBVVVOQUNBQUlBSTJBaFFnQUNBQk5nSU1JQUVoQXdzZ0F3dms4d0VERG44RGZnUi9JNENBZ0lBQVFSQnJJZ01rZ0lDQWdBQWdBU0VFSUFFaEJTQUJJUVlnQVNFSElBRWhDQ0FCSVFrZ0FTRUtJQUVoQ3lBQklRd2dBU0VOSUFFaERpQUJJUThDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUNnQ0hDSVFRWDlxRHQwQjJnRUIyUUVDQXdRRkJnY0lDUW9MREEwTzJBRVBFTmNCRVJMV0FSTVVGUllYR0JrYUcrQUIzd0VjSFI3VkFSOGdJU0lqSkNYVUFTWW5LQ2txS3l6VEFkSUJMUzdSQWRBQkx6QXhNak0wTlRZM09EazZPenc5UGo5QVFVSkRSRVZHMndGSFNFbEt6d0hPQVV2TkFVek1BVTFPVDFCUlVsTlVWVlpYV0ZsYVcxeGRYbDlnWVdKalpHVm1aMmhwYW10c2JXNXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2Y0QUJnUUdDQVlNQmhBR0ZBWVlCaHdHSUFZa0JpZ0dMQVl3QmpRR09BWThCa0FHUkFaSUJrd0dVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0hMQWNvQnVBSEpBYmtCeUFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQVFEY0FRdEJBQ0VRRE1ZQkMwRU9JUkFNeFFFTFFRMGhFQXpFQVF0QkR5RVFETU1CQzBFUUlSQU13Z0VMUVJNaEVBekJBUXRCRkNFUURNQUJDMEVWSVJBTXZ3RUxRUlloRUF5K0FRdEJGeUVRREwwQkMwRVlJUkFNdkFFTFFSa2hFQXk3QVF0QkdpRVFETG9CQzBFYklSQU11UUVMUVJ3aEVBeTRBUXRCQ0NFUURMY0JDMEVkSVJBTXRnRUxRU0FoRUF5MUFRdEJIeUVRRExRQkMwRUhJUkFNc3dFTFFTRWhFQXl5QVF0QklpRVFETEVCQzBFZUlSQU1zQUVMUVNNaEVBeXZBUXRCRWlFUURLNEJDMEVSSVJBTXJRRUxRU1FoRUF5c0FRdEJKU0VRREtzQkMwRW1JUkFNcWdFTFFTY2hFQXlwQVF0Qnd3RWhFQXlvQVF0QktTRVFES2NCQzBFcklSQU1wZ0VMUVN3aEVBeWxBUXRCTFNFUURLUUJDMEV1SVJBTW93RUxRUzhoRUF5aUFRdEJ4QUVoRUF5aEFRdEJNQ0VRREtBQkMwRTBJUkFNbndFTFFRd2hFQXllQVF0Qk1TRVFESjBCQzBFeUlSQU1uQUVMUVRNaEVBeWJBUXRCT1NFUURKb0JDMEUxSVJBTW1RRUxRY1VCSVJBTW1BRUxRUXNoRUF5WEFRdEJPaUVRREpZQkMwRTJJUkFNbFFFTFFRb2hFQXlVQVF0Qk55RVFESk1CQzBFNElSQU1rZ0VMUVR3aEVBeVJBUXRCT3lFUURKQUJDMEU5SVJBTWp3RUxRUWtoRUF5T0FRdEJLQ0VRREkwQkMwRStJUkFNakFFTFFUOGhFQXlMQVF0QndBQWhFQXlLQVF0QndRQWhFQXlKQVF0QndnQWhFQXlJQVF0Qnd3QWhFQXlIQVF0QnhBQWhFQXlHQVF0QnhRQWhFQXlGQVF0QnhnQWhFQXlFQVF0QktpRVFESU1CQzBISEFDRVFESUlCQzBISUFDRVFESUVCQzBISkFDRVFESUFCQzBIS0FDRVFESDhMUWNzQUlSQU1mZ3RCelFBaEVBeDlDMEhNQUNFUURId0xRYzRBSVJBTWV3dEJ6d0FoRUF4NkMwSFFBQ0VRREhrTFFkRUFJUkFNZUF0QjBnQWhFQXgzQzBIVEFDRVFESFlMUWRRQUlSQU1kUXRCMWdBaEVBeDBDMEhWQUNFUURITUxRUVloRUF4eUMwSFhBQ0VRREhFTFFRVWhFQXh3QzBIWUFDRVFERzhMUVFRaEVBeHVDMEhaQUNFUURHMExRZG9BSVJBTWJBdEIyd0FoRUF4ckMwSGNBQ0VRREdvTFFRTWhFQXhwQzBIZEFDRVFER2dMUWQ0QUlSQU1ad3RCM3dBaEVBeG1DMEhoQUNFUURHVUxRZUFBSVJBTVpBdEI0Z0FoRUF4akMwSGpBQ0VRREdJTFFRSWhFQXhoQzBIa0FDRVFER0FMUWVVQUlSQU1Yd3RCNWdBaEVBeGVDMEhuQUNFUURGMExRZWdBSVJBTVhBdEI2UUFoRUF4YkMwSHFBQ0VRREZvTFFlc0FJUkFNV1F0QjdBQWhFQXhZQzBIdEFDRVFERmNMUWU0QUlSQU1WZ3RCN3dBaEVBeFZDMEh3QUNFUURGUUxRZkVBSVJBTVV3dEI4Z0FoRUF4U0MwSHpBQ0VRREZFTFFmUUFJUkFNVUF0QjlRQWhFQXhQQzBIMkFDRVFERTRMUWZjQUlSQU1UUXRCK0FBaEVBeE1DMEg1QUNFUURFc0xRZm9BSVJBTVNndEIrd0FoRUF4SkMwSDhBQ0VRREVnTFFmMEFJUkFNUnd0Qi9nQWhFQXhHQzBIL0FDRVFERVVMUVlBQklSQU1SQXRCZ1FFaEVBeERDMEdDQVNFUURFSUxRWU1CSVJBTVFRdEJoQUVoRUF4QUMwR0ZBU0VRREQ4TFFZWUJJUkFNUGd0Qmh3RWhFQXc5QzBHSUFTRVFERHdMUVlrQklSQU1Pd3RCaWdFaEVBdzZDMEdMQVNFUUREa0xRWXdCSVJBTU9BdEJqUUVoRUF3M0MwR09BU0VRRERZTFFZOEJJUkFNTlF0QmtBRWhFQXcwQzBHUkFTRVFERE1MUVpJQklSQU1NZ3RCa3dFaEVBd3hDMEdVQVNFUUREQUxRWlVCSVJBTUx3dEJsZ0VoRUF3dUMwR1hBU0VRREMwTFFaZ0JJUkFNTEF0Qm1RRWhFQXdyQzBHYUFTRVFEQ29MUVpzQklSQU1LUXRCbkFFaEVBd29DMEdkQVNFUURDY0xRWjRCSVJBTUpndEJud0VoRUF3bEMwR2dBU0VRRENRTFFhRUJJUkFNSXd0Qm9nRWhFQXdpQzBHakFTRVFEQ0VMUWFRQklSQU1JQXRCcFFFaEVBd2ZDMEdtQVNFUURCNExRYWNCSVJBTUhRdEJxQUVoRUF3Y0MwR3BBU0VRREJzTFFhb0JJUkFNR2d0QnF3RWhFQXdaQzBHc0FTRVFEQmdMUWEwQklSQU1Gd3RCcmdFaEVBd1dDMEVCSVJBTUZRdEJyd0VoRUF3VUMwR3dBU0VRREJNTFFiRUJJUkFNRWd0QnN3RWhFQXdSQzBHeUFTRVFEQkFMUWJRQklSQU1Ed3RCdFFFaEVBd09DMEcyQVNFUURBMExRYmNCSVJBTURBdEJ1QUVoRUF3TEMwRzVBU0VRREFvTFFib0JJUkFNQ1F0QnV3RWhFQXdJQzBIR0FTRVFEQWNMUWJ3QklSQU1CZ3RCdlFFaEVBd0ZDMEcrQVNFUURBUUxRYjhCSVJBTUF3dEJ3QUVoRUF3Q0MwSENBU0VRREFFTFFjRUJJUkFMQTBBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFEc2NCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZUh5QWhJeVVvUDBCQlJFVkdSMGhKU2t0TVRVOVFVVkpUM2dOWFdWdGNYV0JpWldabmFHbHFhMnh0YjNCeGNuTjBkWFozZUhsNmUzeDlmb0FCZ2dHRkFZWUJod0dKQVlzQmpBR05BWTRCandHUUFaRUJsQUdWQVpZQmx3R1lBWmtCbWdHYkFad0JuUUdlQVo4Qm9BR2hBYUlCb3dHa0FhVUJwZ0duQWFnQnFRR3FBYXNCckFHdEFhNEJyd0d3QWJFQnNnR3pBYlFCdFFHMkFiY0J1QUc1QWJvQnV3RzhBYjBCdmdHL0FjQUJ3UUhDQWNNQnhBSEZBY1lCeHdISUFja0J5Z0hMQWN3QnpRSE9BYzhCMEFIUkFkSUIwd0hVQWRVQjFnSFhBZGdCMlFIYUFkc0IzQUhkQWQ0QjRBSGhBZUlCNHdIa0FlVUI1Z0huQWVnQjZRSHFBZXNCN0FIdEFlNEI3d0h3QWZFQjhnSHpBWmtDcEFLd0F2NEMvZ0lMSUFFaUJDQUNSdzN6QVVIZEFTRVFEUDhEQ3lBQkloQWdBa2NOM1FGQnd3RWhFQXorQXdzZ0FTSUJJQUpIRFpBQlFmY0FJUkFNL1FNTElBRWlBU0FDUncyR0FVSHZBQ0VRRFB3REN5QUJJZ0VnQWtjTmYwSHFBQ0VRRFBzREN5QUJJZ0VnQWtjTmUwSG9BQ0VRRFBvREN5QUJJZ0VnQWtjTmVFSG1BQ0VRRFBrREN5QUJJZ0VnQWtjTkdrRVlJUkFNK0FNTElBRWlBU0FDUncwVVFSSWhFQXozQXdzZ0FTSUJJQUpIRFZsQnhRQWhFQXoyQXdzZ0FTSUJJQUpIRFVwQlB5RVFEUFVEQ3lBQklnRWdBa2NOU0VFOElSQU05QU1MSUFFaUFTQUNSdzFCUVRFaEVBenpBd3NnQUMwQUxrRUJSZzNyQXd5SEFnc2dBQ0FCSWdFZ0FoREFnSUNBQUVFQlJ3M21BU0FBUWdBM0F5QU01d0VMSUFBZ0FTSUJJQUlRdElDQWdBQWlFQTNuQVNBQklRRU05UUlMQWtBZ0FTSUJJQUpIRFFCQkJpRVFEUEFEQ3lBQUlBRkJBV29pQVNBQ0VMdUFnSUFBSWhBTjZBRWdBU0VCRERFTElBQkNBRGNESUVFU0lSQU0xUU1MSUFFaUVDQUNSdzByUVIwaEVBenRBd3NDUUNBQklnRWdBa1lOQUNBQlFRRnFJUUZCRUNFUUROUURDMEVISVJBTTdBTUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjVRRkJDQ0VRRE9zREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFVUlSQU0wZ01MUVFraEVBenFBd3NnQVNFQklBQXBBeUJRRGVRQklBRWhBUXp5QWdzQ1FDQUJJZ0VnQWtjTkFFRUxJUkFNNlFNTElBQWdBVUVCYWlJQklBSVF0b0NBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM2xBU0FCSVFFTThnSUxJQUFnQVNJQklBSVF1SUNBZ0FBaUVBM21BU0FCSVFFTURRc2dBQ0FCSWdFZ0FoQzZnSUNBQUNJUURlY0JJQUVoQVF6d0Fnc0NRQ0FCSWdFZ0FrY05BRUVQSVJBTTVRTUxJQUV0QUFBaUVFRTdSZzBJSUJCQkRVY042QUVnQVVFQmFpRUJETzhDQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONkFFZ0FTRUJEUElDQ3dOQUFrQWdBUzBBQUVId3RZQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrY042d0VnQUNnQ0JDRVFJQUJCQURZQ0JDQUFJQkFnQVVFQmFpSUJFTG1BZ0lBQUloQU42Z0VnQVNFQkRQUUNDeUFCUVFGcUlnRWdBa2NOQUF0QkVpRVFET0lEQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONlFFZ0FTRUJEQW9MSUFFaUFTQUNSdzBHUVJzaEVBemdBd3NDUUNBQklnRWdBa2NOQUVFV0lSQU00QU1MSUFCQmlvQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFBZ0FTQUNFTGlBZ0lBQUloQU42Z0VnQVNFQlFTQWhFQXpHQXdzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFFSHd0NENBQUdvdEFBQWlFRUVDUmcwQUFrQWdFRUYvYWc0RTVRSHNBUURyQWV3QkN5QUJRUUZxSVFGQkNDRVFETWdEQ3lBQlFRRnFJZ0VnQWtjTkFBdEJGU0VRRE44REMwRVZJUkFNM2dNTEEwQUNRQ0FCTFFBQVFmQzVnSUFBYWkwQUFDSVFRUUpHRFFBZ0VFRi9hZzRFM2dIc0FlQUI2d0hzQVFzZ0FVRUJhaUlCSUFKSERRQUxRUmdoRUF6ZEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVl1QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQkJ5RVFETVFEQzBFWklSQU0zQU1MSUFGQkFXb2hBUXdDQ3dKQUlBRWlGQ0FDUncwQVFSb2hFQXpiQXdzZ0ZDRUJBa0FnRkMwQUFFRnphZzRVM1FMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dJQTdnSUxRUUFoRUNBQVFRQTJBaHdnQUVHdmk0Q0FBRFlDRUNBQVFRSTJBZ3dnQUNBVVFRRnFOZ0lVRE5vREN3SkFJQUV0QUFBaUVFRTdSZzBBSUJCQkRVY042QUVnQVVFQmFpRUJET1VDQ3lBQlFRRnFJUUVMUVNJaEVBeS9Bd3NDUUNBQkloQWdBa2NOQUVFY0lSQU0yQU1MUWdBaEVTQVFJUUVnRUMwQUFFRlFhZzQzNXdIbUFRRUNBd1FGQmdjSUFBQUFBQUFBQUFrS0N3d05EZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEeEFSRWhNVUFBdEJIaUVRREwwREMwSUNJUkVNNVFFTFFnTWhFUXprQVF0Q0JDRVJET01CQzBJRklSRU00Z0VMUWdZaEVRemhBUXRDQnlFUkRPQUJDMElJSVJFTTN3RUxRZ2toRVF6ZUFRdENDaUVSRE4wQkMwSUxJUkVNM0FFTFFnd2hFUXpiQVF0Q0RTRVJETm9CQzBJT0lSRU0yUUVMUWc4aEVRellBUXRDQ2lFUkROY0JDMElMSVJFTTFnRUxRZ3doRVF6VkFRdENEU0VSRE5RQkMwSU9JUkVNMHdFTFFnOGhFUXpTQVF0Q0FDRVJBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBUUxRQUFRVkJxRGpmbEFlUUJBQUVDQXdRRkJnZm1BZVlCNWdIbUFlWUI1Z0htQVFnSkNnc01EZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnRU9EeEFSRWhQbUFRdENBaUVSRE9RQkMwSURJUkVNNHdFTFFnUWhFUXppQVF0Q0JTRVJET0VCQzBJR0lSRU00QUVMUWdjaEVRemZBUXRDQ0NFUkRONEJDMElKSVJFTTNRRUxRZ29oRVF6Y0FRdENDeUVSRE5zQkMwSU1JUkVNMmdFTFFnMGhFUXpaQVF0Q0RpRVJETmdCQzBJUElSRU0xd0VMUWdvaEVReldBUXRDQ3lFUkROVUJDMElNSVJFTTFBRUxRZzBoRVF6VEFRdENEaUVSRE5JQkMwSVBJUkVNMFFFTElBQkNBQ0FBS1FNZ0loRWdBaUFCSWhCcnJTSVNmU0lUSUJNZ0VWWWJOd01nSUJFZ0VsWWlGRVVOMGdGQkh5RVFETUFEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVrSVJBTXB3TUxRU0FoRUF5L0F3c2dBQ0FCSWhBZ0FoQytnSUNBQUVGL2FnNEZ0Z0VBeFFJQjBRSFNBUXRCRVNFUURLUURDeUFBUVFFNkFDOGdFQ0VCRExzREN5QUJJZ0VnQWtjTjBnRkJKQ0VRRExzREN5QUJJZzBnQWtjTkhrSEdBQ0VRRExvREN5QUFJQUVpQVNBQ0VMS0FnSUFBSWhBTjFBRWdBU0VCRExVQkN5QUJJaEFnQWtjTkprSFFBQ0VRRExnREN3SkFJQUVpQVNBQ1J3MEFRU2doRUF5NEF3c2dBRUVBTmdJRUlBQkJqSUNBZ0FBMkFnZ2dBQ0FCSUFFUXNZQ0FnQUFpRUEzVEFTQUJJUUVNMkFFTEFrQWdBU0lRSUFKSERRQkJLU0VRRExjREN5QVFMUUFBSWdGQklFWU5GQ0FCUVFsSERkTUJJQkJCQVdvaEFRd1ZDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdYQzBFcUlSQU10UU1MQWtBZ0FTSVFJQUpIRFFCQkt5RVFETFVEQ3dKQUlCQXRBQUFpQVVFSlJnMEFJQUZCSUVjTjFRRUxJQUF0QUN4QkNFWU4wd0VnRUNFQkRKRURDd0pBSUFFaUFTQUNSdzBBUVN3aEVBeTBBd3NnQVMwQUFFRUtSdzNWQVNBQlFRRnFJUUVNeVFJTElBRWlEaUFDUnczVkFVRXZJUkFNc2dNTEEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUlCQkJkbW9PQkFEY0Fkd0JBTm9CQ3lBQklRRU00QUVMSUFGQkFXb2lBU0FDUncwQUMwRXhJUkFNc1FNTFFUSWhFQ0FCSWhRZ0FrWU5zQU1nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFRGFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZkM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJBMGNOQUVFR0lRRU1sZ01MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExFREN5QUFRUUEyQWdBZ0ZDRUJETmtCQzBFeklSQWdBU0lVSUFKR0RhOERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQ0dvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSDB1NENBQUdvdEFBQkhEUUVDUUNBQlFRaEhEUUJCQlNFQkRKVURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl3QXdzZ0FFRUFOZ0lBSUJRaEFRellBUXRCTkNFUUlBRWlGQ0FDUmcydUF5QUNJQlJySUFBb0FnQWlBV29oRlNBVUlBRnJRUVZxSVJZQ1FBTkFJQlF0QUFBaUYwRWdjaUFYSUJkQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjBNS0FnQUJxTFFBQVJ3MEJBa0FnQVVFRlJ3MEFRUWNoQVF5VUF3c2dBVUVCYWlFQklCUkJBV29pRkNBQ1J3MEFDeUFBSUJVMkFnQU1yd01MSUFCQkFEWUNBQ0FVSVFFTTF3RUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUJCZ0w2QWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVFKR0RRb2dBU0VCRE4wQkN5QUJRUUZxSWdFZ0FrY05BQXRCTUNFUURLNERDMEV3SVJBTXJRTUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCZG1vT0JOa0IyZ0hhQWRrQjJnRUxJQUZCQVdvaUFTQUNSdzBBQzBFNElSQU1yUU1MUVRnaEVBeXNBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFJQkJCQ1VjTkF3c2dBVUVCYWlJQklBSkhEUUFMUVR3aEVBeXJBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FDUUNBUVFYWnFEZ1RhQVFFQjJnRUFDeUFRUVN4R0Rkc0JDeUFCSVFFTUJBc2dBVUVCYWlJQklBSkhEUUFMUVQ4aEVBeXFBd3NnQVNFQkROc0JDMEhBQUNFUUlBRWlGQ0FDUmcyb0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUVpxSVJjQ1FBTkFJQlF0QUFCQklISWdBVUdBd0lDQUFHb3RBQUJIRFFFZ0FVRUdSZzJPQXlBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGallDQUF5cEF3c2dBRUVBTmdJQUlCUWhBUXRCTmlFUURJNERDd0pBSUFFaUR5QUNSdzBBUWNFQUlSQU1wd01MSUFCQmpJQ0FnQUEyQWdnZ0FDQVBOZ0lFSUE4aEFTQUFMUUFzUVg5cURnVE5BZFVCMXdIWkFZY0RDeUFCUVFGcUlRRU16QUVMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdjaUFRSUJCQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SWhCQkNVWU5BQ0FRUVNCR0RRQUNRQUpBQWtBQ1FDQVFRWjEvYWc0VEFBTURBd01EQXdNQkF3TURBd01EQXdNREFnTUxJQUZCQVdvaEFVRXhJUkFNa1FNTElBRkJBV29oQVVFeUlSQU1rQU1MSUFGQkFXb2hBVUV6SVJBTWp3TUxJQUVoQVF6UUFRc2dBVUVCYWlJQklBSkhEUUFMUVRVaEVBeWxBd3RCTlNFUURLUURDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBUVlDOGdJQUFhaTBBQUVFQlJnMEFJQUVoQVF6VEFRc2dBVUVCYWlJQklBSkhEUUFMUVQwaEVBeWtBd3RCUFNFUURLTURDeUFBSUFFaUFTQUNFTENBZ0lBQUloQU4xZ0VnQVNFQkRBRUxJQkJCQVdvaEFRdEJQQ0VRREljREN3SkFJQUVpQVNBQ1J3MEFRY0lBSVJBTW9BTUxBa0FEUUFKQUlBRXRBQUJCZDJvT0dBQUMvZ0wrQW9RRC9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Q0FQNENDeUFCUVFGcUlnRWdBa2NOQUF0QndnQWhFQXlnQXdzZ0FVRUJhaUVCSUFBdEFDMUJBWEZGRGIwQklBRWhBUXRCTENFUURJVURDeUFCSWdFZ0FrY04wd0ZCeEFBaEVBeWRBd3NEUUFKQUlBRXRBQUJCa01DQWdBQnFMUUFBUVFGR0RRQWdBU0VCRExjQ0N5QUJRUUZxSWdFZ0FrY05BQXRCeFFBaEVBeWNBd3NnRFMwQUFDSVFRU0JHRGJNQklCQkJPa2NOZ1FNZ0FDZ0NCQ0VCSUFCQkFEWUNCQ0FBSUFFZ0RSQ3ZnSUNBQUNJQkRkQUJJQTFCQVdvaEFReXpBZ3RCeHdBaEVDQUJJZzBnQWtZTm1nTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVGYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHUXdvQ0FBR290QUFCSERZQURJQUZCQlVZTjlBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1tZ01MUWNnQUlSQWdBU0lOSUFKR0Raa0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQ1dvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQmxzS0FnQUJxTFFBQVJ3My9BZ0pBSUFGQkNVY05BRUVDSVFFTTlRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmtEQ3dKQUlBRWlEU0FDUncwQVFja0FJUkFNbVFNTEFrQUNRQ0FOTFFBQUlnRkJJSElnQVNBQlFiOS9ha0gvQVhGQkdra2JRZjhCY1VHU2Yyb09Cd0NBQTRBRGdBT0FBNEFEQVlBREN5QU5RUUZxSVFGQlBpRVFESUFEQ3lBTlFRRnFJUUZCUHlFUURQOENDMEhLQUNFUUlBRWlEU0FDUmcyWEF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUUZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWFEQ2dJQUFhaTBBQUVjTi9RSWdBVUVCUmczd0FpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVhBd3RCeXdBaEVDQUJJZzBnQWtZTmxnTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVPYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHaXdvQ0FBR290QUFCSERmd0NJQUZCRGtZTjhBSWdBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1sZ01MUWN3QUlSQWdBU0lOSUFKR0RaVURJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCRDJvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQndNS0FnQUJxTFFBQVJ3MzdBZ0pBSUFGQkQwY05BRUVESVFFTThRSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESlVEQzBITkFDRVFJQUVpRFNBQ1JnMlVBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFkRENnSUFBYWkwQUFFY04rZ0lDUUNBQlFRVkhEUUJCQkNFQkRQQUNDeUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlVQXdzQ1FDQUJJZzBnQWtjTkFFSE9BQ0VRREpRREN3SkFBa0FDUUFKQUlBMHRBQUFpQVVFZ2NpQUJJQUZCdjM5cVFmOEJjVUVhU1J0Qi93RnhRWjEvYWc0VEFQMEMvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QWdIOUF2MEMvUUlDQS8wQ0N5QU5RUUZxSVFGQndRQWhFQXo5QWdzZ0RVRUJhaUVCUWNJQUlSQU0vQUlMSUExQkFXb2hBVUhEQUNFUURQc0NDeUFOUVFGcUlRRkJ4QUFoRUF6NkFnc0NRQ0FCSWdFZ0FrWU5BQ0FBUVkyQWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQnhRQWhFQXo2QWd0Qnp3QWhFQXlTQXdzZ0VDRUJBa0FDUUNBUUxRQUFRWFpxRGdRQnFBS29BZ0NvQWdzZ0VFRUJhaUVCQzBFbklSQU0rQUlMQWtBZ0FTSUJJQUpIRFFCQjBRQWhFQXlSQXdzQ1FDQUJMUUFBUVNCR0RRQWdBU0VCREkwQkN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnh3RWdBU0VCREl3QkN5QUJJaGNnQWtjTnlBRkIwZ0FoRUF5UEF3dEIwd0FoRUNBQkloUWdBa1lOamdNZ0FpQVVheUFBS0FJQUlnRnFJUllnRkNBQmEwRUJhaUVYQTBBZ0ZDMEFBQ0FCUWRiQ2dJQUFhaTBBQUVjTnpBRWdBVUVCUmczSEFTQUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeU9Bd3NDUUNBQklnRWdBa2NOQUVIVkFDRVFESTREQ3lBQkxRQUFRUXBIRGN3QklBRkJBV29oQVF6SEFRc0NRQ0FCSWdFZ0FrY05BRUhXQUNFUURJMERDd0pBQWtBZ0FTMEFBRUYyYWc0RUFNMEJ6UUVCelFFTElBRkJBV29oQVF6SEFRc2dBVUVCYWlFQlFjb0FJUkFNOHdJTElBQWdBU0lCSUFJUXJvQ0FnQUFpRUEzTEFTQUJJUUZCelFBaEVBenlBZ3NnQUMwQUtVRWlSZzJGQXd5bUFnc0NRQ0FCSWdFZ0FrY05BRUhiQUNFUURJb0RDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVGUWFnNEsxQUhUQVFBQkFnTUVCUVlJMVFFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNekFFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd6TEFRc0NRQ0FCSWdFZ0FrY05BRUhkQUNFUURJa0RDeUFCTFFBQVFTNUhEY3dCSUFGQkFXb2hBUXltQWdzZ0FTSUJJQUpIRGN3QlFkOEFJUkFNaHdNTEFrQWdBU0lCSUFKR0RRQWdBRUdPZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUWRBQUlSQU03Z0lMUWVBQUlSQU1oZ01MUWVFQUlSQWdBU0lCSUFKR0RZVURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSGl3b0NBQUdvdEFBQkhEYzBCSUJSQkEwWU56QUVnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNaFFNTFFlSUFJUkFnQVNJQklBSkdEWVFESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkFtb2hGd05BSUFFdEFBQWdGRUhtd29DQUFHb3RBQUJIRGN3QklCUkJBa1lOemdFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhBTUxRZU1BSVJBZ0FTSUJJQUpHRFlNRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBMm9oRndOQUlBRXRBQUFnRkVIcHdvQ0FBR290QUFCSERjc0JJQlJCQTBZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1nd01MQWtBZ0FTSUJJQUpIRFFCQjVRQWhFQXlEQXdzZ0FDQUJRUUZxSWdFZ0FoQ29nSUNBQUNJUURjMEJJQUVoQVVIV0FDRVFET2tDQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQUloQkJJRVlOQUFKQUFrQUNRQ0FRUWJoL2FnNExBQUhQQWM4Qnp3SFBBYzhCendIUEFjOEJBczhCQ3lBQlFRRnFJUUZCMGdBaEVBenRBZ3NnQVVFQmFpRUJRZE1BSVJBTTdBSUxJQUZCQVdvaEFVSFVBQ0VRRE9zQ0N5QUJRUUZxSWdFZ0FrY05BQXRCNUFBaEVBeUNBd3RCNUFBaEVBeUJBd3NEUUFKQUlBRXRBQUJCOE1LQWdBQnFMUUFBSWhCQkFVWU5BQ0FRUVg1cURnUFBBZEFCMFFIU0FRc2dBVUVCYWlJQklBSkhEUUFMUWVZQUlSQU1nQU1MQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlY0FJUkFNL3dJTEEwQUNRQ0FCTFFBQVFmREVnSUFBYWkwQUFDSVFRUUZHRFFBQ1FDQVFRWDVxRGdUU0FkTUIxQUVBMVFFTElBRWhBVUhYQUNFUURPY0NDeUFCUVFGcUlnRWdBa2NOQUF0QjZBQWhFQXorQWdzQ1FDQUJJZ0VnQWtjTkFFSHBBQ0VRRFA0Q0N3SkFJQUV0QUFBaUVFRjJhZzRhdWdIVkFkVUJ2QUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhLQWRVQjFRRUEwd0VMSUFGQkFXb2hBUXRCQmlFUURPTUNDd05BQWtBZ0FTMEFBRUh3eG9DQUFHb3RBQUJCQVVZTkFDQUJJUUVNbmdJTElBRkJBV29pQVNBQ1J3MEFDMEhxQUNFUURQc0NDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBUXdEQzBIckFDRVFEUG9DQ3dKQUlBRWlBU0FDUncwQVFld0FJUkFNK2dJTElBRkJBV29oQVF3QkN3SkFJQUVpQVNBQ1J3MEFRZTBBSVJBTStRSUxJQUZCQVdvaEFRdEJCQ0VRRE40Q0N3SkFJQUVpRkNBQ1J3MEFRZTRBSVJBTTl3SUxJQlFoQVFKQUFrQUNRQ0FVTFFBQVFmRElnSUFBYWkwQUFFRi9hZzRIMUFIVkFkWUJBSndDQVFMWEFRc2dGRUVCYWlFQkRBb0xJQlJCQVdvaEFRek5BUXRCQUNFUUlBQkJBRFlDSENBQVFadVNnSUFBTmdJUUlBQkJCellDRENBQUlCUkJBV28yQWhRTTlnSUxBa0FEUUFKQUlBRXRBQUJCOE1pQWdBQnFMUUFBSWhCQkJFWU5BQUpBQWtBZ0VFRi9hZzRIMGdIVEFkUUIyUUVBQkFIWkFRc2dBU0VCUWRvQUlSQU00QUlMSUFGQkFXb2hBVUhjQUNFUUROOENDeUFCUVFGcUlnRWdBa2NOQUF0Qjd3QWhFQXoyQWdzZ0FVRUJhaUVCRE1zQkN3SkFJQUVpRkNBQ1J3MEFRZkFBSVJBTTlRSUxJQlF0QUFCQkwwY04xQUVnRkVFQmFpRUJEQVlMQWtBZ0FTSVVJQUpIRFFCQjhRQWhFQXowQWdzQ1FDQVVMUUFBSWdGQkwwY05BQ0FVUVFGcUlRRkIzUUFoRUF6YkFnc2dBVUYyYWlJRVFSWkxEZE1CUVFFZ0JIUkJpWUNBQW5GRkRkTUJETW9DQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVIZUFDRVFETm9DQzBIeUFDRVFEUElDQ3dKQUlBRWlGQ0FDUncwQVFmUUFJUkFNOGdJTElCUWhBUUpBSUJRdEFBQkI4TXlBZ0FCcUxRQUFRWDlxRGdQSkFwUUNBTlFCQzBIaEFDRVFETmdDQ3dKQUlBRWlGQ0FDUmcwQUEwQUNRQ0FVTFFBQVFmREtnSUFBYWkwQUFDSUJRUU5HRFFBQ1FDQUJRWDlxRGdMTEFnRFZBUXNnRkNFQlFkOEFJUkFNMmdJTElCUkJBV29pRkNBQ1J3MEFDMEh6QUNFUURQRUNDMEh6QUNFUURQQUNDd0pBSUFFaUFTQUNSZzBBSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSGdBQ0VRRE5jQ0MwSDFBQ0VRRE84Q0N3SkFJQUVpQVNBQ1J3MEFRZllBSVJBTTd3SUxJQUJCajRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVF0QkF5RVFETlFDQ3dOQUlBRXRBQUJCSUVjTnd3SWdBVUVCYWlJQklBSkhEUUFMUWZjQUlSQU03QUlMQWtBZ0FTSUJJQUpIRFFCQitBQWhFQXpzQWdzZ0FTMEFBRUVnUnczT0FTQUJRUUZxSVFFTTd3RUxJQUFnQVNJQklBSVFySUNBZ0FBaUVBM09BU0FCSVFFTWpnSUxBa0FnQVNJRUlBSkhEUUJCK2dBaEVBenFBZ3NnQkMwQUFFSE1BRWNOMFFFZ0JFRUJhaUVCUVJNaEVBelBBUXNDUUNBQklnUWdBa2NOQUVIN0FDRVFET2tDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFEUUNBRUxRQUFJQUZCOE02QWdBQnFMUUFBUnczUUFTQUJRUVZHRGM0QklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmc0FJUkFNNkFJTEFrQWdBU0lFSUFKSERRQkIvQUFoRUF6b0Fnc0NRQUpBSUFRdEFBQkJ2WDlxRGd3QTBRSFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRRUIwUUVMSUFSQkFXb2hBVUhtQUNFUURNOENDeUFFUVFGcUlRRkI1d0FoRUF6T0Fnc0NRQ0FCSWdRZ0FrY05BRUg5QUNFUURPY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGM4QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIOUFDRVFET2NDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkFoRUF6TUFRc0NRQ0FCSWdRZ0FrY05BRUgrQUNFUURPWUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUgyem9DQUFHb3RBQUJIRGM0QklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIK0FDRVFET1lDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlloRUF6TEFRc0NRQ0FCSWdRZ0FrY05BRUgvQUNFUURPVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFOcUlSQUNRQU5BSUFRdEFBQWdBVUg4em9DQUFHb3RBQUJIRGMwQklBRkJBMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIL0FDRVFET1VDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVVoRUF6S0FRc0NRQ0FCSWdRZ0FrY05BRUdBQVNFUURPUUNDeUFFTFFBQVFka0FSdzNMQVNBRVFRRnFJUUZCQ0NFUURNa0JDd0pBSUFFaUJDQUNSdzBBUVlFQklSQU00d0lMQWtBQ1FDQUVMUUFBUWJKL2FnNERBTXdCQWN3QkN5QUVRUUZxSVFGQjZ3QWhFQXpLQWdzZ0JFRUJhaUVCUWV3QUlSQU15UUlMQWtBZ0FTSUVJQUpIRFFCQmdnRWhFQXppQWdzQ1FBSkFJQVF0QUFCQnVIOXFEZ2dBeXdITEFjc0J5d0hMQWNzQkFjc0JDeUFFUVFGcUlRRkI2Z0FoRUF6SkFnc2dCRUVCYWlFQlFlMEFJUkFNeUFJTEFrQWdBU0lFSUFKSERRQkJnd0VoRUF6aEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJBZ0JDQUJhMEVDYWlFVUFrQURRQ0FFTFFBQUlBRkJnTStBZ0FCcUxRQUFSdzNKQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCQTJBZ0JCZ3dFaEVBemhBZ3RCQUNFUUlBQkJBRFlDQUNBVVFRRnFJUUVNeGdFTEFrQWdBU0lFSUFKSERRQkJoQUVoRUF6Z0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJnOCtBZ0FCcUxRQUFSdzNJQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaEFFaEVBemdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWpJUkFNeFFFTEFrQWdBU0lFSUFKSERRQkJoUUVoRUF6ZkFnc0NRQUpBSUFRdEFBQkJ0SDlxRGdnQXlBSElBY2dCeUFISUFjZ0JBY2dCQ3lBRVFRRnFJUUZCN3dBaEVBekdBZ3NnQkVFQmFpRUJRZkFBSVJBTXhRSUxBa0FnQVNJRUlBSkhEUUJCaGdFaEVBemVBZ3NnQkMwQUFFSEZBRWNOeFFFZ0JFRUJhaUVCRElNQ0N3SkFJQUVpQkNBQ1J3MEFRWWNCSVJBTTNRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRWWpQZ0lBQWFpMEFBRWNOeFFFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVljQklSQU0zUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJMU0VRRE1JQkN3SkFJQUVpQkNBQ1J3MEFRWWdCSVJBTTNBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQ0dvaEVBSkFBMEFnQkMwQUFDQUJRZERQZ0lBQWFpMEFBRWNOeEFFZ0FVRUlSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlnQklSQU0zQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLU0VRRE1FQkN3SkFJQUVpQVNBQ1J3MEFRWWtCSVJBTTJ3SUxRUUVoRUNBQkxRQUFRZDhBUnczQUFTQUJRUUZxSVFFTWdRSUxBa0FnQVNJRUlBSkhEUUJCaWdFaEVBemFBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBMEFnQkMwQUFDQUJRWXpQZ0lBQWFpMEFBRWNOd1FFZ0FVRUJSZzJ2QWlBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHS0FTRVFETmtDQ3dKQUlBRWlCQ0FDUncwQVFZc0JJUkFNMlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFZN1BnSUFBYWkwQUFFY053UUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXNCSVJBTTJRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkFpRVFETDRCQ3dKQUlBRWlCQ0FDUncwQVFZd0JJUkFNMkFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmRFBnSUFBYWkwQUFFY053QUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWXdCSVJBTTJBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkh5RVFETDBCQ3dKQUlBRWlCQ0FDUncwQVFZMEJJUkFNMXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmTFBnSUFBYWkwQUFFY052d0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWTBCSVJBTTF3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkNTRVFETHdCQ3dKQUlBRWlCQ0FDUncwQVFZNEJJUkFNMWdJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQUw4QnZ3Ry9BYjhCdndFQnZ3RUxJQVJCQVdvaEFVSDRBQ0VRREwwQ0N5QUVRUUZxSVFGQitRQWhFQXk4QWdzQ1FDQUJJZ1FnQWtjTkFFR1BBU0VRRE5VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR1J6NENBQUdvdEFBQkhEYjBCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdQQVNFUUROVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSZ2hFQXk2QVFzQ1FDQUJJZ1FnQWtjTkFFR1FBU0VRRE5RQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVR1h6NENBQUdvdEFBQkhEYndCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdRQVNFUUROUUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSY2hFQXk1QVFzQ1FDQUJJZ1FnQWtjTkFFR1JBU0VRRE5NQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVR2F6NENBQUdvdEFBQkhEYnNCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdSQVNFUUROTUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSVWhFQXk0QVFzQ1FDQUJJZ1FnQWtjTkFFR1NBU0VRRE5JQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR2h6NENBQUdvdEFBQkhEYm9CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdTQVNFUUROSUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSNGhFQXkzQVFzQ1FDQUJJZ1FnQWtjTkFFR1RBU0VRRE5FQ0N5QUVMUUFBUWN3QVJ3MjRBU0FFUVFGcUlRRkJDaUVRRExZQkN3SkFJQVFnQWtjTkFFR1VBU0VRRE5BQ0N3SkFBa0FnQkMwQUFFRy9mMm9PRHdDNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QVFHNUFRc2dCRUVCYWlFQlFmNEFJUkFNdHdJTElBUkJBV29oQVVIL0FDRVFETFlDQ3dKQUlBUWdBa2NOQUVHVkFTRVFETThDQ3dKQUFrQWdCQzBBQUVHL2Yyb09Bd0M0QVFHNEFRc2dCRUVCYWlFQlFmMEFJUkFNdGdJTElBUkJBV29oQkVHQUFTRVFETFVDQ3dKQUlBUWdBa2NOQUVHV0FTRVFETTRDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHbno0Q0FBR290QUFCSERiWUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1dBU0VRRE00Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFzaEVBeXpBUXNDUUNBRUlBSkhEUUJCbHdFaEVBek5BZ3NDUUFKQUFrQUNRQ0FFTFFBQVFWTnFEaU1BdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QVFHNEFiZ0J1QUc0QWJnQkFyZ0J1QUc0QVFPNEFRc2dCRUVCYWlFQlFmc0FJUkFNdGdJTElBUkJBV29oQVVIOEFDRVFETFVDQ3lBRVFRRnFJUVJCZ1FFaEVBeTBBZ3NnQkVFQmFpRUVRWUlCSVJBTXN3SUxBa0FnQkNBQ1J3MEFRWmdCSVJBTXpBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRYW5QZ0lBQWFpMEFBRWNOdEFFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpnQklSQU16QUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHU0VRRExFQkN3SkFJQVFnQWtjTkFFR1pBU0VRRE1zQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVR3V6NENBQUdvdEFBQkhEYk1CSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdaQVNFUURNc0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRWWhFQXl3QVFzQ1FDQUVJQUpIRFFCQm1nRWhFQXpLQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRNK0FnQUJxTFFBQVJ3MnlBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtZ0VoRUF6S0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFY0lSQU1yd0VMQWtBZ0JDQUNSdzBBUVpzQklSQU15UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWJiUGdJQUFhaTBBQUVjTnNRRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFac0JJUkFNeVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCSnlFUURLNEJDd0pBSUFRZ0FrY05BRUdjQVNFUURNZ0NDd0pBQWtBZ0JDMEFBRUdzZjJvT0FnQUJzUUVMSUFSQkFXb2hCRUdHQVNFUURLOENDeUFFUVFGcUlRUkJod0VoRUF5dUFnc0NRQ0FFSUFKSERRQkJuUUVoRUF6SEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1TStBZ0FCcUxRQUFSdzJ2QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCblFFaEVBekhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW1JUkFNckFFTEFrQWdCQ0FDUncwQVFaNEJJUkFNeGdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiclBnSUFBYWkwQUFFY05yZ0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjRCSVJBTXhnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkF5RVFES3NCQ3dKQUlBUWdBa2NOQUVHZkFTRVFETVVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhMEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2ZBU0VRRE1VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVF3aEVBeXFBUXNDUUNBRUlBSkhEUUJCb0FFaEVBekVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCdk0rQWdBQnFMUUFBUncyc0FTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm9BRWhFQXpFQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVOSVJBTXFRRUxBa0FnQkNBQ1J3MEFRYUVCSVJBTXd3SUxBa0FDUUNBRUxRQUFRYnAvYWc0TEFLd0JyQUdzQWF3QnJBR3NBYXdCckFHc0FRR3NBUXNnQkVFQmFpRUVRWXNCSVJBTXFnSUxJQVJCQVdvaEJFR01BU0VRREtrQ0N3SkFJQVFnQWtjTkFFR2lBU0VRRE1JQ0N5QUVMUUFBUWRBQVJ3MnBBU0FFUVFGcUlRUU02UUVMQWtBZ0JDQUNSdzBBUWFNQklSQU13UUlMQWtBQ1FDQUVMUUFBUWJkL2FnNEhBYW9CcWdHcUFhb0JxZ0VBcWdFTElBUkJBV29oQkVHT0FTRVFES2dDQ3lBRVFRRnFJUUZCSWlFUURLWUJDd0pBSUFRZ0FrY05BRUdrQVNFUURNQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUhBejRDQUFHb3RBQUJIRGFnQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHa0FTRVFETUFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjBoRUF5bEFRc0NRQ0FFSUFKSERRQkJwUUVoRUF5L0Fnc0NRQUpBSUFRdEFBQkJybjlxRGdNQXFBRUJxQUVMSUFSQkFXb2hCRUdRQVNFUURLWUNDeUFFUVFGcUlRRkJCQ0VRREtRQkN3SkFJQVFnQWtjTkFFR21BU0VRREw0Q0N3SkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUNxQWFvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQVFHcUFhb0JBcW9CcWdFRHFnR3FBUVNxQVFzZ0JFRUJhaUVFUVlnQklSQU1xQUlMSUFSQkFXb2hCRUdKQVNFUURLY0NDeUFFUVFGcUlRUkJpZ0VoRUF5bUFnc2dCRUVCYWlFRVFZOEJJUkFNcFFJTElBUkJBV29oQkVHUkFTRVFES1FDQ3dKQUlBUWdBa2NOQUVHbkFTRVFETDBDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERhVUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR25BU0VRREwwQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJFaEVBeWlBUXNDUUNBRUlBSkhEUUJCcUFFaEVBeThBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCd3MrQWdBQnFMUUFBUncya0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFBRWhFQXk4QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVzSVJBTW9RRUxBa0FnQkNBQ1J3MEFRYWtCSVJBTXV3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQkdvaEVBSkFBMEFnQkMwQUFDQUJRY1hQZ0lBQWFpMEFBRWNOb3dFZ0FVRUVSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFrQklSQU11d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLeUVRREtBQkN3SkFJQVFnQWtjTkFFR3FBU0VRRExvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSEt6NENBQUdvdEFBQkhEYUlCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdxQVNFUURMb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSUWhFQXlmQVFzQ1FDQUVJQUpIRFFCQnF3RWhFQXk1QWdzQ1FBSkFBa0FDUUNBRUxRQUFRYjUvYWc0UEFBRUNwQUdrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQVFPa0FRc2dCRUVCYWlFRVFaTUJJUkFNb2dJTElBUkJBV29oQkVHVUFTRVFES0VDQ3lBRVFRRnFJUVJCbFFFaEVBeWdBZ3NnQkVFQmFpRUVRWllCSVJBTW53SUxBa0FnQkNBQ1J3MEFRYXdCSVJBTXVBSUxJQVF0QUFCQnhRQkhEWjhCSUFSQkFXb2hCQXpnQVFzQ1FDQUVJQUpIRFFCQnJRRWhFQXkzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQnpjK0FnQUJxTFFBQVJ3MmZBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyUUVoRUF5M0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFT0lSQU1uQUVMQWtBZ0JDQUNSdzBBUWE0QklSQU10Z0lMSUFRdEFBQkIwQUJIRFowQklBUkJBV29oQVVFbElSQU1td0VMQWtBZ0JDQUNSdzBBUWE4QklSQU10UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTm5RRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhOEJJUkFNdFFJTElBQkJBRFlDQUNBUVFRRnFJUUZCS2lFUURKb0JDd0pBSUFRZ0FrY05BRUd3QVNFUURMUUNDd0pBQWtBZ0JDMEFBRUdyZjJvT0N3Q2RBWjBCblFHZEFaMEJuUUdkQVowQm5RRUJuUUVMSUFSQkFXb2hCRUdhQVNFUURKc0NDeUFFUVFGcUlRUkJtd0VoRUF5YUFnc0NRQ0FFSUFKSERRQkJzUUVoRUF5ekFnc0NRQUpBSUFRdEFBQkJ2MzlxRGhRQW5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3QkFad0JDeUFFUVFGcUlRUkJtUUVoRUF5YUFnc2dCRUVCYWlFRVFad0JJUkFNbVFJTEFrQWdCQ0FDUncwQVFiSUJJUkFNc2dJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFkblBnSUFBYWkwQUFFY05tZ0VnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYklCSVJBTXNnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQklTRVFESmNCQ3dKQUlBUWdBa2NOQUVHekFTRVFETEVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRWnFJUkFDUUFOQUlBUXRBQUFnQVVIZHo0Q0FBR290QUFCSERaa0JJQUZCQmtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3pBU0VRRExFQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJvaEVBeVdBUXNDUUNBRUlBSkhEUUJCdEFFaEVBeXdBZ3NDUUFKQUFrQWdCQzBBQUVHN2Yyb09FUUNhQVpvQm1nR2FBWm9CbWdHYUFab0JtZ0VCbWdHYUFab0JtZ0dhQVFLYUFRc2dCRUVCYWlFRVFaMEJJUkFNbUFJTElBUkJBV29oQkVHZUFTRVFESmNDQ3lBRVFRRnFJUVJCbndFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCdFFFaEVBeXZBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRmFpRVFBa0FEUUNBRUxRQUFJQUZCNU0rQWdBQnFMUUFBUncyWEFTQUJRUVZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRRRWhFQXl2QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVvSVJBTWxBRUxBa0FnQkNBQ1J3MEFRYllCSVJBTXJnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZXJQZ0lBQWFpMEFBRWNObGdFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJZQklSQU1yZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCeUVRREpNQkN3SkFJQVFnQWtjTkFFRzNBU0VRREswQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRGdDV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0VCbGdFTElBUkJBV29oQkVHaEFTRVFESlFDQ3lBRVFRRnFJUVJCb2dFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCdUFFaEVBeXNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCN2MrQWdBQnFMUUFBUncyVUFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVBRWhFQXlzQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVTSVJBTWtRRUxBa0FnQkNBQ1J3MEFRYmtCSVJBTXF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOa3dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJrQklSQU1xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJQ0VRREpBQkN3SkFJQVFnQWtjTkFFRzZBU0VRREtvQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVSHl6NENBQUdvdEFBQkhEWklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc2QVNFUURLb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFROGhFQXlQQVFzQ1FDQUVJQUpIRFFCQnV3RWhFQXlwQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NBa2dHU0FaSUJrZ0dTQVFHU0FRc2dCRUVCYWlFRVFhVUJJUkFNa0FJTElBUkJBV29oQkVHbUFTRVFESThDQ3dKQUlBUWdBa2NOQUVHOEFTRVFES2dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRZHFJUkFDUUFOQUlBUXRBQUFnQVVIMHo0Q0FBR290QUFCSERaQUJJQUZCQjBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzhBU0VRREtnQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJzaEVBeU5BUXNDUUNBRUlBSkhEUUJCdlFFaEVBeW5BZ3NDUUFKQUFrQWdCQzBBQUVHK2Yyb09FZ0NSQVpFQmtRR1JBWkVCa1FHUkFaRUJrUUVCa1FHUkFaRUJrUUdSQVpFQkFwRUJDeUFFUVFGcUlRUkJwQUVoRUF5UEFnc2dCRUVCYWlFRVFhY0JJUkFNamdJTElBUkJBV29oQkVHb0FTRVFESTBDQ3dKQUlBUWdBa2NOQUVHK0FTRVFES1lDQ3lBRUxRQUFRYzRBUncyTkFTQUVRUUZxSVFRTXp3RUxBa0FnQkNBQ1J3MEFRYjhCSVJBTXBRSUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0JDMEFBRUcvZjJvT0ZRQUJBZ09jQVFRRkJwd0JuQUdjQVFjSUNRb0xuQUVNRFE0UG5BRUxJQVJCQVdvaEFVSG9BQ0VRREpvQ0N5QUVRUUZxSVFGQjZRQWhFQXlaQWdzZ0JFRUJhaUVCUWU0QUlSQU1tQUlMSUFSQkFXb2hBVUh5QUNFUURKY0NDeUFFUVFGcUlRRkI4d0FoRUF5V0Fnc2dCRUVCYWlFQlFmWUFJUkFNbFFJTElBUkJBV29oQVVIM0FDRVFESlFDQ3lBRVFRRnFJUUZCK2dBaEVBeVRBZ3NnQkVFQmFpRUVRWU1CSVJBTWtnSUxJQVJCQVdvaEJFR0VBU0VRREpFQ0N5QUVRUUZxSVFSQmhRRWhFQXlRQWdzZ0JFRUJhaUVFUVpJQklSQU1qd0lMSUFSQkFXb2hCRUdZQVNFUURJNENDeUFFUVFGcUlRUkJvQUVoRUF5TkFnc2dCRUVCYWlFRVFhTUJJUkFNakFJTElBUkJBV29oQkVHcUFTRVFESXNDQ3dKQUlBUWdBa1lOQUNBQVFaQ0FnSUFBTmdJSUlBQWdCRFlDQkVHckFTRVFESXNDQzBIQUFTRVFES01DQ3lBQUlBVWdBaENxZ0lDQUFDSUJEWXNCSUFVaEFReGNDd0pBSUFZZ0FrWU5BQ0FHUVFGcUlRVU1qUUVMUWNJQklSQU1vUUlMQTBBQ1FDQVFMUUFBUVhacURnU01BUUFBandFQUN5QVFRUUZxSWhBZ0FrY05BQXRCd3dFaEVBeWdBZ3NDUUNBSElBSkdEUUFnQUVHUmdJQ0FBRFlDQ0NBQUlBYzJBZ1FnQnlFQlFRRWhFQXlIQWd0QnhBRWhFQXlmQWdzQ1FDQUhJQUpIRFFCQnhRRWhFQXlmQWdzQ1FBSkFJQWN0QUFCQmRtb09CQUhPQWM0QkFNNEJDeUFIUVFGcUlRWU1qUUVMSUFkQkFXb2hCUXlKQVFzQ1FDQUhJQUpIRFFCQnhnRWhFQXllQWdzQ1FBSkFJQWN0QUFCQmRtb09Gd0dQQVk4QkFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFRQ1BBUXNnQjBFQmFpRUhDMEd3QVNFUURJUUNDd0pBSUFnZ0FrY05BRUhJQVNFUURKMENDeUFJTFFBQVFTQkhEWTBCSUFCQkFEc0JNaUFJUVFGcUlRRkJzd0VoRUF5REFnc2dBU0VYQWtBRFFDQVhJZ2NnQWtZTkFTQUhMUUFBUVZCcVFmOEJjU0lRUVFwUERjd0JBa0FnQUM4Qk1pSVVRWmt6U3cwQUlBQWdGRUVLYkNJVU93RXlJQkJCLy84RGN5QVVRZjcvQTNGSkRRQWdCMEVCYWlFWElBQWdGQ0FRYWlJUU93RXlJQkJCLy84RGNVSG9CMGtOQVFzTFFRQWhFQ0FBUVFBMkFod2dBRUhCaVlDQUFEWUNFQ0FBUVEwMkFnd2dBQ0FIUVFGcU5nSVVESndDQzBISEFTRVFESnNDQ3lBQUlBZ2dBaEN1Z0lDQUFDSVFSUTNLQVNBUVFSVkhEWXdCSUFCQnlBRTJBaHdnQUNBSU5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF5YUFnc0NRQ0FKSUFKSERRQkJ6QUVoRUF5YUFndEJBQ0VVUVFFaEYwRUJJUlpCQUNFUUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBa3RBQUJCVUdvT0NwWUJsUUVBQVFJREJBVUdDSmNCQzBFQ0lSQU1CZ3RCQXlFUURBVUxRUVFoRUF3RUMwRUZJUkFNQXd0QkJpRVFEQUlMUVFjaEVBd0JDMEVJSVJBTFFRQWhGMEVBSVJaQkFDRVVESTRCQzBFSklSQkJBU0VVUVFBaEYwRUFJUllNalFFTEFrQWdDaUFDUncwQVFjNEJJUkFNbVFJTElBb3RBQUJCTGtjTmpnRWdDa0VCYWlFSkRNb0JDeUFMSUFKSERZNEJRZEFCSVJBTWx3SUxBa0FnQ3lBQ1JnMEFJQUJCam9DQWdBQTJBZ2dnQUNBTE5nSUVRYmNCSVJBTS9nRUxRZEVCSVJBTWxnSUxBa0FnQkNBQ1J3MEFRZElCSVJBTWxnSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQkdvaEN3TkFJQVF0QUFBZ0VFSDh6NENBQUdvdEFBQkhEWTRCSUJCQkJFWU42UUVnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMGdFaEVBeVZBZ3NnQUNBTUlBSVFySUNBZ0FBaUFRMk5BU0FNSVFFTXVBRUxBa0FnQkNBQ1J3MEFRZFFCSVJBTWxBSUxJQUlnQkdzZ0FDZ0NBQ0lRYWlFVUlBUWdFR3RCQVdvaERBTkFJQVF0QUFBZ0VFR0IwSUNBQUdvdEFBQkhEWThCSUJCQkFVWU5qZ0VnRUVFQmFpRVFJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCMUFFaEVBeVRBZ3NDUUNBRUlBSkhEUUJCMWdFaEVBeVRBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQ2FpRUxBMEFnQkMwQUFDQVFRWVBRZ0lBQWFpMEFBRWNOamdFZ0VFRUNSZzJRQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIV0FTRVFESklDQ3dKQUlBUWdBa2NOQUVIWEFTRVFESklDQ3dKQUFrQWdCQzBBQUVHN2Yyb09FQUNQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCQVk4QkN5QUVRUUZxSVFSQnV3RWhFQXo1QVFzZ0JFRUJhaUVFUWJ3QklSQU0rQUVMQWtBZ0JDQUNSdzBBUWRnQklSQU1rUUlMSUFRdEFBQkJ5QUJIRFl3QklBUkJBV29oQkF6RUFRc0NRQ0FFSUFKR0RRQWdBRUdRZ0lDQUFEWUNDQ0FBSUFRMkFnUkJ2Z0VoRUF6M0FRdEIyUUVoRUF5UEFnc0NRQ0FFSUFKSERRQkIyZ0VoRUF5UEFnc2dCQzBBQUVISUFFWU53d0VnQUVFQk9nQW9ETGtCQ3lBQVFRSTZBQzhnQUNBRUlBSVFwb0NBZ0FBaUVBMk5BVUhDQVNFUURQUUJDeUFBTFFBb1FYOXFEZ0szQWJrQnVBRUxBMEFDUUNBRUxRQUFRWFpxRGdRQWpnR09BUUNPQVFzZ0JFRUJhaUlFSUFKSERRQUxRZDBCSVJBTWl3SUxJQUJCQURvQUx5QUFMUUF0UVFSeFJRMkVBZ3NnQUVFQU9nQXZJQUJCQVRvQU5DQUJJUUVNakFFTElCQkJGVVlOMmdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWlBSUxBa0FnQUNBUUlBSVF0SUNBZ0FBaUJBMEFJQkFoQVF5QkFnc0NRQ0FFUVJWSERRQWdBRUVETmdJY0lBQWdFRFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1pQUlMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUduam9DQUFEWUNFQ0FBUVJJMkFneEJBQ0VRREljQ0N5QVFRUlZHRGRZQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIYWpZQ0FBRFlDRUNBQVFSUTJBZ3hCQUNFUURJWUNDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOalFFZ0FFRUhOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRElVQ0N5QUFJQUF2QVRCQmdBRnlPd0V3SUFFaEFRdEJLaUVRRE9vQkN5QVFRUlZHRGRFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHRGpJQ0FBRFlDRUNBQVFSTTJBZ3hCQUNFUURJSUNDeUFRUVJWR0RjOEJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFESUVDQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU5BUXNnQUVFTU5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRElBQ0N5QVFRUlZHRGN3QklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQOEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5TUFRc2dBRUVOTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUDRCQ3lBUVFSVkdEY2tCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFAwQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlMQVFzZ0FFRU9OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQd0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SldBZ0FBMkFoQWdBRUVDTmdJTVFRQWhFQXo3QVFzZ0VFRVZSZzNGQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG95QWdBQTJBaEFnQUVFak5nSU1RUUFoRUF6NkFRc2dBRUVRTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURQa0JDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6eEFRc2dBRUVSTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUGdCQ3lBUVFSVkdEY0VCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFBjQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdVlDQWdBQWlFQTBBSUFGQkFXb2hBUXlJQVFzZ0FFRVROZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQWUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXVZQ0FnQUFpQkEwQUlBRkJBV29oQVF6dEFRc2dBRUVVTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFVCQ3lBUVFSVkdEYjBCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRFBRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlHQVFzZ0FFRVdOZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQTUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXQ0Q0FnQUFpQkEwQUlBRkJBV29oQVF6cEFRc2dBRUVYTmdJY0lBQWdCRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUElCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6eEFRdENBU0VSQ3lBUVFRRnFJUUVDUUNBQUtRTWdJaEpDLy8vLy8vLy8vLzhQVmcwQUlBQWdFa0lFaGlBUmhEY0RJQ0FCSVFFTWhBRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3RpWUNBQURZQ0VDQUFRUXcyQWd4QkFDRVFETzhCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCelpPQWdBQTJBaEFnQUVFTU5nSU1RUUFoRUF6dUFRc2dBQ2dDQkNFWElBQkJBRFlDQkNBUUlCR25haUlXSVFFZ0FDQVhJQkFnRmlBVUd5SVFFTFdBZ0lBQUloUkZEWE1nQUVFRk5nSWNJQUFnRURZQ0ZDQUFJQlEyQWd4QkFDRVFETzBCQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcXB5QWdBQTJBaEFnQUVFUE5nSU1RUUFoRUF6c0FRc2dBQ0FRSUFJUXRJQ0FnQUFpQVEwQklCQWhBUXRCRGlFUURORUJDd0pBSUFGQkZVY05BQ0FBUVFJMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpxQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTTZRRUxJQUZCQVdvaEVBSkFJQUF2QVRBaUFVR0FBWEZGRFFBQ1FDQUFJQkFnQWhDN2dJQ0FBQ0lCRFFBZ0VDRUJESEFMSUFGQkZVY051Z0VnQUVFRk5nSWNJQUFnRURZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTEFrQWdBVUdnQkhGQm9BUkhEUUFnQUMwQUxVRUNjUTBBSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdXazRDQUFEWUNFQ0FBUVFRMkFneEJBQ0VRRE9rQkN5QUFJQkFnQWhDOWdJQ0FBQm9nRUNFQkFrQUNRQUpBQWtBQ1FDQUFJQkFnQWhDemdJQ0FBQTRXQWdFQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUF3UUxJQUJCQVRvQUxnc2dBQ0FBTHdFd1FjQUFjanNCTUNBUUlRRUxRU1loRUF6UkFRc2dBRUVqTmdJY0lBQWdFRFlDRkNBQVFhV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU02UUVMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUhWaTRDQUFEWUNFQ0FBUVJFMkFneEJBQ0VRRE9nQkN5QUFMUUF0UVFGeFJRMEJRY01CSVJBTXpnRUxBa0FnRFNBQ1JnMEFBMEFDUUNBTkxRQUFRU0JHRFFBZ0RTRUJETVFCQ3lBTlFRRnFJZzBnQWtjTkFBdEJKU0VRRE9jQkMwRWxJUkFNNWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBMFFyNENBZ0FBaUJFVU5yUUVnQUVFbU5nSWNJQUFnQkRZQ0RDQUFJQTFCQVdvMkFoUkJBQ0VRRE9VQkN5QVFRUlZHRGFzQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIOWpZQ0FBRFlDRUNBQVFSMDJBZ3hCQUNFUURPUUJDeUFBUVNjMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU00d0VMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBQWtBQ1FDQUFMUUFzUVg1cURnY0dCUVVEQVFJQUJRc2dBQ0FBTHdFd1FRaHlPd0V3REFNTFFRSWhGQXdCQzBFRUlSUUxJQUJCQVRvQUxDQUFJQUF2QVRBZ0ZISTdBVEFMSUJBaEFRdEJLeUVRRE1vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnE1S0FnQUEyQWhBZ0FFRUxOZ0lNUVFBaEVBemlBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZUdQZ0lBQU5nSVFJQUJCQ2pZQ0RFRUFJUkFNNFFFTElBQkJBRG9BTENBUUlRRU12UUVMSUJBaEFVRUJJUlFDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVwSVJBTXhRRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSHdsSUNBQURZQ0VDQUFRUU0yQWd4QkFDRVFETjBCQ3dKQUlBNHRBQUJCRFVjTkFDQUFLQUlFSVFFZ0FFRUFOZ0lFQWtBZ0FDQUJJQTRRc1lDQWdBQWlBUTBBSUE1QkFXb2hBUXgxQ3lBQVFTdzJBaHdnQUNBQk5nSU1JQUFnRGtFQmFqWUNGRUVBSVJBTTNRRUxJQUF0QUMxQkFYRkZEUUZCeEFFaEVBekRBUXNDUUNBT0lBSkhEUUJCTFNFUUROd0JDd0pBQWtBRFFBSkFJQTR0QUFCQmRtb09CQUlBQUFNQUN5QU9RUUZxSWc0Z0FrY05BQXRCTFNFUUROMEJDeUFBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNGhBUXgwQ3lBQVFTdzJBaHdnQUNBT05nSVVJQUFnQVRZQ0RFRUFJUkFNM0FFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGtFQmFpRUJESE1MSUFCQkxEWUNIQ0FBSUFFMkFnd2dBQ0FPUVFGcU5nSVVRUUFoRUF6YkFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEaEN4Z0lDQUFDSUVEYUFCSUE0aEFRek9BUXNnRUVFc1J3MEJJQUZCQVdvaEVFRUJJUUVDUUFKQUFrQUNRQUpBSUFBdEFDeEJlMm9PQkFNQkFnUUFDeUFRSVFFTUJBdEJBaUVCREFFTFFRUWhBUXNnQUVFQk9nQXNJQUFnQUM4Qk1DQUJjanNCTUNBUUlRRU1BUXNnQUNBQUx3RXdRUWh5T3dFd0lCQWhBUXRCT1NFUURMOEJDeUFBUVFBNkFDd2dBU0VCQzBFMElSQU12UUVMSUFBZ0FDOEJNRUVnY2pzQk1DQUJJUUVNQWdzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFTEdBZ0lBQUlnUU5BQ0FCSVFFTXh3RUxJQUJCTnpZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBelVBUXNnQUVFSU9nQXNJQUVoQVF0Qk1DRVFETGtCQ3dKQUlBQXRBQ2hCQVVZTkFDQUJJUUVNQkFzZ0FDMEFMVUVJY1VVTmt3RWdBU0VCREFNTElBQXRBREJCSUhFTmxBRkJ4UUVoRUF5M0FRc0NRQ0FQSUFKR0RRQUNRQU5BQWtBZ0R5MEFBRUZRYWlJQlFmOEJjVUVLU1EwQUlBOGhBVUUxSVJBTXVnRUxJQUFwQXlBaUVVS1pzK2JNbWJQbXpCbFdEUUVnQUNBUlFncCtJaEUzQXlBZ0VTQUJyVUwvQVlNaUVrSi9oVllOQVNBQUlCRWdFbnczQXlBZ0QwRUJhaUlQSUFKSERRQUxRVGtoRUF6UkFRc2dBQ2dDQkNFQ0lBQkJBRFlDQkNBQUlBSWdEMEVCYWlJRUVMR0FnSUFBSWdJTmxRRWdCQ0VCRE1NQkMwRTVJUkFNendFTEFrQWdBQzhCTUNJQlFRaHhSUTBBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUWh4UlEyUUFRc2dBQ0FCUWZmN0EzRkJnQVJ5T3dFd0lBOGhBUXRCTnlFUURMUUJDeUFBSUFBdkFUQkJFSEk3QVRBTXF3RUxJQkJCRlVZTml3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmQ09nSUFBTmdJUUlBQkJIRFlDREVFQUlSQU15d0VMSUFCQnd3QTJBaHdnQUNBQk5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTXlnRUxBa0FnQVMwQUFFRTZSdzBBSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ3ZnSUNBQUNJUURRQWdBVUVCYWlFQkRHTUxJQUJCd3dBMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNeWdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHeGtZQ0FBRFlDRUNBQVFRbzJBZ3hCQUNFUURNa0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJvSm1BZ0FBMkFoQWdBRUVlTmdJTVFRQWhFQXpJQVFzZ0FFRUFOZ0lBQ3lBQVFZQVNPd0VxSUFBZ0YwRUJhaUlCSUFJUXFJQ0FnQUFpRUEwQklBRWhBUXRCeHdBaEVBeXNBUXNnRUVFVlJ3MkRBU0FBUWRFQU5nSWNJQUFnQVRZQ0ZDQUFRZU9YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNeEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGNExJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU13d0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhCcUlDQUFEWUNFQ0FBUVFjMkFnd2dBRUVBTmdJQVFRQWhFQXpDQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVhRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBekJBUXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHQWtZQ0FBRFlDRUNBQVFRazJBZ3dNd0FFTElCQkJGVVlOZlNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbEkyQWdBQTJBaEFnQUVFaE5nSU1RUUFoRUF5L0FRdEJBU0VXUVFBaEYwRUFJUlJCQVNFUUN5QUFJQkE2QUNzZ0FVRUJhaUVCQWtBQ1FDQUFMUUF0UVJCeERRQUNRQUpBQWtBZ0FDMEFLZzREQVFBQ0JBc2dGa1VOQXd3Q0N5QVVEUUVNQWdzZ0YwVU5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLMkFnSUFBSWhBTkFDQUJJUUVNWEFzZ0FFSFlBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5K0FRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1yUUVMSUFCQjJRQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdlFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLc0JDeUFBUWRvQU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5cEFRc2dBRUhjQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTdBUXNDUUNBQkxRQUFRVkJxSWhCQi93RnhRUXBQRFFBZ0FDQVFPZ0FxSUFGQkFXb2hBVUhQQUNFUURLSUJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXluQVFzZ0FFSGVBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5NkFRc2dBRUVBTmdJQUlCZEJBV29oQVFKQUlBQXRBQ2xCSTA4TkFDQUJJUUVNV1FzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWRPSmdJQUFOZ0lRSUFCQkNEWUNERUVBSVJBTXVRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd010d0VMSUFCQkFEWUNBQ0FYUVFGcUlRRUNRQ0FBTFFBcFFTRkhEUUFnQVNFQkRGWUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2Jpb0NBQURZQ0VDQUFRUWcyQWd4QkFDRVFETFlCQ3lBQVFRQTJBZ0FnRjBFQmFpRUJBa0FnQUMwQUtTSVFRVjFxUVF0UERRQWdBU0VCREZVTEFrQWdFRUVHU3cwQVFRRWdFSFJCeWdCeFJRMEFJQUVoQVF4VkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZmVKZ0lBQU5nSVFJQUJCQ0RZQ0RBeTFBUXNnRUVFVlJnMXhJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFRzVqWUNBQURZQ0VDQUFRUm8yQWd4QkFDRVFETFFCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4VUN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMTUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkSUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExJQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEVCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4UkN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMQUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4b3FBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXl2QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXVBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNU1FzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5dEFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1UUXNnQUVIbEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXlzQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWR5SWdJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTXF3RUxJQkJCUDBjTkFTQUJRUUZxSVFFTFFRVWhFQXlRQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlrb0NBQURZQ0VDQUFRUWMyQWd3TXFBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcHdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFSUxJQUJCMHdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wZ0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVZTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXBRRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjBnQTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNcEFFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkREOExJQUJCMHdBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vd0VMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREVNTElBQkI1UUEyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTW9nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSERqNENBQURZQ0VDQUFRUWMyQWd4QkFDRVFES0VCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdzQrQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5Z0FRdEJBQ0VRSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFnd01ud0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUdNbklDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREo0QkN5QUFRUUEyQWh3Z0FDQVVOZ0lVSUFCQi9wR0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWRBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWTZiZ0lBQU5nSVFJQUJCQmpZQ0RFRUFJUkFNbkFFTElCQkJGVVlOVnlBQVFRQTJBaHdnQUNBQk5nSVVJQUJCekk2QWdBQTJBaEFnQUVFZ05nSU1RUUFoRUF5YkFRc2dBRUVBTmdJQUlCQkJBV29oQVVFa0lSQUxJQUFnRURvQUtTQUFLQUlFSVJBZ0FFRUFOZ0lFSUFBZ0VDQUJFS3VBZ0lBQUloQU5WQ0FCSVFFTVBnc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZkdiZ0lBQU5nSVFJQUJCQmpZQ0RBeVhBUXNnQVVFVlJnMVFJQUJCQURZQ0hDQUFJQVUyQWhRZ0FFSHdqSUNBQURZQ0VDQUFRUnMyQWd4QkFDRVFESllCQ3lBQUtBSUVJUVVnQUVFQU5nSUVJQUFnQlNBUUVLbUFnSUFBSWdVTkFTQVFRUUZxSVFVTFFhMEJJUkFNZXdzZ0FFSEJBVFlDSENBQUlBVTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVRBUXNnQUNnQ0JDRUdJQUJCQURZQ0JDQUFJQVlnRUJDcGdJQ0FBQ0lHRFFFZ0VFRUJhaUVHQzBHdUFTRVFESGdMSUFCQndnRTJBaHdnQUNBR05nSU1JQUFnRUVFQmFqWUNGRUVBSVJBTWtBRUxJQUJCQURZQ0hDQUFJQWMyQWhRZ0FFR1hpNENBQURZQ0VDQUFRUTAyQWd4QkFDRVFESThCQ3lBQVFRQTJBaHdnQUNBSU5nSVVJQUJCNDVDQWdBQTJBaEFnQUVFSk5nSU1RUUFoRUF5T0FRc2dBRUVBTmdJY0lBQWdDRFlDRkNBQVFaU05nSUFBTmdJUUlBQkJJVFlDREVFQUlSQU1qUUVMUVFFaEZrRUFJUmRCQUNFVVFRRWhFQXNnQUNBUU9nQXJJQWxCQVdvaENBSkFBa0FnQUMwQUxVRVFjUTBBQWtBQ1FBSkFJQUF0QUNvT0F3RUFBZ1FMSUJaRkRRTU1BZ3NnRkEwQkRBSUxJQmRGRFFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FnQUNBUUlBZ1FyWUNBZ0FBaUVFVU5QU0FBUWNrQk5nSWNJQUFnQ0RZQ0ZDQUFJQkEyQWd4QkFDRVFESXdCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSUVLMkFnSUFBSWdSRkRYWWdBRUhLQVRZQ0hDQUFJQWcyQWhRZ0FDQUVOZ0lNUVFBaEVBeUxBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ1JDdGdJQ0FBQ0lFUlExMElBQkJ5d0UyQWh3Z0FDQUpOZ0lVSUFBZ0JEWUNERUVBSVJBTWlnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQW9RcllDQWdBQWlCRVVOY2lBQVFjMEJOZ0ljSUFBZ0NqWUNGQ0FBSUFRMkFneEJBQ0VRRElrQkN3SkFJQXN0QUFCQlVHb2lFRUgvQVhGQkNrOE5BQ0FBSUJBNkFDb2dDMEVCYWlFS1FiWUJJUkFNY0FzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0N4Q3RnSUNBQUNJRVJRMXdJQUJCendFMkFod2dBQ0FMTmdJVUlBQWdCRFlDREVFQUlSQU1pQUVMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdRczRDQUFEWUNFQ0FBUVFnMkFnd2dBRUVBTmdJQVFRQWhFQXlIQVFzZ0FVRVZSZzAvSUFCQkFEWUNIQ0FBSUF3MkFoUWdBRUhNam9DQUFEWUNFQ0FBUVNBMkFneEJBQ0VRRElZQkN5QUFRWUVFT3dFb0lBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBeEJBV29pREJDcmdJQ0FBQ0lRUlEwNElBQkIwd0UyQWh3Z0FDQU1OZ0lVSUFBZ0VEWUNERUVBSVJBTWhRRUxJQUJCQURZQ0FBdEJBQ0VRSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhZbTRDQUFEWUNFQ0FBUVFnMkFnd01nd0VMSUFBb0FnUWhFQ0FBUWdBM0F3QWdBQ0FRSUF0QkFXb2lDeENyZ0lDQUFDSVFEUUZCeGdFaEVBeHBDeUFBUVFJNkFDZ01WUXNnQUVIVkFUWUNIQ0FBSUFzMkFoUWdBQ0FRTmdJTVFRQWhFQXlBQVFzZ0VFRVZSZzAzSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUdraklDQUFEWUNFQ0FBUVJBMkFneEJBQ0VRREg4TElBQXRBRFJCQVVjTk5DQUFJQVFnQWhDOGdJQ0FBQ0lRUlEwMElCQkJGVWNOTlNBQVFkd0JOZ0ljSUFBZ0JEWUNGQ0FBUWRXV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTWZndEJBQ0VRSUFCQkFEWUNIQ0FBUWErTGdJQUFOZ0lRSUFCQkFqWUNEQ0FBSUJSQkFXbzJBaFFNZlF0QkFDRVFER01MUVFJaEVBeGlDMEVOSVJBTVlRdEJEeUVRREdBTFFTVWhFQXhmQzBFVElSQU1YZ3RCRlNFUURGMExRUlloRUF4Y0MwRVhJUkFNV3d0QkdDRVFERm9MUVJraEVBeFpDMEVhSVJBTVdBdEJHeUVRREZjTFFSd2hFQXhXQzBFZElSQU1WUXRCSHlFUURGUUxRU0VoRUF4VEMwRWpJUkFNVWd0QnhnQWhFQXhSQzBFdUlSQU1VQXRCTHlFUURFOExRVHNoRUF4T0MwRTlJUkFNVFF0QnlBQWhFQXhNQzBISkFDRVFERXNMUWNzQUlSQU1TZ3RCekFBaEVBeEpDMEhPQUNFUURFZ0xRZEVBSVJBTVJ3dEIxUUFoRUF4R0MwSFlBQ0VRREVVTFFka0FJUkFNUkF0QjJ3QWhFQXhEQzBIa0FDRVFERUlMUWVVQUlSQU1RUXRCOFFBaEVBeEFDMEgwQUNFUUREOExRWTBCSVJBTVBndEJsd0VoRUF3OUMwR3BBU0VRRER3TFFhd0JJUkFNT3d0QndBRWhFQXc2QzBHNUFTRVFERGtMUWE4QklSQU1PQXRCc1FFaEVBdzNDMEd5QVNFUUREWUxRYlFCSVJBTU5RdEJ0UUVoRUF3MEMwRzZBU0VRRERNTFFiMEJJUkFNTWd0QnZ3RWhFQXd4QzBIQkFTRVFEREFMSUFCQkFEWUNIQ0FBSUFRMkFoUWdBRUhwaTRDQUFEWUNFQ0FBUVI4MkFneEJBQ0VRREVnTElBQkIyd0UyQWh3Z0FDQUVOZ0lVSUFCQitwYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEhDeUFBUWZnQU5nSWNJQUFnRERZQ0ZDQUFRY3FZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUmdzZ0FFSFJBRFlDSENBQUlBVTJBaFFnQUVHd2w0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFVUxJQUJCK1FBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1SQXNnQUVINEFEWUNIQ0FBSUFFMkFoUWdBRUhLbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVNTElBQkI1QUEyQWh3Z0FDQUJOZ0lVSUFCQjQ1ZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeENDeUFBUWRjQU5nSWNJQUFnQVRZQ0ZDQUFRY21YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJtTmdJQUFOZ0lRSUFCQkdqWUNERUVBSVJBTVFBc2dBRUhDQURZQ0hDQUFJQUUyQWhRZ0FFSGptSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERDhMSUFCQkFEWUNCQ0FBSUE4Z0R4Q3hnSUNBQUNJRVJRMEJJQUJCT2pZQ0hDQUFJQVEyQWd3Z0FDQVBRUUZxTmdJVVFRQWhFQXcrQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFzWUNBZ0FBaUJFVU5BQ0FBUVRzMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNUGdzZ0FVRUJhaUVCREMwTElBOUJBV29oQVF3dEN5QUFRUUEyQWh3Z0FDQVBOZ0lVSUFCQjVKS0FnQUEyQWhBZ0FFRUVOZ0lNUVFBaEVBdzdDeUFBUVRZMkFod2dBQ0FFTmdJVUlBQWdBallDREVFQUlSQU1PZ3NnQUVFdU5nSWNJQUFnRGpZQ0ZDQUFJQVEyQWd4QkFDRVFERGtMSUFCQjBBQTJBaHdnQUNBQk5nSVVJQUJCa1ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3NEN5QU5RUUZxSVFFTUxBc2dBRUVWTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OZ3NnQUVFYk5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTlFzZ0FFRVBOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Bc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Nd3NnQUVFYU5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTWdzZ0FFRUxOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1Rc2dBRUVLTmdJY0lBQWdBVFlDRkNBQVFlU1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NQXNnQUVFZU5nSWNJQUFnQVRZQ0ZDQUFRZm1YZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTHdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRxTmdJQUFOZ0lRSUFCQkZEWUNERUVBSVJBTUxnc2dBRUVFTmdJY0lBQWdBVFlDRkNBQVFiQ1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1MUXNnQUVFQU5nSUFJQXRCQVdvaEN3dEJ1QUVoRUF3U0N5QUFRUUEyQWdBZ0VFRUJhaUVCUWZVQUlSQU1FUXNnQVNFQkFrQWdBQzBBS1VFRlJ3MEFRZU1BSVJBTUVRdEI0Z0FoRUF3UUMwRUFJUkFnQUVFQU5nSWNJQUJCNUpHQWdBQTJBaEFnQUVFSE5nSU1JQUFnRkVFQmFqWUNGQXdvQ3lBQVFRQTJBZ0FnRjBFQmFpRUJRY0FBSVJBTURndEJBU0VCQ3lBQUlBRTZBQ3dnQUVFQU5nSUFJQmRCQVdvaEFRdEJLQ0VRREFzTElBRWhBUXRCT0NFUURBa0xBa0FnQVNJUElBSkdEUUFEUUFKQUlBOHRBQUJCZ0w2QWdBQnFMUUFBSWdGQkFVWU5BQ0FCUVFKSERRTWdEMEVCYWlFQkRBUUxJQTlCQVdvaUR5QUNSdzBBQzBFK0lSQU1JZ3RCUGlFUURDRUxJQUJCQURvQUxDQVBJUUVNQVF0QkN5RVFEQVlMUVRvaEVBd0ZDeUFCUVFGcUlRRkJMU0VRREFRTElBQWdBVG9BTENBQVFRQTJBZ0FnRmtFQmFpRUJRUXdoRUF3REN5QUFRUUEyQWdBZ0YwRUJhaUVCUVFvaEVBd0NDeUFBUVFBMkFnQUxJQUJCQURvQUxDQU5JUUZCQ1NFUURBQUxDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0N6WUNGQ0FBUWMyUWdJQUFOZ0lRSUFCQkNUWUNEQXdYQzBFQUlSQWdBRUVBTmdJY0lBQWdDallDRkNBQVFlbUtnSUFBTmdJUUlBQkJDVFlDREF3V0MwRUFJUkFnQUVFQU5nSWNJQUFnQ1RZQ0ZDQUFRYmVRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1ZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NEWUNGQ0FBUVp5UmdJQUFOZ0lRSUFCQkNUWUNEQXdVQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3VEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1NDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdSQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3UUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWmVWZ0lBQU5nSVFJQUJCRHpZQ0RBd1BDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdPQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjQ1NnSUFBTmdJUUlBQkJDellDREF3TkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWldKZ0lBQU5nSVFJQUJCQ3pZQ0RBd01DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNEQXdMQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmdVBnSUFBTmdJUUlBQkJDallDREF3S0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkdaZ0lBQU5nSVFJQUJCQWpZQ0RBd0pDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNTVWdJQUFOZ0lRSUFCQkFqWUNEQXdJQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmS1ZnSUFBTmdJUUlBQkJBallDREF3SEN5QUFRUUkyQWh3Z0FDQUJOZ0lVSUFCQm5KcUFnQUEyQWhBZ0FFRVdOZ0lNUVFBaEVBd0dDMEVCSVJBTUJRdEIxQUFoRUNBQklnUWdBa1lOQkNBRFFRaHFJQUFnQkNBQ1FkakNnSUFBUVFvUXhZQ0FnQUFnQXlnQ0RDRUVJQU1vQWdnT0F3RUVBZ0FMRU1xQWdJQUFBQXNnQUVFQU5nSWNJQUJCdFpxQWdBQTJBaEFnQUVFWE5nSU1JQUFnQkVFQmFqWUNGRUVBSVJBTUFnc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFjcWFnSUFBTmdJUUlBQkJDVFlDREVFQUlSQU1BUXNDUUNBQklnUWdBa2NOQUVFaUlSQU1BUXNnQUVHSmdJQ0FBRFlDQ0NBQUlBUTJBZ1JCSVNFUUN5QURRUkJxSklDQWdJQUFJQkFMcndFQkFuOGdBU2dDQUNFR0FrQUNRQ0FDSUFOR0RRQWdCQ0FHYWlFRUlBWWdBMm9nQW1zaEJ5QUNJQVpCZjNNZ0JXb2lCbW9oQlFOQUFrQWdBaTBBQUNBRUxRQUFSZzBBUVFJaEJBd0RDd0pBSUFZTkFFRUFJUVFnQlNFQ0RBTUxJQVpCZjJvaEJpQUVRUUZxSVFRZ0FrRUJhaUlDSUFOSERRQUxJQWNoQmlBRElRSUxJQUJCQVRZQ0FDQUJJQVkyQWdBZ0FDQUNOZ0lFRHdzZ0FVRUFOZ0lBSUFBZ0JEWUNBQ0FBSUFJMkFnUUxDZ0FnQUJESGdJQ0FBQXZ5TmdFTGZ5T0FnSUNBQUVFUWF5SUJKSUNBZ0lBQUFrQkJBQ2dDb05DQWdBQU5BRUVBRU11QWdJQUFRWURVaElBQWF5SUNRZGtBU1EwQVFRQWhBd0pBUVFBb0F1RFRnSUFBSWdRTkFFRUFRbjgzQXV6VGdJQUFRUUJDZ0lDRWdJQ0F3QUEzQXVUVGdJQUFRUUFnQVVFSWFrRndjVUhZcXRXcUJYTWlCRFlDNE5PQWdBQkJBRUVBTmdMMDA0Q0FBRUVBUVFBMkFzVFRnSUFBQzBFQUlBSTJBc3pUZ0lBQVFRQkJnTlNFZ0FBMkFzalRnSUFBUVFCQmdOU0VnQUEyQXBqUWdJQUFRUUFnQkRZQ3JOQ0FnQUJCQUVGL05nS28wSUNBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMUVlEVWhJQUFRWGhCZ05TRWdBQnJRUTl4UVFCQmdOU0VnQUJCQ0dwQkQzRWJJZ05xSWdSQkJHb2dBa0ZJYWlJRklBTnJJZ05CQVhJMkFnQkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBUVlEVWhJQUFJQVZxUVRnMkFnUUxBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZMRFFBQ1FFRUFLQUtJMElDQUFDSUdRUkFnQUVFVGFrRndjU0FBUVF0Skd5SUNRUU4ySWdSMklnTkJBM0ZGRFFBQ1FBSkFJQU5CQVhFZ0JISkJBWE1pQlVFRGRDSUVRYkRRZ0lBQWFpSURJQVJCdU5DQWdBQnFLQUlBSWdRb0FnZ2lBa2NOQUVFQUlBWkJmaUFGZDNFMkFvalFnSUFBREFFTElBTWdBallDQ0NBQ0lBTTJBZ3dMSUFSQkNHb2hBeUFFSUFWQkEzUWlCVUVEY2pZQ0JDQUVJQVZxSWdRZ0JDZ0NCRUVCY2pZQ0JBd01DeUFDUVFBb0FwRFFnSUFBSWdkTkRRRUNRQ0FEUlEwQUFrQUNRQ0FESUFSMFFRSWdCSFFpQTBFQUlBTnJjbkVpQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxSWdSQkEzUWlBMEd3MElDQUFHb2lCU0FEUWJqUWdJQUFhaWdDQUNJREtBSUlJZ0JIRFFCQkFDQUdRWDRnQkhkeElnWTJBb2pRZ0lBQURBRUxJQVVnQURZQ0NDQUFJQVUyQWd3TElBTWdBa0VEY2pZQ0JDQURJQVJCQTNRaUJHb2dCQ0FDYXlJRk5nSUFJQU1nQW1vaUFDQUZRUUZ5TmdJRUFrQWdCMFVOQUNBSFFYaHhRYkRRZ0lBQWFpRUNRUUFvQXB6UWdJQUFJUVFDUUFKQUlBWkJBU0FIUVFOMmRDSUljUTBBUVFBZ0JpQUljallDaU5DQWdBQWdBaUVJREFFTElBSW9BZ2doQ0FzZ0NDQUVOZ0lNSUFJZ0JEWUNDQ0FFSUFJMkFnd2dCQ0FJTmdJSUN5QURRUWhxSVFOQkFDQUFOZ0tjMElDQUFFRUFJQVUyQXBEUWdJQUFEQXdMUVFBb0FvelFnSUFBSWdsRkRRRWdDVUVBSUFscmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJFRUZka0VJY1NJRklBTnlJQVFnQlhZaUEwRUNka0VFY1NJRWNpQURJQVIySWdOQkFYWkJBbkVpQkhJZ0F5QUVkaUlEUVFGMlFRRnhJZ1J5SUFNZ0JIWnFRUUowUWJqU2dJQUFhaWdDQUNJQUtBSUVRWGh4SUFKcklRUWdBQ0VGQWtBRFFBSkFJQVVvQWhBaUF3MEFJQVZCRkdvb0FnQWlBMFVOQWdzZ0F5Z0NCRUY0Y1NBQ2F5SUZJQVFnQlNBRVNTSUZHeUVFSUFNZ0FDQUZHeUVBSUFNaEJRd0FDd3NnQUNnQ0dDRUtBa0FnQUNnQ0RDSUlJQUJHRFFBZ0FDZ0NDQ0lEUVFBb0FwalFnSUFBU1JvZ0NDQUROZ0lJSUFNZ0NEWUNEQXdMQ3dKQUlBQkJGR29pQlNnQ0FDSUREUUFnQUNnQ0VDSURSUTBESUFCQkVHb2hCUXNEUUNBRklRc2dBeUlJUVJScUlnVW9BZ0FpQXcwQUlBaEJFR29oQlNBSUtBSVFJZ01OQUFzZ0MwRUFOZ0lBREFvTFFYOGhBaUFBUWI5L1N3MEFJQUJCRTJvaUEwRndjU0VDUVFBb0FvelFnSUFBSWdkRkRRQkJBQ0VMQWtBZ0FrR0FBa2tOQUVFZklRc2dBa0gvLy84SFN3MEFJQU5CQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJDQUVRWURnSDJwQkVIWkJCSEVpQkhRaUJTQUZRWUNBRDJwQkVIWkJBbkVpQlhSQkQzWWdBeUFFY2lBRmNtc2lBMEVCZENBQ0lBTkJGV3AyUVFGeGNrRWNhaUVMQzBFQUlBSnJJUVFDUUFKQUFrQUNRQ0FMUVFKMFFialNnSUFBYWlnQ0FDSUZEUUJCQUNFRFFRQWhDQXdCQzBFQUlRTWdBa0VBUVJrZ0MwRUJkbXNnQzBFZlJodDBJUUJCQUNFSUEwQUNRQ0FGS0FJRVFYaHhJQUpySWdZZ0JFOE5BQ0FHSVFRZ0JTRUlJQVlOQUVFQUlRUWdCU0VJSUFVaEF3d0RDeUFESUFWQkZHb29BZ0FpQmlBR0lBVWdBRUVkZGtFRWNXcEJFR29vQWdBaUJVWWJJQU1nQmhzaEF5QUFRUUYwSVFBZ0JRMEFDd3NDUUNBRElBaHlEUUJCQUNFSVFRSWdDM1FpQTBFQUlBTnJjaUFIY1NJRFJRMERJQU5CQUNBRGEzRkJmMm9pQXlBRFFReDJRUkJ4SWdOMklnVkJCWFpCQ0hFaUFDQURjaUFGSUFCMklnTkJBblpCQkhFaUJYSWdBeUFGZGlJRFFRRjJRUUp4SWdWeUlBTWdCWFlpQTBFQmRrRUJjU0lGY2lBRElBVjJha0VDZEVHNDBvQ0FBR29vQWdBaEF3c2dBMFVOQVFzRFFDQURLQUlFUVhoeElBSnJJZ1lnQkVraEFBSkFJQU1vQWhBaUJRMEFJQU5CRkdvb0FnQWhCUXNnQmlBRUlBQWJJUVFnQXlBSUlBQWJJUWdnQlNFRElBVU5BQXNMSUFoRkRRQWdCRUVBS0FLUTBJQ0FBQ0FDYTA4TkFDQUlLQUlZSVFzQ1FDQUlLQUlNSWdBZ0NFWU5BQ0FJS0FJSUlnTkJBQ2dDbU5DQWdBQkpHaUFBSUFNMkFnZ2dBeUFBTmdJTURBa0xBa0FnQ0VFVWFpSUZLQUlBSWdNTkFDQUlLQUlRSWdORkRRTWdDRUVRYWlFRkN3TkFJQVVoQmlBRElnQkJGR29pQlNnQ0FDSUREUUFnQUVFUWFpRUZJQUFvQWhBaUF3MEFDeUFHUVFBMkFnQU1DQXNDUUVFQUtBS1EwSUNBQUNJRElBSkpEUUJCQUNnQ25OQ0FnQUFoQkFKQUFrQWdBeUFDYXlJRlFSQkpEUUFnQkNBQ2FpSUFJQVZCQVhJMkFnUkJBQ0FGTmdLUTBJQ0FBRUVBSUFBMkFwelFnSUFBSUFRZ0Eyb2dCVFlDQUNBRUlBSkJBM0kyQWdRTUFRc2dCQ0FEUVFOeU5nSUVJQVFnQTJvaUF5QURLQUlFUVFGeU5nSUVRUUJCQURZQ25OQ0FnQUJCQUVFQU5nS1EwSUNBQUFzZ0JFRUlhaUVEREFvTEFrQkJBQ2dDbE5DQWdBQWlBQ0FDVFEwQVFRQW9BcURRZ0lBQUlnTWdBbW9pQkNBQUlBSnJJZ1ZCQVhJMkFnUkJBQ0FGTmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBSUFNZ0FrRURjallDQkNBRFFRaHFJUU1NQ2dzQ1FBSkFRUUFvQXVEVGdJQUFSUTBBUVFBb0F1alRnSUFBSVFRTUFRdEJBRUovTndMczA0Q0FBRUVBUW9DQWhJQ0FnTUFBTndMazA0Q0FBRUVBSUFGQkRHcEJjSEZCMktyVnFnVnpOZ0xnMDRDQUFFRUFRUUEyQXZUVGdJQUFRUUJCQURZQ3hOT0FnQUJCZ0lBRUlRUUxRUUFoQXdKQUlBUWdBa0hIQUdvaUIyb2lCa0VBSUFScklndHhJZ2dnQWtzTkFFRUFRVEEyQXZqVGdJQUFEQW9MQWtCQkFDZ0N3Tk9BZ0FBaUEwVU5BQUpBUVFBb0FyalRnSUFBSWdRZ0NHb2lCU0FFVFEwQUlBVWdBMDBOQVF0QkFDRURRUUJCTURZQytOT0FnQUFNQ2d0QkFDMEF4Tk9BZ0FCQkJIRU5CQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUFKQUlBTW9BZ0FpQlNBRVN3MEFJQVVnQXlnQ0JHb2dCRXNOQXdzZ0F5Z0NDQ0lERFFBTEMwRUFFTXVBZ0lBQUlnQkJmMFlOQlNBSUlRWUNRRUVBS0FMazA0Q0FBQ0lEUVg5cUlnUWdBSEZGRFFBZ0NDQUFheUFFSUFCcVFRQWdBMnR4YWlFR0N5QUdJQUpORFFVZ0JrSCsvLy8vQjBzTkJRSkFRUUFvQXNEVGdJQUFJZ05GRFFCQkFDZ0N1Tk9BZ0FBaUJDQUdhaUlGSUFSTkRRWWdCU0FEU3cwR0N5QUdFTXVBZ0lBQUlnTWdBRWNOQVF3SEN5QUdJQUJySUF0eElnWkIvdi8vL3dkTERRUWdCaERMZ0lDQUFDSUFJQU1vQWdBZ0F5Z0NCR3BHRFFNZ0FDRURDd0pBSUFOQmYwWU5BQ0FDUWNnQWFpQUdUUTBBQWtBZ0J5QUdhMEVBS0FMbzA0Q0FBQ0lFYWtFQUlBUnJjU0lFUWY3Ly8vOEhUUTBBSUFNaEFBd0hDd0pBSUFRUXk0Q0FnQUJCZjBZTkFDQUVJQVpxSVFZZ0F5RUFEQWNMUVFBZ0Jtc1F5NENBZ0FBYURBUUxJQU1oQUNBRFFYOUhEUVVNQXd0QkFDRUlEQWNMUVFBaEFBd0ZDeUFBUVg5SERRSUxRUUJCQUNnQ3hOT0FnQUJCQkhJMkFzVFRnSUFBQ3lBSVFmNy8vLzhIU3cwQklBZ1F5NENBZ0FBaEFFRUFFTXVBZ0lBQUlRTWdBRUYvUmcwQklBTkJmMFlOQVNBQUlBTlBEUUVnQXlBQWF5SUdJQUpCT0dwTkRRRUxRUUJCQUNnQ3VOT0FnQUFnQm1vaUF6WUN1Tk9BZ0FBQ1FDQURRUUFvQXJ6VGdJQUFUUTBBUVFBZ0F6WUN2Tk9BZ0FBTEFrQUNRQUpBQWtCQkFDZ0NvTkNBZ0FBaUJFVU5BRUhJMDRDQUFDRURBMEFnQUNBREtBSUFJZ1VnQXlnQ0JDSUlha1lOQWlBREtBSUlJZ01OQUF3REN3c0NRQUpBUVFBb0FwalFnSUFBSWdORkRRQWdBQ0FEVHcwQkMwRUFJQUEyQXBqUWdJQUFDMEVBSVFOQkFDQUdOZ0xNMDRDQUFFRUFJQUEyQXNqVGdJQUFRUUJCZnpZQ3FOQ0FnQUJCQUVFQUtBTGcwNENBQURZQ3JOQ0FnQUJCQUVFQU5nTFUwNENBQUFOQUlBTkJ4TkNBZ0FCcUlBTkJ1TkNBZ0FCcUlnUTJBZ0FnQkNBRFFiRFFnSUFBYWlJRk5nSUFJQU5Cdk5DQWdBQnFJQVUyQWdBZ0EwSE0wSUNBQUdvZ0EwSEEwSUNBQUdvaUJUWUNBQ0FGSUFRMkFnQWdBMEhVMElDQUFHb2dBMEhJMElDQUFHb2lCRFlDQUNBRUlBVTJBZ0FnQTBIUTBJQ0FBR29nQkRZQ0FDQURRU0JxSWdOQmdBSkhEUUFMSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYklnTnFJZ1FnQmtGSWFpSUZJQU5ySWdOQkFYSTJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBQWdCV3BCT0RZQ0JBd0NDeUFETFFBTVFRaHhEUUFnQkNBRlNRMEFJQVFnQUU4TkFDQUVRWGdnQkd0QkQzRkJBQ0FFUVFocVFROXhHeUlGYWlJQVFRQW9BcFRRZ0lBQUlBWnFJZ3NnQldzaUJVRUJjallDQkNBRElBZ2dCbW8yQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUZOZ0tVMElDQUFFRUFJQUEyQXFEUWdJQUFJQVFnQzJwQk9EWUNCQXdCQ3dKQUlBQkJBQ2dDbU5DQWdBQWlDRThOQUVFQUlBQTJBcGpRZ0lBQUlBQWhDQXNnQUNBR2FpRUZRY2pUZ0lBQUlRTUNRQUpBQWtBQ1FBSkFBa0FDUUFOQUlBTW9BZ0FnQlVZTkFTQURLQUlJSWdNTkFBd0NDd3NnQXkwQURFRUljVVVOQVF0QnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUlGSUFSTERRTUxJQU1vQWdnaEF3d0FDd3NnQXlBQU5nSUFJQU1nQXlnQ0JDQUdhallDQkNBQVFYZ2dBR3RCRDNGQkFDQUFRUWhxUVE5eEcyb2lDeUFDUVFOeU5nSUVJQVZCZUNBRmEwRVBjVUVBSUFWQkNHcEJEM0ViYWlJR0lBc2dBbW9pQW1zaEF3SkFJQVlnQkVjTkFFRUFJQUkyQXFEUWdJQUFRUUJCQUNnQ2xOQ0FnQUFnQTJvaUF6WUNsTkNBZ0FBZ0FpQURRUUZ5TmdJRURBTUxBa0FnQmtFQUtBS2MwSUNBQUVjTkFFRUFJQUkyQXB6UWdJQUFRUUJCQUNnQ2tOQ0FnQUFnQTJvaUF6WUNrTkNBZ0FBZ0FpQURRUUZ5TmdJRUlBSWdBMm9nQXpZQ0FBd0RDd0pBSUFZb0FnUWlCRUVEY1VFQlJ3MEFJQVJCZUhFaEJ3SkFBa0FnQkVIL0FVc05BQ0FHS0FJSUlnVWdCRUVEZGlJSVFRTjBRYkRRZ0lBQWFpSUFSaG9DUUNBR0tBSU1JZ1FnQlVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQ0hkeE5nS0kwSUNBQUF3Q0N5QUVJQUJHR2lBRUlBVTJBZ2dnQlNBRU5nSU1EQUVMSUFZb0FoZ2hDUUpBQWtBZ0JpZ0NEQ0lBSUFaR0RRQWdCaWdDQ0NJRUlBaEpHaUFBSUFRMkFnZ2dCQ0FBTmdJTURBRUxBa0FnQmtFVWFpSUVLQUlBSWdVTkFDQUdRUkJxSWdRb0FnQWlCUTBBUVFBaEFBd0JDd05BSUFRaENDQUZJZ0JCRkdvaUJDZ0NBQ0lGRFFBZ0FFRVFhaUVFSUFBb0FoQWlCUTBBQ3lBSVFRQTJBZ0FMSUFsRkRRQUNRQUpBSUFZZ0JpZ0NIQ0lGUVFKMFFialNnSUFBYWlJRUtBSUFSdzBBSUFRZ0FEWUNBQ0FBRFFGQkFFRUFLQUtNMElDQUFFRitJQVYzY1RZQ2pOQ0FnQUFNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUdSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUpOZ0lZQWtBZ0JpZ0NFQ0lFUlEwQUlBQWdCRFlDRUNBRUlBQTJBaGdMSUFZb0FoUWlCRVVOQUNBQVFSUnFJQVEyQWdBZ0JDQUFOZ0lZQ3lBSElBTnFJUU1nQmlBSGFpSUdLQUlFSVFRTElBWWdCRUYrY1RZQ0JDQUNJQU5xSUFNMkFnQWdBaUFEUVFGeU5nSUVBa0FnQTBIL0FVc05BQ0FEUVhoeFFiRFFnSUFBYWlFRUFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0EwRURkblFpQTNFTkFFRUFJQVVnQTNJMkFvalFnSUFBSUFRaEF3d0JDeUFFS0FJSUlRTUxJQU1nQWpZQ0RDQUVJQUkyQWdnZ0FpQUVOZ0lNSUFJZ0F6WUNDQXdEQzBFZklRUUNRQ0FEUWYvLy93ZExEUUFnQTBFSWRpSUVJQVJCZ1A0L2FrRVFka0VJY1NJRWRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUFJQUJCZ0lBUGFrRVFka0VDY1NJQWRFRVBkaUFFSUFWeUlBQnlheUlFUVFGMElBTWdCRUVWYW5aQkFYRnlRUnhxSVFRTElBSWdCRFlDSENBQ1FnQTNBaEFnQkVFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ0JCQVNBRWRDSUljUTBBSUFVZ0FqWUNBRUVBSUFBZ0NISTJBb3pRZ0lBQUlBSWdCVFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQU1MSUFOQkFFRVpJQVJCQVhacklBUkJIMFliZENFRUlBVW9BZ0FoQUFOQUlBQWlCU2dDQkVGNGNTQURSZzBDSUFSQkhYWWhBQ0FFUVFGMElRUWdCU0FBUVFSeGFrRVFhaUlJS0FJQUlnQU5BQXNnQ0NBQ05nSUFJQUlnQlRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFJTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdzZ0JrRklhaUlJSUFOcklnTkJBWEkyQWdRZ0FDQUlha0U0TmdJRUlBUWdCVUUzSUFWclFROXhRUUFnQlVGSmFrRVBjUnRxUVVGcUlnZ2dDQ0FFUVJCcVNSc2lDRUVqTmdJRVFRQkJBQ2dDOE5PQWdBQTJBcVRRZ0lBQVFRQWdBellDbE5DQWdBQkJBQ0FMTmdLZzBJQ0FBQ0FJUVJCcVFRQXBBdERUZ0lBQU53SUFJQWhCQUNrQ3lOT0FnQUEzQWdoQkFDQUlRUWhxTmdMUTA0Q0FBRUVBSUFZMkFzelRnSUFBUVFBZ0FEWUN5Tk9BZ0FCQkFFRUFOZ0xVMDRDQUFDQUlRU1JxSVFNRFFDQURRUWMyQWdBZ0EwRUVhaUlESUFWSkRRQUxJQWdnQkVZTkF5QUlJQWdvQWdSQmZuRTJBZ1FnQ0NBSUlBUnJJZ0EyQWdBZ0JDQUFRUUZ5TmdJRUFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQUVFRGRuUWlBSEVOQUVFQUlBVWdBSEkyQW9qUWdJQUFJQU1oQlF3QkN5QURLQUlJSVFVTElBVWdCRFlDRENBRElBUTJBZ2dnQkNBRE5nSU1JQVFnQlRZQ0NBd0VDMEVmSVFNQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJSUlBaEJnSUFQYWtFUWRrRUNjU0lJZEVFUGRpQURJQVZ5SUFoeWF5SURRUUYwSUFBZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFRZ0F6WUNIQ0FFUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQVFRQW9Bb3pRZ0lBQUlnaEJBU0FEZENJR2NRMEFJQVVnQkRZQ0FFRUFJQWdnQm5JMkFvelFnSUFBSUFRZ0JUWUNHQ0FFSUFRMkFnZ2dCQ0FFTmdJTURBUUxJQUJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhDQU5BSUFnaUJTZ0NCRUY0Y1NBQVJnMERJQU5CSFhZaENDQURRUUYwSVFNZ0JTQUlRUVJ4YWtFUWFpSUdLQUlBSWdnTkFBc2dCaUFFTmdJQUlBUWdCVFlDR0NBRUlBUTJBZ3dnQkNBRU5nSUlEQU1MSUFVb0FnZ2lBeUFDTmdJTUlBVWdBallDQ0NBQ1FRQTJBaGdnQWlBRk5nSU1JQUlnQXpZQ0NBc2dDMEVJYWlFRERBVUxJQVVvQWdnaUF5QUVOZ0lNSUFVZ0JEWUNDQ0FFUVFBMkFoZ2dCQ0FGTmdJTUlBUWdBellDQ0F0QkFDZ0NsTkNBZ0FBaUF5QUNUUTBBUVFBb0FxRFFnSUFBSWdRZ0Ftb2lCU0FESUFKcklnTkJBWEkyQWdSQkFDQUROZ0tVMElDQUFFRUFJQVUyQXFEUWdJQUFJQVFnQWtFRGNqWUNCQ0FFUVFocUlRTU1Bd3RCQUNFRFFRQkJNRFlDK05PQWdBQU1BZ3NDUUNBTFJRMEFBa0FDUUNBSUlBZ29BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBQTJBZ0FnQUEwQlFRQWdCMEYrSUFWM2NTSUhOZ0tNMElDQUFBd0NDeUFMUVJCQkZDQUxLQUlRSUFoR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFzMkFoZ0NRQ0FJS0FJUUlnTkZEUUFnQUNBRE5nSVFJQU1nQURZQ0dBc2dDRUVVYWlnQ0FDSURSUTBBSUFCQkZHb2dBellDQUNBRElBQTJBaGdMQWtBQ1FDQUVRUTlMRFFBZ0NDQUVJQUpxSWdOQkEzSTJBZ1FnQ0NBRGFpSURJQU1vQWdSQkFYSTJBZ1FNQVFzZ0NDQUNhaUlBSUFSQkFYSTJBZ1FnQ0NBQ1FRTnlOZ0lFSUFBZ0JHb2dCRFlDQUFKQUlBUkIvd0ZMRFFBZ0JFRjRjVUd3MElDQUFHb2hBd0pBQWtCQkFDZ0NpTkNBZ0FBaUJVRUJJQVJCQTNaMElnUnhEUUJCQUNBRklBUnlOZ0tJMElDQUFDQURJUVFNQVFzZ0F5Z0NDQ0VFQ3lBRUlBQTJBZ3dnQXlBQU5nSUlJQUFnQXpZQ0RDQUFJQVEyQWdnTUFRdEJIeUVEQWtBZ0JFSC8vLzhIU3cwQUlBUkJDSFlpQXlBRFFZRCtQMnBCRUhaQkNIRWlBM1FpQlNBRlFZRGdIMnBCRUhaQkJIRWlCWFFpQWlBQ1FZQ0FEMnBCRUhaQkFuRWlBblJCRDNZZ0F5QUZjaUFDY21zaUEwRUJkQ0FFSUFOQkZXcDJRUUZ4Y2tFY2FpRURDeUFBSUFNMkFod2dBRUlBTndJUUlBTkJBblJCdU5LQWdBQnFJUVVDUUNBSFFRRWdBM1FpQW5FTkFDQUZJQUEyQWdCQkFDQUhJQUp5TmdLTTBJQ0FBQ0FBSUFVMkFoZ2dBQ0FBTmdJSUlBQWdBRFlDREF3QkN5QUVRUUJCR1NBRFFRRjJheUFEUVI5R0czUWhBeUFGS0FJQUlRSUNRQU5BSUFJaUJTZ0NCRUY0Y1NBRVJnMEJJQU5CSFhZaEFpQURRUUYwSVFNZ0JTQUNRUVJ4YWtFUWFpSUdLQUlBSWdJTkFBc2dCaUFBTmdJQUlBQWdCVFlDR0NBQUlBQTJBZ3dnQUNBQU5nSUlEQUVMSUFVb0FnZ2lBeUFBTmdJTUlBVWdBRFlDQ0NBQVFRQTJBaGdnQUNBRk5nSU1JQUFnQXpZQ0NBc2dDRUVJYWlFRERBRUxBa0FnQ2tVTkFBSkFBa0FnQUNBQUtBSWNJZ1ZCQW5SQnVOS0FnQUJxSWdNb0FnQkhEUUFnQXlBSU5nSUFJQWdOQVVFQUlBbEJmaUFGZDNFMkFvelFnSUFBREFJTElBcEJFRUVVSUFvb0FoQWdBRVliYWlBSU5nSUFJQWhGRFFFTElBZ2dDallDR0FKQUlBQW9BaEFpQTBVTkFDQUlJQU0yQWhBZ0F5QUlOZ0lZQ3lBQVFSUnFLQUlBSWdORkRRQWdDRUVVYWlBRE5nSUFJQU1nQ0RZQ0dBc0NRQUpBSUFSQkQwc05BQ0FBSUFRZ0Ftb2lBMEVEY2pZQ0JDQUFJQU5xSWdNZ0F5Z0NCRUVCY2pZQ0JBd0JDeUFBSUFKcUlnVWdCRUVCY2pZQ0JDQUFJQUpCQTNJMkFnUWdCU0FFYWlBRU5nSUFBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFNQ1FBSkFRUUVnQjBFRGRuUWlDQ0FHY1EwQVFRQWdDQ0FHY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FETmdJTUlBSWdBellDQ0NBRElBSTJBZ3dnQXlBSU5nSUlDMEVBSUFVMkFwelFnSUFBUVFBZ0JEWUNrTkNBZ0FBTElBQkJDR29oQXdzZ0FVRVFhaVNBZ0lDQUFDQURDd29BSUFBUXlZQ0FnQUFMNGcwQkIzOENRQ0FBUlEwQUlBQkJlR29pQVNBQVFYeHFLQUlBSWdKQmVIRWlBR29oQXdKQUlBSkJBWEVOQUNBQ1FRTnhSUTBCSUFFZ0FTZ0NBQ0lDYXlJQlFRQW9BcGpRZ0lBQUlnUkpEUUVnQWlBQWFpRUFBa0FnQVVFQUtBS2MwSUNBQUVZTkFBSkFJQUpCL3dGTERRQWdBU2dDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQVNnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQXdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0NDeUFCS0FJWUlRY0NRQUpBSUFFb0Fnd2lCaUFCUmcwQUlBRW9BZ2dpQWlBRVNSb2dCaUFDTmdJSUlBSWdCallDREF3QkN3SkFJQUZCRkdvaUFpZ0NBQ0lFRFFBZ0FVRVFhaUlDS0FJQUlnUU5BRUVBSVFZTUFRc0RRQ0FDSVFVZ0JDSUdRUlJxSWdJb0FnQWlCQTBBSUFaQkVHb2hBaUFHS0FJUUlnUU5BQXNnQlVFQU5nSUFDeUFIUlEwQkFrQUNRQ0FCSUFFb0Fod2lCRUVDZEVHNDBvQ0FBR29pQWlnQ0FFY05BQ0FDSUFZMkFnQWdCZzBCUVFCQkFDZ0NqTkNBZ0FCQmZpQUVkM0UyQW96UWdJQUFEQU1MSUFkQkVFRVVJQWNvQWhBZ0FVWWJhaUFHTmdJQUlBWkZEUUlMSUFZZ0J6WUNHQUpBSUFFb0FoQWlBa1VOQUNBR0lBSTJBaEFnQWlBR05nSVlDeUFCS0FJVUlnSkZEUUVnQmtFVWFpQUNOZ0lBSUFJZ0JqWUNHQXdCQ3lBREtBSUVJZ0pCQTNGQkEwY05BQ0FESUFKQmZuRTJBZ1JCQUNBQU5nS1EwSUNBQUNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUR3c2dBU0FEVHcwQUlBTW9BZ1FpQWtFQmNVVU5BQUpBQWtBZ0FrRUNjUTBBQWtBZ0EwRUFLQUtnMElDQUFFY05BRUVBSUFFMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0FHb2lBRFlDbE5DQWdBQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFOQkFFRUFOZ0tRMElDQUFFRUFRUUEyQXB6UWdJQUFEd3NDUUNBRFFRQW9BcHpRZ0lBQVJ3MEFRUUFnQVRZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBQWFpSUFOZ0tRMElDQUFDQUJJQUJCQVhJMkFnUWdBU0FBYWlBQU5nSUFEd3NnQWtGNGNTQUFhaUVBQWtBQ1FDQUNRZjhCU3cwQUlBTW9BZ2dpQkNBQ1FRTjJJZ1ZCQTNSQnNOQ0FnQUJxSWdaR0dnSkFJQU1vQWd3aUFpQUVSdzBBUVFCQkFDZ0NpTkNBZ0FCQmZpQUZkM0UyQW9qUWdJQUFEQUlMSUFJZ0JrWWFJQUlnQkRZQ0NDQUVJQUkyQWd3TUFRc2dBeWdDR0NFSEFrQUNRQ0FES0FJTUlnWWdBMFlOQUNBREtBSUlJZ0pCQUNnQ21OQ0FnQUJKR2lBR0lBSTJBZ2dnQWlBR05nSU1EQUVMQWtBZ0EwRVVhaUlDS0FJQUlnUU5BQ0FEUVJCcUlnSW9BZ0FpQkEwQVFRQWhCZ3dCQ3dOQUlBSWhCU0FFSWdaQkZHb2lBaWdDQUNJRURRQWdCa0VRYWlFQ0lBWW9BaEFpQkEwQUN5QUZRUUEyQWdBTElBZEZEUUFDUUFKQUlBTWdBeWdDSENJRVFRSjBRYmpTZ0lBQWFpSUNLQUlBUncwQUlBSWdCallDQUNBR0RRRkJBRUVBS0FLTTBJQ0FBRUYrSUFSM2NUWUNqTkNBZ0FBTUFnc2dCMEVRUVJRZ0J5Z0NFQ0FEUmh0cUlBWTJBZ0FnQmtVTkFRc2dCaUFITmdJWUFrQWdBeWdDRUNJQ1JRMEFJQVlnQWpZQ0VDQUNJQVkyQWhnTElBTW9BaFFpQWtVTkFDQUdRUlJxSUFJMkFnQWdBaUFHTmdJWUN5QUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVJQUZCQUNnQ25OQ0FnQUJIRFFGQkFDQUFOZ0tRMElDQUFBOExJQU1nQWtGK2NUWUNCQ0FCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFQ3dKQUlBQkIvd0ZMRFFBZ0FFRjRjVUd3MElDQUFHb2hBZ0pBQWtCQkFDZ0NpTkNBZ0FBaUJFRUJJQUJCQTNaMElnQnhEUUJCQUNBRUlBQnlOZ0tJMElDQUFDQUNJUUFNQVFzZ0FpZ0NDQ0VBQ3lBQUlBRTJBZ3dnQWlBQk5nSUlJQUVnQWpZQ0RDQUJJQUEyQWdnUEMwRWZJUUlDUUNBQVFmLy8vd2RMRFFBZ0FFRUlkaUlDSUFKQmdQNC9ha0VRZGtFSWNTSUNkQ0lFSUFSQmdPQWZha0VRZGtFRWNTSUVkQ0lHSUFaQmdJQVBha0VRZGtFQ2NTSUdkRUVQZGlBQ0lBUnlJQVp5YXlJQ1FRRjBJQUFnQWtFVmFuWkJBWEZ5UVJ4cUlRSUxJQUVnQWpZQ0hDQUJRZ0EzQWhBZ0FrRUNkRUc0MG9DQUFHb2hCQUpBQWtCQkFDZ0NqTkNBZ0FBaUJrRUJJQUowSWdOeERRQWdCQ0FCTmdJQVFRQWdCaUFEY2pZQ2pOQ0FnQUFnQVNBRU5nSVlJQUVnQVRZQ0NDQUJJQUUyQWd3TUFRc2dBRUVBUVJrZ0FrRUJkbXNnQWtFZlJodDBJUUlnQkNnQ0FDRUdBa0FEUUNBR0lnUW9BZ1JCZUhFZ0FFWU5BU0FDUVIxMklRWWdBa0VCZENFQ0lBUWdCa0VFY1dwQkVHb2lBeWdDQUNJR0RRQUxJQU1nQVRZQ0FDQUJJQVEyQWhnZ0FTQUJOZ0lNSUFFZ0FUWUNDQXdCQ3lBRUtBSUlJZ0FnQVRZQ0RDQUVJQUUyQWdnZ0FVRUFOZ0lZSUFFZ0JEWUNEQ0FCSUFBMkFnZ0xRUUJCQUNnQ3FOQ0FnQUJCZjJvaUFVRi9JQUViTmdLbzBJQ0FBQXNMQkFBQUFBdE9BQUpBSUFBTkFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRWDlNRFFBQ1FDQUFRUkIyUUFBaUFFRi9SdzBBUVFCQk1EWUMrTk9BZ0FCQmZ3OExJQUJCRUhRUEN4REtnSUNBQUFBTDhnSUNBMzhCZmdKQUlBSkZEUUFnQUNBQk9nQUFJQUlnQUdvaUEwRi9haUFCT2dBQUlBSkJBMGtOQUNBQUlBRTZBQUlnQUNBQk9nQUJJQU5CZldvZ0FUb0FBQ0FEUVg1cUlBRTZBQUFnQWtFSFNRMEFJQUFnQVRvQUF5QURRWHhxSUFFNkFBQWdBa0VKU1EwQUlBQkJBQ0FBYTBFRGNTSUVhaUlESUFGQi93RnhRWUdDaEFoc0lnRTJBZ0FnQXlBQ0lBUnJRWHh4SWdScUlnSkJmR29nQVRZQ0FDQUVRUWxKRFFBZ0F5QUJOZ0lJSUFNZ0FUWUNCQ0FDUVhocUlBRTJBZ0FnQWtGMGFpQUJOZ0lBSUFSQkdVa05BQ0FESUFFMkFoZ2dBeUFCTmdJVUlBTWdBVFlDRUNBRElBRTJBZ3dnQWtGd2FpQUJOZ0lBSUFKQmJHb2dBVFlDQUNBQ1FXaHFJQUUyQWdBZ0FrRmthaUFCTmdJQUlBUWdBMEVFY1VFWWNpSUZheUlDUVNCSkRRQWdBYTFDZ1lDQWdCQitJUVlnQXlBRmFpRUJBMEFnQVNBR053TVlJQUVnQmpjREVDQUJJQVkzQXdnZ0FTQUdOd01BSUFGQklHb2hBU0FDUVdCcUlnSkJIMHNOQUFzTElBQUxDNDVJQVFCQmdBZ0xoa2dCQUFBQUFnQUFBQU1BQUFBQUFBQUFBQUFBQUFRQUFBQUZBQUFBQUFBQUFBQUFBQUFHQUFBQUJ3QUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z2NYVmxjbmtBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlpYjJSNUFFTnZiblJsYm5RdFRHVnVaM1JvSUc5MlpYSm1iRzkzQUVOb2RXNXJJSE5wZW1VZ2IzWmxjbVpzYjNjQVVtVnpjRzl1YzJVZ2IzWmxjbVpzYjNjQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlFaFVWRkF2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCdFpYUm9iMlFnWm05eUlGSlVVMUF2ZUM1NElISmxjWFZsYzNRQVJYaHdaV04wWldRZ1UwOVZVa05GSUcxbGRHaHZaQ0JtYjNJZ1NVTkZMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnWTJoaGNpQnBiaUIxY213Z1puSmhaMjFsYm5RZ2MzUmhjblFBUlhod1pXTjBaV1FnWkc5MEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmMzUmhkSFZ6QUVsdWRtRnNhV1FnY21WemNHOXVjMlVnYzNSaGRIVnpBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1BVlhObGNpQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjbVZ6WlhSZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5b1pXRmtaWEpnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJKbFoybHVZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZjM1JoZEhWelgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYM1Z5YkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGRHaHZaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmxjblpsY2dCSmJuWmhiR2xrSUdobFlXUmxjaUIyWVd4MVpTQmphR0Z5QUVsdWRtRnNhV1FnYUdWaFpHVnlJR1pwWld4a0lHTm9ZWElBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkyWlhKemFXOXVBRWx1ZG1Gc2FXUWdiV2x1YjNJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUcxaGFtOXlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0JEVWt4R0lHRm1kR1Z5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0JJVkZSUUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCb1pXRmtaWElnZEc5clpXNEFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOTFjbXdBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWEp6SUdsdUlIVnliQUJWYm1WNGNHVmpkR1ZrSUhOMFlYSjBJR05vWVhJZ2FXNGdkWEpzQUVSdmRXSnNaU0JBSUdsdUlIVnliQUJGYlhCMGVTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQkRiMjUwWlc1MExVeGxibWQwYUFCRWRYQnNhV05oZEdVZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCd1lYUm9BRU52Ym5SbGJuUXRUR1Z1WjNSb0lHTmhiaWQwSUdKbElIQnlaWE5sYm5RZ2QybDBhQ0JVY21GdWMyWmxjaTFGYm1OdlpHbHVad0JKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJ6YVhwbEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmFHVmhaR1Z5WDNaaGJIVmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2RtRnNkV1VBVFdsemMybHVaeUJsZUhCbFkzUmxaQ0JNUmlCaFpuUmxjaUJvWldGa1pYSWdkbUZzZFdVQVNXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0lHaGxZV1JsY2lCMllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhGMWIzUmxJSFpoYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdjWFZ2ZEdWa0lIWmhiSFZsQUZCaGRYTmxaQ0JpZVNCdmJsOW9aV0ZrWlhKelgyTnZiWEJzWlhSbEFFbHVkbUZzYVdRZ1JVOUdJSE4wWVhSbEFHOXVYM0psYzJWMElIQmhkWE5sQUc5dVgyTm9kVzVyWDJobFlXUmxjaUJ3WVhWelpRQnZibDl0WlhOellXZGxYMkpsWjJsdUlIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaU0J3WVhWelpRQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZkbVZ5YzJsdmJsOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTFjbXhmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMmhsWVdSbGNsOW1hV1ZzWkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpTQndZWFZ6WlFCVmJtVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSE4wWVhKMElHeHBibVVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZibUZ0WlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklHNWhiV1VBVUdGMWMyVWdiMjRnUTA5T1RrVkRWQzlWY0dkeVlXUmxBRkJoZFhObElHOXVJRkJTU1M5VmNHZHlZV1JsQUVWNGNHVmpkR1ZrSUVoVVZGQXZNaUJEYjI1dVpXTjBhVzl1SUZCeVpXWmhZMlVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDl0WlhSb2IyUUFSWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYldWMGFHOWtBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgyWnBaV3hrQUZCaGRYTmxaQUJKYm5aaGJHbGtJSGR2Y21RZ1pXNWpiM1Z1ZEdWeVpXUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1pXNWpiM1Z1ZEdWeVpXUUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelkyaGxiV0VBVW1WeGRXVnpkQ0JvWVhNZ2FXNTJZV3hwWkNCZ1ZISmhibk5tWlhJdFJXNWpiMlJwYm1kZ0FGTlhTVlJEU0Y5UVVrOVlXUUJWVTBWZlVGSlBXRmtBVFV0QlExUkpWa2xVV1FCVlRsQlNUME5GVTFOQlFreEZYMFZPVkVsVVdRQkRUMUJaQUUxUFZrVkVYMUJGVWsxQlRrVk9WRXhaQUZSUFQxOUZRVkpNV1FCT1QxUkpSbGtBUmtGSlRFVkVYMFJGVUVWT1JFVk9RMWtBUWtGRVgwZEJWRVZYUVZrQVVFeEJXUUJRVlZRQVEwaEZRMHRQVlZRQVIwRlVSVmRCV1Y5VVNVMUZUMVZVQUZKRlVWVkZVMVJmVkVsTlJVOVZWQUJPUlZSWFQxSkxYME5QVGs1RlExUmZWRWxOUlU5VlZBQkRUMDVPUlVOVVNVOU9YMVJKVFVWUFZWUUFURTlIU1U1ZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDFKRlFVUmZWRWxOUlU5VlZBQlFUMU5VQUUxSlUwUkpVa1ZEVkVWRVgxSkZVVlZGVTFRQVEweEpSVTVVWDBOTVQxTkZSRjlTUlZGVlJWTlVBRU5NU1VWT1ZGOURURTlUUlVSZlRFOUJSRjlDUVV4QlRrTkZSRjlTUlZGVlJWTlVBRUpCUkY5U1JWRlZSVk5VQUVoVVZGQmZVa1ZSVlVWVFZGOVRSVTVVWDFSUFgwaFVWRkJUWDFCUFVsUUFVa1ZRVDFKVUFFbE5YMEZmVkVWQlVFOVVBRkpGVTBWVVgwTlBUbFJGVGxRQVRrOWZRMDlPVkVWT1ZBQlFRVkpVU1VGTVgwTlBUbFJGVGxRQVNGQkZYMGxPVmtGTVNVUmZRMDlPVTFSQlRsUUFTRkJGWDBOQ1gxSkZVMFZVQUVkRlZBQklVRVZmVTFSU1NVTlVBRU5QVGtaTVNVTlVBRlJGVFZCUFVrRlNXVjlTUlVSSlVrVkRWQUJRUlZKTlFVNUZUbFJmVWtWRVNWSkZRMVFBUTA5T1RrVkRWQUJOVlV4VVNWOVRWRUZVVlZNQVNGQkZYMGxPVmtGTVNVUmZVMVJCVkZWVEFGUlBUMTlOUVU1WlgxSkZVVlZGVTFSVEFFVkJVa3haWDBoSlRsUlRBRlZPUVZaQlNVeEJRa3hGWDBaUFVsOU1SVWRCVEY5U1JVRlRUMDVUQUU5UVZFbFBUbE1BVTFkSlZFTklTVTVIWDFCU1QxUlBRMDlNVXdCV1FWSkpRVTVVWDBGTVUwOWZUa1ZIVDFSSlFWUkZVd0JOVlV4VVNWQk1SVjlEU0U5SlEwVlRBRWxPVkVWU1RrRk1YMU5GVWxaRlVsOUZVbEpQVWdCWFJVSmZVMFZTVmtWU1gxVk9TMDVQVjA1ZlJWSlNUMUlBVWtGSlRFZFZUbDlGVWxKUFVnQkpSRVZPVkVsVVdWOVFVazlXU1VSRlVsOUJWVlJJUlU1VVNVTkJWRWxQVGw5RlVsSlBVZ0JUVTB4ZlEwVlNWRWxHU1VOQlZFVmZSVkpTVDFJQVNVNVdRVXhKUkY5WVgwWlBVbGRCVWtSRlJGOUdUMUlBVTBWVVgxQkJVa0ZOUlZSRlVnQkhSVlJmVUVGU1FVMUZWRVZTQUVoUVJWOVZVMFZTQUZORlJWOVBWRWhGVWdCSVVFVmZRMEpmUTBoVlRrdGZTRVZCUkVWU0FFMUxRMEZNUlU1RVFWSUFVMFZVVlZBQVYwVkNYMU5GVWxaRlVsOUpVMTlFVDFkT0FGUkZRVkpFVDFkT0FFaFFSVjlEVEU5VFJVUmZRMDlPVGtWRFZFbFBUZ0JJUlZWU1NWTlVTVU5mUlZoUVNWSkJWRWxQVGdCRVNWTkRUMDVPUlVOVVJVUmZUMUJGVWtGVVNVOU9BRTVQVGw5QlZWUklUMUpKVkVGVVNWWkZYMGxPUms5U1RVRlVTVTlPQUVoUVJWOUpUbFpCVEVsRVgxWkZVbE5KVDA0QVNGQkZYME5DWDAxRlUxTkJSMFZmUWtWSFNVNEFVMGxVUlY5SlUxOUdVazlhUlU0QVNGQkZYMGxPVmtGTVNVUmZTRVZCUkVWU1gxUlBTMFZPQUVsT1ZrRk1TVVJmVkU5TFJVNEFSazlTUWtsRVJFVk9BRVZPU0VGT1EwVmZXVTlWVWw5RFFVeE5BRWhRUlY5SlRsWkJURWxFWDFWU1RBQkNURTlEUzBWRVgwSlpYMUJCVWtWT1ZFRk1YME5QVGxSU1Qwd0FUVXREVDB3QVFVTk1BRWhRUlY5SlRsUkZVazVCVEFCU1JWRlZSVk5VWDBoRlFVUkZVbDlHU1VWTVJGTmZWRTlQWDB4QlVrZEZYMVZPVDBaR1NVTkpRVXdBU0ZCRlgwOUxBRlZPVEVsT1N3QlZUa3hQUTBzQVVGSkpBRkpGVkZKWlgxZEpWRWdBU0ZCRlgwbE9Wa0ZNU1VSZlEwOU9WRVZPVkY5TVJVNUhWRWdBU0ZCRlgxVk9SVmhRUlVOVVJVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVJreFZVMGdBVUZKUFVGQkJWRU5JQUUwdFUwVkJVa05JQUZWU1NWOVVUMDlmVEU5T1J3QlFVazlEUlZOVFNVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlVFVlNVMGxUVkVWT1ZGOVhRVkpPU1U1SEFFMUpVME5GVEV4QlRrVlBWVk5mVjBGU1RrbE9Sd0JJVUVWZlNVNVdRVXhKUkY5VVVrRk9VMFpGVWw5RlRrTlBSRWxPUndCRmVIQmxZM1JsWkNCRFVreEdBRWhRUlY5SlRsWkJURWxFWDBOSVZVNUxYMU5KV2tVQVRVOVdSUUJEVDA1VVNVNVZSUUJJVUVWZlEwSmZVMVJCVkZWVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpUWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlXUlZKVFNVOU9YME5QVFZCTVJWUkZBRWhRUlY5RFFsOVZVa3hmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gwNUJUVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVTFOQlIwVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwMUZWRWhQUkY5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMFpKUlV4RVgwTlBUVkJNUlZSRkFFUkZURVZVUlFCSVVFVmZTVTVXUVV4SlJGOUZUMFpmVTFSQlZFVUFTVTVXUVV4SlJGOVRVMHhmUTBWU1ZFbEdTVU5CVkVVQVVFRlZVMFVBVGs5ZlVrVlRVRTlPVTBVQVZVNVRWVkJRVDFKVVJVUmZUVVZFU1VGZlZGbFFSUUJIVDA1RkFFNVBWRjlCUTBORlVGUkJRa3hGQUZORlVsWkpRMFZmVlU1QlZrRkpURUZDVEVVQVVrRk9SMFZmVGs5VVgxTkJWRWxUUmtsQlFreEZBRTlTU1VkSlRsOUpVMTlWVGxKRlFVTklRVUpNUlFCU1JWTlFUMDVUUlY5SlUxOVRWRUZNUlFCUVZWSkhSUUJOUlZKSFJRQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGQUZKRlVWVkZVMVJmU0VWQlJFVlNYMVJQVDE5TVFWSkhSUUJRUVZsTVQwRkVYMVJQVDE5TVFWSkhSUUJKVGxOVlJrWkpRMGxGVGxSZlUxUlBVa0ZIUlFCSVVFVmZVRUZWVTBWRVgxVlFSMUpCUkVVQVNGQkZYMUJCVlZORlJGOUlNbDlWVUVkU1FVUkZBRk5QVlZKRFJRQkJUazVQVlU1RFJRQlVVa0ZEUlFCSVVFVmZWVTVGV0ZCRlExUkZSRjlUVUVGRFJRQkVSVk5EVWtsQ1JRQlZUbE5WUWxORFVrbENSUUJTUlVOUFVrUUFTRkJGWDBsT1ZrRk1TVVJmVFVWVVNFOUVBRTVQVkY5R1QxVk9SQUJRVWs5UVJrbE9SQUJWVGtKSlRrUUFVa1ZDU1U1RUFGVk9RVlZVU0U5U1NWcEZSQUJOUlZSSVQwUmZUazlVWDBGTVRFOVhSVVFBU0ZSVVVGOVdSVkpUU1U5T1gwNVBWRjlUVlZCUVQxSlVSVVFBUVV4U1JVRkVXVjlTUlZCUFVsUkZSQUJCUTBORlVGUkZSQUJPVDFSZlNVMVFURVZOUlU1VVJVUUFURTlQVUY5RVJWUkZRMVJGUkFCSVVFVmZRMUpmUlZoUVJVTlVSVVFBU0ZCRlgweEdYMFZZVUVWRFZFVkVBRU5TUlVGVVJVUUFTVTFmVlZORlJBQklVRVZmVUVGVlUwVkVBRlJKVFVWUFZWUmZUME5EVlZKRlJBQlFRVmxOUlU1VVgxSkZVVlZKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlTUlZGVlNWSkZSQUJRVWs5WVdWOUJWVlJJUlU1VVNVTkJWRWxQVGw5U1JWRlZTVkpGUkFCT1JWUlhUMUpMWDBGVlZFaEZUbFJKUTBGVVNVOU9YMUpGVVZWSlVrVkVBRXhGVGtkVVNGOVNSVkZWU1ZKRlJBQlRVMHhmUTBWU1ZFbEdTVU5CVkVWZlVrVlJWVWxTUlVRQVZWQkhVa0ZFUlY5U1JWRlZTVkpGUkFCUVFVZEZYMFZZVUVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDBaQlNVeEZSQUJGV0ZCRlExUkJWRWxQVGw5R1FVbE1SVVFBVWtWV1FVeEpSRUZVU1U5T1gwWkJTVXhGUkFCVFUweGZTRUZPUkZOSVFVdEZYMFpCU1V4RlJBQk1UME5MUlVRQVZGSkJUbE5HVDFKTlFWUkpUMDVmUVZCUVRFbEZSQUJPVDFSZlRVOUVTVVpKUlVRQVRrOVVYMFZZVkVWT1JFVkVBRUpCVGtSWFNVUlVTRjlNU1UxSlZGOUZXRU5GUlVSRlJBQlRTVlJGWDBsVFgwOVdSVkpNVDBGRVJVUUFTRVZCUkFCRmVIQmxZM1JsWkNCSVZGUlFMd0FBWGhNQUFDWVRBQUF3RUFBQThCY0FBSjBUQUFBVkVnQUFPUmNBQVBBU0FBQUtFQUFBZFJJQUFLMFNBQUNDRXdBQVR4UUFBSDhRQUFDZ0ZRQUFJeFFBQUlrU0FBQ0xGQUFBVFJVQUFOUVJBQURQRkFBQUVCZ0FBTWtXQUFEY0ZnQUF3UkVBQU9BWEFBQzdGQUFBZEJRQUFId1ZBQURsRkFBQUNCY0FBQjhRQUFCbEZRQUFveFFBQUNnVkFBQUNGUUFBbVJVQUFDd1FBQUNMR1FBQVR3OEFBTlFPQUFCcUVBQUF6aEFBQUFJWEFBQ0pEZ0FBYmhNQUFCd1RBQUJtRkFBQVZoY0FBTUVUQUFETkV3QUFiQk1BQUdnWEFBQm1Gd0FBWHhjQUFDSVRBQURPRHdBQWFRNEFBTmdPQUFCakZnQUF5eE1BQUtvT0FBQW9Gd0FBSmhjQUFNVVRBQUJkRmdBQTZCRUFBR2NUQUFCbEV3QUE4aFlBQUhNVEFBQWRGd0FBK1JZQUFQTVJBQURQRGdBQXpoVUFBQXdTQUFDekVRQUFwUkVBQUdFUUFBQXlGd0FBdXhNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSURBZ0lDQWdJQUFBSUNBQUlDQUFJQ0FnSUNBZ0lDQWdJQUJBQUFBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUNBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFiRzl6WldWbGNDMWhiR2wyWlFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQVFFQkFRRUFBQUVCQUFFQkFBRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQmxZM1JwYjI1bGJuUXRiR1Z1WjNSb2IyNXliM2g1TFdOdmJtNWxZM1JwYjI0QUFBQUFBQUFBQUFBQUFBQUFBQUJ5WVc1elptVnlMV1Z1WTI5a2FXNW5jR2R5WVdSbERRb05DZzBLVTAwTkNnMEtWRlJRTDBORkwxUlRVQzhBQUFBQUFBQUFBQUFBQUFBQkFnQUJBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBUUlBQVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFRRUZBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUFBUUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNRUFBQUVCQVFFQkFRRUJBUUVCQVVFQkFRRUJBUUVCQVFFQkFRQUJBQUdCd1FFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFJQUFBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJPVDFWT1EwVkZRMHRQVlZST1JVTlVSVlJGUTFKSlFrVk1WVk5JUlZSRlFVUlRSVUZTUTBoU1IwVkRWRWxXU1ZSWlRFVk9SRUZTVmtWUFZFbEdXVkJVU1U5T1UwTklVMFZCV1ZOVVFWUkRTRWRGVDFKRVNWSkZRMVJQVWxSU1EwaFFRVkpCVFVWVVJWSlZVa05GUWxORFVrbENSVUZTUkU5WFRrRkRSVWxPUkU1TFEwdFZRbE5EVWtsQ1JVaFVWRkF2UVVSVVVDOD0nXG4iLCAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3JMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzBrQkFYc2dBRUVRYXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNJQi9Rc0RBQ0FBSUFIOUN3TUFJQUJCTUdvZ0FmMExBd0FnQUVFZ2FpQUIvUXNEQUNBQVFkMEJOZ0ljUVFBTGV3RUJmd0pBSUFBb0Fnd2lBdzBBQWtBZ0FDZ0NCRVVOQUNBQUlBRTJBZ1FMQWtBZ0FDQUJJQUlReElDQWdBQWlBdzBBSUFBb0Fnd1BDeUFBSUFNMkFoeEJBQ0VESUFBb0FnUWlBVVVOQUNBQUlBRWdBaUFBS0FJSUVZR0FnSUFBQUNJQlJRMEFJQUFnQWpZQ0ZDQUFJQUUyQWd3Z0FTRURDeUFEQytUekFRTU9md04rQkg4amdJQ0FnQUJCRUdzaUF5U0FnSUNBQUNBQklRUWdBU0VGSUFFaEJpQUJJUWNnQVNFSUlBRWhDU0FCSVFvZ0FTRUxJQUVoRENBQklRMGdBU0VPSUFFaER3SkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFLQUljSWhCQmYyb08zUUhhQVFIWkFRSURCQVVHQndnSkNnc01EUTdZQVE4UTF3RVJFdFlCRXhRVkZoY1lHUm9iNEFIZkFSd2RIdFVCSHlBaElpTWtKZFFCSmljb0tTb3JMTk1CMGdFdEx0RUIwQUV2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVYmJBVWRJU1VyUEFjNEJTODBCVE13QlRVNVBVRkZTVTFSVlZsZFlXVnBiWEYxZVgyQmhZbU5rWldabmFHbHFhMnh0Ym05d2NYSnpkSFYyZDNoNWVudDhmWDUvZ0FHQkFZSUJnd0dFQVlVQmhnR0hBWWdCaVFHS0FZc0JqQUdOQVk0Qmp3R1FBWkVCa2dHVEFaUUJsUUdXQVpjQm1BR1pBWm9CbXdHY0FaMEJuZ0dmQWFBQm9RR2lBYU1CcEFHbEFhWUJwd0dvQWFrQnFnR3JBYXdCclFHdUFhOEJzQUd4QWJJQnN3RzBBYlVCdGdHM0Fjc0J5Z0c0QWNrQnVRSElBYm9CdXdHOEFiMEJ2Z0cvQWNBQndRSENBY01CeEFIRkFjWUJBTndCQzBFQUlSQU14Z0VMUVE0aEVBekZBUXRCRFNFUURNUUJDMEVQSVJBTXd3RUxRUkFoRUF6Q0FRdEJFeUVRRE1FQkMwRVVJUkFNd0FFTFFSVWhFQXkvQVF0QkZpRVFETDRCQzBFWElSQU12UUVMUVJnaEVBeThBUXRCR1NFUURMc0JDMEVhSVJBTXVnRUxRUnNoRUF5NUFRdEJIQ0VRRExnQkMwRUlJUkFNdHdFTFFSMGhFQXkyQVF0QklDRVFETFVCQzBFZklSQU10QUVMUVFjaEVBeXpBUXRCSVNFUURMSUJDMEVpSVJBTXNRRUxRUjRoRUF5d0FRdEJJeUVRREs4QkMwRVNJUkFNcmdFTFFSRWhFQXl0QVF0QkpDRVFES3dCQzBFbElSQU1xd0VMUVNZaEVBeXFBUXRCSnlFUURLa0JDMEhEQVNFUURLZ0JDMEVwSVJBTXB3RUxRU3NoRUF5bUFRdEJMQ0VRREtVQkMwRXRJUkFNcEFFTFFTNGhFQXlqQVF0Qkx5RVFES0lCQzBIRUFTRVFES0VCQzBFd0lSQU1vQUVMUVRRaEVBeWZBUXRCRENFUURKNEJDMEV4SVJBTW5RRUxRVEloRUF5Y0FRdEJNeUVRREpzQkMwRTVJUkFNbWdFTFFUVWhFQXlaQVF0QnhRRWhFQXlZQVF0QkN5RVFESmNCQzBFNklSQU1sZ0VMUVRZaEVBeVZBUXRCQ2lFUURKUUJDMEUzSVJBTWt3RUxRVGdoRUF5U0FRdEJQQ0VRREpFQkMwRTdJUkFNa0FFTFFUMGhFQXlQQVF0QkNTRVFESTRCQzBFb0lSQU1qUUVMUVQ0aEVBeU1BUXRCUHlFUURJc0JDMEhBQUNFUURJb0JDMEhCQUNFUURJa0JDMEhDQUNFUURJZ0JDMEhEQUNFUURJY0JDMEhFQUNFUURJWUJDMEhGQUNFUURJVUJDMEhHQUNFUURJUUJDMEVxSVJBTWd3RUxRY2NBSVJBTWdnRUxRY2dBSVJBTWdRRUxRY2tBSVJBTWdBRUxRY29BSVJBTWZ3dEJ5d0FoRUF4K0MwSE5BQ0VRREgwTFFjd0FJUkFNZkF0QnpnQWhFQXg3QzBIUEFDRVFESG9MUWRBQUlSQU1lUXRCMFFBaEVBeDRDMEhTQUNFUURIY0xRZE1BSVJBTWRndEIxQUFoRUF4MUMwSFdBQ0VRREhRTFFkVUFJUkFNY3d0QkJpRVFESElMUWRjQUlSQU1jUXRCQlNFUURIQUxRZGdBSVJBTWJ3dEJCQ0VRREc0TFFka0FJUkFNYlF0QjJnQWhFQXhzQzBIYkFDRVFER3NMUWR3QUlSQU1hZ3RCQXlFUURHa0xRZDBBSVJBTWFBdEIzZ0FoRUF4bkMwSGZBQ0VRREdZTFFlRUFJUkFNWlF0QjRBQWhFQXhrQzBIaUFDRVFER01MUWVNQUlSQU1ZZ3RCQWlFUURHRUxRZVFBSVJBTVlBdEI1UUFoRUF4ZkMwSG1BQ0VRREY0TFFlY0FJUkFNWFF0QjZBQWhFQXhjQzBIcEFDRVFERnNMUWVvQUlSQU1XZ3RCNndBaEVBeFpDMEhzQUNFUURGZ0xRZTBBSVJBTVZ3dEI3Z0FoRUF4V0MwSHZBQ0VRREZVTFFmQUFJUkFNVkF0QjhRQWhFQXhUQzBIeUFDRVFERklMUWZNQUlSQU1VUXRCOUFBaEVBeFFDMEgxQUNFUURFOExRZllBSVJBTVRndEI5d0FoRUF4TkMwSDRBQ0VRREV3TFFma0FJUkFNU3d0QitnQWhFQXhLQzBIN0FDRVFERWtMUWZ3QUlSQU1TQXRCL1FBaEVBeEhDMEgrQUNFUURFWUxRZjhBSVJBTVJRdEJnQUVoRUF4RUMwR0JBU0VRREVNTFFZSUJJUkFNUWd0Qmd3RWhFQXhCQzBHRUFTRVFERUFMUVlVQklSQU1Qd3RCaGdFaEVBdytDMEdIQVNFUUREMExRWWdCSVJBTVBBdEJpUUVoRUF3N0MwR0tBU0VRRERvTFFZc0JJUkFNT1F0QmpBRWhFQXc0QzBHTkFTRVFERGNMUVk0QklSQU1OZ3RCandFaEVBdzFDMEdRQVNFUUREUUxRWkVCSVJBTU13dEJrZ0VoRUF3eUMwR1RBU0VRRERFTFFaUUJJUkFNTUF0QmxRRWhFQXd2QzBHV0FTRVFEQzRMUVpjQklSQU1MUXRCbUFFaEVBd3NDMEdaQVNFUURDc0xRWm9CSVJBTUtndEJtd0VoRUF3cEMwR2NBU0VRRENnTFFaMEJJUkFNSnd0Qm5nRWhFQXdtQzBHZkFTRVFEQ1VMUWFBQklSQU1KQXRCb1FFaEVBd2pDMEdpQVNFUURDSUxRYU1CSVJBTUlRdEJwQUVoRUF3Z0MwR2xBU0VRREI4TFFhWUJJUkFNSGd0QnB3RWhFQXdkQzBHb0FTRVFEQndMUWFrQklSQU1Hd3RCcWdFaEVBd2FDMEdyQVNFUURCa0xRYXdCSVJBTUdBdEJyUUVoRUF3WEMwR3VBU0VRREJZTFFRRWhFQXdWQzBHdkFTRVFEQlFMUWJBQklSQU1Fd3RCc1FFaEVBd1NDMEd6QVNFUURCRUxRYklCSVJBTUVBdEJ0QUVoRUF3UEMwRzFBU0VRREE0TFFiWUJJUkFNRFF0QnR3RWhFQXdNQzBHNEFTRVFEQXNMUWJrQklSQU1DZ3RCdWdFaEVBd0pDMEc3QVNFUURBZ0xRY1lCSVJBTUJ3dEJ2QUVoRUF3R0MwRzlBU0VRREFVTFFiNEJJUkFNQkF0QnZ3RWhFQXdEQzBIQUFTRVFEQUlMUWNJQklSQU1BUXRCd1FFaEVBc0RRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJBT3h3RUFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEVCRVNFeFFWRmhjWUdSb2JIQjRmSUNFakpTZy9RRUZFUlVaSFNFbEtTMHhOVDFCUlVsUGVBMWRaVzF4ZFlHSmxabWRvYVdwcmJHMXZjSEZ5YzNSMWRuZDRlWHA3ZkgxK2dBR0NBWVVCaGdHSEFZa0Jpd0dNQVkwQmpnR1BBWkFCa1FHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdHNEFia0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnSEhBY2dCeVFIS0Fjc0J6QUhOQWM0Qnp3SFFBZEVCMGdIVEFkUUIxUUhXQWRjQjJBSFpBZG9CMndIY0FkMEIzZ0hnQWVFQjRnSGpBZVFCNVFIbUFlY0I2QUhwQWVvQjZ3SHNBZTBCN2dIdkFmQUI4UUh5QWZNQm1RS2tBckFDL2dMK0Fnc2dBU0lFSUFKSERmTUJRZDBCSVJBTS93TUxJQUVpRUNBQ1J3M2RBVUhEQVNFUURQNERDeUFCSWdFZ0FrY05rQUZCOXdBaEVBejlBd3NnQVNJQklBSkhEWVlCUWU4QUlSQU0vQU1MSUFFaUFTQUNSdzEvUWVvQUlSQU0rd01MSUFFaUFTQUNSdzE3UWVnQUlSQU0rZ01MSUFFaUFTQUNSdzE0UWVZQUlSQU0rUU1MSUFFaUFTQUNSdzBhUVJnaEVBejRBd3NnQVNJQklBSkhEUlJCRWlFUURQY0RDeUFCSWdFZ0FrY05XVUhGQUNFUURQWURDeUFCSWdFZ0FrY05Ta0UvSVJBTTlRTUxJQUVpQVNBQ1J3MUlRVHdoRUF6MEF3c2dBU0lCSUFKSERVRkJNU0VRRFBNREN5QUFMUUF1UVFGR0Rlc0RESWNDQ3lBQUlBRWlBU0FDRU1DQWdJQUFRUUZIRGVZQklBQkNBRGNESUF6bkFRc2dBQ0FCSWdFZ0FoQzBnSUNBQUNJUURlY0JJQUVoQVF6MUFnc0NRQ0FCSWdFZ0FrY05BRUVHSVJBTThBTUxJQUFnQVVFQmFpSUJJQUlRdTRDQWdBQWlFQTNvQVNBQklRRU1NUXNnQUVJQU53TWdRUkloRUF6VkF3c2dBU0lRSUFKSERTdEJIU0VRRE8wREN3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVRVFJUkFNMUFNTFFRY2hFQXpzQXdzZ0FFSUFJQUFwQXlBaUVTQUNJQUVpRUd1dEloSjlJaE1nRXlBUlZoczNBeUFnRVNBU1ZpSVVSUTNsQVVFSUlSQU02d01MQWtBZ0FTSUJJQUpHRFFBZ0FFR0pnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRUlFoRUF6U0F3dEJDU0VRRE9vREN5QUJJUUVnQUNrRElGQU41QUVnQVNFQkRQSUNDd0pBSUFFaUFTQUNSdzBBUVFzaEVBenBBd3NnQUNBQlFRRnFJZ0VnQWhDMmdJQ0FBQ0lRRGVVQklBRWhBUXp5QWdzZ0FDQUJJZ0VnQWhDNGdJQ0FBQ0lRRGVVQklBRWhBUXp5QWdzZ0FDQUJJZ0VnQWhDNGdJQ0FBQ0lRRGVZQklBRWhBUXdOQ3lBQUlBRWlBU0FDRUxxQWdJQUFJaEFONXdFZ0FTRUJEUEFDQ3dKQUlBRWlBU0FDUncwQVFROGhFQXpsQXdzZ0FTMEFBQ0lRUVR0R0RRZ2dFRUVOUnczb0FTQUJRUUZxSVFFTTd3SUxJQUFnQVNJQklBSVF1b0NBZ0FBaUVBM29BU0FCSVFFTThnSUxBMEFDUUNBQkxRQUFRZkMxZ0lBQWFpMEFBQ0lRUVFGR0RRQWdFRUVDUnczckFTQUFLQUlFSVJBZ0FFRUFOZ0lFSUFBZ0VDQUJRUUZxSWdFUXVZQ0FnQUFpRUEzcUFTQUJJUUVNOUFJTElBRkJBV29pQVNBQ1J3MEFDMEVTSVJBTTRnTUxJQUFnQVNJQklBSVF1b0NBZ0FBaUVBM3BBU0FCSVFFTUNnc2dBU0lCSUFKSERRWkJHeUVRRE9BREN3SkFJQUVpQVNBQ1J3MEFRUlloRUF6Z0F3c2dBRUdLZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBQ0FCSUFJUXVJQ0FnQUFpRUEzcUFTQUJJUUZCSUNFUURNWURDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBUWZDM2dJQUFhaTBBQUNJUVFRSkdEUUFDUUNBUVFYOXFEZ1RsQWV3QkFPc0I3QUVMSUFGQkFXb2hBVUVJSVJBTXlBTUxJQUZCQVdvaUFTQUNSdzBBQzBFVklSQU0zd01MUVJVaEVBemVBd3NEUUFKQUlBRXRBQUJCOExtQWdBQnFMUUFBSWhCQkFrWU5BQ0FRUVg5cURnVGVBZXdCNEFIckFld0JDeUFCUVFGcUlnRWdBa2NOQUF0QkdDRVFETjBEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVISVJBTXhBTUxRUmtoRUF6Y0F3c2dBVUVCYWlFQkRBSUxBa0FnQVNJVUlBSkhEUUJCR2lFUUROc0RDeUFVSVFFQ1FDQVVMUUFBUVhOcURoVGRBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBZ0R1QWd0QkFDRVFJQUJCQURZQ0hDQUFRYStMZ0lBQU5nSVFJQUJCQWpZQ0RDQUFJQlJCQVdvMkFoUU0yZ01MQWtBZ0FTMEFBQ0lRUVR0R0RRQWdFRUVOUnczb0FTQUJRUUZxSVFFTTVRSUxJQUZCQVdvaEFRdEJJaUVRREw4REN3SkFJQUVpRUNBQ1J3MEFRUndoRUF6WUF3dENBQ0VSSUJBaEFTQVFMUUFBUVZCcURqZm5BZVlCQVFJREJBVUdCd2dBQUFBQUFBQUFDUW9MREEwT0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUEVCRVNFeFFBQzBFZUlSQU12UU1MUWdJaEVRemxBUXRDQXlFUkRPUUJDMElFSVJFTTR3RUxRZ1VoRVF6aUFRdENCaUVSRE9FQkMwSUhJUkVNNEFFTFFnZ2hFUXpmQVF0Q0NTRVJETjRCQzBJS0lSRU0zUUVMUWdzaEVRemNBUXRDRENFUkROc0JDMElOSVJFTTJnRUxRZzRoRVF6WkFRdENEeUVSRE5nQkMwSUtJUkVNMXdFTFFnc2hFUXpXQVF0Q0RDRVJETlVCQzBJTklSRU0xQUVMUWc0aEVRelRBUXRDRHlFUkROSUJDMElBSVJFQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkF0QUFCQlVHb09OK1VCNUFFQUFRSURCQVVHQitZQjVnSG1BZVlCNWdIbUFlWUJDQWtLQ3d3TjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQVE0UEVCRVNFK1lCQzBJQ0lSRU01QUVMUWdNaEVRempBUXRDQkNFUkRPSUJDMElGSVJFTTRRRUxRZ1loRVF6Z0FRdENCeUVSRE44QkMwSUlJUkVNM2dFTFFna2hFUXpkQVF0Q0NpRVJETndCQzBJTElSRU0yd0VMUWd3aEVRemFBUXRDRFNFUkROa0JDMElPSVJFTTJBRUxRZzhoRVF6WEFRdENDaUVSRE5ZQkMwSUxJUkVNMVFFTFFnd2hFUXpVQVF0Q0RTRVJETk1CQzBJT0lSRU0wZ0VMUWc4aEVRelJBUXNnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM1NBVUVmSVJBTXdBTUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFTUWhFQXluQXd0QklDRVFETDhEQ3lBQUlBRWlFQ0FDRUw2QWdJQUFRWDlxRGdXMkFRREZBZ0hSQWRJQkMwRVJJUkFNcEFNTElBQkJBVG9BTHlBUUlRRU11d01MSUFFaUFTQUNSdzNTQVVFa0lSQU11d01MSUFFaURTQUNSdzBlUWNZQUlSQU11Z01MSUFBZ0FTSUJJQUlRc29DQWdBQWlFQTNVQVNBQklRRU10UUVMSUFFaUVDQUNSdzBtUWRBQUlSQU11QU1MQWtBZ0FTSUJJQUpIRFFCQktDRVFETGdEQ3lBQVFRQTJBZ1FnQUVHTWdJQ0FBRFlDQ0NBQUlBRWdBUkN4Z0lDQUFDSVFEZE1CSUFFaEFRellBUXNDUUNBQkloQWdBa2NOQUVFcElSQU10d01MSUJBdEFBQWlBVUVnUmcwVUlBRkJDVWNOMHdFZ0VFRUJhaUVCREJVTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRCY0xRU29oRUF5MUF3c0NRQ0FCSWhBZ0FrY05BRUVySVJBTXRRTUxBa0FnRUMwQUFDSUJRUWxHRFFBZ0FVRWdSdzNWQVFzZ0FDMEFMRUVJUmczVEFTQVFJUUVNa1FNTEFrQWdBU0lCSUFKSERRQkJMQ0VRRExRREN5QUJMUUFBUVFwSERkVUJJQUZCQVdvaEFRekpBZ3NnQVNJT0lBSkhEZFVCUVM4aEVBeXlBd3NEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FnRUVGMmFnNEVBTndCM0FFQTJnRUxJQUVoQVF6Z0FRc2dBVUVCYWlJQklBSkhEUUFMUVRFaEVBeXhBd3RCTWlFUUlBRWlGQ0FDUmcyd0F5QUNJQlJySUFBb0FnQWlBV29oRlNBVUlBRnJRUU5xSVJZQ1FBTkFJQlF0QUFBaUYwRWdjaUFYSUJkQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjhMdUFnQUJxTFFBQVJ3MEJBa0FnQVVFRFJ3MEFRUVloQVF5V0F3c2dBVUVCYWlFQklCUkJBV29pRkNBQ1J3MEFDeUFBSUJVMkFnQU1zUU1MSUFCQkFEWUNBQ0FVSVFFTTJRRUxRVE1oRUNBQkloUWdBa1lOcndNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRUlhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZTN2dJQUFhaTBBQUVjTkFRSkFJQUZCQ0VjTkFFRUZJUUVNbFFNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMQURDeUFBUVFBMkFnQWdGQ0VCRE5nQkMwRTBJUkFnQVNJVUlBSkdEYTRESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkJXb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUhRd29DQUFHb3RBQUJIRFFFQ1FDQUJRUVZIRFFCQkJ5RUJESlFEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5dkF3c2dBRUVBTmdJQUlCUWhBUXpYQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFFR0F2b0NBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa1lOQ2lBQklRRU0zUUVMSUFGQkFXb2lBU0FDUncwQUMwRXdJUkFNcmdNTFFUQWhFQXl0QXdzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0JHRFFBZ0VFRjJhZzRFMlFIYUFkb0IyUUhhQVFzZ0FVRUJhaUlCSUFKSERRQUxRVGdoRUF5dEF3dEJPQ0VRREt3REN3TkFBa0FnQVMwQUFDSVFRU0JHRFFBZ0VFRUpSdzBEQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQQ0VRREtzREN3TkFBa0FnQVMwQUFDSVFRU0JHRFFBQ1FBSkFJQkJCZG1vT0JOb0JBUUhhQVFBTElCQkJMRVlOMndFTElBRWhBUXdFQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQeUVRREtvREN5QUJJUUVNMndFTFFjQUFJUkFnQVNJVUlBSkdEYWdESUFJZ0ZHc2dBQ2dDQUNJQmFpRVdJQlFnQVd0QkJtb2hGd0pBQTBBZ0ZDMEFBRUVnY2lBQlFZREFnSUFBYWkwQUFFY05BU0FCUVFaR0RZNERJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFES2tEQ3lBQVFRQTJBZ0FnRkNFQkMwRTJJUkFNamdNTEFrQWdBU0lQSUFKSERRQkJ3UUFoRUF5bkF3c2dBRUdNZ0lDQUFEWUNDQ0FBSUE4MkFnUWdEeUVCSUFBdEFDeEJmMm9PQk0wQjFRSFhBZGtCaHdNTElBRkJBV29oQVF6TUFRc0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBQ0lRUVNCeUlCQWdFRUcvZjJwQi93RnhRUnBKRzBIL0FYRWlFRUVKUmcwQUlCQkJJRVlOQUFKQUFrQUNRQUpBSUJCQm5YOXFEaE1BQXdNREF3TURBd0VEQXdNREF3TURBd01DQXdzZ0FVRUJhaUVCUVRFaEVBeVJBd3NnQVVFQmFpRUJRVEloRUF5UUF3c2dBVUVCYWlFQlFUTWhFQXlQQXdzZ0FTRUJETkFCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJOU0VRREtVREMwRTFJUkFNcEFNTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQkJnTHlBZ0FCcUxRQUFRUUZHRFFBZ0FTRUJETk1CQ3lBQlFRRnFJZ0VnQWtjTkFBdEJQU0VRREtRREMwRTlJUkFNb3dNTElBQWdBU0lCSUFJUXNJQ0FnQUFpRUEzV0FTQUJJUUVNQVFzZ0VFRUJhaUVCQzBFOElSQU1od01MQWtBZ0FTSUJJQUpIRFFCQndnQWhFQXlnQXdzQ1FBTkFBa0FnQVMwQUFFRjNhZzRZQUFMK0F2NENoQVArQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0lBL2dJTElBRkJBV29pQVNBQ1J3MEFDMEhDQUNFUURLQURDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU52UUVnQVNFQkMwRXNJUkFNaFFNTElBRWlBU0FDUnczVEFVSEVBQ0VRREowREN3TkFBa0FnQVMwQUFFR1F3SUNBQUdvdEFBQkJBVVlOQUNBQklRRU10d0lMSUFGQkFXb2lBU0FDUncwQUMwSEZBQ0VRREp3REN5QU5MUUFBSWhCQklFWU5zd0VnRUVFNlJ3MkJBeUFBS0FJRUlRRWdBRUVBTmdJRUlBQWdBU0FORUsrQWdJQUFJZ0VOMEFFZ0RVRUJhaUVCRExNQ0MwSEhBQ0VRSUFFaURTQUNSZzJhQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRWkRDZ0lBQWFpMEFBRWNOZ0FNZ0FVRUZSZzMwQWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5YUF3dEJ5QUFoRUNBQklnMGdBa1lObVFNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRUphaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdXd29DQUFHb3RBQUJIRGY4Q0FrQWdBVUVKUncwQVFRSWhBUXoxQWdzZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTW1RTUxBa0FnQVNJTklBSkhEUUJCeVFBaEVBeVpBd3NDUUFKQUlBMHRBQUFpQVVFZ2NpQUJJQUZCdjM5cVFmOEJjVUVhU1J0Qi93RnhRWkovYWc0SEFJQURnQU9BQTRBRGdBTUJnQU1MSUExQkFXb2hBVUUrSVJBTWdBTUxJQTFCQVdvaEFVRS9JUkFNL3dJTFFjb0FJUkFnQVNJTklBSkdEWmNESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkFXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJvTUtBZ0FCcUxRQUFSdzM5QWlBQlFRRkdEZkFDSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpjREMwSExBQ0VRSUFFaURTQUNSZzJXQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRNXFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRYUxDZ0lBQWFpMEFBRWNOL0FJZ0FVRU9SZzN3QWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5V0F3dEJ6QUFoRUNBQklnMGdBa1lObFFNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRVBhaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUhBd29DQUFHb3RBQUJIRGZzQ0FrQWdBVUVQUncwQVFRTWhBUXp4QWdzZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTWxRTUxRYzBBSVJBZ0FTSU5JQUpHRFpRRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJCV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCME1LQWdBQnFMUUFBUnczNkFnSkFJQUZCQlVjTkFFRUVJUUVNOEFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKUURDd0pBSUFFaURTQUNSdzBBUWM0QUlSQU1sQU1MQWtBQ1FBSkFBa0FnRFMwQUFDSUJRU0J5SUFFZ0FVRy9mMnBCL3dGeFFScEpHMEgvQVhGQm5YOXFEaE1BL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MENBZjBDL1FMOUFnSUQvUUlMSUExQkFXb2hBVUhCQUNFUURQMENDeUFOUVFGcUlRRkJ3Z0FoRUF6OEFnc2dEVUVCYWlFQlFjTUFJUkFNK3dJTElBMUJBV29oQVVIRUFDRVFEUG9DQ3dKQUlBRWlBU0FDUmcwQUlBQkJqWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhGQUNFUURQb0NDMEhQQUNFUURKSURDeUFRSVFFQ1FBSkFJQkF0QUFCQmRtb09CQUdvQXFnQ0FLZ0NDeUFRUVFGcUlRRUxRU2NoRUF6NEFnc0NRQ0FCSWdFZ0FrY05BRUhSQUNFUURKRURDd0pBSUFFdEFBQkJJRVlOQUNBQklRRU1qUUVMSUFGQkFXb2hBU0FBTFFBdFFRRnhSUTNIQVNBQklRRU1qQUVMSUFFaUZ5QUNSdzNJQVVIU0FDRVFESThEQzBIVEFDRVFJQUVpRkNBQ1JnMk9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFGcUlSY0RRQ0FVTFFBQUlBRkIxc0tBZ0FCcUxRQUFSdzNNQVNBQlFRRkdEY2NCSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVdOZ0lBREk0REN3SkFJQUVpQVNBQ1J3MEFRZFVBSVJBTWpnTUxJQUV0QUFCQkNrY056QUVnQVVFQmFpRUJETWNCQ3dKQUlBRWlBU0FDUncwQVFkWUFJUkFNalFNTEFrQUNRQ0FCTFFBQVFYWnFEZ1FBelFITkFRSE5BUXNnQVVFQmFpRUJETWNCQ3lBQlFRRnFJUUZCeWdBaEVBenpBZ3NnQUNBQklnRWdBaEN1Z0lDQUFDSVFEY3NCSUFFaEFVSE5BQ0VRRFBJQ0N5QUFMUUFwUVNKR0RZVURES1lDQ3dKQUlBRWlBU0FDUncwQVFkc0FJUkFNaWdNTFFRQWhGRUVCSVJkQkFTRVdRUUFoRUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRVkJxRGdyVUFkTUJBQUVDQXdRRkJnalZBUXRCQWlFUURBWUxRUU1oRUF3RkMwRUVJUkFNQkF0QkJTRVFEQU1MUVFZaEVBd0NDMEVISVJBTUFRdEJDQ0VRQzBFQUlSZEJBQ0VXUVFBaEZBek1BUXRCQ1NFUVFRRWhGRUVBSVJkQkFDRVdETXNCQ3dKQUlBRWlBU0FDUncwQVFkMEFJUkFNaVFNTElBRXRBQUJCTGtjTnpBRWdBVUVCYWlFQkRLWUNDeUFCSWdFZ0FrY056QUZCM3dBaEVBeUhBd3NDUUNBQklnRWdBa1lOQUNBQVFZNkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkIwQUFoRUF6dUFndEI0QUFoRUF5R0F3dEI0UUFoRUNBQklnRWdBa1lOaFFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRURhaUVYQTBBZ0FTMEFBQ0FVUWVMQ2dJQUFhaTBBQUVjTnpRRWdGRUVEUmczTUFTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUZBd3RCNGdBaEVDQUJJZ0VnQWtZTmhBTWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVDYWlFWEEwQWdBUzBBQUNBVVFlYkNnSUFBYWkwQUFFY056QUVnRkVFQ1JnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlFQXd0QjR3QWhFQ0FCSWdFZ0FrWU5nd01nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZW5DZ0lBQWFpMEFBRWNOeXdFZ0ZFRURSZzNPQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5REF3c0NRQ0FCSWdFZ0FrY05BRUhsQUNFUURJTURDeUFBSUFGQkFXb2lBU0FDRUtpQWdJQUFJaEFOelFFZ0FTRUJRZFlBSVJBTTZRSUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ1JnMEFBa0FDUUFKQUlCQkJ1SDlxRGdzQUFjOEJ6d0hQQWM4Qnp3SFBBYzhCendFQ3p3RUxJQUZCQVdvaEFVSFNBQ0VRRE8wQ0N5QUJRUUZxSVFGQjB3QWhFQXpzQWdzZ0FVRUJhaUVCUWRRQUlSQU02d0lMSUFGQkFXb2lBU0FDUncwQUMwSGtBQ0VRRElJREMwSGtBQ0VRRElFREN3TkFBa0FnQVMwQUFFSHd3b0NBQUdvdEFBQWlFRUVCUmcwQUlCQkJmbW9PQTg4QjBBSFJBZElCQ3lBQlFRRnFJZ0VnQWtjTkFBdEI1Z0FoRUF5QUF3c0NRQ0FCSWdFZ0FrWU5BQ0FCUVFGcUlRRU1Bd3RCNXdBaEVBei9BZ3NEUUFKQUlBRXRBQUJCOE1TQWdBQnFMUUFBSWhCQkFVWU5BQUpBSUJCQmZtb09CTklCMHdIVUFRRFZBUXNnQVNFQlFkY0FJUkFNNXdJTElBRkJBV29pQVNBQ1J3MEFDMEhvQUNFUURQNENDd0pBSUFFaUFTQUNSdzBBUWVrQUlSQU0vZ0lMQWtBZ0FTMEFBQ0lRUVhacURocTZBZFVCMVFHOEFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFjb0IxUUhWQVFEVEFRc2dBVUVCYWlFQkMwRUdJUkFNNHdJTEEwQUNRQ0FCTFFBQVFmREdnSUFBYWkwQUFFRUJSZzBBSUFFaEFReWVBZ3NnQVVFQmFpSUJJQUpIRFFBTFFlb0FJUkFNK3dJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZXNBSVJBTStnSUxBa0FnQVNJQklBSkhEUUJCN0FBaEVBejZBZ3NnQVVFQmFpRUJEQUVMQWtBZ0FTSUJJQUpIRFFCQjdRQWhFQXo1QWdzZ0FVRUJhaUVCQzBFRUlSQU0zZ0lMQWtBZ0FTSVVJQUpIRFFCQjdnQWhFQXozQWdzZ0ZDRUJBa0FDUUFKQUlCUXRBQUJCOE1pQWdBQnFMUUFBUVg5cURnZlVBZFVCMWdFQW5BSUJBdGNCQ3lBVVFRRnFJUUVNQ2dzZ0ZFRUJhaUVCRE0wQkMwRUFJUkFnQUVFQU5nSWNJQUJCbTVLQWdBQTJBaEFnQUVFSE5nSU1JQUFnRkVFQmFqWUNGQXoyQWdzQ1FBTkFBa0FnQVMwQUFFSHd5SUNBQUdvdEFBQWlFRUVFUmcwQUFrQUNRQ0FRUVg5cURnZlNBZE1CMUFIWkFRQUVBZGtCQ3lBQklRRkIyZ0FoRUF6Z0Fnc2dBVUVCYWlFQlFkd0FJUkFNM3dJTElBRkJBV29pQVNBQ1J3MEFDMEh2QUNFUURQWUNDeUFCUVFGcUlRRU15d0VMQWtBZ0FTSVVJQUpIRFFCQjhBQWhFQXoxQWdzZ0ZDMEFBRUV2UnczVUFTQVVRUUZxSVFFTUJnc0NRQ0FCSWhRZ0FrY05BRUh4QUNFUURQUUNDd0pBSUJRdEFBQWlBVUV2UncwQUlCUkJBV29oQVVIZEFDRVFETnNDQ3lBQlFYWnFJZ1JCRmtzTjB3RkJBU0FFZEVHSmdJQUNjVVVOMHdFTXlnSUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJRZDRBSVJBTTJnSUxRZklBSVJBTThnSUxBa0FnQVNJVUlBSkhEUUJCOUFBaEVBenlBZ3NnRkNFQkFrQWdGQzBBQUVId3pJQ0FBR290QUFCQmYyb09BOGtDbEFJQTFBRUxRZUVBSVJBTTJBSUxBa0FnQVNJVUlBSkdEUUFEUUFKQUlCUXRBQUJCOE1xQWdBQnFMUUFBSWdGQkEwWU5BQUpBSUFGQmYyb09Bc3NDQU5VQkN5QVVJUUZCM3dBaEVBemFBZ3NnRkVFQmFpSVVJQUpIRFFBTFFmTUFJUkFNOFFJTFFmTUFJUkFNOEFJTEFrQWdBU0lCSUFKR0RRQWdBRUdQZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUWVBQUlSQU0xd0lMUWZVQUlSQU03d0lMQWtBZ0FTSUJJQUpIRFFCQjlnQWhFQXp2QWdzZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJDMEVESVJBTTFBSUxBMEFnQVMwQUFFRWdSdzNEQWlBQlFRRnFJZ0VnQWtjTkFBdEI5d0FoRUF6c0Fnc0NRQ0FCSWdFZ0FrY05BRUg0QUNFUURPd0NDeUFCTFFBQVFTQkhEYzRCSUFGQkFXb2hBUXp2QVFzZ0FDQUJJZ0VnQWhDc2dJQ0FBQ0lRRGM0QklBRWhBUXlPQWdzQ1FDQUJJZ1FnQWtjTkFFSDZBQ0VRRE9vQ0N5QUVMUUFBUWN3QVJ3M1JBU0FFUVFGcUlRRkJFeUVRRE04QkN3SkFJQUVpQkNBQ1J3MEFRZnNBSVJBTTZRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBTkFJQVF0QUFBZ0FVSHd6b0NBQUdvdEFBQkhEZEFCSUFGQkJVWU56Z0VnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCK3dBaEVBem9BZ3NDUUNBQklnUWdBa2NOQUVIOEFDRVFET2dDQ3dKQUFrQWdCQzBBQUVHOWYyb09EQURSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUhSQVFIUkFRc2dCRUVCYWlFQlFlWUFJUkFNendJTElBUkJBV29oQVVIbkFDRVFETTRDQ3dKQUlBRWlCQ0FDUncwQVFmMEFJUkFNNXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY056d0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjBBSVJBTTV3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVDRVFETXdCQ3dKQUlBRWlCQ0FDUncwQVFmNEFJUkFNNWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFmYk9nSUFBYWkwQUFFY056Z0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjRBSVJBTTVnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZpRVFETXNCQ3dKQUlBRWlCQ0FDUncwQVFmOEFJUkFNNVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFmek9nSUFBYWkwQUFFY056UUVnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZjhBSVJBTTVRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJTRVFETW9CQ3dKQUlBRWlCQ0FDUncwQVFZQUJJUkFNNUFJTElBUXRBQUJCMlFCSERjc0JJQVJCQVdvaEFVRUlJUkFNeVFFTEFrQWdBU0lFSUFKSERRQkJnUUVoRUF6akFnc0NRQUpBSUFRdEFBQkJzbjlxRGdNQXpBRUJ6QUVMSUFSQkFXb2hBVUhyQUNFUURNb0NDeUFFUVFGcUlRRkI3QUFoRUF6SkFnc0NRQ0FCSWdRZ0FrY05BRUdDQVNFUURPSUNDd0pBQWtBZ0JDMEFBRUc0ZjJvT0NBRExBY3NCeXdITEFjc0J5d0VCeXdFTElBUkJBV29oQVVIcUFDRVFETWtDQ3lBRVFRRnFJUUZCN1FBaEVBeklBZ3NDUUNBQklnUWdBa2NOQUVHREFTRVFET0VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hFQ0FFSUFGclFRSnFJUlFDUUFOQUlBUXRBQUFnQVVHQXo0Q0FBR290QUFCSERja0JJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRURZQ0FFR0RBU0VRRE9FQ0MwRUFJUkFnQUVFQU5nSUFJQlJCQVdvaEFRekdBUXNDUUNBQklnUWdBa2NOQUVHRUFTRVFET0FDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRUnFJUkFDUUFOQUlBUXRBQUFnQVVHRHo0Q0FBR290QUFCSERjZ0JJQUZCQkVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0VBU0VRRE9BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNNaEVBekZBUXNDUUNBQklnUWdBa2NOQUVHRkFTRVFETjhDQ3dKQUFrQWdCQzBBQUVHMGYyb09DQURJQWNnQnlBSElBY2dCeUFFQnlBRUxJQVJCQVdvaEFVSHZBQ0VRRE1ZQ0N5QUVRUUZxSVFGQjhBQWhFQXpGQWdzQ1FDQUJJZ1FnQWtjTkFFR0dBU0VRRE40Q0N5QUVMUUFBUWNVQVJ3M0ZBU0FFUVFGcUlRRU1nd0lMQWtBZ0FTSUVJQUpIRFFCQmh3RWhFQXpkQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQmlNK0FnQUJxTFFBQVJ3M0ZBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJod0VoRUF6ZEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFdElSQU13Z0VMQWtBZ0FTSUVJQUpIRFFCQmlBRWhFQXpjQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3M0VBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJpQUVoRUF6Y0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFcElSQU13UUVMQWtBZ0FTSUJJQUpIRFFCQmlRRWhFQXpiQWd0QkFTRVFJQUV0QUFCQjN3QkhEY0FCSUFGQkFXb2hBUXlCQWdzQ1FDQUJJZ1FnQWtjTkFFR0tBU0VRRE5vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBRFFDQUVMUUFBSUFGQmpNK0FnQUJxTFFBQVJ3M0JBU0FCUVFGR0RhOENJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWW9CSVJBTTJRSUxBa0FnQVNJRUlBSkhEUUJCaXdFaEVBelpBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCanMrQWdBQnFMUUFBUnczQkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQml3RWhFQXpaQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVDSVJBTXZnRUxBa0FnQVNJRUlBSkhEUUJCakFFaEVBellBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUnczQUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmpBRWhFQXpZQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVmSVJBTXZRRUxBa0FnQVNJRUlBSkhEUUJCalFFaEVBelhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOHMrQWdBQnFMUUFBUncyL0FTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmpRRWhFQXpYQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVKSVJBTXZBRUxBa0FnQVNJRUlBSkhEUUJCamdFaEVBeldBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0F2d0cvQWI4QnZ3Ry9BUUcvQVFzZ0JFRUJhaUVCUWZnQUlSQU12UUlMSUFSQkFXb2hBVUg1QUNFUURMd0NDd0pBSUFFaUJDQUNSdzBBUVk4QklSQU0xUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUVpIUGdJQUFhaTBBQUVjTnZRRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZOEJJUkFNMVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR0NFUURMb0JDd0pBSUFFaUJDQUNSdzBBUVpBQklSQU0xQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUVpmUGdJQUFhaTBBQUVjTnZBRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaQUJJUkFNMUFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRnlFUURMa0JDd0pBSUFFaUJDQUNSdzBBUVpFQklSQU0wd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJtb2hFQUpBQTBBZ0JDMEFBQ0FCUVpyUGdJQUFhaTBBQUVjTnV3RWdBVUVHUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaRUJJUkFNMHdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRlNFUURMZ0JDd0pBSUFFaUJDQUNSdzBBUVpJQklSQU0wZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWFIUGdJQUFhaTBBQUVjTnVnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaSUJJUkFNMGdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSGlFUURMY0JDd0pBSUFFaUJDQUNSdzBBUVpNQklSQU0wUUlMSUFRdEFBQkJ6QUJIRGJnQklBUkJBV29oQVVFS0lSQU10Z0VMQWtBZ0JDQUNSdzBBUVpRQklSQU0wQUlMQWtBQ1FDQUVMUUFBUWI5L2FnNFBBTGtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0JBYmtCQ3lBRVFRRnFJUUZCL2dBaEVBeTNBZ3NnQkVFQmFpRUJRZjhBSVJBTXRnSUxBa0FnQkNBQ1J3MEFRWlVCSVJBTXp3SUxBa0FDUUNBRUxRQUFRYjkvYWc0REFMZ0JBYmdCQ3lBRVFRRnFJUUZCL1FBaEVBeTJBZ3NnQkVFQmFpRUVRWUFCSVJBTXRRSUxBa0FnQkNBQ1J3MEFRWllCSVJBTXpnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYWZQZ0lBQWFpMEFBRWNOdGdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpZQklSQU16Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDeUVRRExNQkN3SkFJQVFnQWtjTkFFR1hBU0VRRE0wQ0N3SkFBa0FDUUFKQUlBUXRBQUJCVTJvT0l3QzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0JBYmdCdUFHNEFiZ0J1QUVDdUFHNEFiZ0JBN2dCQ3lBRVFRRnFJUUZCK3dBaEVBeTJBZ3NnQkVFQmFpRUJRZndBSVJBTXRRSUxJQVJCQVdvaEJFR0JBU0VRRExRQ0N5QUVRUUZxSVFSQmdnRWhFQXl6QWdzQ1FDQUVJQUpIRFFCQm1BRWhFQXpNQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQnFjK0FnQUJxTFFBQVJ3MjBBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtQUVoRUF6TUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFWklSQU1zUUVMQWtBZ0JDQUNSdzBBUVprQklSQU15d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWE3UGdJQUFhaTBBQUVjTnN3RWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaa0JJUkFNeXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQmlFUURMQUJDd0pBSUFRZ0FrY05BRUdhQVNFUURNb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUcwejRDQUFHb3RBQUJIRGJJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHYUFTRVFETW9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUndoRUF5dkFRc0NRQ0FFSUFKSERRQkJtd0VoRUF6SkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0cytBZ0FCcUxRQUFSdzJ4QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbXdFaEVBekpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW5JUkFNcmdFTEFrQWdCQ0FDUncwQVFad0JJUkFNeUFJTEFrQUNRQ0FFTFFBQVFheC9hZzRDQUFHeEFRc2dCRUVCYWlFRVFZWUJJUkFNcndJTElBUkJBV29oQkVHSEFTRVFESzRDQ3dKQUlBUWdBa2NOQUVHZEFTRVFETWNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHNHo0Q0FBR290QUFCSERhOEJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2RBU0VRRE1jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNZaEVBeXNBUXNDUUNBRUlBSkhEUUJCbmdFaEVBekdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdXMrQWdBQnFMUUFBUncydUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5nRWhFQXpHQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVESVJBTXF3RUxBa0FnQkNBQ1J3MEFRWjhCSVJBTXhRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOclFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo4QklSQU14UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEQ0VRREtvQkN3SkFJQVFnQWtjTkFFR2dBU0VRRE1RQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUU5xSVJBQ1FBTkFJQVF0QUFBZ0FVRzh6NENBQUdvdEFBQkhEYXdCSUFGQkEwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdnQVNFUURNUUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRMGhFQXlwQVFzQ1FDQUVJQUpIRFFCQm9RRWhFQXpEQWdzQ1FBSkFJQVF0QUFCQnVuOXFEZ3NBckFHc0Fhd0JyQUdzQWF3QnJBR3NBYXdCQWF3QkN5QUVRUUZxSVFSQml3RWhFQXlxQWdzZ0JFRUJhaUVFUVl3QklSQU1xUUlMQWtBZ0JDQUNSdzBBUWFJQklSQU13Z0lMSUFRdEFBQkIwQUJIRGFrQklBUkJBV29oQkF6cEFRc0NRQ0FFSUFKSERRQkJvd0VoRUF6QkFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQnFnR3FBYW9CcWdHcUFRQ3FBUXNnQkVFQmFpRUVRWTRCSVJBTXFBSUxJQVJCQVdvaEFVRWlJUkFNcGdFTEFrQWdCQ0FDUncwQVFhUUJJUkFNd0FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFjRFBnSUFBYWkwQUFFY05xQUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYVFCSVJBTXdBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkhTRVFES1VCQ3dKQUlBUWdBa2NOQUVHbEFTRVFETDhDQ3dKQUFrQWdCQzBBQUVHdWYyb09Bd0NvQVFHb0FRc2dCRUVCYWlFRVFaQUJJUkFNcGdJTElBUkJBV29oQVVFRUlSQU1wQUVMQWtBZ0JDQUNSdzBBUWFZQklSQU12Z0lMQWtBQ1FBSkFBa0FDUUNBRUxRQUFRYjkvYWc0VkFLb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFhb0JBYW9CcWdFQ3FnR3FBUU9xQWFvQkJLb0JDeUFFUVFGcUlRUkJpQUVoRUF5b0Fnc2dCRUVCYWlFRVFZa0JJUkFNcHdJTElBUkJBV29oQkVHS0FTRVFES1lDQ3lBRVFRRnFJUVJCandFaEVBeWxBZ3NnQkVFQmFpRUVRWkVCSVJBTXBBSUxBa0FnQkNBQ1J3MEFRYWNCSVJBTXZRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOcFFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFjQklSQU12UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJFU0VRREtJQkN3SkFJQVFnQWtjTkFFR29BU0VRREx3Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSEN6NENBQUdvdEFBQkhEYVFCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdvQVNFUURMd0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFTd2hFQXloQVFzQ1FDQUVJQUpIRFFCQnFRRWhFQXk3QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQnhjK0FnQUJxTFFBQVJ3MmpBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxUUVoRUF5N0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFcklSQU1vQUVMQWtBZ0JDQUNSdzBBUWFvQklSQU11Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWNyUGdJQUFhaTBBQUVjTm9nRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhb0JJUkFNdWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRkNFUURKOEJDd0pBSUFRZ0FrY05BRUdyQVNFUURMa0NDd0pBQWtBQ1FBSkFJQVF0QUFCQnZuOXFEZzhBQVFLa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FhUUJBNlFCQ3lBRVFRRnFJUVJCa3dFaEVBeWlBZ3NnQkVFQmFpRUVRWlFCSVJBTW9RSUxJQVJCQVdvaEJFR1ZBU0VRREtBQ0N5QUVRUUZxSVFSQmxnRWhFQXlmQWdzQ1FDQUVJQUpIRFFCQnJBRWhFQXk0QWdzZ0JDMEFBRUhGQUVjTm53RWdCRUVCYWlFRURPQUJDd0pBSUFRZ0FrY05BRUd0QVNFUURMY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhOejRDQUFHb3RBQUJIRFo4QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHdEFTRVFETGNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUTRoRUF5Y0FRc0NRQ0FFSUFKSERRQkJyZ0VoRUF5MkFnc2dCQzBBQUVIUUFFY05uUUVnQkVFQmFpRUJRU1VoRUF5YkFRc0NRQ0FFSUFKSERRQkJyd0VoRUF5MUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVJYWlFUUFrQURRQ0FFTFFBQUlBRkIwTStBZ0FCcUxRQUFSdzJkQVNBQlFRaEdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcndFaEVBeTFBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXFJUkFNbWdFTEFrQWdCQ0FDUncwQVFiQUJJUkFNdEFJTEFrQUNRQ0FFTFFBQVFhdC9hZzRMQUowQm5RR2RBWjBCblFHZEFaMEJuUUdkQVFHZEFRc2dCRUVCYWlFRVFab0JJUkFNbXdJTElBUkJBV29oQkVHYkFTRVFESm9DQ3dKQUlBUWdBa2NOQUVHeEFTRVFETE1DQ3dKQUFrQWdCQzBBQUVHL2Yyb09GQUNjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUVCbkFFTElBUkJBV29oQkVHWkFTRVFESm9DQ3lBRVFRRnFJUVJCbkFFaEVBeVpBZ3NDUUNBRUlBSkhEUUJCc2dFaEVBeXlBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCMmMrQWdBQnFMUUFBUncyYUFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnNnRWhFQXl5QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVoSVJBTWx3RUxBa0FnQkNBQ1J3MEFRYk1CSVJBTXNRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRZDNQZ0lBQWFpMEFBRWNObVFFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJNQklSQU1zUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHaUVRREpZQkN3SkFJQVFnQWtjTkFFRzBBU0VRRExBQ0N3SkFBa0FDUUNBRUxRQUFRYnQvYWc0UkFKb0JtZ0dhQVpvQm1nR2FBWm9CbWdHYUFRR2FBWm9CbWdHYUFab0JBcG9CQ3lBRVFRRnFJUVJCblFFaEVBeVlBZ3NnQkVFQmFpRUVRWjRCSVJBTWx3SUxJQVJCQVdvaEJFR2ZBU0VRREpZQ0N3SkFJQVFnQWtjTkFFRzFBU0VRREs4Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVSGt6NENBQUdvdEFBQkhEWmNCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUcxQVNFUURLOENDeUFBUVFBMkFnQWdFRUVCYWlFQlFTZ2hFQXlVQVFzQ1FDQUVJQUpIRFFCQnRnRWhFQXl1QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjZzK0FnQUJxTFFBQVJ3MldBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0Z0VoRUF5dUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFSElSQU1rd0VMQWtBZ0JDQUNSdzBBUWJjQklSQU1yUUlMQWtBQ1FDQUVMUUFBUWJ0L2FnNE9BSllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FRR1dBUXNnQkVFQmFpRUVRYUVCSVJBTWxBSUxJQVJCQVdvaEJFR2lBU0VRREpNQ0N3SkFJQVFnQWtjTkFFRzRBU0VRREt3Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEWlFCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc0QVNFUURLd0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSSWhFQXlSQVFzQ1FDQUVJQUpIRFFCQnVRRWhFQXlyQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhNK0FnQUJxTFFBQVJ3MlRBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1UUVoRUF5ckFnc2dBRUVBTmdJQUlCQkJBV29oQVVFZ0lSQU1rQUVMQWtBZ0JDQUNSdzBBUWJvQklSQU1xZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZMUGdJQUFhaTBBQUVjTmtnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFib0JJUkFNcWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRHlFUURJOEJDd0pBSUFRZ0FrY05BRUc3QVNFUURLa0NDd0pBQWtBZ0JDMEFBRUczZjJvT0J3Q1NBWklCa2dHU0FaSUJBWklCQ3lBRVFRRnFJUVJCcFFFaEVBeVFBZ3NnQkVFQmFpRUVRYVlCSVJBTWp3SUxBa0FnQkNBQ1J3MEFRYndCSVJBTXFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQjJvaEVBSkFBMEFnQkMwQUFDQUJRZlRQZ0lBQWFpMEFBRWNOa0FFZ0FVRUhSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJ3QklSQU1xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHeUVRREkwQkN3SkFJQVFnQWtjTkFFRzlBU0VRREtjQ0N3SkFBa0FDUUNBRUxRQUFRYjUvYWc0U0FKRUJrUUdSQVpFQmtRR1JBWkVCa1FHUkFRR1JBWkVCa1FHUkFaRUJrUUVDa1FFTElBUkJBV29oQkVHa0FTRVFESThDQ3lBRVFRRnFJUVJCcHdFaEVBeU9BZ3NnQkVFQmFpRUVRYWdCSVJBTWpRSUxBa0FnQkNBQ1J3MEFRYjRCSVJBTXBnSUxJQVF0QUFCQnpnQkhEWTBCSUFSQkFXb2hCQXpQQVFzQ1FDQUVJQUpIRFFCQnZ3RWhFQXlsQWdzQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUFFQ0E1d0JCQVVHbkFHY0Fad0JCd2dKQ2d1Y0FRd05EZytjQVFzZ0JFRUJhaUVCUWVnQUlSQU1tZ0lMSUFSQkFXb2hBVUhwQUNFUURKa0NDeUFFUVFGcUlRRkI3Z0FoRUF5WUFnc2dCRUVCYWlFQlFmSUFJUkFNbHdJTElBUkJBV29oQVVIekFDRVFESllDQ3lBRVFRRnFJUUZCOWdBaEVBeVZBZ3NnQkVFQmFpRUJRZmNBSVJBTWxBSUxJQVJCQVdvaEFVSDZBQ0VRREpNQ0N5QUVRUUZxSVFSQmd3RWhFQXlTQWdzZ0JFRUJhaUVFUVlRQklSQU1rUUlMSUFSQkFXb2hCRUdGQVNFUURKQUNDeUFFUVFGcUlRUkJrZ0VoRUF5UEFnc2dCRUVCYWlFRVFaZ0JJUkFNamdJTElBUkJBV29oQkVHZ0FTRVFESTBDQ3lBRVFRRnFJUVJCb3dFaEVBeU1BZ3NnQkVFQmFpRUVRYW9CSVJBTWl3SUxBa0FnQkNBQ1JnMEFJQUJCa0lDQWdBQTJBZ2dnQUNBRU5nSUVRYXNCSVJBTWl3SUxRY0FCSVJBTW93SUxJQUFnQlNBQ0VLcUFnSUFBSWdFTml3RWdCU0VCREZ3TEFrQWdCaUFDUmcwQUlBWkJBV29oQlF5TkFRdEJ3Z0VoRUF5aEFnc0RRQUpBSUJBdEFBQkJkbW9PQkl3QkFBQ1BBUUFMSUJCQkFXb2lFQ0FDUncwQUMwSERBU0VRREtBQ0N3SkFJQWNnQWtZTkFDQUFRWkdBZ0lBQU5nSUlJQUFnQnpZQ0JDQUhJUUZCQVNFUURJY0NDMEhFQVNFUURKOENDd0pBSUFjZ0FrY05BRUhGQVNFUURKOENDd0pBQWtBZ0J5MEFBRUYyYWc0RUFjNEJ6Z0VBemdFTElBZEJBV29oQmd5TkFRc2dCMEVCYWlFRkRJa0JDd0pBSUFjZ0FrY05BRUhHQVNFUURKNENDd0pBQWtBZ0J5MEFBRUYyYWc0WEFZOEJqd0VCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCQUk4QkN5QUhRUUZxSVFjTFFiQUJJUkFNaEFJTEFrQWdDQ0FDUncwQVFjZ0JJUkFNblFJTElBZ3RBQUJCSUVjTmpRRWdBRUVBT3dFeUlBaEJBV29oQVVHekFTRVFESU1DQ3lBQklSY0NRQU5BSUJjaUJ5QUNSZzBCSUFjdEFBQkJVR3BCL3dGeEloQkJDazhOekFFQ1FDQUFMd0V5SWhSQm1UTkxEUUFnQUNBVVFRcHNJaFE3QVRJZ0VFSC8vd056SUJSQi92OERjVWtOQUNBSFFRRnFJUmNnQUNBVUlCQnFJaEE3QVRJZ0VFSC8vd054UWVnSFNRMEJDd3RCQUNFUUlBQkJBRFlDSENBQVFjR0pnSUFBTmdJUUlBQkJEVFlDRENBQUlBZEJBV28yQWhRTW5BSUxRY2NCSVJBTW13SUxJQUFnQ0NBQ0VLNkFnSUFBSWhCRkRjb0JJQkJCRlVjTmpBRWdBRUhJQVRZQ0hDQUFJQWcyQWhRZ0FFSEpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFESm9DQ3dKQUlBa2dBa2NOQUVITUFTRVFESm9DQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ1MwQUFFRlFhZzRLbGdHVkFRQUJBZ01FQlFZSWx3RUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTWpnRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZneU5BUXNDUUNBS0lBSkhEUUJCemdFaEVBeVpBZ3NnQ2kwQUFFRXVSdzJPQVNBS1FRRnFJUWtNeWdFTElBc2dBa2NOamdGQjBBRWhFQXlYQWdzQ1FDQUxJQUpHRFFBZ0FFR09nSUNBQURZQ0NDQUFJQXMyQWdSQnR3RWhFQXorQVF0QjBRRWhFQXlXQWdzQ1FDQUVJQUpIRFFCQjBnRWhFQXlXQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUVhaUVMQTBBZ0JDMEFBQ0FRUWZ6UGdJQUFhaTBBQUVjTmpnRWdFRUVFUmczcEFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFNBU0VRREpVQ0N5QUFJQXdnQWhDc2dJQ0FBQ0lCRFkwQklBd2hBUXk0QVFzQ1FDQUVJQUpIRFFCQjFBRWhFQXlVQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUJhaUVNQTBBZ0JDMEFBQ0FRUVlIUWdJQUFhaTBBQUVjTmp3RWdFRUVCUmcyT0FTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFVBU0VRREpNQ0N3SkFJQVFnQWtjTkFFSFdBU0VRREpNQ0N5QUNJQVJySUFBb0FnQWlFR29oRkNBRUlCQnJRUUpxSVFzRFFDQUVMUUFBSUJCQmc5Q0FnQUJxTFFBQVJ3Mk9BU0FRUVFKR0RaQUJJQkJCQVdvaEVDQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZFlCSVJBTWtnSUxBa0FnQkNBQ1J3MEFRZGNCSVJBTWtnSUxBa0FDUUNBRUxRQUFRYnQvYWc0UUFJOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3RUJqd0VMSUFSQkFXb2hCRUc3QVNFUURQa0JDeUFFUVFGcUlRUkJ2QUVoRUF6NEFRc0NRQ0FFSUFKSERRQkIyQUVoRUF5UkFnc2dCQzBBQUVISUFFY05qQUVnQkVFQmFpRUVETVFCQ3dKQUlBUWdBa1lOQUNBQVFaQ0FnSUFBTmdJSUlBQWdCRFlDQkVHK0FTRVFEUGNCQzBIWkFTRVFESThDQ3dKQUlBUWdBa2NOQUVIYUFTRVFESThDQ3lBRUxRQUFRY2dBUmczREFTQUFRUUU2QUNnTXVRRUxJQUJCQWpvQUx5QUFJQVFnQWhDbWdJQ0FBQ0lRRFkwQlFjSUJJUkFNOUFFTElBQXRBQ2hCZjJvT0FyY0J1UUc0QVFzRFFBSkFJQVF0QUFCQmRtb09CQUNPQVk0QkFJNEJDeUFFUVFGcUlnUWdBa2NOQUF0QjNRRWhFQXlMQWdzZ0FFRUFPZ0F2SUFBdEFDMUJCSEZGRFlRQ0N5QUFRUUE2QUM4Z0FFRUJPZ0EwSUFFaEFReU1BUXNnRUVFVlJnM2FBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJwNDZBZ0FBMkFoQWdBRUVTTmdJTVFRQWhFQXlJQWdzQ1FDQUFJQkFnQWhDMGdJQ0FBQ0lFRFFBZ0VDRUJESUVDQ3dKQUlBUkJGVWNOQUNBQVFRTTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF5SUFnc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1od0lMSUJCQkZVWU4xZ0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZHFOZ0lBQU5nSVFJQUJCRkRZQ0RFRUFJUkFNaGdJTElBQW9BZ1FoRnlBQVFRQTJBZ1FnRUNBUnAyb2lGaUVCSUFBZ0Z5QVFJQllnRkJzaUVCQzFnSUNBQUNJVVJRMk5BU0FBUVFjMkFod2dBQ0FRTmdJVUlBQWdGRFlDREVFQUlSQU1oUUlMSUFBZ0FDOEJNRUdBQVhJN0FUQWdBU0VCQzBFcUlSQU02Z0VMSUJCQkZVWU4wUUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWU9NZ0lBQU5nSVFJQUJCRXpZQ0RFRUFJUkFNZ2dJTElCQkJGVVlOendFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTWdRSUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCREkwQkN5QUFRUXcyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU1nQUlMSUJCQkZVWU56QUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNL3dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESXdCQ3lBQVFRMDJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTS9nRUxJQkJCRlVZTnlRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjYU1nSUFBTmdJUUlBQkJJellDREVFQUlSQU0vUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzVnSUNBQUNJUURRQWdBVUVCYWlFQkRJc0JDeUFBUVE0MkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL0FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIQWxZQ0FBRFlDRUNBQVFRSTJBZ3hCQUNFUURQc0JDeUFRUVJWR0RjVUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUG9CQ3lBQVFSQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNK1FFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkM1Z0lDQUFDSUVEUUFnQVVFQmFpRUJEUEVCQ3lBQVFSRTJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTStBRUxJQkJCRlVZTndRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjYU1nSUFBTmdJUUlBQkJJellDREVFQUlSQU05d0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzVnSUNBQUNJUURRQWdBVUVCYWlFQkRJZ0JDeUFBUVJNMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkM1Z0lDQUFDSUVEUUFnQVVFQmFpRUJETzBCQ3lBQVFSUTJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTlRRUxJQkJCRlVZTnZRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU05QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJWUJDeUFBUVJZMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOHdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkMzZ0lDQUFDSUVEUUFnQVVFQmFpRUJET2tCQ3lBQVFSYzJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTThnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSE5rNENBQURZQ0VDQUFRUXcyQWd4QkFDRVFEUEVCQzBJQklSRUxJQkJCQVdvaEFRSkFJQUFwQXlBaUVrTC8vLy8vLy8vLy93OVdEUUFnQUNBU1FnU0dJQkdFTndNZ0lBRWhBUXlFQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWEySmdJQUFOZ0lRSUFCQkREWUNERUVBSVJBTTd3RUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFSE5rNENBQURZQ0VDQUFRUXcyQWd4QkFDRVFETzRCQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmN5QUFRUVUyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTTdRRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3FuSUNBQURZQ0VDQUFRUTgyQWd4QkFDRVFET3dCQ3lBQUlCQWdBaEMwZ0lDQUFDSUJEUUVnRUNFQkMwRU9JUkFNMFFFTEFrQWdBVUVWUncwQUlBQkJBallDSENBQUlCQTJBaFFnQUVHd21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURPb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJwNDZBZ0FBMkFoQWdBRUVTTmdJTVFRQWhFQXpwQVFzZ0FVRUJhaUVRQWtBZ0FDOEJNQ0lCUVlBQmNVVU5BQUpBSUFBZ0VDQUNFTHVBZ0lBQUlnRU5BQ0FRSVFFTWNBc2dBVUVWUncyNkFTQUFRUVUyQWh3Z0FDQVFOZ0lVSUFCQitaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenBBUXNDUUNBQlFhQUVjVUdnQkVjTkFDQUFMUUF0UVFKeERRQWdBRUVBTmdJY0lBQWdFRFlDRkNBQVFaYVRnSUFBTmdJUUlBQkJCRFlDREVFQUlSQU02UUVMSUFBZ0VDQUNFTDJBZ0lBQUdpQVFJUUVDUUFKQUFrQUNRQUpBSUFBZ0VDQUNFTE9BZ0lBQURoWUNBUUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFEQkFzZ0FFRUJPZ0F1Q3lBQUlBQXZBVEJCd0FCeU93RXdJQkFoQVF0QkppRVFETkVCQ3lBQVFTTTJBaHdnQUNBUU5nSVVJQUJCcFphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkV0xnSUFBTmdJUUlBQkJFVFlDREVFQUlSQU02QUVMSUFBdEFDMUJBWEZGRFFGQnd3RWhFQXpPQVFzQ1FDQU5JQUpHRFFBRFFBSkFJQTB0QUFCQklFWU5BQ0FOSVFFTXhBRUxJQTFCQVdvaURTQUNSdzBBQzBFbElSQU01d0VMUVNVaEVBem1BUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRFJDdmdJQ0FBQ0lFUlEydEFTQUFRU1kyQWh3Z0FDQUVOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU01UUVMSUJCQkZVWU5xd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJOZ0lBQU5nSVFJQUJCSFRZQ0RFRUFJUkFNNUFFTElBQkJKellDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6akFRc2dFQ0VCUVFFaEZBSkFBa0FDUUFKQUFrQUNRQUpBSUFBdEFDeEJmbW9PQndZRkJRTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcklSQU15Z0VMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdya29DQUFEWUNFQ0FBUVFzMkFneEJBQ0VRRE9JQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNUVFBaEVBemhBUXNnQUVFQU9nQXNJQkFoQVF5OUFRc2dFQ0VCUVFFaEZBSkFBa0FDUUFKQUFrQWdBQzBBTEVGN2FnNEVBd0VDQUFVTElBQWdBQzhCTUVFSWNqc0JNQXdEQzBFQ0lSUU1BUXRCQkNFVUN5QUFRUUU2QUN3Z0FDQUFMd0V3SUJSeU93RXdDeUFRSVFFTFFTa2hFQXpGQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZDVWdJQUFOZ0lRSUFCQkF6WUNERUVBSVJBTTNRRUxBa0FnRGkwQUFFRU5SdzBBSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEa0VCYWlFQkRIVUxJQUJCTERZQ0hDQUFJQUUyQWd3Z0FDQU9RUUZxTmdJVVFRQWhFQXpkQVFzZ0FDMEFMVUVCY1VVTkFVSEVBU0VRRE1NQkN3SkFJQTRnQWtjTkFFRXRJUkFNM0FFTEFrQUNRQU5BQWtBZ0RpMEFBRUYyYWc0RUFnQUFBd0FMSUE1QkFXb2lEaUFDUncwQUMwRXRJUkFNM1FFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGlFQkRIUUxJQUJCTERZQ0hDQUFJQTQyQWhRZ0FDQUJOZ0lNUVFBaEVBemNBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBT0VMR0FnSUFBSWdFTkFDQU9RUUZxSVFFTWN3c2dBRUVzTmdJY0lBQWdBVFlDRENBQUlBNUJBV28yQWhSQkFDRVFETnNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBT0VMR0FnSUFBSWdRTm9BRWdEaUVCRE00QkN5QVFRU3hIRFFFZ0FVRUJhaUVRUVFFaEFRSkFBa0FDUUFKQUFrQWdBQzBBTEVGN2FnNEVBd0VDQkFBTElCQWhBUXdFQzBFQ0lRRU1BUXRCQkNFQkN5QUFRUUU2QUN3Z0FDQUFMd0V3SUFGeU93RXdJQkFoQVF3QkN5QUFJQUF2QVRCQkNISTdBVEFnRUNFQkMwRTVJUkFNdndFTElBQkJBRG9BTENBQklRRUxRVFFoRUF5OUFRc2dBQ0FBTHdFd1FTQnlPd0V3SUFFaEFRd0NDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXNZQ0FnQUFpQkEwQUlBRWhBUXpIQVFzZ0FFRTNOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRE5RQkN5QUFRUWc2QUN3Z0FTRUJDMEV3SVJBTXVRRUxBa0FnQUMwQUtFRUJSZzBBSUFFaEFRd0VDeUFBTFFBdFFRaHhSUTJUQVNBQklRRU1Bd3NnQUMwQU1FRWdjUTJVQVVIRkFTRVFETGNCQ3dKQUlBOGdBa1lOQUFKQUEwQUNRQ0FQTFFBQVFWQnFJZ0ZCL3dGeFFRcEpEUUFnRHlFQlFUVWhFQXk2QVFzZ0FDa0RJQ0lSUXBtejVzeVpzK2JNR1ZZTkFTQUFJQkZDQ240aUVUY0RJQ0FSSUFHdFF2OEJneUlTUW4rRlZnMEJJQUFnRVNBU2ZEY0RJQ0FQUVFGcUlnOGdBa2NOQUF0Qk9TRVFETkVCQ3lBQUtBSUVJUUlnQUVFQU5nSUVJQUFnQWlBUFFRRnFJZ1FRc1lDQWdBQWlBZzJWQVNBRUlRRU13d0VMUVRraEVBelBBUXNDUUNBQUx3RXdJZ0ZCQ0hGRkRRQWdBQzBBS0VFQlJ3MEFJQUF0QUMxQkNIRkZEWkFCQ3lBQUlBRkI5L3NEY1VHQUJISTdBVEFnRHlFQkMwRTNJUkFNdEFFTElBQWdBQzhCTUVFUWNqc0JNQXlyQVFzZ0VFRVZSZzJMQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOEk2QWdBQTJBaEFnQUVFY05nSU1RUUFoRUF6TEFRc2dBRUhEQURZQ0hDQUFJQUUyQWd3Z0FDQU5RUUZxTmdJVVFRQWhFQXpLQVFzQ1FDQUJMUUFBUVRwSERRQWdBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUsrQWdJQUFJaEFOQUNBQlFRRnFJUUVNWXdzZ0FFSERBRFlDSENBQUlCQTJBZ3dnQUNBQlFRRnFOZ0lVUVFBaEVBektBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYkdSZ0lBQU5nSVFJQUJCQ2pZQ0RFRUFJUkFNeVFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHZ21ZQ0FBRFlDRUNBQVFSNDJBZ3hCQUNFUURNZ0JDeUFBUVFBMkFnQUxJQUJCZ0JJN0FTb2dBQ0FYUVFGcUlnRWdBaENvZ0lDQUFDSVFEUUVnQVNFQkMwSEhBQ0VRREt3QkN5QVFRUlZIRFlNQklBQkIwUUEyQWh3Z0FDQUJOZ0lVSUFCQjQ1ZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBekVBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNWGdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6REFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFjR29nSUFBTmdJUUlBQkJCellDRENBQVFRQTJBZ0JCQUNFUURNSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhkQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRE1FQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWUNSZ0lBQU5nSVFJQUJCQ1RZQ0RBekFBUXNnRUVFVlJnMTlJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR1VqWUNBQURZQ0VDQUFRU0UyQWd4QkFDRVFETDhCQzBFQklSWkJBQ0VYUVFBaEZFRUJJUkFMSUFBZ0VEb0FLeUFCUVFGcUlRRUNRQUpBSUFBdEFDMUJFSEVOQUFKQUFrQUNRQ0FBTFFBcURnTUJBQUlFQ3lBV1JRMEREQUlMSUJRTkFRd0NDeUFYUlEwQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcllDQWdBQWlFQTBBSUFFaEFReGNDeUFBUWRnQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETDRCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5dEFRc2dBRUhaQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTlBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNcXdFTElBQkIyZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZBRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES2tCQ3lBQVFkd0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRExzQkN3SkFJQUV0QUFCQlVHb2lFRUgvQVhGQkNrOE5BQ0FBSUJBNkFDb2dBVUVCYWlFQlFjOEFJUkFNb2dFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLY0JDeUFBUWQ0QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETG9CQ3lBQVFRQTJBZ0FnRjBFQmFpRUJBa0FnQUMwQUtVRWpUdzBBSUFFaEFReFpDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkIwNG1BZ0FBMkFoQWdBRUVJTmdJTVFRQWhFQXk1QVFzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaQ3pnSUFBTmdJUUlBQkJDRFlDREF5M0FRc2dBRUVBTmdJQUlCZEJBV29oQVFKQUlBQXRBQ2xCSVVjTkFDQUJJUUVNVmdzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVp1S2dJQUFOZ0lRSUFCQkNEWUNERUVBSVJBTXRnRUxJQUJCQURZQ0FDQVhRUUZxSVFFQ1FDQUFMUUFwSWhCQlhXcEJDMDhOQUNBQklRRU1WUXNDUUNBUVFRWkxEUUJCQVNBUWRFSEtBSEZGRFFBZ0FTRUJERlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjk0bUFnQUEyQWhBZ0FFRUlOZ0lNRExVQkN5QVFRUlZHRFhFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJtTmdJQUFOZ0lRSUFCQkdqWUNERUVBSVJBTXRBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERlFMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc3dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFMExJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zZ0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwd0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNRRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERkVMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc0FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2lvQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLOEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhKQ3lBQVFkSUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREs0QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZVVBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLd0JDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkIzSWlBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlyQVFzZ0VFRS9SdzBCSUFGQkFXb2hBUXRCQlNFUURKQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWYyU2dJQUFOZ0lRSUFCQkJ6WUNEQXlvQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVFnc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeW5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1SZ3NnQUVIbEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXlsQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVB3c2dBRUhTQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWtBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFRBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5akFRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Rd3NnQUVIbEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlpQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNPUGdJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW9RRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSERqNENBQURZQ0VDQUFRUWMyQWd4QkFDRVFES0FCQzBFQUlSQWdBRUVBTmdJY0lBQWdGRFlDRkNBQVFZeWNnSUFBTmdJUUlBQkJCellDREF5ZkFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFZeWNnSUFBTmdJUUlBQkJCellDREVFQUlSQU1uZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUgra1lDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREowQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmpwdUFnQUEyQWhBZ0FFRUdOZ0lNUVFBaEVBeWNBUXNnRUVFVlJnMVhJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSE1qb0NBQURZQ0VDQUFRU0EyQWd4QkFDRVFESnNCQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1FoRUFzZ0FDQVFPZ0FwSUFBb0FnUWhFQ0FBUVFBMkFnUWdBQ0FRSUFFUXE0Q0FnQUFpRUExVUlBRWhBUXcrQ3lBQVFRQTJBZ0FMUVFBaEVDQUFRUUEyQWh3Z0FDQUVOZ0lVSUFCQjhadUFnQUEyQWhBZ0FFRUdOZ0lNREpjQkN5QUJRUlZHRFZBZ0FFRUFOZ0ljSUFBZ0JUWUNGQ0FBUWZDTWdJQUFOZ0lRSUFCQkd6WUNERUVBSVJBTWxnRUxJQUFvQWdRaEJTQUFRUUEyQWdRZ0FDQUZJQkFRcVlDQWdBQWlCUTBCSUJCQkFXb2hCUXRCclFFaEVBeDdDeUFBUWNFQk5nSWNJQUFnQlRZQ0RDQUFJQkJCQVdvMkFoUkJBQ0VRREpNQkN5QUFLQUlFSVFZZ0FFRUFOZ0lFSUFBZ0JpQVFFS21BZ0lBQUlnWU5BU0FRUVFGcUlRWUxRYTRCSVJBTWVBc2dBRUhDQVRZQ0hDQUFJQVkyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlRQVFzZ0FFRUFOZ0ljSUFBZ0J6WUNGQ0FBUVplTGdJQUFOZ0lRSUFCQkRUWUNERUVBSVJBTWp3RUxJQUJCQURZQ0hDQUFJQWcyQWhRZ0FFSGprSUNBQURZQ0VDQUFRUWsyQWd4QkFDRVFESTRCQ3lBQVFRQTJBaHdnQUNBSU5nSVVJQUJCbEkyQWdBQTJBaEFnQUVFaE5nSU1RUUFoRUF5TkFRdEJBU0VXUVFBaEYwRUFJUlJCQVNFUUN5QUFJQkE2QUNzZ0NVRUJhaUVJQWtBQ1FDQUFMUUF0UVJCeERRQUNRQUpBQWtBZ0FDMEFLZzREQVFBQ0JBc2dGa1VOQXd3Q0N5QVVEUUVNQWdzZ0YwVU5BUXNnQUNnQ0JDRVFJQUJCQURZQ0JDQUFJQkFnQ0JDdGdJQ0FBQ0lRUlEwOUlBQkJ5UUUyQWh3Z0FDQUlOZ0lVSUFBZ0VEWUNERUVBSVJBTWpBRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQWdRcllDQWdBQWlCRVVOZGlBQVFjb0JOZ0ljSUFBZ0NEWUNGQ0FBSUFRMkFneEJBQ0VRRElzQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUpFSzJBZ0lBQUlnUkZEWFFnQUVITEFUWUNIQ0FBSUFrMkFoUWdBQ0FFTmdJTVFRQWhFQXlLQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NoQ3RnSUNBQUNJRVJRMXlJQUJCelFFMkFod2dBQ0FLTmdJVUlBQWdCRFlDREVFQUlSQU1pUUVMQWtBZ0N5MEFBRUZRYWlJUVFmOEJjVUVLVHcwQUlBQWdFRG9BS2lBTFFRRnFJUXBCdGdFaEVBeHdDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FMRUsyQWdJQUFJZ1JGRFhBZ0FFSFBBVFlDSENBQUlBczJBaFFnQUNBRU5nSU1RUUFoRUF5SUFRc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFaQ3pnSUFBTmdJUUlBQkJDRFlDRENBQVFRQTJBZ0JCQUNFUURJY0JDeUFCUVJWR0RUOGdBRUVBTmdJY0lBQWdERFlDRkNBQVFjeU9nSUFBTmdJUUlBQkJJRFlDREVFQUlSQU1oZ0VMSUFCQmdRUTdBU2dnQUNnQ0JDRVFJQUJDQURjREFDQUFJQkFnREVFQmFpSU1FS3VBZ0lBQUloQkZEVGdnQUVIVEFUWUNIQ0FBSUF3MkFoUWdBQ0FRTmdJTVFRQWhFQXlGQVFzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdCRFlDRkNBQVFkaWJnSUFBTmdJUUlBQkJDRFlDREF5REFRc2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdDMEVCYWlJTEVLdUFnSUFBSWhBTkFVSEdBU0VRREdrTElBQkJBam9BS0F4VkN5QUFRZFVCTmdJY0lBQWdDellDRkNBQUlCQTJBZ3hCQUNFUURJQUJDeUFRUVJWR0RUY2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFhU01nSUFBTmdJUUlBQkJFRFlDREVFQUlSQU1md3NnQUMwQU5FRUJSdzAwSUFBZ0JDQUNFTHlBZ0lBQUloQkZEVFFnRUVFVlJ3MDFJQUJCM0FFMkFod2dBQ0FFTmdJVUlBQkIxWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXgrQzBFQUlSQWdBRUVBTmdJY0lBQkJyNHVBZ0FBMkFoQWdBRUVDTmdJTUlBQWdGRUVCYWpZQ0ZBeDlDMEVBSVJBTVl3dEJBaUVRREdJTFFRMGhFQXhoQzBFUElSQU1ZQXRCSlNFUURGOExRUk1oRUF4ZUMwRVZJUkFNWFF0QkZpRVFERndMUVJjaEVBeGJDMEVZSVJBTVdndEJHU0VRREZrTFFSb2hFQXhZQzBFYklSQU1Wd3RCSENFUURGWUxRUjBoRUF4VkMwRWZJUkFNVkF0QklTRVFERk1MUVNNaEVBeFNDMEhHQUNFUURGRUxRUzRoRUF4UUMwRXZJUkFNVHd0Qk95RVFERTRMUVQwaEVBeE5DMEhJQUNFUURFd0xRY2tBSVJBTVN3dEJ5d0FoRUF4S0MwSE1BQ0VRREVrTFFjNEFJUkFNU0F0QjBRQWhFQXhIQzBIVkFDRVFERVlMUWRnQUlSQU1SUXRCMlFBaEVBeEVDMEhiQUNFUURFTUxRZVFBSVJBTVFndEI1UUFoRUF4QkMwSHhBQ0VRREVBTFFmUUFJUkFNUHd0QmpRRWhFQXcrQzBHWEFTRVFERDBMUWFrQklSQU1QQXRCckFFaEVBdzdDMEhBQVNFUUREb0xRYmtCSVJBTU9RdEJyd0VoRUF3NEMwR3hBU0VRRERjTFFiSUJJUkFNTmd0QnRBRWhFQXcxQzBHMUFTRVFERFFMUWJvQklSQU1Nd3RCdlFFaEVBd3lDMEcvQVNFUURERUxRY0VCSVJBTU1Bc2dBRUVBTmdJY0lBQWdCRFlDRkNBQVFlbUxnSUFBTmdJUUlBQkJIellDREVFQUlSQU1TQXNnQUVIYkFUWUNIQ0FBSUFRMkFoUWdBRUg2bG9DQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVjTElBQkIrQUEyQWh3Z0FDQU1OZ0lVSUFCQnlwaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEdDeUFBUWRFQU5nSWNJQUFnQlRZQ0ZDQUFRYkNYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUlFzZ0FFSDVBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF4RUN5QUFRZmdBTmdJY0lBQWdBVFlDRkNBQVFjcVlnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Rd3NnQUVIa0FEWUNIQ0FBSUFFMkFoUWdBRUhqbDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVJTElBQkIxd0EyQWh3Z0FDQUJOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeEJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ1WTJBZ0FBMkFoQWdBRUVhTmdJTVFRQWhFQXhBQ3lBQVFjSUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVB3c2dBRUVBTmdJRUlBQWdEeUFQRUxHQWdJQUFJZ1JGRFFFZ0FFRTZOZ0ljSUFBZ0JEWUNEQ0FBSUE5QkFXbzJBaFJCQUNFUURENExJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDeGdJQ0FBQ0lFUlEwQUlBQkJPellDSENBQUlBUTJBZ3dnQUNBQlFRRnFOZ0lVUVFBaEVBdytDeUFCUVFGcUlRRU1MUXNnRDBFQmFpRUJEQzBMSUFCQkFEWUNIQ0FBSUE4MkFoUWdBRUhra29DQUFEWUNFQ0FBUVFRMkFneEJBQ0VRRERzTElBQkJOallDSENBQUlBUTJBaFFnQUNBQ05nSU1RUUFoRUF3NkN5QUFRUzQyQWh3Z0FDQU9OZ0lVSUFBZ0JEWUNERUVBSVJBTU9Rc2dBRUhRQURZQ0hDQUFJQUUyQWhRZ0FFR1JtSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERGdMSUExQkFXb2hBUXdzQ3lBQVFSVTJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MkN5QUFRUnMyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzFDeUFBUVE4MkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcwQ3lBQVFRczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3ekN5QUFRUm8yQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3lDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd4Q3lBQVFRbzJBaHdnQUNBQk5nSVVJQUJCNUphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3d0N5QUFRUjQyQWh3Z0FDQUJOZ0lVSUFCQitaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3ZDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkIybzJBZ0FBMkFoQWdBRUVVTmdJTVFRQWhFQXd1Q3lBQVFRUTJBaHdnQUNBQk5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dEN5QUFRUUEyQWdBZ0MwRUJhaUVMQzBHNEFTRVFEQklMSUFCQkFEWUNBQ0FRUVFGcUlRRkI5UUFoRUF3UkN5QUJJUUVDUUNBQUxRQXBRUVZIRFFCQjR3QWhFQXdSQzBIaUFDRVFEQkFMUVFBaEVDQUFRUUEyQWh3Z0FFSGtrWUNBQURZQ0VDQUFRUWMyQWd3Z0FDQVVRUUZxTmdJVURDZ0xJQUJCQURZQ0FDQVhRUUZxSVFGQndBQWhFQXdPQzBFQklRRUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0YwRUJhaUVCQzBFb0lSQU1Dd3NnQVNFQkMwRTRJUkFNQ1FzQ1FDQUJJZzhnQWtZTkFBTkFBa0FnRHkwQUFFR0F2b0NBQUdvdEFBQWlBVUVCUmcwQUlBRkJBa2NOQXlBUFFRRnFJUUVNQkFzZ0QwRUJhaUlQSUFKSERRQUxRVDRoRUF3aUMwRStJUkFNSVFzZ0FFRUFPZ0FzSUE4aEFRd0JDMEVMSVJBTUJndEJPaUVRREFVTElBRkJBV29oQVVFdElSQU1CQXNnQUNBQk9nQXNJQUJCQURZQ0FDQVdRUUZxSVFGQkRDRVFEQU1MSUFCQkFEWUNBQ0FYUVFGcUlRRkJDaUVRREFJTElBQkJBRFlDQUFzZ0FFRUFPZ0FzSUEwaEFVRUpJUkFNQUFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FMTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCY0xRUUFoRUNBQVFRQTJBaHdnQUNBS05nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQllMUVFBaEVDQUFRUUEyQWh3Z0FDQUpOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJVTFFRQWhFQ0FBUVFBMkFod2dBQ0FJTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCUUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCelpDQWdBQTJBaEFnQUVFSk5nSU1EQk1MUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjZZcUFnQUEyQWhBZ0FFRUpOZ0lNREJJTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ0NUNBZ0FBMkFoQWdBRUVKTmdJTURCRUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbkpHQWdBQTJBaEFnQUVFSk5nSU1EQkFMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE4TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsNVdBZ0FBMkFoQWdBRUVQTmdJTURBNExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pLQWdBQTJBaEFnQUVFTE5nSU1EQTBMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxZbUFnQUEyQWhBZ0FFRUxOZ0lNREF3TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI0WStBZ0FBMkFoQWdBRUVLTmdJTURBc0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCKzQrQWdBQTJBaEFnQUVFS05nSU1EQW9MUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhabUFnQUEyQWhBZ0FFRUNOZ0lNREFrTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4SlNBZ0FBMkFoQWdBRUVDTmdJTURBZ0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOHBXQWdBQTJBaEFnQUVFQ05nSU1EQWNMSUFCQkFqWUNIQ0FBSUFFMkFoUWdBRUdjbW9DQUFEWUNFQ0FBUVJZMkFneEJBQ0VRREFZTFFRRWhFQXdGQzBIVUFDRVFJQUVpQkNBQ1JnMEVJQU5CQ0dvZ0FDQUVJQUpCMk1LQWdBQkJDaERGZ0lDQUFDQURLQUlNSVFRZ0F5Z0NDQTREQVFRQ0FBc1F5b0NBZ0FBQUN5QUFRUUEyQWh3Z0FFRzFtb0NBQURZQ0VDQUFRUmMyQWd3Z0FDQUVRUUZxTmdJVVFRQWhFQXdDQ3lBQVFRQTJBaHdnQUNBRU5nSVVJQUJCeXBxQWdBQTJBaEFnQUVFSk5nSU1RUUFoRUF3QkN3SkFJQUVpQkNBQ1J3MEFRU0loRUF3QkN5QUFRWW1BZ0lBQU5nSUlJQUFnQkRZQ0JFRWhJUkFMSUFOQkVHb2tnSUNBZ0FBZ0VBdXZBUUVDZnlBQktBSUFJUVlDUUFKQUlBSWdBMFlOQUNBRUlBWnFJUVFnQmlBRGFpQUNheUVISUFJZ0JrRi9jeUFGYWlJR2FpRUZBMEFDUUNBQ0xRQUFJQVF0QUFCR0RRQkJBaUVFREFNTEFrQWdCZzBBUVFBaEJDQUZJUUlNQXdzZ0JrRi9haUVHSUFSQkFXb2hCQ0FDUVFGcUlnSWdBMGNOQUFzZ0J5RUdJQU1oQWdzZ0FFRUJOZ0lBSUFFZ0JqWUNBQ0FBSUFJMkFnUVBDeUFCUVFBMkFnQWdBQ0FFTmdJQUlBQWdBallDQkFzS0FDQUFFTWVBZ0lBQUMvSTJBUXQvSTRDQWdJQUFRUkJySWdFa2dJQ0FnQUFDUUVFQUtBS2cwSUNBQUEwQVFRQVF5NENBZ0FCQmdOU0VnQUJySWdKQjJRQkpEUUJCQUNFREFrQkJBQ2dDNE5PQWdBQWlCQTBBUVFCQ2Z6Y0M3Tk9BZ0FCQkFFS0FnSVNBZ0lEQUFEY0M1Tk9BZ0FCQkFDQUJRUWhxUVhCeFFkaXExYW9GY3lJRU5nTGcwNENBQUVFQVFRQTJBdlRUZ0lBQVFRQkJBRFlDeE5PQWdBQUxRUUFnQWpZQ3pOT0FnQUJCQUVHQTFJU0FBRFlDeU5PQWdBQkJBRUdBMUlTQUFEWUNtTkNBZ0FCQkFDQUVOZ0tzMElDQUFFRUFRWDgyQXFqUWdJQUFBMEFnQTBIRTBJQ0FBR29nQTBHNDBJQ0FBR29pQkRZQ0FDQUVJQU5Cc05DQWdBQnFJZ1UyQWdBZ0EwRzgwSUNBQUdvZ0JUWUNBQ0FEUWN6UWdJQUFhaUFEUWNEUWdJQUFhaUlGTmdJQUlBVWdCRFlDQUNBRFFkVFFnSUFBYWlBRFFjalFnSUFBYWlJRU5nSUFJQVFnQlRZQ0FDQURRZERRZ0lBQWFpQUVOZ0lBSUFOQklHb2lBMEdBQWtjTkFBdEJnTlNFZ0FCQmVFR0ExSVNBQUd0QkQzRkJBRUdBMUlTQUFFRUlha0VQY1JzaUEyb2lCRUVFYWlBQ1FVaHFJZ1VnQTJzaUEwRUJjallDQUVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQkJnTlNFZ0FBZ0JXcEJPRFlDQkFzQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUVIc0FVc05BQUpBUVFBb0FvalFnSUFBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdKQkEzWWlCSFlpQTBFRGNVVU5BQUpBQWtBZ0EwRUJjU0FFY2tFQmN5SUZRUU4wSWdSQnNOQ0FnQUJxSWdNZ0JFRzQwSUNBQUdvb0FnQWlCQ2dDQ0NJQ1J3MEFRUUFnQmtGK0lBVjNjVFlDaU5DQWdBQU1BUXNnQXlBQ05nSUlJQUlnQXpZQ0RBc2dCRUVJYWlFRElBUWdCVUVEZENJRlFRTnlOZ0lFSUFRZ0JXb2lCQ0FFS0FJRVFRRnlOZ0lFREF3TElBSkJBQ2dDa05DQWdBQWlCMDBOQVFKQUlBTkZEUUFDUUFKQUlBTWdCSFJCQWlBRWRDSURRUUFnQTJ0eWNTSURRUUFnQTJ0eFFYOXFJZ01nQTBFTWRrRVFjU0lEZGlJRVFRVjJRUWh4SWdVZ0EzSWdCQ0FGZGlJRFFRSjJRUVJ4SWdSeUlBTWdCSFlpQTBFQmRrRUNjU0lFY2lBRElBUjJJZ05CQVhaQkFYRWlCSElnQXlBRWRtb2lCRUVEZENJRFFiRFFnSUFBYWlJRklBTkJ1TkNBZ0FCcUtBSUFJZ01vQWdnaUFFY05BRUVBSUFaQmZpQUVkM0VpQmpZQ2lOQ0FnQUFNQVFzZ0JTQUFOZ0lJSUFBZ0JUWUNEQXNnQXlBQ1FRTnlOZ0lFSUFNZ0JFRURkQ0lFYWlBRUlBSnJJZ1UyQWdBZ0F5QUNhaUlBSUFWQkFYSTJBZ1FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQmtFQklBZEJBM1owSWdoeERRQkJBQ0FHSUFoeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFRMkFnd2dBaUFFTmdJSUlBUWdBallDRENBRUlBZzJBZ2dMSUFOQkNHb2hBMEVBSUFBMkFwelFnSUFBUVFBZ0JUWUNrTkNBZ0FBTURBdEJBQ2dDak5DQWdBQWlDVVVOQVNBSlFRQWdDV3R4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1wQkFuUkJ1TktBZ0FCcUtBSUFJZ0FvQWdSQmVIRWdBbXNoQkNBQUlRVUNRQU5BQWtBZ0JTZ0NFQ0lERFFBZ0JVRVVhaWdDQUNJRFJRMENDeUFES0FJRVFYaHhJQUpySWdVZ0JDQUZJQVJKSWdVYklRUWdBeUFBSUFVYklRQWdBeUVGREFBTEN5QUFLQUlZSVFvQ1FDQUFLQUlNSWdnZ0FFWU5BQ0FBS0FJSUlnTkJBQ2dDbU5DQWdBQkpHaUFJSUFNMkFnZ2dBeUFJTmdJTURBc0xBa0FnQUVFVWFpSUZLQUlBSWdNTkFDQUFLQUlRSWdORkRRTWdBRUVRYWlFRkN3TkFJQVVoQ3lBRElnaEJGR29pQlNnQ0FDSUREUUFnQ0VFUWFpRUZJQWdvQWhBaUF3MEFDeUFMUVFBMkFnQU1DZ3RCZnlFQ0lBQkJ2MzlMRFFBZ0FFRVRhaUlEUVhCeElRSkJBQ2dDak5DQWdBQWlCMFVOQUVFQUlRc0NRQ0FDUVlBQ1NRMEFRUjhoQ3lBQ1FmLy8vd2RMRFFBZ0EwRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lFSUFSQmdPQWZha0VRZGtFRWNTSUVkQ0lGSUFWQmdJQVBha0VRZGtFQ2NTSUZkRUVQZGlBRElBUnlJQVZ5YXlJRFFRRjBJQUlnQTBFVmFuWkJBWEZ5UVJ4cUlRc0xRUUFnQW1zaEJBSkFBa0FDUUFKQUlBdEJBblJCdU5LQWdBQnFLQUlBSWdVTkFFRUFJUU5CQUNFSURBRUxRUUFoQXlBQ1FRQkJHU0FMUVFGMmF5QUxRUjlHRzNRaEFFRUFJUWdEUUFKQUlBVW9BZ1JCZUhFZ0Ftc2lCaUFFVHcwQUlBWWhCQ0FGSVFnZ0JnMEFRUUFoQkNBRklRZ2dCU0VEREFNTElBTWdCVUVVYWlnQ0FDSUdJQVlnQlNBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lGUmhzZ0F5QUdHeUVESUFCQkFYUWhBQ0FGRFFBTEN3SkFJQU1nQ0hJTkFFRUFJUWhCQWlBTGRDSURRUUFnQTJ0eUlBZHhJZ05GRFFNZ0EwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQlVFRmRrRUljU0lBSUFOeUlBVWdBSFlpQTBFQ2RrRUVjU0lGY2lBRElBVjJJZ05CQVhaQkFuRWlCWElnQXlBRmRpSURRUUYyUVFGeElnVnlJQU1nQlhacVFRSjBRYmpTZ0lBQWFpZ0NBQ0VEQ3lBRFJRMEJDd05BSUFNb0FnUkJlSEVnQW1zaUJpQUVTU0VBQWtBZ0F5Z0NFQ0lGRFFBZ0EwRVVhaWdDQUNFRkN5QUdJQVFnQUJzaEJDQURJQWdnQUJzaENDQUZJUU1nQlEwQUN3c2dDRVVOQUNBRVFRQW9BcERRZ0lBQUlBSnJUdzBBSUFnb0FoZ2hDd0pBSUFnb0Fnd2lBQ0FJUmcwQUlBZ29BZ2dpQTBFQUtBS1kwSUNBQUVrYUlBQWdBellDQ0NBRElBQTJBZ3dNQ1FzQ1FDQUlRUlJxSWdVb0FnQWlBdzBBSUFnb0FoQWlBMFVOQXlBSVFSQnFJUVVMQTBBZ0JTRUdJQU1pQUVFVWFpSUZLQUlBSWdNTkFDQUFRUkJxSVFVZ0FDZ0NFQ0lERFFBTElBWkJBRFlDQUF3SUN3SkFRUUFvQXBEUWdJQUFJZ01nQWtrTkFFRUFLQUtjMElDQUFDRUVBa0FDUUNBRElBSnJJZ1ZCRUVrTkFDQUVJQUpxSWdBZ0JVRUJjallDQkVFQUlBVTJBcERRZ0lBQVFRQWdBRFlDbk5DQWdBQWdCQ0FEYWlBRk5nSUFJQVFnQWtFRGNqWUNCQXdCQ3lBRUlBTkJBM0kyQWdRZ0JDQURhaUlESUFNb0FnUkJBWEkyQWdSQkFFRUFOZ0tjMElDQUFFRUFRUUEyQXBEUWdJQUFDeUFFUVFocUlRTU1DZ3NDUUVFQUtBS1UwSUNBQUNJQUlBSk5EUUJCQUNnQ29OQ0FnQUFpQXlBQ2FpSUVJQUFnQW1zaUJVRUJjallDQkVFQUlBVTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBeUFDUVFOeU5nSUVJQU5CQ0dvaEF3d0tDd0pBQWtCQkFDZ0M0Tk9BZ0FCRkRRQkJBQ2dDNk5PQWdBQWhCQXdCQzBFQVFuODNBdXpUZ0lBQVFRQkNnSUNFZ0lDQXdBQTNBdVRUZ0lBQVFRQWdBVUVNYWtGd2NVSFlxdFdxQlhNMkF1RFRnSUFBUVFCQkFEWUM5Tk9BZ0FCQkFFRUFOZ0xFMDRDQUFFR0FnQVFoQkF0QkFDRURBa0FnQkNBQ1FjY0FhaUlIYWlJR1FRQWdCR3NpQzNFaUNDQUNTdzBBUVFCQk1EWUMrTk9BZ0FBTUNnc0NRRUVBS0FMQTA0Q0FBQ0lEUlEwQUFrQkJBQ2dDdU5PQWdBQWlCQ0FJYWlJRklBUk5EUUFnQlNBRFRRMEJDMEVBSVFOQkFFRXdOZ0w0MDRDQUFBd0tDMEVBTFFERTA0Q0FBRUVFY1EwRUFrQUNRQUpBUVFBb0FxRFFnSUFBSWdSRkRRQkJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlBRVN3MERDeUFES0FJSUlnTU5BQXNMUVFBUXk0Q0FnQUFpQUVGL1JnMEZJQWdoQmdKQVFRQW9BdVRUZ0lBQUlnTkJmMm9pQkNBQWNVVU5BQ0FJSUFCcklBUWdBR3BCQUNBRGEzRnFJUVlMSUFZZ0FrME5CU0FHUWY3Ly8vOEhTdzBGQWtCQkFDZ0N3Tk9BZ0FBaUEwVU5BRUVBS0FLNDA0Q0FBQ0lFSUFacUlnVWdCRTBOQmlBRklBTkxEUVlMSUFZUXk0Q0FnQUFpQXlBQVJ3MEJEQWNMSUFZZ0FHc2dDM0VpQmtIKy8vLy9CMHNOQkNBR0VNdUFnSUFBSWdBZ0F5Z0NBQ0FES0FJRWFrWU5BeUFBSVFNTEFrQWdBMEYvUmcwQUlBSkJ5QUJxSUFaTkRRQUNRQ0FISUFaclFRQW9BdWpUZ0lBQUlnUnFRUUFnQkd0eElnUkIvdi8vL3dkTkRRQWdBeUVBREFjTEFrQWdCQkRMZ0lDQUFFRi9SZzBBSUFRZ0Jtb2hCaUFESVFBTUJ3dEJBQ0FHYXhETGdJQ0FBQm9NQkFzZ0F5RUFJQU5CZjBjTkJRd0RDMEVBSVFnTUJ3dEJBQ0VBREFVTElBQkJmMGNOQWd0QkFFRUFLQUxFMDRDQUFFRUVjallDeE5PQWdBQUxJQWhCL3YvLy93ZExEUUVnQ0JETGdJQ0FBQ0VBUVFBUXk0Q0FnQUFoQXlBQVFYOUdEUUVnQTBGL1JnMEJJQUFnQTA4TkFTQURJQUJySWdZZ0FrRTRhazBOQVF0QkFFRUFLQUs0MDRDQUFDQUdhaUlETmdLNDA0Q0FBQUpBSUFOQkFDZ0N2Tk9BZ0FCTkRRQkJBQ0FETmdLODA0Q0FBQXNDUUFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFDQUFJQU1vQWdBaUJTQURLQUlFSWdocVJnMENJQU1vQWdnaUF3MEFEQU1MQ3dKQUFrQkJBQ2dDbU5DQWdBQWlBMFVOQUNBQUlBTlBEUUVMUVFBZ0FEWUNtTkNBZ0FBTFFRQWhBMEVBSUFZMkFzelRnSUFBUVFBZ0FEWUN5Tk9BZ0FCQkFFRi9OZ0tvMElDQUFFRUFRUUFvQXVEVGdJQUFOZ0tzMElDQUFFRUFRUUEyQXRUVGdJQUFBMEFnQTBIRTBJQ0FBR29nQTBHNDBJQ0FBR29pQkRZQ0FDQUVJQU5Cc05DQWdBQnFJZ1UyQWdBZ0EwRzgwSUNBQUdvZ0JUWUNBQ0FEUWN6UWdJQUFhaUFEUWNEUWdJQUFhaUlGTmdJQUlBVWdCRFlDQUNBRFFkVFFnSUFBYWlBRFFjalFnSUFBYWlJRU5nSUFJQVFnQlRZQ0FDQURRZERRZ0lBQWFpQUVOZ0lBSUFOQklHb2lBMEdBQWtjTkFBc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUJDQUdRVWhxSWdVZ0Eyc2lBMEVCY2pZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQU0yQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUFnQUNBRmFrRTROZ0lFREFJTElBTXRBQXhCQ0hFTkFDQUVJQVZKRFFBZ0JDQUFUdzBBSUFSQmVDQUVhMEVQY1VFQUlBUkJDR3BCRDNFYklnVnFJZ0JCQUNnQ2xOQ0FnQUFnQm1vaUN5QUZheUlGUVFGeU5nSUVJQU1nQ0NBR2FqWUNCRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFVMkFwVFFnSUFBUVFBZ0FEWUNvTkNBZ0FBZ0JDQUxha0U0TmdJRURBRUxBa0FnQUVFQUtBS1kwSUNBQUNJSVR3MEFRUUFnQURZQ21OQ0FnQUFnQUNFSUN5QUFJQVpxSVFWQnlOT0FnQUFoQXdKQUFrQUNRQUpBQWtBQ1FBSkFBMEFnQXlnQ0FDQUZSZzBCSUFNb0FnZ2lBdzBBREFJTEN5QURMUUFNUVFoeFJRMEJDMEhJMDRDQUFDRURBMEFDUUNBREtBSUFJZ1VnQkVzTkFDQUZJQU1vQWdScUlnVWdCRXNOQXdzZ0F5Z0NDQ0VEREFBTEN5QURJQUEyQWdBZ0F5QURLQUlFSUFacU5nSUVJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViYWlJTElBSkJBM0kyQWdRZ0JVRjRJQVZyUVE5eFFRQWdCVUVJYWtFUGNSdHFJZ1lnQ3lBQ2FpSUNheUVEQWtBZ0JpQUVSdzBBUVFBZ0FqWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQURhaUlETmdLVTBJQ0FBQ0FDSUFOQkFYSTJBZ1FNQXdzQ1FDQUdRUUFvQXB6UWdJQUFSdzBBUVFBZ0FqWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQURhaUlETmdLUTBJQ0FBQ0FDSUFOQkFYSTJBZ1FnQWlBRGFpQUROZ0lBREFNTEFrQWdCaWdDQkNJRVFRTnhRUUZIRFFBZ0JFRjRjU0VIQWtBQ1FDQUVRZjhCU3cwQUlBWW9BZ2dpQlNBRVFRTjJJZ2hCQTNSQnNOQ0FnQUJxSWdCR0dnSkFJQVlvQWd3aUJDQUZSdzBBUVFCQkFDZ0NpTkNBZ0FCQmZpQUlkM0UyQW9qUWdJQUFEQUlMSUFRZ0FFWWFJQVFnQlRZQ0NDQUZJQVEyQWd3TUFRc2dCaWdDR0NFSkFrQUNRQ0FHS0FJTUlnQWdCa1lOQUNBR0tBSUlJZ1FnQ0VrYUlBQWdCRFlDQ0NBRUlBQTJBZ3dNQVFzQ1FDQUdRUlJxSWdRb0FnQWlCUTBBSUFaQkVHb2lCQ2dDQUNJRkRRQkJBQ0VBREFFTEEwQWdCQ0VJSUFVaUFFRVVhaUlFS0FJQUlnVU5BQ0FBUVJCcUlRUWdBQ2dDRUNJRkRRQUxJQWhCQURZQ0FBc2dDVVVOQUFKQUFrQWdCaUFHS0FJY0lnVkJBblJCdU5LQWdBQnFJZ1FvQWdCSERRQWdCQ0FBTmdJQUlBQU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JYZHhOZ0tNMElDQUFBd0NDeUFKUVJCQkZDQUpLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFrMkFoZ0NRQ0FHS0FJUUlnUkZEUUFnQUNBRU5nSVFJQVFnQURZQ0dBc2dCaWdDRkNJRVJRMEFJQUJCRkdvZ0JEWUNBQ0FFSUFBMkFoZ0xJQWNnQTJvaEF5QUdJQWRxSWdZb0FnUWhCQXNnQmlBRVFYNXhOZ0lFSUFJZ0Eyb2dBellDQUNBQ0lBTkJBWEkyQWdRQ1FDQURRZjhCU3cwQUlBTkJlSEZCc05DQWdBQnFJUVFDUUFKQVFRQW9Bb2pRZ0lBQUlnVkJBU0FEUVFOMmRDSURjUTBBUVFBZ0JTQURjallDaU5DQWdBQWdCQ0VEREFFTElBUW9BZ2doQXdzZ0F5QUNOZ0lNSUFRZ0FqWUNDQ0FDSUFRMkFnd2dBaUFETmdJSURBTUxRUjhoQkFKQUlBTkIvLy8vQjBzTkFDQURRUWgySWdRZ0JFR0EvajlxUVJCMlFRaHhJZ1IwSWdVZ0JVR0E0QjlxUVJCMlFRUnhJZ1YwSWdBZ0FFR0FnQTlxUVJCMlFRSnhJZ0IwUVE5MklBUWdCWElnQUhKcklnUkJBWFFnQXlBRVFSVnFka0VCY1hKQkhHb2hCQXNnQWlBRU5nSWNJQUpDQURjQ0VDQUVRUUowUWJqU2dJQUFhaUVGQWtCQkFDZ0NqTkNBZ0FBaUFFRUJJQVIwSWdoeERRQWdCU0FDTmdJQVFRQWdBQ0FJY2pZQ2pOQ0FnQUFnQWlBRk5nSVlJQUlnQWpZQ0NDQUNJQUkyQWd3TUF3c2dBMEVBUVJrZ0JFRUJkbXNnQkVFZlJodDBJUVFnQlNnQ0FDRUFBMEFnQUNJRktBSUVRWGh4SUFOR0RRSWdCRUVkZGlFQUlBUkJBWFFoQkNBRklBQkJCSEZxUVJCcUlnZ29BZ0FpQUEwQUN5QUlJQUkyQWdBZ0FpQUZOZ0lZSUFJZ0FqWUNEQ0FDSUFJMkFnZ01BZ3NnQUVGNElBQnJRUTl4UVFBZ0FFRUlha0VQY1JzaUEyb2lDeUFHUVVocUlnZ2dBMnNpQTBFQmNqWUNCQ0FBSUFocVFUZzJBZ1FnQkNBRlFUY2dCV3RCRDNGQkFDQUZRVWxxUVE5eEcycEJRV29pQ0NBSUlBUkJFR3BKR3lJSVFTTTJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBczJBcURRZ0lBQUlBaEJFR3BCQUNrQzBOT0FnQUEzQWdBZ0NFRUFLUUxJMDRDQUFEY0NDRUVBSUFoQkNHbzJBdERUZ0lBQVFRQWdCallDek5PQWdBQkJBQ0FBTmdMSTA0Q0FBRUVBUVFBMkF0VFRnSUFBSUFoQkpHb2hBd05BSUFOQkJ6WUNBQ0FEUVFScUlnTWdCVWtOQUFzZ0NDQUVSZzBESUFnZ0NDZ0NCRUYrY1RZQ0JDQUlJQWdnQkdzaUFEWUNBQ0FFSUFCQkFYSTJBZ1FDUUNBQVFmOEJTdzBBSUFCQmVIRkJzTkNBZ0FCcUlRTUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQUFRUU4yZENJQWNRMEFRUUFnQlNBQWNqWUNpTkNBZ0FBZ0F5RUZEQUVMSUFNb0FnZ2hCUXNnQlNBRU5nSU1JQU1nQkRZQ0NDQUVJQU0yQWd3Z0JDQUZOZ0lJREFRTFFSOGhBd0pBSUFCQi8vLy9CMHNOQUNBQVFRaDJJZ01nQTBHQS9qOXFRUkIyUVFoeElnTjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ2dnQ0VHQWdBOXFRUkIyUVFKeElnaDBRUTkySUFNZ0JYSWdDSEpySWdOQkFYUWdBQ0FEUVJWcWRrRUJjWEpCSEdvaEF3c2dCQ0FETmdJY0lBUkNBRGNDRUNBRFFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQ0VFQklBTjBJZ1p4RFFBZ0JTQUVOZ0lBUVFBZ0NDQUdjallDak5DQWdBQWdCQ0FGTmdJWUlBUWdCRFlDQ0NBRUlBUTJBZ3dNQkFzZ0FFRUFRUmtnQTBFQmRtc2dBMEVmUmh0MElRTWdCU2dDQUNFSUEwQWdDQ0lGS0FJRVFYaHhJQUJHRFFNZ0EwRWRkaUVJSUFOQkFYUWhBeUFGSUFoQkJIRnFRUkJxSWdZb0FnQWlDQTBBQ3lBR0lBUTJBZ0FnQkNBRk5nSVlJQVFnQkRZQ0RDQUVJQVEyQWdnTUF3c2dCU2dDQ0NJRElBSTJBZ3dnQlNBQ05nSUlJQUpCQURZQ0dDQUNJQVUyQWd3Z0FpQUROZ0lJQ3lBTFFRaHFJUU1NQlFzZ0JTZ0NDQ0lESUFRMkFnd2dCU0FFTmdJSUlBUkJBRFlDR0NBRUlBVTJBZ3dnQkNBRE5nSUlDMEVBS0FLVTBJQ0FBQ0lESUFKTkRRQkJBQ2dDb05DQWdBQWlCQ0FDYWlJRklBTWdBbXNpQTBFQmNqWUNCRUVBSUFNMkFwVFFnSUFBUVFBZ0JUWUNvTkNBZ0FBZ0JDQUNRUU55TmdJRUlBUkJDR29oQXd3REMwRUFJUU5CQUVFd05nTDQwNENBQUF3Q0N3SkFJQXRGRFFBQ1FBSkFJQWdnQ0NnQ0hDSUZRUUowUWJqU2dJQUFhaUlES0FJQVJ3MEFJQU1nQURZQ0FDQUFEUUZCQUNBSFFYNGdCWGR4SWdjMkFvelFnSUFBREFJTElBdEJFRUVVSUFzb0FoQWdDRVliYWlBQU5nSUFJQUJGRFFFTElBQWdDellDR0FKQUlBZ29BaEFpQTBVTkFDQUFJQU0yQWhBZ0F5QUFOZ0lZQ3lBSVFSUnFLQUlBSWdORkRRQWdBRUVVYWlBRE5nSUFJQU1nQURZQ0dBc0NRQUpBSUFSQkQwc05BQ0FJSUFRZ0Ftb2lBMEVEY2pZQ0JDQUlJQU5xSWdNZ0F5Z0NCRUVCY2pZQ0JBd0JDeUFJSUFKcUlnQWdCRUVCY2pZQ0JDQUlJQUpCQTNJMkFnUWdBQ0FFYWlBRU5nSUFBa0FnQkVIL0FVc05BQ0FFUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0JFRURkblFpQkhFTkFFRUFJQVVnQkhJMkFvalFnSUFBSUFNaEJBd0JDeUFES0FJSUlRUUxJQVFnQURZQ0RDQURJQUEyQWdnZ0FDQUROZ0lNSUFBZ0JEWUNDQXdCQzBFZklRTUNRQ0FFUWYvLy93ZExEUUFnQkVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUNJQUpCZ0lBUGFrRVFka0VDY1NJQ2RFRVBkaUFESUFWeUlBSnlheUlEUVFGMElBUWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBQWdBellDSENBQVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFJQWRCQVNBRGRDSUNjUTBBSUFVZ0FEWUNBRUVBSUFjZ0FuSTJBb3pRZ0lBQUlBQWdCVFlDR0NBQUlBQTJBZ2dnQUNBQU5nSU1EQUVMSUFSQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQWdKQUEwQWdBaUlGS0FJRVFYaHhJQVJHRFFFZ0EwRWRkaUVDSUFOQkFYUWhBeUFGSUFKQkJIRnFRUkJxSWdZb0FnQWlBZzBBQ3lBR0lBQTJBZ0FnQUNBRk5nSVlJQUFnQURZQ0RDQUFJQUEyQWdnTUFRc2dCU2dDQ0NJRElBQTJBZ3dnQlNBQU5nSUlJQUJCQURZQ0dDQUFJQVUyQWd3Z0FDQUROZ0lJQ3lBSVFRaHFJUU1NQVFzQ1FDQUtSUTBBQWtBQ1FDQUFJQUFvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQWcyQWdBZ0NBMEJRUUFnQ1VGK0lBVjNjVFlDak5DQWdBQU1BZ3NnQ2tFUVFSUWdDaWdDRUNBQVJodHFJQWcyQWdBZ0NFVU5BUXNnQ0NBS05nSVlBa0FnQUNnQ0VDSURSUTBBSUFnZ0F6WUNFQ0FESUFnMkFoZ0xJQUJCRkdvb0FnQWlBMFVOQUNBSVFSUnFJQU0yQWdBZ0F5QUlOZ0lZQ3dKQUFrQWdCRUVQU3cwQUlBQWdCQ0FDYWlJRFFRTnlOZ0lFSUFBZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFREFFTElBQWdBbW9pQlNBRVFRRnlOZ0lFSUFBZ0FrRURjallDQkNBRklBUnFJQVEyQWdBQ1FDQUhSUTBBSUFkQmVIRkJzTkNBZ0FCcUlRSkJBQ2dDbk5DQWdBQWhBd0pBQWtCQkFTQUhRUU4yZENJSUlBWnhEUUJCQUNBSUlBWnlOZ0tJMElDQUFDQUNJUWdNQVFzZ0FpZ0NDQ0VJQ3lBSUlBTTJBZ3dnQWlBRE5nSUlJQU1nQWpZQ0RDQURJQWcyQWdnTFFRQWdCVFlDbk5DQWdBQkJBQ0FFTmdLUTBJQ0FBQXNnQUVFSWFpRURDeUFCUVJCcUpJQ0FnSUFBSUFNTENnQWdBQkRKZ0lDQUFBdmlEUUVIZndKQUlBQkZEUUFnQUVGNGFpSUJJQUJCZkdvb0FnQWlBa0Y0Y1NJQWFpRURBa0FnQWtFQmNRMEFJQUpCQTNGRkRRRWdBU0FCS0FJQUlnSnJJZ0ZCQUNnQ21OQ0FnQUFpQkVrTkFTQUNJQUJxSVFBQ1FDQUJRUUFvQXB6UWdJQUFSZzBBQWtBZ0FrSC9BVXNOQUNBQktBSUlJZ1FnQWtFRGRpSUZRUU4wUWJEUWdJQUFhaUlHUmhvQ1FDQUJLQUlNSWdJZ0JFY05BRUVBUVFBb0FvalFnSUFBUVg0Z0JYZHhOZ0tJMElDQUFBd0RDeUFDSUFaR0dpQUNJQVEyQWdnZ0JDQUNOZ0lNREFJTElBRW9BaGdoQndKQUFrQWdBU2dDRENJR0lBRkdEUUFnQVNnQ0NDSUNJQVJKR2lBR0lBSTJBZ2dnQWlBR05nSU1EQUVMQWtBZ0FVRVVhaUlDS0FJQUlnUU5BQ0FCUVJCcUlnSW9BZ0FpQkEwQVFRQWhCZ3dCQ3dOQUlBSWhCU0FFSWdaQkZHb2lBaWdDQUNJRURRQWdCa0VRYWlFQ0lBWW9BaEFpQkEwQUN5QUZRUUEyQWdBTElBZEZEUUVDUUFKQUlBRWdBU2dDSENJRVFRSjBRYmpTZ0lBQWFpSUNLQUlBUncwQUlBSWdCallDQUNBR0RRRkJBRUVBS0FLTTBJQ0FBRUYrSUFSM2NUWUNqTkNBZ0FBTUF3c2dCMEVRUVJRZ0J5Z0NFQ0FCUmh0cUlBWTJBZ0FnQmtVTkFnc2dCaUFITmdJWUFrQWdBU2dDRUNJQ1JRMEFJQVlnQWpZQ0VDQUNJQVkyQWhnTElBRW9BaFFpQWtVTkFTQUdRUlJxSUFJMkFnQWdBaUFHTmdJWURBRUxJQU1vQWdRaUFrRURjVUVEUncwQUlBTWdBa0YrY1RZQ0JFRUFJQUEyQXBEUWdJQUFJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FQQ3lBQklBTlBEUUFnQXlnQ0JDSUNRUUZ4UlEwQUFrQUNRQ0FDUVFKeERRQUNRQ0FEUVFBb0FxRFFnSUFBUncwQVFRQWdBVFlDb05DQWdBQkJBRUVBS0FLVTBJQ0FBQ0FBYWlJQU5nS1UwSUNBQUNBQklBQkJBWEkyQWdRZ0FVRUFLQUtjMElDQUFFY05BMEVBUVFBMkFwRFFnSUFBUVFCQkFEWUNuTkNBZ0FBUEN3SkFJQU5CQUNnQ25OQ0FnQUJIRFFCQkFDQUJOZ0tjMElDQUFFRUFRUUFvQXBEUWdJQUFJQUJxSWdBMkFwRFFnSUFBSUFFZ0FFRUJjallDQkNBQklBQnFJQUEyQWdBUEN5QUNRWGh4SUFCcUlRQUNRQUpBSUFKQi93RkxEUUFnQXlnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0F5Z0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUFnc2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdCQ3lBREtBSVlJUWNDUUFKQUlBTW9BZ3dpQmlBRFJnMEFJQU1vQWdnaUFrRUFLQUtZMElDQUFFa2FJQVlnQWpZQ0NDQUNJQVkyQWd3TUFRc0NRQ0FEUVJScUlnSW9BZ0FpQkEwQUlBTkJFR29pQWlnQ0FDSUVEUUJCQUNFR0RBRUxBMEFnQWlFRklBUWlCa0VVYWlJQ0tBSUFJZ1FOQUNBR1FSQnFJUUlnQmlnQ0VDSUVEUUFMSUFWQkFEWUNBQXNnQjBVTkFBSkFBa0FnQXlBREtBSWNJZ1JCQW5SQnVOS0FnQUJxSWdJb0FnQkhEUUFnQWlBR05nSUFJQVlOQVVFQVFRQW9Bb3pRZ0lBQVFYNGdCSGR4TmdLTTBJQ0FBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBTkdHMm9nQmpZQ0FDQUdSUTBCQ3lBR0lBYzJBaGdDUUNBREtBSVFJZ0pGRFFBZ0JpQUNOZ0lRSUFJZ0JqWUNHQXNnQXlnQ0ZDSUNSUTBBSUFaQkZHb2dBallDQUNBQ0lBWTJBaGdMSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRZ0FVRUFLQUtjMElDQUFFY05BVUVBSUFBMkFwRFFnSUFBRHdzZ0F5QUNRWDV4TmdJRUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUUxBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFQ0FrQUNRRUVBS0FLSTBJQ0FBQ0lFUVFFZ0FFRURkblFpQUhFTkFFRUFJQVFnQUhJMkFvalFnSUFBSUFJaEFBd0JDeUFDS0FJSUlRQUxJQUFnQVRZQ0RDQUNJQUUyQWdnZ0FTQUNOZ0lNSUFFZ0FEWUNDQThMUVI4aEFnSkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnSWdBa0dBL2o5cVFSQjJRUWh4SWdKMElnUWdCRUdBNEI5cVFSQjJRUVJ4SWdSMElnWWdCa0dBZ0E5cVFSQjJRUUp4SWdaMFFROTJJQUlnQkhJZ0JuSnJJZ0pCQVhRZ0FDQUNRUlZxZGtFQmNYSkJIR29oQWdzZ0FTQUNOZ0ljSUFGQ0FEY0NFQ0FDUVFKMFFialNnSUFBYWlFRUFrQUNRRUVBS0FLTTBJQ0FBQ0lHUVFFZ0FuUWlBM0VOQUNBRUlBRTJBZ0JCQUNBR0lBTnlOZ0tNMElDQUFDQUJJQVEyQWhnZ0FTQUJOZ0lJSUFFZ0FUWUNEQXdCQ3lBQVFRQkJHU0FDUVFGMmF5QUNRUjlHRzNRaEFpQUVLQUlBSVFZQ1FBTkFJQVlpQkNnQ0JFRjRjU0FBUmcwQklBSkJIWFloQmlBQ1FRRjBJUUlnQkNBR1FRUnhha0VRYWlJREtBSUFJZ1lOQUFzZ0F5QUJOZ0lBSUFFZ0JEWUNHQ0FCSUFFMkFnd2dBU0FCTmdJSURBRUxJQVFvQWdnaUFDQUJOZ0lNSUFRZ0FUWUNDQ0FCUVFBMkFoZ2dBU0FFTmdJTUlBRWdBRFlDQ0F0QkFFRUFLQUtvMElDQUFFRi9haUlCUVg4Z0FSczJBcWpRZ0lBQUN3c0VBQUFBQzA0QUFrQWdBQTBBUHdCQkVIUVBDd0pBSUFCQi8vOERjUTBBSUFCQmYwd05BQUpBSUFCQkVIWkFBQ0lBUVg5SERRQkJBRUV3TmdMNDA0Q0FBRUYvRHdzZ0FFRVFkQThMRU1xQWdJQUFBQXZ5QWdJRGZ3RitBa0FnQWtVTkFDQUFJQUU2QUFBZ0FpQUFhaUlEUVg5cUlBRTZBQUFnQWtFRFNRMEFJQUFnQVRvQUFpQUFJQUU2QUFFZ0EwRjlhaUFCT2dBQUlBTkJmbW9nQVRvQUFDQUNRUWRKRFFBZ0FDQUJPZ0FESUFOQmZHb2dBVG9BQUNBQ1FRbEpEUUFnQUVFQUlBQnJRUU54SWdScUlnTWdBVUgvQVhGQmdZS0VDR3dpQVRZQ0FDQURJQUlnQkd0QmZIRWlCR29pQWtGOGFpQUJOZ0lBSUFSQkNVa05BQ0FESUFFMkFnZ2dBeUFCTmdJRUlBSkJlR29nQVRZQ0FDQUNRWFJxSUFFMkFnQWdCRUVaU1EwQUlBTWdBVFlDR0NBRElBRTJBaFFnQXlBQk5nSVFJQU1nQVRZQ0RDQUNRWEJxSUFFMkFnQWdBa0ZzYWlBQk5nSUFJQUpCYUdvZ0FUWUNBQ0FDUVdScUlBRTJBZ0FnQkNBRFFRUnhRUmh5SWdWcklnSkJJRWtOQUNBQnJVS0JnSUNBRUg0aEJpQURJQVZxSVFFRFFDQUJJQVkzQXhnZ0FTQUdOd01RSUFFZ0JqY0RDQ0FCSUFZM0F3QWdBVUVnYWlFQklBSkJZR29pQWtFZlN3MEFDd3NnQUFzTGprZ0JBRUdBQ0F1R1NBRUFBQUFDQUFBQUF3QUFBQUFBQUFBQUFBQUFCQUFBQUFVQUFBQUFBQUFBQUFBQUFBWUFBQUFIQUFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0J4ZFdWeWVRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgySnZaSGtBUTI5dWRHVnVkQzFNWlc1bmRHZ2diM1psY21ac2IzY0FRMmgxYm1zZ2MybDZaU0J2ZG1WeVpteHZkd0JTWlhOd2IyNXpaU0J2ZG1WeVpteHZkd0JKYm5aaGJHbGtJRzFsZEdodlpDQm1iM0lnU0ZSVVVDOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJRzFsZEdodlpDQm1iM0lnVWxSVFVDOTRMbmdnY21WeGRXVnpkQUJGZUhCbFkzUmxaQ0JUVDFWU1EwVWdiV1YwYUc5a0lHWnZjaUJKUTBVdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0JtY21GbmJXVnVkQ0J6ZEdGeWRBQkZlSEJsWTNSbFpDQmtiM1FBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDl6ZEdGMGRYTUFTVzUyWVd4cFpDQnlaWE53YjI1elpTQnpkR0YwZFhNQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN3QlZjMlZ5SUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5eVpYTmxkR0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMmhsWVdSbGNtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZbVZuYVc1Z0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5MlpYSnphVzl1WDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmRYSnNYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZiV1YwYUc5a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDI1aGJXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJWeWRtVnlBRWx1ZG1Gc2FXUWdhR1ZoWkdWeUlIWmhiSFZsSUdOb1lYSUFTVzUyWVd4cFpDQm9aV0ZrWlhJZ1ptbGxiR1FnWTJoaGNnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzWmxjbk5wYjI0QVNXNTJZV3hwWkNCdGFXNXZjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdiV0ZxYjNJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lFTlNURVlnWVdaMFpYSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lFaFVWRkFnZG1WeWMybHZiZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQjBiMnRsYmdCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNWeWJBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNuTWdhVzRnZFhKc0FGVnVaWGh3WldOMFpXUWdjM1JoY25RZ1kyaGhjaUJwYmlCMWNtd0FSRzkxWW14bElFQWdhVzRnZFhKc0FFVnRjSFI1SUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUVOdmJuUmxiblF0VEdWdVozUm9BRVIxY0d4cFkyRjBaU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWElnYVc0Z2RYSnNJSEJoZEdnQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnWTJGdUozUWdZbVVnY0hKbGMyVnVkQ0IzYVhSb0lGUnlZVzV6Wm1WeUxVVnVZMjlrYVc1bkFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklITnBlbVVBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZkbUZzZFdVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUIyWVd4MVpRQk5hWE56YVc1bklHVjRjR1ZqZEdWa0lFeEdJR0ZtZEdWeUlHaGxZV1JsY2lCMllXeDFaUUJKYm5aaGJHbGtJR0JVY21GdWMyWmxjaTFGYm1OdlpHbHVaMkFnYUdWaFpHVnlJSFpoYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdjWFZ2ZEdVZ2RtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCeGRXOTBaV1FnZG1Gc2RXVUFVR0YxYzJWa0lHSjVJRzl1WDJobFlXUmxjbk5mWTI5dGNHeGxkR1VBU1c1MllXeHBaQ0JGVDBZZ2MzUmhkR1VBYjI1ZmNtVnpaWFFnY0dGMWMyVUFiMjVmWTJoMWJtdGZhR1ZoWkdWeUlIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlltVm5hVzRnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbElIQmhkWE5sQUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5MlpYSnphVzl1WDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDNWeWJGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOXRaWFJvYjJSZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsSUhCaGRYTmxBRlZ1Wlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2MzUmhjblFnYkdsdVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nYm1GdFpRQlFZWFZ6WlNCdmJpQkRUMDVPUlVOVUwxVndaM0poWkdVQVVHRjFjMlVnYjI0Z1VGSkpMMVZ3WjNKaFpHVUFSWGh3WldOMFpXUWdTRlJVVUM4eUlFTnZibTVsWTNScGIyNGdVSEpsWm1GalpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyMWxkR2h2WkFCRmVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnRaWFJvYjJRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmWm1sbGJHUUFVR0YxYzJWa0FFbHVkbUZzYVdRZ2QyOXlaQ0JsYm1OdmRXNTBaWEpsWkFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JsYm1OdmRXNTBaWEpsWkFCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5qYUdWdFlRQlNaWEYxWlhOMElHaGhjeUJwYm5aaGJHbGtJR0JVY21GdWMyWmxjaTFGYm1OdlpHbHVaMkFBVTFkSlZFTklYMUJTVDFoWkFGVlRSVjlRVWs5WVdRQk5TMEZEVkVsV1NWUlpBRlZPVUZKUFEwVlRVMEZDVEVWZlJVNVVTVlJaQUVOUFVGa0FUVTlXUlVSZlVFVlNUVUZPUlU1VVRGa0FWRTlQWDBWQlVreFpBRTVQVkVsR1dRQkdRVWxNUlVSZlJFVlFSVTVFUlU1RFdRQkNRVVJmUjBGVVJWZEJXUUJRVEVGWkFGQlZWQUJEU0VWRFMwOVZWQUJIUVZSRlYwRlpYMVJKVFVWUFZWUUFVa1ZSVlVWVFZGOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlEwOU9Ua1ZEVkY5VVNVMUZUMVZVQUVOUFRrNUZRMVJKVDA1ZlZFbE5SVTlWVkFCTVQwZEpUbDlVU1UxRlQxVlVBRTVGVkZkUFVrdGZVa1ZCUkY5VVNVMUZUMVZVQUZCUFUxUUFUVWxUUkVsU1JVTlVSVVJmVWtWUlZVVlRWQUJEVEVsRlRsUmZRMHhQVTBWRVgxSkZVVlZGVTFRQVEweEpSVTVVWDBOTVQxTkZSRjlNVDBGRVgwSkJURUZPUTBWRVgxSkZVVlZGVTFRQVFrRkVYMUpGVVZWRlUxUUFTRlJVVUY5U1JWRlZSVk5VWDFORlRsUmZWRTlmU0ZSVVVGTmZVRTlTVkFCU1JWQlBVbFFBU1UxZlFWOVVSVUZRVDFRQVVrVlRSVlJmUTA5T1ZFVk9WQUJPVDE5RFQwNVVSVTVVQUZCQlVsUkpRVXhmUTA5T1ZFVk9WQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVRWRUZPVkFCSVVFVmZRMEpmVWtWVFJWUUFSMFZVQUVoUVJWOVRWRkpKUTFRQVEwOU9Sa3hKUTFRQVZFVk5VRTlTUVZKWlgxSkZSRWxTUlVOVUFGQkZVazFCVGtWT1ZGOVNSVVJKVWtWRFZBQkRUMDVPUlVOVUFFMVZURlJKWDFOVVFWUlZVd0JJVUVWZlNVNVdRVXhKUkY5VFZFRlVWVk1BVkU5UFgwMUJUbGxmVWtWUlZVVlRWRk1BUlVGU1RGbGZTRWxPVkZNQVZVNUJWa0ZKVEVGQ1RFVmZSazlTWDB4RlIwRk1YMUpGUVZOUFRsTUFUMUJVU1U5T1V3QlRWMGxVUTBoSlRrZGZVRkpQVkU5RFQweFRBRlpCVWtsQlRsUmZRVXhUVDE5T1JVZFBWRWxCVkVWVEFFMVZURlJKVUV4RlgwTklUMGxEUlZNQVNVNVVSVkpPUVV4ZlUwVlNWa1ZTWDBWU1VrOVNBRmRGUWw5VFJWSldSVkpmVlU1TFRrOVhUbDlGVWxKUFVnQlNRVWxNUjFWT1gwVlNVazlTQUVsRVJVNVVTVlJaWDFCU1QxWkpSRVZTWDBGVlZFaEZUbFJKUTBGVVNVOU9YMFZTVWs5U0FGTlRURjlEUlZKVVNVWkpRMEZVUlY5RlVsSlBVZ0JKVGxaQlRFbEVYMWhmUms5U1YwRlNSRVZFWDBaUFVnQlRSVlJmVUVGU1FVMUZWRVZTQUVkRlZGOVFRVkpCVFVWVVJWSUFTRkJGWDFWVFJWSUFVMFZGWDA5VVNFVlNBRWhRUlY5RFFsOURTRlZPUzE5SVJVRkVSVklBVFV0RFFVeEZUa1JCVWdCVFJWUlZVQUJYUlVKZlUwVlNWa1ZTWDBsVFgwUlBWMDRBVkVWQlVrUlBWMDRBU0ZCRlgwTk1UMU5GUkY5RFQwNU9SVU5VU1U5T0FFaEZWVkpKVTFSSlExOUZXRkJKVWtGVVNVOU9BRVJKVTBOUFRrNUZRMVJGUkY5UFVFVlNRVlJKVDA0QVRrOU9YMEZWVkVoUFVrbFVRVlJKVmtWZlNVNUdUMUpOUVZSSlQwNEFTRkJGWDBsT1ZrRk1TVVJmVmtWU1UwbFBUZ0JJVUVWZlEwSmZUVVZUVTBGSFJWOUNSVWRKVGdCVFNWUkZYMGxUWDBaU1QxcEZUZ0JJVUVWZlNVNVdRVXhKUkY5SVJVRkVSVkpmVkU5TFJVNEFTVTVXUVV4SlJGOVVUMHRGVGdCR1QxSkNTVVJFUlU0QVJVNUlRVTVEUlY5WlQxVlNYME5CVEUwQVNGQkZYMGxPVmtGTVNVUmZWVkpNQUVKTVQwTkxSVVJmUWxsZlVFRlNSVTVVUVV4ZlEwOU9WRkpQVEFCTlMwTlBUQUJCUTB3QVNGQkZYMGxPVkVWU1RrRk1BRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBWZlZVNVBSa1pKUTBsQlRBQklVRVZmVDBzQVZVNU1TVTVMQUZWT1RFOURTd0JRVWtrQVVrVlVVbGxmVjBsVVNBQklVRVZmU1U1V1FVeEpSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQklVRVZmVlU1RldGQkZRMVJGUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJHVEZWVFNBQlFVazlRVUVGVVEwZ0FUUzFUUlVGU1EwZ0FWVkpKWDFSUFQxOU1UMDVIQUZCU1QwTkZVMU5KVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlRUlZKVFNWTlVSVTVVWDFkQlVrNUpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVhRVkpPU1U1SEFFaFFSVjlKVGxaQlRFbEVYMVJTUVU1VFJrVlNYMFZPUTA5RVNVNUhBRVY0Y0dWamRHVmtJRU5TVEVZQVNGQkZYMGxPVmtGTVNVUmZRMGhWVGt0ZlUwbGFSUUJOVDFaRkFFTlBUbFJKVGxWRkFFaFFSVjlEUWw5VFZFRlVWVk5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxWkZVbE5KVDA1ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFWU1RGOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVGtGTlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlRVMEZIUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVVNFOUVYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlJrbEZURVJmUTA5TlVFeEZWRVVBUkVWTVJWUkZBRWhRUlY5SlRsWkJURWxFWDBWUFJsOVRWRUZVUlFCSlRsWkJURWxFWDFOVFRGOURSVkpVU1VaSlEwRlVSUUJRUVZWVFJRQk9UMTlTUlZOUVQwNVRSUUJWVGxOVlVGQlBVbFJGUkY5TlJVUkpRVjlVV1ZCRkFFZFBUa1VBVGs5VVgwRkRRMFZRVkVGQ1RFVUFVMFZTVmtsRFJWOVZUa0ZXUVVsTVFVSk1SUUJTUVU1SFJWOU9UMVJmVTBGVVNWTkdTVUZDVEVVQVQxSkpSMGxPWDBsVFgxVk9Va1ZCUTBoQlFreEZBRkpGVTFCUFRsTkZYMGxUWDFOVVFVeEZBRkJWVWtkRkFFMUZVa2RGQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVUFVa1ZSVlVWVFZGOUlSVUZFUlZKZlZFOVBYMHhCVWtkRkFGQkJXVXhQUVVSZlZFOVBYMHhCVWtkRkFFbE9VMVZHUmtsRFNVVk9WRjlUVkU5U1FVZEZBRWhRUlY5UVFWVlRSVVJmVlZCSFVrRkVSUUJJVUVWZlVFRlZVMFZFWDBneVgxVlFSMUpCUkVVQVUwOVZVa05GQUVGT1RrOVZUa05GQUZSU1FVTkZBRWhRUlY5VlRrVllVRVZEVkVWRVgxTlFRVU5GQUVSRlUwTlNTVUpGQUZWT1UxVkNVME5TU1VKRkFGSkZRMDlTUkFCSVVFVmZTVTVXUVV4SlJGOU5SVlJJVDBRQVRrOVVYMFpQVlU1RUFGQlNUMUJHU1U1RUFGVk9Ra2xPUkFCU1JVSkpUa1FBVlU1QlZWUklUMUpKV2tWRUFFMUZWRWhQUkY5T1QxUmZRVXhNVDFkRlJBQklWRlJRWDFaRlVsTkpUMDVmVGs5VVgxTlZVRkJQVWxSRlJBQkJURkpGUVVSWlgxSkZVRTlTVkVWRUFFRkRRMFZRVkVWRUFFNVBWRjlKVFZCTVJVMUZUbFJGUkFCTVQwOVFYMFJGVkVWRFZFVkVBRWhRUlY5RFVsOUZXRkJGUTFSRlJBQklVRVZmVEVaZlJWaFFSVU5VUlVRQVExSkZRVlJGUkFCSlRWOVZVMFZFQUVoUVJWOVFRVlZUUlVRQVZFbE5SVTlWVkY5UFEwTlZVa1ZFQUZCQldVMUZUbFJmVWtWUlZVbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gxSkZVVlZKVWtWRUFGQlNUMWhaWDBGVlZFaEZUbFJKUTBGVVNVOU9YMUpGVVZWSlVrVkVBRTVGVkZkUFVrdGZRVlZVU0VWT1ZFbERRVlJKVDA1ZlVrVlJWVWxTUlVRQVRFVk9SMVJJWDFKRlVWVkpVa1ZFQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlTUlZGVlNWSkZSQUJWVUVkU1FVUkZYMUpGVVZWSlVrVkVBRkJCUjBWZlJWaFFTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZSa0ZKVEVWRUFFVllVRVZEVkVGVVNVOU9YMFpCU1V4RlJBQlNSVlpCVEVsRVFWUkpUMDVmUmtGSlRFVkVBRk5UVEY5SVFVNUVVMGhCUzBWZlJrRkpURVZFQUV4UFEwdEZSQUJVVWtGT1UwWlBVazFCVkVsUFRsOUJVRkJNU1VWRUFFNVBWRjlOVDBSSlJrbEZSQUJPVDFSZlJWaFVSVTVFUlVRQVFrRk9SRmRKUkZSSVgweEpUVWxVWDBWWVEwVkZSRVZFQUZOSlZFVmZTVk5mVDFaRlVreFBRVVJGUkFCSVJVRkVBRVY0Y0dWamRHVmtJRWhVVkZBdkFBQmVFd0FBSmhNQUFEQVFBQUR3RndBQW5STUFBQlVTQUFBNUZ3QUE4QklBQUFvUUFBQjFFZ0FBclJJQUFJSVRBQUJQRkFBQWZ4QUFBS0FWQUFBakZBQUFpUklBQUlzVUFBQk5GUUFBMUJFQUFNOFVBQUFRR0FBQXlSWUFBTndXQUFEQkVRQUE0QmNBQUxzVUFBQjBGQUFBZkJVQUFPVVVBQUFJRndBQUh4QUFBR1VWQUFDakZBQUFLQlVBQUFJVkFBQ1pGUUFBTEJBQUFJc1pBQUJQRHdBQTFBNEFBR29RQUFET0VBQUFBaGNBQUlrT0FBQnVFd0FBSEJNQUFHWVVBQUJXRndBQXdSTUFBTTBUQUFCc0V3QUFhQmNBQUdZWEFBQmZGd0FBSWhNQUFNNFBBQUJwRGdBQTJBNEFBR01XQUFETEV3QUFxZzRBQUNnWEFBQW1Gd0FBeFJNQUFGMFdBQURvRVFBQVp4TUFBR1VUQUFEeUZnQUFjeE1BQUIwWEFBRDVGZ0FBOHhFQUFNOE9BQURPRlFBQURCSUFBTE1SQUFDbEVRQUFZUkFBQURJWEFBQzdFd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUFBZ0lDQWdJQUFBSUNBQUlDQUFJQ0FnSUNBZ0lDQWdJQUF3QUVBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUNBQUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCc2IzTmxaV1Z3TFdGc2FYWmxBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUZqYUhWdWEyVmtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRQUJBUUVCQVFBQUFRRUFBUUVBQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0FBQUFBQUFBQUFBQUFBQUFBQUFISmhibk5tWlhJdFpXNWpiMlJwYm1kd1ozSmhaR1VOQ2cwS0RRcFRUUTBLRFFwVVZGQXZRMFV2VkZOUUx3QUFBQUFBQUFBQUFBQUFBQUVDQUFFREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFnQUJBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFCQVFVQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBUUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQkFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBZ0FBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdBQUFBQUFBQU1EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFNVBWVTVEUlVWRFMwOVZWRTVGUTFSRlZFVkRVa2xDUlV4VlUwaEZWRVZCUkZORlFWSkRTRkpIUlVOVVNWWkpWRmxNUlU1RVFWSldSVTlVU1VaWlVGUkpUMDVUUTBoVFJVRlpVMVJCVkVOSVIwVlBVa1JKVWtWRFZFOVNWRkpEU0ZCQlVrRk5SVlJGVWxWU1EwVkNVME5TU1VKRlFWSkVUMWRPUVVORlNVNUVUa3REUzFWQ1UwTlNTVUpGU0ZSVVVDOUJSRlJRTHc9PSdcbiIsICIvLyBAdHMtY2hlY2tcblxuJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbmV0JylcbmNvbnN0IGh0dHAgPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHsgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi90aW1lcnMnKVxuY29uc3QgUmVxdWVzdCA9IHJlcXVpcmUoJy4vY29yZS9yZXF1ZXN0JylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBIZWFkZXJzVGltZW91dEVycm9yLFxuICBIZWFkZXJzT3ZlcmZsb3dFcnJvcixcbiAgU29ja2V0RXJyb3IsXG4gIEluZm9ybWF0aW9uYWxFcnJvcixcbiAgQm9keVRpbWVvdXRFcnJvcixcbiAgSFRUUFBhcnNlckVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrUGFyc2VyLFxuICBrQ29ubmVjdCxcbiAga0Jsb2NraW5nLFxuICBrUmVzdW1pbmcsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1NpemUsXG4gIGtXcml0aW5nLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga0Nvbm5lY3RvcixcbiAga01heFJlZGlyZWN0aW9ucyxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga0Nsb3NlLFxuICBrRGVzdHJveSxcbiAga0Rpc3BhdGNoLFxuICBrSW50ZXJjZXB0b3JzLFxuICBrTG9jYWxBZGRyZXNzLFxuICBrTWF4UmVzcG9uc2VTaXplLFxuICBrSFRUUENvbm5WZXJzaW9uLFxuICAvLyBIVFRQMlxuICBrSG9zdCxcbiAga0hUVFAyU2Vzc2lvbixcbiAga0hUVFAyU2Vzc2lvblN0YXRlLFxuICBrSFRUUDJCdWlsZFJlcXVlc3QsXG4gIGtIVFRQMkNvcHlIZWFkZXJzLFxuICBrSFRUUDFCdWlsZFJlcXVlc3Rcbn0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ2h0dHAyJylcbn0gY2F0Y2gge1xuICAvLyBAdHMtaWdub3JlXG4gIGh0dHAyID0geyBjb25zdGFudHM6IHt9IH1cbn1cblxuY29uc3Qge1xuICBjb25zdGFudHM6IHtcbiAgICBIVFRQMl9IRUFERVJfQVVUSE9SSVRZLFxuICAgIEhUVFAyX0hFQURFUl9NRVRIT0QsXG4gICAgSFRUUDJfSEVBREVSX1BBVEgsXG4gICAgSFRUUDJfSEVBREVSX1NDSEVNRSxcbiAgICBIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEgsXG4gICAgSFRUUDJfSEVBREVSX0VYUEVDVCxcbiAgICBIVFRQMl9IRUFERVJfU1RBVFVTXG4gIH1cbn0gPSBodHRwMlxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbmNvbnN0IEZhc3RCdWZmZXIgPSBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdXG5cbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdrQ2xvc2VkUmVzb2x2ZScpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6YmVmb3JlQ29ubmVjdCcpXG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpXG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpXG59IGNhdGNoIHtcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RFcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdGVkID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLmRlZmF1bHR9XG4gKi9cbmNsYXNzIENsaWVudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5DbGllbnQuT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwge1xuICAgIGludGVyY2VwdG9ycyxcbiAgICBtYXhIZWFkZXJTaXplLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIHNvY2tldFRpbWVvdXQsXG4gICAgcmVxdWVzdFRpbWVvdXQsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgaWRsZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlLFxuICAgIGtlZXBBbGl2ZVRpbWVvdXQsXG4gICAgbWF4S2VlcEFsaXZlVGltZW91dCxcbiAgICBrZWVwQWxpdmVNYXhUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gICAgc29ja2V0UGF0aCxcbiAgICBwaXBlbGluaW5nLFxuICAgIHRscyxcbiAgICBzdHJpY3RDb250ZW50TGVuZ3RoLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIG1heFJlZGlyZWN0aW9ucyxcbiAgICBjb25uZWN0LFxuICAgIG1heFJlcXVlc3RzUGVyQ2xpZW50LFxuICAgIGxvY2FsQWRkcmVzcyxcbiAgICBtYXhSZXNwb25zZVNpemUsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgLy8gaDJcbiAgICBhbGxvd0gyLFxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChrZWVwQWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBrZWVwQWxpdmUsIHVzZSBwaXBlbGluaW5nPTAgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBzb2NrZXRUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCByZXF1ZXN0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKGlkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgaWRsZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhLZWVwQWxpdmVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgbWF4S2VlcEFsaXZlVGltZW91dCwgdXNlIGtlZXBBbGl2ZU1heFRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEhlYWRlclNpemUgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKG1heEhlYWRlclNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWF4SGVhZGVyU2l6ZScpXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFBhdGggIT0gbnVsbCAmJiB0eXBlb2Ygc29ja2V0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBzb2NrZXRQYXRoJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0VGltZW91dCkgfHwgY29ubmVjdFRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3RUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXQpIHx8IGtlZXBBbGl2ZVRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlTWF4VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZU1heFRpbWVvdXQpIHx8IGtlZXBBbGl2ZU1heFRpbWVvdXQgPD0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVNYXhUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoaGVhZGVyc1RpbWVvdXQpIHx8IGhlYWRlcnNUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVyc1RpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGJvZHlUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHlUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVxdWVzdHNQZXJDbGllbnQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVxdWVzdHNQZXJDbGllbnQpIHx8IG1heFJlcXVlc3RzUGVyQ2xpZW50IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVxdWVzdHNQZXJDbGllbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGxvY2FsQWRkcmVzcyAhPSBudWxsICYmICh0eXBlb2YgbG9jYWxBZGRyZXNzICE9PSAnc3RyaW5nJyB8fCBuZXQuaXNJUChsb2NhbEFkZHJlc3MpID09PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdsb2NhbEFkZHJlc3MgbXVzdCBiZSB2YWxpZCBzdHJpbmcgSVAgYWRkcmVzcycpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXNwb25zZVNpemUpIHx8IG1heFJlc3BvbnNlU2l6ZSA8IC0xKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXNwb25zZVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0ICE9IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQpIHx8IGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCA8IC0xKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgLy8gaDJcbiAgICBpZiAoYWxsb3dIMiAhPSBudWxsICYmIHR5cGVvZiBhbGxvd0gyICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYWxsb3dIMiBtdXN0IGJlIGEgdmFsaWQgYm9vbGVhbiB2YWx1ZScpXG4gICAgfVxuXG4gICAgaWYgKG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgJiYgKHR5cGVvZiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPT0gJ251bWJlcicgfHwgbWF4Q29uY3VycmVudFN0cmVhbXMgPCAxKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDb25jdXJyZW50U3RyZWFtcyBtdXN0IGJlIGEgcG9zc2l0aXZlIGludGVnZXIsIGdyZWF0ZXIgdGhhbiAwJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvcnMuQ2xpZW50ICYmIEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3JzLkNsaWVudClcbiAgICAgID8gaW50ZXJjZXB0b3JzLkNsaWVudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbih1cmwpXG4gICAgdGhpc1trQ29ubmVjdG9yXSA9IGNvbm5lY3RcbiAgICB0aGlzW2tTb2NrZXRdID0gbnVsbFxuICAgIHRoaXNba1BpcGVsaW5pbmddID0gcGlwZWxpbmluZyAhPSBudWxsID8gcGlwZWxpbmluZyA6IDFcbiAgICB0aGlzW2tNYXhIZWFkZXJzU2l6ZV0gPSBtYXhIZWFkZXJTaXplIHx8IGh0dHAubWF4SGVhZGVyU2l6ZVxuICAgIHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XSA9IGtlZXBBbGl2ZVRpbWVvdXQgPT0gbnVsbCA/IDRlMyA6IGtlZXBBbGl2ZVRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVNYXhUaW1lb3V0XSA9IGtlZXBBbGl2ZU1heFRpbWVvdXQgPT0gbnVsbCA/IDYwMGUzIDoga2VlcEFsaXZlTWF4VGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdID0ga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCA9PSBudWxsID8gMWUzIDoga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZFxuICAgIHRoaXNba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICB0aGlzW2tTZXJ2ZXJOYW1lXSA9IG51bGxcbiAgICB0aGlzW2tMb2NhbEFkZHJlc3NdID0gbG9jYWxBZGRyZXNzICE9IG51bGwgPyBsb2NhbEFkZHJlc3MgOiBudWxsXG4gICAgdGhpc1trUmVzdW1pbmddID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gMCAvLyAwLCBpZGxlLCAxLCBzY2hlZHVsZWQsIDIgcmVzdW1pbmdcbiAgICB0aGlzW2tIb3N0SGVhZGVyXSA9IGBob3N0OiAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31cXHJcXG5gXG4gICAgdGhpc1trQm9keVRpbWVvdXRdID0gYm9keVRpbWVvdXQgIT0gbnVsbCA/IGJvZHlUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tIZWFkZXJzVGltZW91dF0gPSBoZWFkZXJzVGltZW91dCAhPSBudWxsID8gaGVhZGVyc1RpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba1N0cmljdENvbnRlbnRMZW5ndGhdID0gc3RyaWN0Q29udGVudExlbmd0aCA9PSBudWxsID8gdHJ1ZSA6IHN0cmljdENvbnRlbnRMZW5ndGhcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trTWF4UmVxdWVzdHNdID0gbWF4UmVxdWVzdHNQZXJDbGllbnRcbiAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICB0aGlzW2tNYXhSZXNwb25zZVNpemVdID0gbWF4UmVzcG9uc2VTaXplID4gLTEgPyBtYXhSZXNwb25zZVNpemUgOiAtMVxuICAgIHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPSAnaDEnXG5cbiAgICAvLyBIVFRQLzJcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9ICFhbGxvd0gyXG4gICAgICA/IG51bGxcbiAgICAgIDoge1xuICAgICAgICAvLyBzdHJlYW1zOiBudWxsLCAvLyBGaXhlZCBxdWV1ZSBvZiBzdHJlYW1zIC0gRm9yIGZ1dHVyZSBzdXBwb3J0IG9mIGBwdXNoYFxuICAgICAgICAgIG9wZW5TdHJlYW1zOiAwLCAvLyBLZWVwIHRyYWNrIG9mIHRoZW0gdG8gZGVjaWRlIHdldGhlciBvciBub3QgdW5yZWYgdGhlIHNlc3Npb25cbiAgICAgICAgICBtYXhDb25jdXJyZW50U3RyZWFtczogbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICAgICAgfVxuICAgIHRoaXNba0hvc3RdID0gYCR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfWBcblxuICAgIC8vIGtRdWV1ZSBpcyBidWlsdCB1cCBvZiAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieVxuICAgIC8vIHRoZSBrUnVubmluZ0lkeCBhbmQga1BlbmRpbmdJZHggaW5kaWNlcy5cbiAgICAvLyB8ICAgY29tcGxldGUgICB8ICAgcnVubmluZyAgIHwgICBwZW5kaW5nICAgfFxuICAgIC8vICAgICAgICAgICAgICAgIF4ga1J1bm5pbmdJZHggXiBrUGVuZGluZ0lkeCBeIGtRdWV1ZS5sZW5ndGhcbiAgICAvLyBrUnVubmluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHJ1bm5pbmcgZWxlbWVudC5cbiAgICAvLyBrUGVuZGluZ0lkeCBwb2ludHMgdG8gdGhlIGZpcnN0IHBlbmRpbmcgZWxlbWVudC5cbiAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYXN0IHF1ZXVlIHdpdGggYW4gYW1vcnRpemVkXG4gICAgLy8gdGltZSBvZiBPKDEpLlxuXG4gICAgdGhpc1trUXVldWVdID0gW11cbiAgICB0aGlzW2tSdW5uaW5nSWR4XSA9IDBcbiAgICB0aGlzW2tQZW5kaW5nSWR4XSA9IDBcbiAgfVxuXG4gIGdldCBwaXBlbGluaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGlwZWxpbmluZ11cbiAgfVxuXG4gIHNldCBwaXBlbGluaW5nICh2YWx1ZSkge1xuICAgIHRoaXNba1BpcGVsaW5pbmddID0gdmFsdWVcbiAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1BlbmRpbmdJZHhdXG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BlbmRpbmdJZHhdIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trUXVldWVdLmxlbmd0aCAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gISF0aGlzW2tTb2NrZXRdICYmICF0aGlzW2tDb25uZWN0aW5nXSAmJiAhdGhpc1trU29ja2V0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tTb2NrZXRdXG4gICAgcmV0dXJuIChcbiAgICAgIChzb2NrZXQgJiYgKHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tCbG9ja2luZ10pKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49ICh0aGlzW2tQaXBlbGluaW5nXSB8fCAxKSkgfHxcbiAgICAgIHRoaXNba1BlbmRpbmddID4gMFxuICAgIClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZTogb25seSB1c2VkIGZvciB0ZXN0ICovXG4gIFtrQ29ubmVjdF0gKGNiKSB7XG4gICAgY29ubmVjdCh0aGlzKVxuICAgIHRoaXMub25jZSgnY29ubmVjdCcsIGNiKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBvcmlnaW4gPSBvcHRzLm9yaWdpbiB8fCB0aGlzW2tVcmxdLm9yaWdpblxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXNba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgICAgID8gUmVxdWVzdFtrSFRUUDJCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgICAgIDogUmVxdWVzdFtrSFRUUDFCdWlsZFJlcXVlc3RdKG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJlc3VtZSwgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSAmJiB0aGlzW2tOZWVkRHJhaW5dICE9PSAyICYmIHRoaXNba0J1c3ldKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gMlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dIDwgMlxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIC8vIFRPRE86IGZvciBIMiB3ZSBuZWVkIHRvIGdyYWNlZnVsbHkgZmx1c2ggdGhlIHJlbWFpbmluZyBlbnF1ZXVlZFxuICAgIC8vIHJlcXVlc3QgYW5kIGNsb3NlIGVhY2ggc3RyZWFtLlxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW2tTaXplXSkge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXNba1F1ZXVlXS5zcGxpY2UodGhpc1trUGVuZGluZ0lkeF0pXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba0hUVFAyU2Vzc2lvbl0sIGVycilcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICAgICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXNba1NvY2tldF0pIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XS5vbignY2xvc2UnLCBjYWxsYmFjayksIGVycilcbiAgICAgIH1cblxuICAgICAgcmVzdW1lKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJGcmFtZUVycm9yICh0eXBlLCBjb2RlLCBpZCkge1xuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuXG4gIGlmIChpZCA9PT0gMCkge1xuICAgIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuICAgIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnKSlcbn1cblxuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRdXG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJHT0FXQVlcIiBmcmFtZSByZWNlaXZlZCB3aXRoIGNvZGUgJHtjb2RlfWApXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KHRoaXNba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JyxcbiAgICBjbGllbnRba1VybF0sXG4gICAgW2NsaWVudF0sXG4gICAgZXJyXG4gIClcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2xsaHR0cC9jb25zdGFudHMnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCBFTVBUWV9CVUYgPSBCdWZmZXIuYWxsb2MoMClcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpIDogdW5kZWZpbmVkXG5cbiAgbGV0IG1vZFxuICB0cnkge1xuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20ocmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtb2QsIHtcbiAgICBlbnY6IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG4gICAgICB3YXNtX29uX3VybDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX3N0YXR1czogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vblN0YXR1cyhuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfYmVnaW46IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQmVnaW4oKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfZmllbGQ6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJGaWVsZChuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl92YWx1ZTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlclZhbHVlKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyc19jb21wbGV0ZTogKHAsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyc0NvbXBsZXRlKHN0YXR1c0NvZGUsIEJvb2xlYW4odXBncmFkZSksIEJvb2xlYW4oc2hvdWxkS2VlcEFsaXZlKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fYm9keTogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkJvZHkobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2NvbXBsZXRlOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKCkgfHwgMFxuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuICAgIH1cbiAgfSlcbn1cblxubGV0IGxsaHR0cEluc3RhbmNlID0gbnVsbFxubGV0IGxsaHR0cFByb21pc2UgPSBsYXp5bGxodHRwKClcbmxsaHR0cFByb21pc2UuY2F0Y2goKVxuXG5sZXQgY3VycmVudFBhcnNlciA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJTaXplID0gMFxubGV0IGN1cnJlbnRCdWZmZXJQdHIgPSBudWxsXG5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDFcbmNvbnN0IFRJTUVPVVRfQk9EWSA9IDJcbmNvbnN0IFRJTUVPVVRfSURMRSA9IDNcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0ICh2YWx1ZSwgdHlwZSkge1xuICAgIHRoaXMudGltZW91dFR5cGUgPSB0eXBlXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSkge1xuICAgICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZXJzLnNldFRpbWVvdXQob25QYXJzZXJUaW1lb3V0LCB2YWx1ZSwgdGhpcylcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHRoaXMudGltZW91dC51bnJlZikge1xuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZW91dFZhbHVlID0gdmFsdWVcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGltZXJzLmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpXG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gIH1cblxuICBvblN0YXR1cyAoYnVmKSB7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gYnVmLnRvU3RyaW5nKClcbiAgfVxuXG4gIG9uTWVzc2FnZUJlZ2luICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICB9XG5cbiAgb25IZWFkZXJGaWVsZCAoYnVmKSB7XG4gICAgY29uc3QgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgb25IZWFkZXJWYWx1ZSAoYnVmKSB7XG4gICAgbGV0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICAgIGxlbiArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLmhlYWRlcnNbbGVuIC0gMl1cbiAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aGlzLmtlZXBBbGl2ZSArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTAgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24gKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoc29ja2V0ID09PSBjbGllbnRba1NvY2tldF0pXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcbiAgICBhc3NlcnQocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IG51bGxcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBzb2NrZXQudW5zaGlmdChoZWFkKVxuXG4gICAgc29ja2V0W2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHNvY2tldFtrUGFyc2VyXSA9IG51bGxcblxuICAgIHNvY2tldFtrQ2xpZW50XSA9IG51bGxcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcbiAgICBzb2NrZXRcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmICh0aGlzLnNob3VsZEtlZXBBbGl2ZSAmJiBjbGllbnRba1BpcGVsaW5pbmddKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUaW1lb3V0ID0gdGhpcy5rZWVwQWxpdmUgPyB1dGlsLnBhcnNlS2VlcEFsaXZlVGltZW91dCh0aGlzLmtlZXBBbGl2ZSkgOiBudWxsXG5cbiAgICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IE1hdGgubWluKFxuICAgICAgICAgIGtlZXBBbGl2ZVRpbWVvdXQgLSBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRdLFxuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlTWF4VGltZW91dF1cbiAgICAgICAgKVxuICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGltZW91dFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSBjbGllbnRba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdG9wIG1vcmUgcmVxdWVzdHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkLlxuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcGF1c2UgPSByZXF1ZXN0Lm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCB0aGlzLnJlc3VtZSwgc3RhdHVzVGV4dCkgPT09IGZhbHNlXG5cbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuIDFcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdXNlID8gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCA6IDBcbiAgfVxuXG4gIG9uQm9keSAoYnVmKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgbWF4UmVzcG9uc2VTaXplIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDIwMClcblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgPiAtMSAmJiB0aGlzLmJ5dGVzUmVhZCArIGJ1Zi5sZW5ndGggPiBtYXhSZXNwb25zZVNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzUmVhZCArPSBidWYubGVuZ3RoXG5cbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoYnVmKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfVxuICB9XG5cbiAgb25NZXNzYWdlQ29tcGxldGUgKCkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIHVwZ3JhZGUsIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGgsIGJ5dGVzUmVhZCwgc2hvdWxkS2VlcEFsaXZlIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCAmJiAoIXN0YXR1c0NvZGUgfHwgc2hvdWxkS2VlcEFsaXZlKSkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGxsaHR0cD8gKi9cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiBjb250ZW50TGVuZ3RoICYmIGJ5dGVzUmVhZCAhPT0gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKGhlYWRlcnMpXG5cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgaWYgKHNvY2tldFtrV3JpdGluZ10pIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjbGllbnRba1J1bm5pbmddLCAwKVxuICAgICAgLy8gUmVzcG9uc2UgY29tcGxldGVkIGJlZm9yZSByZXF1ZXN0LlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmICghc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKHNvY2tldFtrUmVzZXRdICYmIGNsaWVudFtrUnVubmluZ10gPT09IDApIHtcbiAgICAgIC8vIERlc3Ryb3kgc29ja2V0IG9uY2UgYWxsIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gVGhlIHJlcXVlc3QgYXQgdGhlIHRhaWwgb2YgdGhlIHBpcGVsaW5lIGlzIHRoZSBvbmVcbiAgICAgIC8vIHRoYXQgcmVxdWVzdGVkIHJlc2V0IGFuZCBubyBmdXJ0aGVyIHJlcXVlc3RzIHNob3VsZFxuICAgICAgLy8gaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGVuLlxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddID09PSAxKSB7XG4gICAgICAvLyBXZSBtdXN0IHdhaXQgYSBmdWxsIGV2ZW50IGxvb3AgY3ljbGUgdG8gcmV1c2UgdGhpcyBzb2NrZXQgdG8gbWFrZSBzdXJlXG4gICAgICAvLyB0aGF0IG5vbi1zcGVjIGNvbXBsaWFudCBzZXJ2ZXJzIGFyZSBub3QgY2xvc2luZyB0aGUgY29ubmVjdGlvbiBldmVuIGlmIHRoZXlcbiAgICAgIC8vIHNhaWQgdGhleSB3b24ndC5cbiAgICAgIHNldEltbWVkaWF0ZShyZXN1bWUsIGNsaWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb25QYXJzZXJUaW1lb3V0IChwYXJzZXIpIHtcbiAgY29uc3QgeyBzb2NrZXQsIHRpbWVvdXRUeXBlLCBjbGllbnQgfSA9IHBhcnNlclxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXJzZXIucGF1c2VkLCAnY2Fubm90IGJlIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBoZWFkZXJzJylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBIZWFkZXJzVGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpIHtcbiAgICBpZiAoIXBhcnNlci5wYXVzZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBCb2R5VGltZW91dEVycm9yKCkpXG4gICAgfVxuICB9IGVsc2UgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0lETEUpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJiBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0pXG4gICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc29ja2V0IGlkbGUgdGltZW91dCcpKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0UmVhZGFibGUgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG4gIGlmIChwYXJzZXIpIHtcbiAgICBwYXJzZXIucmVhZE1vcmUoKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycikge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICAvLyBPbiBNYWMgT1MsIHdlIGdldCBhbiBFQ09OTlJFU0VUIGV2ZW4gaWYgdGhlcmUgaXMgYSBmdWxsIGJvZHkgdG8gYmUgZm9yd2FyZGVkXG4gICAgLy8gdG8gdGhlIHVzZXIuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRUNPTk5SRVNFVCcgJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZvciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHRoaXNba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkVycm9yIChjbGllbnQsIGVycikge1xuICBpZiAoXG4gICAgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyAmJlxuICAgIGVyci5jb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnXG4gICkge1xuICAgIC8vIEVycm9yIGlzIG5vdCBjYXVzZWQgYnkgcnVubmluZyByZXF1ZXN0IGFuZCBub3QgYSByZWNvdmVyYWJsZVxuICAgIC8vIHNvY2tldCBlcnJvci5cblxuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmdJZHhdID09PSBjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFbmQgKCkge1xuICBjb25zdCB7IFtrUGFyc2VyXTogcGFyc2VyLCBba0NsaWVudF06IGNsaWVudCB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gIT09ICdoMicpIHtcbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gxJyAmJiBwYXJzZXIpIHtcbiAgICBpZiAoIXRoaXNba0Vycm9yXSAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgIH1cblxuICAgIHRoaXNba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGVyciA9IHRoaXNba0Vycm9yXSB8fCBuZXcgU29ja2V0RXJyb3IoJ2Nsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSlcblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJykge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrU29ja2V0XSlcblxuICBsZXQgeyBob3N0LCBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIC8vIFJlc29sdmUgaXB2NlxuICBpZiAoaG9zdG5hbWVbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3RuYW1lLmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgY29uc3QgaXAgPSBob3N0bmFtZS5zdWJzdHJpbmcoMSwgaWR4KVxuXG4gICAgYXNzZXJ0KG5ldC5pc0lQKGlwKSlcbiAgICBob3N0bmFtZSA9IGlwXG4gIH1cblxuICBjbGllbnRba0Nvbm5lY3RpbmddID0gdHJ1ZVxuXG4gIGlmIChjaGFubmVscy5iZWZvcmVDb25uZWN0Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5wdWJsaXNoKHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSksIG5ldyBDbGllbnREZXN0cm95ZWRFcnJvcigpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgY29uc3QgaXNIMiA9IHNvY2tldC5hbHBuUHJvdG9jb2wgPT09ICdoMidcbiAgICBpZiAoaXNIMikge1xuICAgICAgaWYgKCFoMkV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgICBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgICAgY29kZTogJ1VORElDSS1IMidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGh0dHAyLmNvbm5lY3QoY2xpZW50W2tVcmxdLCB7XG4gICAgICAgIGNyZWF0ZUNvbm5lY3Rpb246ICgpID0+IHNvY2tldCxcbiAgICAgICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXS5tYXhDb25jdXJyZW50U3RyZWFtc1xuICAgICAgfSlcblxuICAgICAgY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID0gJ2gyJ1xuICAgICAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICAgICAgc2Vzc2lvbltrU29ja2V0XSA9IHNvY2tldFxuICAgICAgc2Vzc2lvbi5vbignZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZnJhbWVFcnJvcicsIG9uSHR0cDJGcmFtZUVycm9yKVxuICAgICAgc2Vzc2lvbi5vbignZW5kJywgb25IdHRwMlNlc3Npb25FbmQpXG4gICAgICBzZXNzaW9uLm9uKCdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICAgICAgc2Vzc2lvbi5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgc2Vzc2lvbi51bnJlZigpXG5cbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICAgIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFsbGh0dHBJbnN0YW5jZSkge1xuICAgICAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICAgICAgbGxodHRwUHJvbWlzZSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IGZhbHNlXG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1BhcnNlcl0gPSBuZXcgUGFyc2VyKGNsaWVudCwgc29ja2V0LCBsbGh0dHBJbnN0YW5jZSlcbiAgICB9XG5cbiAgICBzb2NrZXRba0NvdW50ZXJdID0gMFxuICAgIHNvY2tldFtrTWF4UmVxdWVzdHNdID0gY2xpZW50W2tNYXhSZXF1ZXN0c11cbiAgICBzb2NrZXRba0NsaWVudF0gPSBjbGllbnRcbiAgICBzb2NrZXRba0Vycm9yXSA9IG51bGxcblxuICAgIHNvY2tldFxuICAgICAgLm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAub24oJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5vbignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uRXJyb3IoY2xpZW50LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcbiAgfVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmZ1bmN0aW9uIGVtaXREcmFpbiAoY2xpZW50KSB7XG4gIGNsaWVudFtrTmVlZERyYWluXSA9IDBcbiAgY2xpZW50LmVtaXQoJ2RyYWluJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbn1cblxuZnVuY3Rpb24gcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgaWYgKGNsaWVudFtrUmVzdW1pbmddID09PSAyKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDJcblxuICBfcmVzdW1lKGNsaWVudCwgc3luYylcbiAgY2xpZW50W2tSZXN1bWluZ10gPSAwXG5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPiAyNTYpIHtcbiAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoMCwgY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBjbGllbnRba1BlbmRpbmdJZHhdIC09IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1J1bm5pbmdJZHhdID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIF9yZXN1bWUgKGNsaWVudCwgc3luYykge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nsb3NlZFJlc29sdmVdICYmICFjbGllbnRba1NpemVdKSB7XG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICAgIGlmIChzb2NrZXQgJiYgIXNvY2tldC5kZXN0cm95ZWQgJiYgc29ja2V0LmFscG5Qcm90b2NvbCAhPT0gJ2gyJykge1xuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKCFzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQudW5yZWYpIHtcbiAgICAgICAgICBzb2NrZXQudW5yZWYoKVxuICAgICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNvY2tldFtrTm9SZWZdICYmIHNvY2tldC5yZWYpIHtcbiAgICAgICAgc29ja2V0LnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9JRExFKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdLCBUSU1FT1VUX0lETEUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgc29ja2V0W2tQYXJzZXJdLnN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSAhPT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgICAgY29uc3QgaGVhZGVyc1RpbWVvdXQgPSByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgICAgID8gcmVxdWVzdC5oZWFkZXJzVGltZW91dFxuICAgICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGhlYWRlcnNUaW1lb3V0LCBUSU1FT1VUX0hFQURFUlMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdERyYWluLCBjbGllbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0RHJhaW4oY2xpZW50KVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tQZW5kaW5nXSA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPj0gKGNsaWVudFtrUGlwZWxpbmluZ10gfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcblxuICAgICAgaWYgKHNvY2tldCAmJiBzb2NrZXQuc2VydmVybmFtZSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzb2NrZXQgJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgIXJlcXVlc3QuaWRlbXBvdGVudCkge1xuICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgKHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSkge1xuICAgICAgLy8gRG9uJ3QgZGlzcGF0Y2ggYW4gdXBncmFkZSB1bnRpbCBhbGwgcHJlY2VkaW5nIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkLlxuICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgLy8gcmVxdWVzdCBoYXMgY29tcGxldGVkLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAodXRpbC5pc1N0cmVhbShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNBc3luY0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpKSB7XG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAvLyBhcmUgaW5mbGlnaHQgYW5kIGluZGlyZWN0bHkgZXJyb3IgdGhvc2UgYXMgd2VsbC5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGRvZXNuJ3QgaGFwcGVuIGJ5IHdhaXRpbmcgZm9yIGluZmxpZ2h0XG4gICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IG5vIG90aGVyIHJlcXVlc3RzIGFyZSBpbmZsaWdodCBhbmRcbiAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3QuYWJvcnRlZCAmJiB3cml0ZShjbGllbnQsIHJlcXVlc3QpKSB7XG4gICAgICBjbGllbnRba1BlbmRpbmdJZHhdKytcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUGVuZGluZ0lkeF0sIDEpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbmZ1bmN0aW9uIHNob3VsZFNlbmRDb250ZW50TGVuZ3RoIChtZXRob2QpIHtcbiAgcmV0dXJuIG1ldGhvZCAhPT0gJ0dFVCcgJiYgbWV0aG9kICE9PSAnSEVBRCcgJiYgbWV0aG9kICE9PSAnT1BUSU9OUycgJiYgbWV0aG9kICE9PSAnVFJBQ0UnICYmIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG59XG5cbmZ1bmN0aW9uIHdyaXRlIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIHdyaXRlSDIoY2xpZW50LCBjbGllbnRba0hUVFAyU2Vzc2lvbl0sIHJlcXVlc3QpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgaGVhZGVycywgYmxvY2tpbmcsIHJlc2V0IH0gPSByZXF1ZXN0XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gYm9keUxlbmd0aFxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgJiYgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignYWJvcnRlZCcpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChtZXRob2QgPT09ICdIRUFEJykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvaXNzdWVzLzI1OFxuICAgIC8vIENsb3NlIGFmdGVyIGEgSEVBRCByZXF1ZXN0IHRvIGludGVyb3Agd2l0aCBtaXNiZWhhdmluZyBzZXJ2ZXJzXG4gICAgLy8gdGhhdCBtYXkgc2VuZCBhIGJvZHkgaW4gdGhlIHJlc3BvbnNlLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAodXBncmFkZSB8fCBtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIC8vIE9uIENPTk5FQ1Qgb3IgdXBncmFkZSwgYmxvY2sgcGlwZWxpbmUgZnJvbSBkaXNwYXRjaGluZyBmdXJ0aGVyXG4gICAgLy8gcmVxdWVzdHMgb24gdGhpcyBjb25uZWN0aW9uLlxuXG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAocmVzZXQgIT0gbnVsbCkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gcmVzZXRcbiAgfVxuXG4gIGlmIChjbGllbnRba01heFJlcXVlc3RzXSAmJiBzb2NrZXRba0NvdW50ZXJdKysgPj0gY2xpZW50W2tNYXhSZXF1ZXN0c10pIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChibG9ja2luZykge1xuICAgIHNvY2tldFtrQmxvY2tpbmddID0gdHJ1ZVxuICB9XG5cbiAgbGV0IGhlYWRlciA9IGAke21ldGhvZH0gJHtwYXRofSBIVFRQLzEuMVxcclxcbmBcblxuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgaGVhZGVyICs9IGBob3N0OiAke2hvc3R9XFxyXFxuYFxuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSBjbGllbnRba0hvc3RIZWFkZXJdXG4gIH1cblxuICBpZiAodXBncmFkZSkge1xuICAgIGhlYWRlciArPSBgY29ubmVjdGlvbjogdXBncmFkZVxcclxcbnVwZ3JhZGU6ICR7dXBncmFkZX1cXHJcXG5gXG4gIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSAmJiAhc29ja2V0W2tSZXNldF0pIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGtlZXAtYWxpdmVcXHJcXG4nXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBjbG9zZVxcclxcbidcbiAgfVxuXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgaGVhZGVyICs9IGhlYWRlcnNcbiAgfVxuXG4gIGlmIChjaGFubmVscy5zZW5kSGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNlbmRIZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0LCBoZWFkZXJzOiBoZWFkZXIsIHNvY2tldCB9KVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICBpZiAoIWJvZHkgfHwgYm9keUxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgc29ja2V0LmNvcmsoKVxuICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICBzb2NrZXQudW5jb3JrKClcbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keTogYm9keS5zdHJlYW0oKSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKHsgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHNlc3Npb24sIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGV4cGVjdENvbnRpbnVlLCBzaWduYWwsIGhlYWRlcnM6IHJlcUhlYWRlcnMgfSA9IHJlcXVlc3RcblxuICBsZXQgaGVhZGVyc1xuICBpZiAodHlwZW9mIHJlcUhlYWRlcnMgPT09ICdzdHJpbmcnKSBoZWFkZXJzID0gUmVxdWVzdFtrSFRUUDJDb3B5SGVhZGVyc10ocmVxSGVhZGVycy50cmltKCkpXG4gIGVsc2UgaGVhZGVycyA9IHJlcUhlYWRlcnNcblxuICBpZiAodXBncmFkZSkge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUT0RPKEhUVFAvMik6IFNob3VsZCB3ZSBjYWxsIG9uQ29ubmVjdCBpbW1lZGlhdGVseSBvciBvbiBzdHJlYW0gcmVhZHkgZXZlbnQ/XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuICBjb25zdCBoMlN0YXRlID0gY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV1cblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9BVVRIT1JJVFldID0gaG9zdCB8fCBjbGllbnRba0hvc3RdXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBzZXNzaW9uLnJlZigpXG4gICAgLy8gd2UgYXJlIGFscmVhZHkgY29ubmVjdGVkLCBzdHJlYW1zIGFyZSBwZW5kaW5nLCBmaXJzdCByZXF1ZXN0XG4gICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgc3RyZWFtLiBXZSB0cmlnZ2VyIGEgcmVxdWVzdCB0byBjcmVhdGUgdGhlIHN0cmVhbSBhbmQgd2FpdCB1bnRpbFxuICAgIC8vIGByZWFkeWAgZXZlbnQgaXMgdHJpZ2dlcmVkXG4gICAgLy8gV2UgZGlzYWJsZWQgZW5kU3RyZWFtIHRvIGFsbG93IHRoZSB1c2VyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW1cbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IGZhbHNlLCBzaWduYWwgfSlcblxuICAgIGlmIChzdHJlYW0uaWQgJiYgIXN0cmVhbS5wZW5kaW5nKSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm9uY2UoJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgICByZXF1ZXN0Lm9uVXBncmFkZShudWxsLCBudWxsLCBzdHJlYW0pXG4gICAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHNlc3Npb24udW5yZWYoKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1NDAjc2VjdGlvbi04LjNcbiAgLy8gOnBhdGggYW5kIDpzY2hlbWUgaGVhZGVycyBtdXN0IGJlIG9taXRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwIHx8ICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9IG51bGwgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGFzc2VydChib2R5LCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSF0gPSBgJHtjb250ZW50TGVuZ3RofWBcbiAgfVxuXG4gIHNlc3Npb24ucmVmKClcblxuICBjb25zdCBzaG91bGRFbmRTdHJlYW0gPSBtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc2V2ZXJhbCBzdHJlYW1zIG9wZW5cbiAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCByZWFsSGVhZGVycywgc3RyZWFtLnJlc3VtZS5iaW5kKHN0cmVhbSksICcnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgcmVxdWVzdC5vbkNvbXBsZXRlKFtdKVxuICB9KVxuXG4gIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgaWYgKGgyU3RhdGUub3BlblN0cmVhbXMgPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZnJhbWVFcnJvcicsICh0eXBlLCBjb2RlKSA9PiB7XG4gICAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIC8vIHN0cmVhbS5vbignYWJvcnRlZCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgYWJvcnRlZFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndGltZW91dCcsICgpID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdGltZW91dFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigncHVzaCcsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9yIHB1c2hcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RyYWlsZXJzJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRyYWlsZXJzXG4gIC8vIH0pXG5cbiAgcmV0dXJuIHRydWVcblxuICBmdW5jdGlvbiB3cml0ZUJvZHlIMiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGFzc2VydGlvbiAqL1xuICAgIGlmICghYm9keSkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc3RyZWFtLmNvcmsoKVxuICAgICAgc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBzdHJlYW0udW5jb3JrKClcbiAgICAgIHN0cmVhbS5lbmQoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBib2R5OiBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICAgIGhlYWRlcjogJydcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYih7XG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgd3JpdGVTdHJlYW0oe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICAgIGNvbnN0IHBpcGUgPSBwaXBlbGluZShcbiAgICAgIGJvZHksXG4gICAgICBoMnN0cmVhbSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgICAgdXRpbC5kZXN0cm95KGgyc3RyZWFtLCBlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcblxuICAgIHBpcGUub24oJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgIHBpcGUub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgcGlwZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgICB1dGlsLmRlc3Ryb3kocGlwZSlcbiAgICB9KVxuXG4gICAgZnVuY3Rpb24gb25QaXBlRGF0YSAoY2h1bmspIHtcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcblxuICBjb25zdCBvbkRhdGEgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykgJiYgdGhpcy5wYXVzZSkge1xuICAgICAgICB0aGlzLnBhdXNlKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLCBlcnIpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICAgIGJvZHkucmVzdW1lKClcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gb25GaW5pc2hlZChlcnIpKVxuICB9XG4gIGNvbnN0IG9uRmluaXNoZWQgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmaW5pc2hlZCA9IHRydWVcblxuICAgIGFzc2VydChzb2NrZXQuZGVzdHJveWVkIHx8IChzb2NrZXRba1dyaXRpbmddICYmIGNsaWVudFtrUnVubmluZ10gPD0gMSkpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2Vycm9yJywgb25GaW5pc2hlZClcblxuICAgIGJvZHlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkFib3J0KVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIGNvbnN0IGlzSDIgPSBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMidcbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGNvbnRlbnRMZW5ndGggIT09IGJvZHkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYXdhaXQgYm9keS5hcnJheUJ1ZmZlcigpKVxuXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGgyc3RyZWFtLmNvcmsoKVxuICAgICAgaDJzdHJlYW0ud3JpdGUoYnVmZmVyKVxuICAgICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0LmNvcmsoKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZGVzdHJveShpc0gyID8gaDJzdHJlYW0gOiBzb2NrZXQsIGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgICB0cnkge1xuICAgICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gaDJzdHJlYW0ud3JpdGUoY2h1bmspXG4gICAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoMnN0cmVhbS5kZXN0cm95KGVycilcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICAgIGgyc3RyZWFtLmVuZCgpXG4gICAgICBoMnN0cmVhbVxuICAgICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdyaXRlci53cml0ZShjaHVuaykpIHtcbiAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZW5kKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldFxuICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICB9XG59XG5cbmNsYXNzIEFzeW5jV3JpdGVyIHtcbiAgY29uc3RydWN0b3IgKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSkge1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGhcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMFxuICAgIHRoaXMuZXhwZWN0c1BheWxvYWQgPSBleHBlY3RzUGF5bG9hZFxuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gdHJ1ZVxuICB9XG5cbiAgd3JpdGUgKGNodW5rKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0gPSB0aGlzXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGxlbiA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGNodW5rKVxuICAgIGlmICghbGVuKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFdlIHNob3VsZCBkZWZlciB3cml0aW5nIGNodW5rcy5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gKyBsZW4gPiBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgfVxuXG4gICAgc29ja2V0LmNvcmsoKVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn10cmFuc2Zlci1lbmNvZGluZzogY2h1bmtlZFxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoYFxcclxcbiR7bGVuLnRvU3RyaW5nKDE2KX1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBsZW5cblxuICAgIGNvbnN0IHJldCA9IHNvY2tldC53cml0ZShjaHVuaylcblxuICAgIHNvY2tldC51bmNvcmsoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuXG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZW5kICgpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIsIHJlcXVlc3QgfSA9IHRoaXNcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmIChleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGluIGEgcmVxdWVzdCBtZXNzYWdlIHdoZW5cbiAgICAgICAgLy8gbm8gVHJhbnNmZXItRW5jb2RpbmcgaXMgc2VudCBhbmQgdGhlIHJlcXVlc3QgbWV0aG9kIGRlZmluZXMgYSBtZWFuaW5nXG4gICAgICAgIC8vIGZvciBhbiBlbmNsb3NlZCBwYXlsb2FkIGJvZHkuXG5cbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZSgnXFxyXFxuMFxcclxcblxcclxcbicsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiAhPT0gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4ndXNlIHN0cmljdCdcblxuLy8gRXh0cmFjdGVkIGZyb20gbm9kZS9saWIvaW50ZXJuYWwvZml4ZWRfcXVldWUuanNcblxuLy8gQ3VycmVudGx5IG9wdGltYWwgcXVldWUgc2l6ZSwgdGVzdGVkIG9uIFY4IDYuMCAtIDYuNi4gTXVzdCBiZSBwb3dlciBvZiB0d28uXG5jb25zdCBrU2l6ZSA9IDIwNDg7XG5jb25zdCBrTWFzayA9IGtTaXplIC0gMTtcblxuLy8gVGhlIEZpeGVkUXVldWUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgZml4ZWQtc2l6ZVxuLy8gY2lyY3VsYXIgYnVmZmVycy4gSXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczpcbi8vXG4vLyAgaGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsXG4vLyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbi8vICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyA8LS0tLS1cXCAgICAgICArLS0tLS0tLS0tLS0rIDwtLS0tLS1cXCAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgIFxcLS0tLS0gfCAgIG5leHQgICAgfCAgICAgICAgIFxcLS0tLS0tLSB8ICAgbmV4dCAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfCA8LS0gdG9wICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIE9yLCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBjaXJjdWxhciBidWZmZXIsIGl0IGxvb2tzIHNvbWV0aGluZ1xuLy8gbGlrZSBlaXRoZXIgb2YgdGhlc2U6XG4vL1xuLy8gIGhlYWQgICB0YWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCAgIHRhaWxcbi8vICAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfFxuLy8gICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICB2XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW251bGxdICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgICAgICAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBBZGRpbmcgYSB2YWx1ZSBtZWFucyBtb3ZpbmcgYHRvcGAgZm9yd2FyZCBieSBvbmUsIHJlbW92aW5nIG1lYW5zXG4vLyBtb3ZpbmcgYGJvdHRvbWAgZm9yd2FyZCBieSBvbmUuIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQsIHRoZSBxdWV1ZVxuLy8gd3JhcHMgYXJvdW5kLlxuLy9cbi8vIFdoZW4gYHRvcCA9PT0gYm90dG9tYCB0aGUgY3VycmVudCBxdWV1ZSBpcyBlbXB0eSBhbmQgd2hlblxuLy8gYHRvcCArIDEgPT09IGJvdHRvbWAgaXQncyBmdWxsLiBUaGlzIHdhc3RlcyBhIHNpbmdsZSBzcGFjZSBvZiBzdG9yYWdlXG4vLyBidXQgYWxsb3dzIG11Y2ggcXVpY2tlciBjaGVja3MuXG5cbmNsYXNzIEZpeGVkQ2lyY3VsYXJCdWZmZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJvdHRvbSA9IDA7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIHRoaXMubGlzdCA9IG5ldyBBcnJheShrU2l6ZSk7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGlzRnVsbCgpIHtcbiAgICByZXR1cm4gKCh0aGlzLnRvcCArIDEpICYga01hc2spID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIHRoaXMubGlzdFt0aGlzLnRvcF0gPSBkYXRhO1xuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiBrTWFzaztcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gdGhpcy5saXN0W3RoaXMuYm90dG9tXTtcbiAgICBpZiAobmV4dEl0ZW0gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHRoaXMubGlzdFt0aGlzLmJvdHRvbV0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ib3R0b20gPSAodGhpcy5ib3R0b20gKyAxKSAmIGtNYXNrO1xuICAgIHJldHVybiBuZXh0SXRlbTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkLmlzRW1wdHkoKTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIGlmICh0aGlzLmhlYWQuaXNGdWxsKCkpIHtcbiAgICAgIC8vIEhlYWQgaXMgZnVsbDogQ3JlYXRlcyBhIG5ldyBxdWV1ZSwgc2V0cyB0aGUgb2xkIHF1ZXVlJ3MgYC5uZXh0YCB0byBpdCxcbiAgICAgIC8vIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgbWFpbiBxdWV1ZS5cbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0ID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgICB9XG4gICAgdGhpcy5oZWFkLnB1c2goZGF0YSk7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50YWlsO1xuICAgIGNvbnN0IG5leHQgPSB0YWlsLnNoaWZ0KCk7XG4gICAgaWYgKHRhaWwuaXNFbXB0eSgpICYmIHRhaWwubmV4dCAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW5vdGhlciBxdWV1ZSwgaXQgZm9ybXMgdGhlIG5ldyB0YWlsLlxuICAgICAgdGhpcy50YWlsID0gdGFpbC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufTtcbiIsICJjb25zdCB7IGtGcmVlLCBrQ29ubmVjdGVkLCBrUGVuZGluZywga1F1ZXVlZCwga1J1bm5pbmcsIGtTaXplIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBrUG9vbCA9IFN5bWJvbCgncG9vbCcpXG5cbmNsYXNzIFBvb2xTdGF0cyB7XG4gIGNvbnN0cnVjdG9yIChwb29sKSB7XG4gICAgdGhpc1trUG9vbF0gPSBwb29sXG4gIH1cblxuICBnZXQgY29ubmVjdGVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIGdldCBmcmVlICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba0ZyZWVdXG4gIH1cblxuICBnZXQgcGVuZGluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tQZW5kaW5nXVxuICB9XG5cbiAgZ2V0IHF1ZXVlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tRdWV1ZWRdXG4gIH1cblxuICBnZXQgcnVubmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tSdW5uaW5nXVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrU2l6ZV1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xTdGF0c1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IEZpeGVkUXVldWUgPSByZXF1aXJlKCcuL25vZGUvZml4ZWQtcXVldWUnKVxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSwga1J1bm5pbmcsIGtQZW5kaW5nLCBrUXVldWVkLCBrQnVzeSwga0ZyZWUsIGtVcmwsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpc1trUXVldWVdLnNoaWZ0KClcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaXRlbS5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgICAgdGhpc1trT25EcmFpbl0oY2xpZW50W2tVcmxdLCBbdGhpcywgY2xpZW50XSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgW2tSZW1vdmVDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnQuY2xvc2UoKCkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZihjbGllbnQpXG4gICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzW2tOZWVkRHJhaW5dID0gdGhpc1trQ2xpZW50c10uc29tZShkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrQ29ubmVjdGlvbnMgPSBTeW1ib2woJ2Nvbm5lY3Rpb25zJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBjb25uZWN0aW9ucyxcbiAgICBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksXG4gICAgY29ubmVjdCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICB0bHMsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgc29ja2V0UGF0aCxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICBhbGxvd0gyLFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGNvbm5lY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdGlvbnMpIHx8IGNvbm5lY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9ucycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7XG4gICAgICAgIC4uLnRscyxcbiAgICAgICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgICAgIGFsbG93SDIsXG4gICAgICAgIHNvY2tldFBhdGgsXG4gICAgICAgIHRpbWVvdXQ6IGNvbm5lY3RUaW1lb3V0LFxuICAgICAgICAuLi4odXRpbC5ub2RlSGFzQXV0b1NlbGVjdEZhbWlseSAmJiBhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzICYmIG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sKVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trQ29ubmVjdGlvbnNdID0gY29ubmVjdGlvbnMgfHwgbnVsbFxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKG9yaWdpbilcbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QsIGFsbG93SDIgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIHRoaXMub24oJ2Nvbm5lY3Rpb25FcnJvcicsIChvcmlnaW4sIHRhcmdldHMsIGVycm9yKSA9PiB7XG4gICAgICAvLyBJZiBhIGNvbm5lY3Rpb24gZXJyb3Igb2NjdXJzLCB3ZSByZW1vdmUgdGhlIGNsaWVudCBmcm9tIHRoZSBwb29sLFxuICAgICAgLy8gYW5kIGVtaXQgYSBjb25uZWN0aW9uRXJyb3IgZXZlbnQuIFRoZXkgd2lsbCBub3QgYmUgcmUtdXNlZC5cbiAgICAgIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8zODk1XG4gICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIC8vIERvIG5vdCB1c2Uga1JlbW92ZUNsaWVudCBoZXJlLCBhcyBpdCB3aWxsIGNsb3NlIHRoZSBjbGllbnQsXG4gICAgICAgIC8vIGJ1dCB0aGUgY2xpZW50IGNhbm5vdCBiZSBjbG9zZWQgaW4gdGhpcyBzdGF0ZS5cbiAgICAgICAgY29uc3QgaWR4ID0gdGhpc1trQ2xpZW50c10uaW5kZXhPZih0YXJnZXQpXG4gICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSlcblxuICAgIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIGlmICghdGhpc1trQ29ubmVjdGlvbnNdIHx8IHRoaXNba0NsaWVudHNdLmxlbmd0aCA8IHRoaXNba0Nvbm5lY3Rpb25zXSkge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKHRoaXNba1VybF0sIHRoaXNba09wdGlvbnNdKVxuICAgICAgdGhpc1trQWRkQ2xpZW50XShkaXNwYXRjaGVyKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IHsga1VybCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBwYXJzZU9yaWdpbiB9ID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5jb25zdCBrR3JlYXRlc3RDb21tb25EaXZpc29yID0gU3ltYm9sKCdrR3JlYXRlc3RDb21tb25EaXZpc29yJylcbmNvbnN0IGtDdXJyZW50V2VpZ2h0ID0gU3ltYm9sKCdrQ3VycmVudFdlaWdodCcpXG5jb25zdCBrSW5kZXggPSBTeW1ib2woJ2tJbmRleCcpXG5jb25zdCBrV2VpZ2h0ID0gU3ltYm9sKCdrV2VpZ2h0JylcbmNvbnN0IGtNYXhXZWlnaHRQZXJTZXJ2ZXIgPSBTeW1ib2woJ2tNYXhXZWlnaHRQZXJTZXJ2ZXInKVxuY29uc3Qga0Vycm9yUGVuYWx0eSA9IFN5bWJvbCgna0Vycm9yUGVuYWx0eScpXG5cbmZ1bmN0aW9uIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciAoYSwgYikge1xuICBpZiAoYiA9PT0gMCkgcmV0dXJuIGFcbiAgcmV0dXJuIGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvcihiLCBhICUgYilcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2wgZXh0ZW5kcyBQb29sQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh1cHN0cmVhbXMgPSBbXSwgeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIC4uLm9wdHMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSBvcHRzXG4gICAgdGhpc1trSW5kZXhdID0gLTFcbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IDBcblxuICAgIHRoaXNba01heFdlaWdodFBlclNlcnZlcl0gPSB0aGlzW2tPcHRpb25zXS5tYXhXZWlnaHRQZXJTZXJ2ZXIgfHwgMTAwXG4gICAgdGhpc1trRXJyb3JQZW5hbHR5XSA9IHRoaXNba09wdGlvbnNdLmVycm9yUGVuYWx0eSB8fCAxNVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVwc3RyZWFtcykpIHtcbiAgICAgIHVwc3RyZWFtcyA9IFt1cHN0cmVhbXNdXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzICYmIG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sXG4gICAgICA6IFtdXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG5cbiAgICBmb3IgKGNvbnN0IHVwc3RyZWFtIG9mIHVwc3RyZWFtcykge1xuICAgICAgdGhpcy5hZGRVcHN0cmVhbSh1cHN0cmVhbSlcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICB9XG5cbiAgYWRkVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBpZiAodGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0ZhY3RvcnldKHVwc3RyZWFtT3JpZ2luLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzW2tPcHRpb25zXSkpXG5cbiAgICB0aGlzW2tBZGRDbGllbnRdKHBvb2wpXG4gICAgcG9vbC5vbignY29ubmVjdCcsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1pbih0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdLCBwb29sW2tXZWlnaHRdICsgdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICB9KVxuXG4gICAgcG9vbC5vbignY29ubmVjdGlvbkVycm9yJywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdkaXNjb25uZWN0JywgKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IGVyciA9IGFyZ3NbMl1cbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgPT09ICdVTkRfRVJSX1NPQ0tFVCcpIHtcbiAgICAgICAgLy8gZGVjcmVhc2UgdGhlIHdlaWdodCBvZiB0aGUgcG9vbC5cbiAgICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWF4KDEsIHBvb2xba1dlaWdodF0gLSB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICBjbGllbnRba1dlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cyAoKSB7XG4gICAgdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXSA9IHRoaXNba0NsaWVudHNdLm1hcChwID0+IHBba1dlaWdodF0pLnJlZHVjZShnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IsIDApXG4gIH1cblxuICByZW1vdmVVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAocG9vbCkge1xuICAgICAgdGhpc1trUmVtb3ZlQ2xpZW50XShwb29sKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQgdXBzdHJlYW1zICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11cbiAgICAgIC5maWx0ZXIoZGlzcGF0Y2hlciA9PiBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJiBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZSlcbiAgICAgIC5tYXAoKHApID0+IHBba1VybF0ub3JpZ2luKVxuICB9XG5cbiAgW2tHZXREaXNwYXRjaGVyXSAoKSB7XG4gICAgLy8gV2UgdmFsaWRhdGUgdGhhdCBwb29scyBpcyBncmVhdGVyIHRoYW4gMCxcbiAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byB3YWl0IHVudGlsIGFuIHVwc3RyZWFtXG4gICAgLy8gaXMgYWRkZWQsIHdoaWNoIG1pZ2h0IG5ldmVyIGhhcHBlbi5cbiAgICBpZiAodGhpc1trQ2xpZW50c10ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tDbGllbnRzXS5maW5kKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFsbENsaWVudHNCdXN5ID0gdGhpc1trQ2xpZW50c10ubWFwKHBvb2wgPT4gcG9vbFtrTmVlZERyYWluXSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpXG5cbiAgICBpZiAoYWxsQ2xpZW50c0J1c3kpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBjb3VudGVyID0gMFxuXG4gICAgbGV0IG1heFdlaWdodEluZGV4ID0gdGhpc1trQ2xpZW50c10uZmluZEluZGV4KHBvb2wgPT4gIXBvb2xba05lZWREcmFpbl0pXG5cbiAgICB3aGlsZSAoY291bnRlcisrIDwgdGhpc1trQ2xpZW50c10ubGVuZ3RoKSB7XG4gICAgICB0aGlzW2tJbmRleF0gPSAodGhpc1trSW5kZXhdICsgMSkgJSB0aGlzW2tDbGllbnRzXS5sZW5ndGhcbiAgICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tDbGllbnRzXVt0aGlzW2tJbmRleF1dXG5cbiAgICAgIC8vIGZpbmQgcG9vbCBpbmRleCB3aXRoIHRoZSBsYXJnZXN0IHdlaWdodFxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF0gJiYgIXBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tJbmRleF1cbiAgICAgIH1cblxuICAgICAgLy8gZGVjcmVhc2UgdGhlIGN1cnJlbnQgd2VpZ2h0IGV2ZXJ5IGB0aGlzW2tDbGllbnRzXS5sZW5ndGhgLlxuICAgICAgaWYgKHRoaXNba0luZGV4XSA9PT0gMCkge1xuICAgICAgICAvLyBTZXQgdGhlIGN1cnJlbnQgd2VpZ2h0IHRvIHRoZSBuZXh0IGxvd2VyIHdlaWdodC5cbiAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAtIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl1cblxuICAgICAgICBpZiAodGhpc1trQ3VycmVudFdlaWdodF0gPD0gMCkge1xuICAgICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+PSB0aGlzW2tDdXJyZW50V2VpZ2h0XSAmJiAoIXBvb2xba05lZWREcmFpbl0pKSB7XG4gICAgICAgIHJldHVybiBwb29sXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1ba1dlaWdodF1cbiAgICB0aGlzW2tJbmRleF0gPSBtYXhXZWlnaHRJbmRleFxuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVttYXhXZWlnaHRJbmRleF1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhbGFuY2VkUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZTogb25seSBmb3IgTm9kZSAxMiAqL1xuXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuXG5jbGFzcyBDb21wYXRXZWFrUmVmIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBkZXJlZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVba0Nvbm5lY3RlZF0gPT09IDAgJiYgdGhpcy52YWx1ZVtrU2l6ZV0gPT09IDBcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHRoaXMudmFsdWVcbiAgfVxufVxuXG5jbGFzcyBDb21wYXRGaW5hbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoZmluYWxpemVyKSB7XG4gICAgdGhpcy5maW5hbGl6ZXIgPSBmaW5hbGl6ZXJcbiAgfVxuXG4gIHJlZ2lzdGVyIChkaXNwYXRjaGVyLCBrZXkpIHtcbiAgICBpZiAoZGlzcGF0Y2hlci5vbikge1xuICAgICAgZGlzcGF0Y2hlci5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgaWYgKGRpc3BhdGNoZXJba0Nvbm5lY3RlZF0gPT09IDAgJiYgZGlzcGF0Y2hlcltrU2l6ZV0gPT09IDApIHtcbiAgICAgICAgICB0aGlzLmZpbmFsaXplcihrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAvLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICAgIHJldHVybiB7XG4gICAgICBXZWFrUmVmOiBDb21wYXRXZWFrUmVmLFxuICAgICAgRmluYWxpemF0aW9uUmVnaXN0cnk6IENvbXBhdEZpbmFsaXplclxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIFdlYWtSZWY6IGdsb2JhbC5XZWFrUmVmIHx8IENvbXBhdFdlYWtSZWYsXG4gICAgRmluYWxpemF0aW9uUmVnaXN0cnk6IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSB8fCBDb21wYXRGaW5hbGl6ZXJcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5jb25zdCB7IFdlYWtSZWYsIEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5cbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrTWF4UmVkaXJlY3Rpb25zID0gU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuY29uc3Qga0ZpbmFsaXplciA9IFN5bWJvbCgnZmluYWxpemVyJylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IHsgLi4udXRpbC5kZWVwQ2xvbmUob3B0aW9ucyksIGNvbm5lY3QgfVxuICAgIHRoaXNba09wdGlvbnNdLmludGVyY2VwdG9ycyA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzXG4gICAgICA/IHsgLi4ub3B0aW9ucy5pbnRlcmNlcHRvcnMgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICB0aGlzW2tNYXhSZWRpcmVjdGlvbnNdID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG4gICAgdGhpc1trQ2xpZW50c10gPSBuZXcgTWFwKClcbiAgICB0aGlzW2tGaW5hbGl6ZXJdID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi8ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzW2tDbGllbnRzXS5kZWxldGUoa2V5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhZ2VudCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIHJldCArPSBjbGllbnRba1J1bm5pbmddXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgbGV0IGtleVxuICAgIGlmIChvcHRzLm9yaWdpbiAmJiAodHlwZW9mIG9wdHMub3JpZ2luID09PSAnc3RyaW5nJyB8fCBvcHRzLm9yaWdpbiBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICAgIGtleSA9IFN0cmluZyhvcHRzLm9yaWdpbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLm9yaWdpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyBvciBVUkwuJylcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuXG4gICAgbGV0IGRpc3BhdGNoZXIgPSByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcHRzLm9yaWdpbiwgdGhpc1trT3B0aW9uc10pXG4gICAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICAgIHRoaXNba0NsaWVudHNdLnNldChrZXksIG5ldyBXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICAgICAgdGhpc1trRmluYWxpemVyXS5yZWdpc3RlcihkaXNwYXRjaGVyLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBjb25zdCBjbG9zZVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgY2xvc2VQcm9taXNlcy5wdXNoKGNsaWVudC5jbG9zZSgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGRlc3Ryb3lQcm9taXNlcylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFnZW50XG4iLCAiLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC85MDdcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZWFkYWJsZVN0cmVhbUZyb20sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5sZXQgQmxvYlxuXG5jb25zdCBrQ29uc3VtZSA9IFN5bWJvbCgna0NvbnN1bWUnKVxuY29uc3Qga1JlYWRpbmcgPSBTeW1ib2woJ2tSZWFkaW5nJylcbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdrQm9keScpXG5jb25zdCBrQWJvcnQgPSBTeW1ib2woJ2Fib3J0JylcbmNvbnN0IGtDb250ZW50VHlwZSA9IFN5bWJvbCgna0NvbnRlbnRUeXBlJylcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgQm9keVJlYWRhYmxlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoe1xuICAgIHJlc3VtZSxcbiAgICBhYm9ydCxcbiAgICBjb250ZW50VHlwZSA9ICcnLFxuICAgIGhpZ2hXYXRlck1hcmsgPSA2NCAqIDEwMjQgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgfSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGF1dG9EZXN0cm95OiB0cnVlLFxuICAgICAgcmVhZDogcmVzdW1lLFxuICAgICAgaGlnaFdhdGVyTWFya1xuICAgIH0pXG5cbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkID0gZmFsc2VcblxuICAgIHRoaXNba0Fib3J0XSA9IGFib3J0XG4gICAgdGhpc1trQ29uc3VtZV0gPSBudWxsXG4gICAgdGhpc1trQm9keV0gPSBudWxsXG4gICAgdGhpc1trQ29udGVudFR5cGVdID0gY29udGVudFR5cGVcblxuICAgIC8vIElzIHN0cmVhbSBiZWluZyBjb25zdW1lZCB0aHJvdWdoIFJlYWRhYmxlIEFQST9cbiAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0IHdlIGF2b2lkIGNoZWNraW5nXG4gICAgLy8gZm9yICdkYXRhJyBhbmQgJ3JlYWRhYmxlJyBsaXN0ZW5lcnMgaW4gdGhlIGhvdCBwYXRoXG4gICAgLy8gaW5zaWRlIHB1c2goKS5cbiAgICB0aGlzW2tSZWFkaW5nXSA9IGZhbHNlXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIC8vIE5vZGUgPCAxNlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgdGhpc1trQWJvcnRdKClcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZGVzdHJveShlcnIpXG4gIH1cblxuICBlbWl0IChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnKSB7XG4gICAgICAvLyBOb2RlIDwgMTYuN1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGV2ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZW1pdChldiwgLi4uYXJncylcbiAgfVxuXG4gIG9uIChldiwgLi4uYXJncykge1xuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvZmYgKGV2LCAuLi5hcmdzKSB7XG4gICAgY29uc3QgcmV0ID0gc3VwZXIub2ZmKGV2LCAuLi5hcmdzKVxuICAgIGlmIChldiA9PT0gJ2RhdGEnIHx8IGV2ID09PSAncmVhZGFibGUnKSB7XG4gICAgICB0aGlzW2tSZWFkaW5nXSA9IChcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdkYXRhJykgPiAwIHx8XG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgncmVhZGFibGUnKSA+IDBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgcmVtb3ZlTGlzdGVuZXIgKGV2LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMub2ZmKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgcHVzaCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trQ29uc3VtZV0gJiYgY2h1bmsgIT09IG51bGwgJiYgdGhpcy5yZWFkYWJsZUxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3VtZVB1c2godGhpc1trQ29uc3VtZV0sIGNodW5rKVxuICAgICAgcmV0dXJuIHRoaXNba1JlYWRpbmddID8gc3VwZXIucHVzaChjaHVuaykgOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5wdXNoKGNodW5rKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LXRleHRcbiAgYXN5bmMgdGV4dCAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ3RleHQnKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWpzb25cbiAgYXN5bmMganNvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2pzb24nKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJsb2JcbiAgYXN5bmMgYmxvYiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2Jsb2InKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWFycmF5YnVmZmVyXG4gIGFzeW5jIGFycmF5QnVmZmVyICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWZvcm1kYXRhXG4gIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQuXG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5dXNlZFxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHRoaXMpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keVxuICBnZXQgYm9keSAoKSB7XG4gICAgaWYgKCF0aGlzW2tCb2R5XSkge1xuICAgICAgdGhpc1trQm9keV0gPSBSZWFkYWJsZVN0cmVhbUZyb20odGhpcylcbiAgICAgIGlmICh0aGlzW2tDb25zdW1lXSkge1xuICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZXN0IHdheSB0byBmb3JjZSBhIGxvY2s/XG4gICAgICAgIHRoaXNba0JvZHldLmdldFJlYWRlcigpIC8vIEVuc3VyZSBzdHJlYW0gaXMgbG9ja2VkLlxuICAgICAgICBhc3NlcnQodGhpc1trQm9keV0ubG9ja2VkKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trQm9keV1cbiAgfVxuXG4gIGR1bXAgKG9wdHMpIHtcbiAgICBsZXQgbGltaXQgPSBvcHRzICYmIE51bWJlci5pc0Zpbml0ZShvcHRzLmxpbWl0KSA/IG9wdHMubGltaXQgOiAyNjIxNDRcbiAgICBjb25zdCBzaWduYWwgPSBvcHRzICYmIG9wdHMuc2lnbmFsXG5cbiAgICBpZiAoc2lnbmFsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gQWJvcnRTaWduYWwnKVxuICAgICAgICB9XG4gICAgICAgIHV0aWwudGhyb3dJZkFib3J0ZWQoc2lnbmFsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNpZ25hbExpc3RlbmVyQ2xlYW51cCA9IHNpZ25hbFxuICAgICAgICA/IHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICB9KVxuICAgICAgICA6IG5vb3BcblxuICAgICAgdGhpc1xuICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNpZ25hbExpc3RlbmVyQ2xlYW51cCgpXG4gICAgICAgICAgaWYgKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24gfHwgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnKSwgeyBuYW1lOiAnQWJvcnRFcnJvcicgfSkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5vbignZXJyb3InLCBub29wKVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICBsaW1pdCAtPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICBpZiAobGltaXQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZXN1bWUoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tbG9ja2VkXG5mdW5jdGlvbiBpc0xvY2tlZCAoc2VsZikge1xuICAvLyBDb25zdW1lIGlzIGFuIGltcGxpY2l0IGxvY2suXG4gIHJldHVybiAoc2VsZltrQm9keV0gJiYgc2VsZltrQm9keV0ubG9ja2VkID09PSB0cnVlKSB8fCBzZWxmW2tDb25zdW1lXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS11bnVzYWJsZVxuZnVuY3Rpb24gaXNVbnVzYWJsZSAoc2VsZikge1xuICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZChzZWxmKSB8fCBpc0xvY2tlZChzZWxmKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25zdW1lIChzdHJlYW0sIHR5cGUpIHtcbiAgaWYgKGlzVW51c2FibGUoc3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgfVxuXG4gIGFzc2VydCghc3RyZWFtW2tDb25zdW1lXSlcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHN0cmVhbVtrQ29uc3VtZV0gPSB7XG4gICAgICB0eXBlLFxuICAgICAgc3RyZWFtLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIHJlamVjdCxcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIGJvZHk6IFtdXG4gICAgfVxuXG4gICAgc3RyZWFtXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXNba0NvbnN1bWVdLmJvZHkgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjb25zdW1lU3RhcnQsIHN0cmVhbVtrQ29uc3VtZV0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVTdGFydCAoY29uc3VtZSkge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IF9yZWFkYWJsZVN0YXRlOiBzdGF0ZSB9ID0gY29uc3VtZS5zdHJlYW1cblxuICBmb3IgKGNvbnN0IGNodW5rIG9mIHN0YXRlLmJ1ZmZlcikge1xuICAgIGNvbnN1bWVQdXNoKGNvbnN1bWUsIGNodW5rKVxuICB9XG5cbiAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUuc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdW1lRW5kKHRoaXNba0NvbnN1bWVdKVxuICAgIH0pXG4gIH1cblxuICBjb25zdW1lLnN0cmVhbS5yZXN1bWUoKVxuXG4gIHdoaWxlIChjb25zdW1lLnN0cmVhbS5yZWFkKCkgIT0gbnVsbCkge1xuICAgIC8vIExvb3BcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdW1lRW5kIChjb25zdW1lKSB7XG4gIGNvbnN0IHsgdHlwZSwgYm9keSwgcmVzb2x2ZSwgc3RyZWFtLCBsZW5ndGggfSA9IGNvbnN1bWVcblxuICB0cnkge1xuICAgIGlmICh0eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHJlc29sdmUodG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnanNvbicpIHtcbiAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShCdWZmZXIuY29uY2F0KGJvZHkpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcblxuICAgICAgbGV0IHBvcyA9IDBcbiAgICAgIGZvciAoY29uc3QgYnVmIG9mIGJvZHkpIHtcbiAgICAgICAgZHN0LnNldChidWYsIHBvcylcbiAgICAgICAgcG9zICs9IGJ1Zi5ieXRlTGVuZ3RoXG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZHN0LmJ1ZmZlcilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdibG9iJykge1xuICAgICAgaWYgKCFCbG9iKSB7XG4gICAgICAgIEJsb2IgPSByZXF1aXJlKCdidWZmZXInKS5CbG9iXG4gICAgICB9XG4gICAgICByZXNvbHZlKG5ldyBCbG9iKGJvZHksIHsgdHlwZTogc3RyZWFtW2tDb250ZW50VHlwZV0gfSkpXG4gICAgfVxuXG4gICAgY29uc3VtZUZpbmlzaChjb25zdW1lKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZVB1c2ggKGNvbnN1bWUsIGNodW5rKSB7XG4gIGNvbnN1bWUubGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuICBjb25zdW1lLmJvZHkucHVzaChjaHVuaylcbn1cblxuZnVuY3Rpb24gY29uc3VtZUZpbmlzaCAoY29uc3VtZSwgZXJyKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChlcnIpIHtcbiAgICBjb25zdW1lLnJlamVjdChlcnIpXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5yZXNvbHZlKClcbiAgfVxuXG4gIGNvbnN1bWUudHlwZSA9IG51bGxcbiAgY29uc3VtZS5zdHJlYW0gPSBudWxsXG4gIGNvbnN1bWUucmVzb2x2ZSA9IG51bGxcbiAgY29uc3VtZS5yZWplY3QgPSBudWxsXG4gIGNvbnN1bWUubGVuZ3RoID0gMFxuICBjb25zdW1lLmJvZHkgPSBudWxsXG59XG4iLCAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHtcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgKHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH0pIHtcbiAgYXNzZXJ0KGJvZHkpXG5cbiAgbGV0IGNodW5rcyA9IFtdXG4gIGxldCBsaW1pdCA9IDBcblxuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICBjaHVua3MucHVzaChjaHVuaylcbiAgICBsaW1pdCArPSBjaHVuay5sZW5ndGhcbiAgICBpZiAobGltaXQgPiAxMjggKiAxMDI0KSB7XG4gICAgICBjaHVua3MgPSBudWxsXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0dXNDb2RlID09PSAyMDQgfHwgIWNvbnRlbnRUeXBlIHx8ICFjaHVua3MpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMpKVxuICAgIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZSh0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBwYXlsb2FkKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCd0ZXh0LycpKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChjaHVua3MpKVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBwYXlsb2FkKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gUHJvY2VzcyBpbiBhIGZhbGxiYWNrIGlmIGVycm9yXG4gIH1cblxuICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH1cbiIsICJjb25zdCB7IGFkZEFib3J0TGlzdGVuZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY29uc3Qga0xpc3RlbmVyID0gU3ltYm9sKCdrTGlzdGVuZXInKVxuY29uc3Qga1NpZ25hbCA9IFN5bWJvbCgna1NpZ25hbCcpXG5cbmZ1bmN0aW9uIGFib3J0IChzZWxmKSB7XG4gIGlmIChzZWxmLmFib3J0KSB7XG4gICAgc2VsZi5hYm9ydCgpXG4gIH0gZWxzZSB7XG4gICAgc2VsZi5vbkVycm9yKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmVhZGFibGUgPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFJlcXVlc3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IsIGhpZ2hXYXRlck1hcmsgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChoaWdoV2F0ZXJNYXJrICYmICh0eXBlb2YgaGlnaFdhdGVyTWFyayAhPT0gJ251bWJlcicgfHwgaGlnaFdhdGVyTWFyayA8IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoaWdoV2F0ZXJNYXJrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1JFUVVFU1QnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMudHJhaWxlcnMgPSB7fVxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3JcbiAgICB0aGlzLmhpZ2hXYXRlck1hcmsgPSBoaWdoV2F0ZXJNYXJrXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGFib3J0LCBjb250ZXh0LCByZXNwb25zZUhlYWRlcnMsIGhpZ2hXYXRlck1hcmsgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgIGNvbnN0IGJvZHkgPSBuZXcgUmVhZGFibGUoeyByZXN1bWUsIGFib3J0LCBjb250ZW50VHlwZSwgaGlnaFdhdGVyTWFyayB9KVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICB0aGlzLnJlcyA9IGJvZHlcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgICAgeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0cmFpbGVyczogdGhpcy50cmFpbGVycyxcbiAgICAgICAgICBvcGFxdWUsXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjb250ZXh0XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB1dGlsLnBhcnNlSGVhZGVycyh0cmFpbGVycywgdGhpcy50cmFpbGVycylcblxuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIGJvZHksIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHF1ZXVlTWljcm90YXNrP1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAvLyBFbnN1cmUgYWxsIHF1ZXVlZCBoYW5kbGVycyBhcmUgaW52b2tlZCBiZWZvcmUgZGVzdHJveWluZyByZXMuXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3QgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3QuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgUmVxdWVzdEhhbmRsZXIob3B0cywgY2FsbGJhY2spKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0XG5tb2R1bGUuZXhwb3J0cy5SZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZmluaXNoZWQsIFBhc3NUaHJvdWdoIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIFN0cmVhbUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBmYWN0b3J5JylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1NUUkVBTScpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeVxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMucmVzID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMudHJhaWxlcnMgPSBudWxsXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciB8fCBmYWxzZVxuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBmYWN0b3J5LCBvcGFxdWUsIGNvbnRleHQsIGNhbGxiYWNrLCByZXNwb25zZUhlYWRlcnMgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGxldCByZXNcblxuICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICAgIHJlcyA9IG5ldyBQYXNzVGhyb3VnaCgpXG5cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgIHsgY2FsbGJhY2ssIGJvZHk6IHJlcywgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoZmFjdG9yeSwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgIXJlcyB8fFxuICAgICAgICB0eXBlb2YgcmVzLndyaXRlICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMuZW5kICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIHR5cGVvZiByZXMub24gIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFdyaXRhYmxlJylcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogQXZvaWQgZmluaXNoZWQuIEl0IHJlZ2lzdGVycyBhbiB1bm5lY2Vzc2FyeSBhbW91bnQgb2YgbGlzdGVuZXJzLlxuICAgICAgZmluaXNoZWQocmVzLCB7IHJlYWRhYmxlOiBmYWxzZSB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2ssIHJlcywgb3BhcXVlLCB0cmFpbGVycywgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgICAgaWYgKGVyciB8fCAhcmVzLnJlYWRhYmxlKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciB8fCBudWxsLCB7IG9wYXF1ZSwgdHJhaWxlcnMgfSlcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlcy5vbignZHJhaW4nLCByZXN1bWUpXG5cbiAgICB0aGlzLnJlcyA9IHJlc1xuXG4gICAgY29uc3QgbmVlZERyYWluID0gcmVzLndyaXRhYmxlTmVlZERyYWluICE9PSB1bmRlZmluZWRcbiAgICAgID8gcmVzLndyaXRhYmxlTmVlZERyYWluXG4gICAgICA6IHJlcy5fd3JpdGFibGVTdGF0ZSAmJiByZXMuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluXG5cbiAgICByZXR1cm4gbmVlZERyYWluICE9PSB0cnVlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJldHVybiByZXMgPyByZXMud3JpdGUoY2h1bmspIDogdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy50cmFpbGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzKVxuXG4gICAgcmVzLmVuZCgpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJlcywgY2FsbGJhY2ssIG9wYXF1ZSwgYm9keSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyZWFtIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzdHJlYW0uY2FsbCh0aGlzLCBvcHRzLCBmYWN0b3J5LCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5kaXNwYXRjaChvcHRzLCBuZXcgU3RyZWFtSGFuZGxlcihvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmVhbVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlLFxuICBEdXBsZXgsXG4gIFBhc3NUaHJvdWdoXG59ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtSZXN1bWUgPSBTeW1ib2woJ3Jlc3VtZScpXG5cbmNsYXNzIFBpcGVsaW5lUmVxdWVzdCBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcblxuICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgY29uc3QgeyBba1Jlc3VtZV06IHJlc3VtZSB9ID0gdGhpc1xuXG4gICAgaWYgKHJlc3VtZSkge1xuICAgICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgICAgIHJlc3VtZSgpXG4gICAgfVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl9yZWFkKClcblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZVJlc3BvbnNlIGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAocmVzdW1lKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuICAgIHRoaXNba1Jlc3VtZV0gPSByZXN1bWVcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICB0aGlzW2tSZXN1bWVdKClcbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGNhbGxiYWNrKGVycilcbiAgfVxufVxuXG5jbGFzcyBQaXBlbGluZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGFuZGxlcicpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1BJUEVMSU5FJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcblxuICAgIHRoaXMucmVxID0gbmV3IFBpcGVsaW5lUmVxdWVzdCgpLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuXG4gICAgdGhpcy5yZXQgPSBuZXcgRHVwbGV4KHtcbiAgICAgIHJlYWRhYmxlT2JqZWN0TW9kZTogb3B0cy5vYmplY3RNb2RlLFxuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChib2R5ICYmIGJvZHkucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KCFyZXMsICdwaXBlbGluZSBjYW5ub3QgYmUgcmV0cmllZCcpXG5cbiAgICBpZiAocmV0LmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jbGFzcyBVcGdyYWRlSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgb3BhcXVlLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX1VQR1JBREUnKVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc3RhdHVzQ29kZSwgMTAxKVxuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGdyYWRlIChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB1cGdyYWRlLmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVwZ3JhZGVIYW5kbGVyID0gbmV3IFVwZ3JhZGVIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgJ0dFVCcsXG4gICAgICB1cGdyYWRlOiBvcHRzLnByb3RvY29sIHx8ICdXZWJzb2NrZXQnXG4gICAgfSwgdXBncmFkZUhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZ3JhZGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5cbmNsYXNzIENvbm5lY3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfQ09OTkVDVCcpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgY29ubmVjdCcsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuXG4gICAgbGV0IGhlYWRlcnMgPSByYXdIZWFkZXJzXG4gICAgLy8gSW5kaWNhdGVzIGlzIGFuIEhUVFAyU2Vzc2lvblxuICAgIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgfVxuXG4gICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29ubmVjdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29ubmVjdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25uZWN0SGFuZGxlciA9IG5ldyBDb25uZWN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgbWV0aG9kOiAnQ09OTkVDVCcgfSwgY29ubmVjdEhhbmRsZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IHJlcXVpcmUoJy4vYXBpLXJlcXVlc3QnKVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gcmVxdWlyZSgnLi9hcGktc3RyZWFtJylcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gcmVxdWlyZSgnLi9hcGktcGlwZWxpbmUnKVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IHJlcXVpcmUoJy4vYXBpLXVwZ3JhZGUnKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IHJlcXVpcmUoJy4vYXBpLWNvbm5lY3QnKVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFVuZGljaUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNsYXNzIE1vY2tOb3RNYXRjaGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBNb2NrTm90TWF0Y2hlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdNb2NrTm90TWF0Y2hlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSByZXF1ZXN0IGRvZXMgbm90IG1hdGNoIGFueSByZWdpc3RlcmVkIG1vY2sgZGlzcGF0Y2hlcydcbiAgICB0aGlzLmNvZGUgPSAnVU5EX01PQ0tfRVJSX01PQ0tfTk9UX01BVENIRUQnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1vY2tOb3RNYXRjaGVkRXJyb3Jcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtBZ2VudDogU3ltYm9sKCdhZ2VudCcpLFxuICBrT3B0aW9uczogU3ltYm9sKCdvcHRpb25zJyksXG4gIGtGYWN0b3J5OiBTeW1ib2woJ2ZhY3RvcnknKSxcbiAga0Rpc3BhdGNoZXM6IFN5bWJvbCgnZGlzcGF0Y2hlcycpLFxuICBrRGlzcGF0Y2hLZXk6IFN5bWJvbCgnZGlzcGF0Y2gga2V5JyksXG4gIGtEZWZhdWx0SGVhZGVyczogU3ltYm9sKCdkZWZhdWx0IGhlYWRlcnMnKSxcbiAga0RlZmF1bHRUcmFpbGVyczogU3ltYm9sKCdkZWZhdWx0IHRyYWlsZXJzJyksXG4gIGtDb250ZW50TGVuZ3RoOiBTeW1ib2woJ2NvbnRlbnQgbGVuZ3RoJyksXG4gIGtNb2NrQWdlbnQ6IFN5bWJvbCgnbW9jayBhZ2VudCcpLFxuICBrTW9ja0FnZW50U2V0OiBTeW1ib2woJ21vY2sgYWdlbnQgc2V0JyksXG4gIGtNb2NrQWdlbnRHZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBnZXQnKSxcbiAga01vY2tEaXNwYXRjaDogU3ltYm9sKCdtb2NrIGRpc3BhdGNoJyksXG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrT3JpZ2luYWxDbG9zZTogU3ltYm9sKCdvcmlnaW5hbCBhZ2VudCBjbG9zZScpLFxuICBrT3JpZ2luOiBTeW1ib2woJ29yaWdpbicpLFxuICBrSXNNb2NrQWN0aXZlOiBTeW1ib2woJ2lzIG1vY2sgYWN0aXZlJyksXG4gIGtOZXRDb25uZWN0OiBTeW1ib2woJ25ldCBjb25uZWN0JyksXG4gIGtHZXROZXRDb25uZWN0OiBTeW1ib2woJ2dldCBuZXQgY29ubmVjdCcpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTW9ja05vdE1hdGNoZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWVycm9ycycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga09yaWdpbixcbiAga0dldE5ldENvbm5lY3Rcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IGJ1aWxkVVJMLCBub3AgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7XG4gIHR5cGVzOiB7XG4gICAgaXNQcm9taXNlXG4gIH1cbn0gPSByZXF1aXJlKCd1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGJvZHlcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBib2R5IH0pID0+IHR5cGVvZiBib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUoYm9keSwga2V5LmJvZHkpIDogdHJ1ZSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgYm9keSAnJHtrZXkuYm9keX0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIGhlYWRlcnNcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigobW9ja0Rpc3BhdGNoKSA9PiBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBrZXkuaGVhZGVycykpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGhlYWRlcnMgJyR7dHlwZW9mIGtleS5oZWFkZXJzID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGtleS5oZWFkZXJzKSA6IGtleS5oZWFkZXJzfSdgKVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRNb2NrRGlzcGF0Y2hlc1swXVxufVxuXG5mdW5jdGlvbiBhZGRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXksIGRhdGEpIHtcbiAgY29uc3QgYmFzZURhdGEgPSB7IHRpbWVzSW52b2tlZDogMCwgdGltZXM6IDEsIHBlcnNpc3Q6IGZhbHNlLCBjb25zdW1lZDogZmFsc2UgfVxuICBjb25zdCByZXBseURhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IHsgY2FsbGJhY2s6IGRhdGEgfSA6IHsgLi4uZGF0YSB9XG4gIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IHsgLi4uYmFzZURhdGEsIC4uLmtleSwgcGVuZGluZzogdHJ1ZSwgZGF0YTogeyBlcnJvcjogbnVsbCwgLi4ucmVwbHlEYXRhIH0gfVxuICBtb2NrRGlzcGF0Y2hlcy5wdXNoKG5ld01vY2tEaXNwYXRjaClcbiAgcmV0dXJuIG5ld01vY2tEaXNwYXRjaFxufVxuXG5mdW5jdGlvbiBkZWxldGVNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgaW5kZXggPSBtb2NrRGlzcGF0Y2hlcy5maW5kSW5kZXgoZGlzcGF0Y2ggPT4ge1xuICAgIGlmICghZGlzcGF0Y2guY29uc3VtZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hLZXkoZGlzcGF0Y2gsIGtleSlcbiAgfSlcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIG1vY2tEaXNwYXRjaGVzLnNwbGljZShpbmRleCwgMSlcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZEtleSAob3B0cykge1xuICBjb25zdCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycywgcXVlcnkgfSA9IG9wdHNcbiAgcmV0dXJuIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUtleVZhbHVlcyAoZGF0YSkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChrZXlWYWx1ZVBhaXJzLCBba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAuLi5rZXlWYWx1ZVBhaXJzLFxuICAgIEJ1ZmZlci5mcm9tKGAke2tleX1gKSxcbiAgICBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCh4ID0+IEJ1ZmZlci5mcm9tKGAke3h9YCkpIDogQnVmZmVyLmZyb20oYCR7dmFsdWV9YClcbiAgXSwgW10pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL1N0YXR1c1xuICogQHBhcmFtIHtudW1iZXJ9IHN0YXR1c0NvZGVcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzVGV4dCAoc3RhdHVzQ29kZSkge1xuICByZXR1cm4gU1RBVFVTX0NPREVTW3N0YXR1c0NvZGVdIHx8ICd1bmtub3duJ1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZSAoYm9keSkge1xuICBjb25zdCBidWZmZXJzID0gW11cbiAgZm9yIGF3YWl0IChjb25zdCBkYXRhIG9mIGJvZHkpIHtcbiAgICBidWZmZXJzLnB1c2goZGF0YSlcbiAgfVxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKlxuICogTW9jayBkaXNwYXRjaCBmdW5jdGlvbiB1c2VkIHRvIHNpbXVsYXRlIHVuZGljaSBkaXNwYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG1vY2tEaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAvLyBHZXQgbW9jayBkaXNwYXRjaCBmcm9tIGJ1aWx0IGtleVxuICBjb25zdCBrZXkgPSBidWlsZEtleShvcHRzKVxuICBjb25zdCBtb2NrRGlzcGF0Y2ggPSBnZXRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcblxuICBtb2NrRGlzcGF0Y2gudGltZXNJbnZva2VkKytcblxuICAvLyBIZXJlJ3Mgd2hlcmUgd2UgcmVzb2x2ZSBhIGNhbGxiYWNrIGlmIGEgY2FsbGJhY2sgaXMgcHJlc2VudCBmb3IgdGhlIGRpc3BhdGNoIGRhdGEuXG4gIGlmIChtb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjaykge1xuICAgIG1vY2tEaXNwYXRjaC5kYXRhID0geyAuLi5tb2NrRGlzcGF0Y2guZGF0YSwgLi4ubW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2sob3B0cykgfVxuICB9XG5cbiAgLy8gUGFyc2UgbW9ja0Rpc3BhdGNoIGRhdGFcbiAgY29uc3QgeyBkYXRhOiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzLCBlcnJvciB9LCBkZWxheSwgcGVyc2lzdCB9ID0gbW9ja0Rpc3BhdGNoXG4gIGNvbnN0IHsgdGltZXNJbnZva2VkLCB0aW1lcyB9ID0gbW9ja0Rpc3BhdGNoXG5cbiAgLy8gSWYgaXQncyB1c2VkIHVwIGFuZCBub3QgcGVyc2lzdGVudCwgbWFyayBhcyBjb25zdW1lZFxuICBtb2NrRGlzcGF0Y2guY29uc3VtZWQgPSAhcGVyc2lzdCAmJiB0aW1lc0ludm9rZWQgPj0gdGltZXNcbiAgbW9ja0Rpc3BhdGNoLnBlbmRpbmcgPSB0aW1lc0ludm9rZWQgPCB0aW1lc1xuXG4gIC8vIElmIHNwZWNpZmllZCwgdHJpZ2dlciBkaXNwYXRjaCBlcnJvclxuICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIGtleSlcbiAgICBoYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCB3aXRoIGEgZGVsYXkgaWYgbmVjZXNzYXJ5XG4gIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gICAgfSwgZGVsYXkpXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVwbHkodGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVSZXBseSAobW9ja0Rpc3BhdGNoZXMsIF9kYXRhID0gZGF0YSkge1xuICAgIC8vIGZldGNoJ3MgSGVhZGVyc0xpc3QgaXMgYSAxRCBzdHJpbmcgYXJyYXlcbiAgICBjb25zdCBvcHRzSGVhZGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgPyBidWlsZEhlYWRlcnNGcm9tQXJyYXkob3B0cy5oZWFkZXJzKVxuICAgICAgOiBvcHRzLmhlYWRlcnNcbiAgICBjb25zdCBib2R5ID0gdHlwZW9mIF9kYXRhID09PSAnZnVuY3Rpb24nXG4gICAgICA/IF9kYXRhKHsgLi4ub3B0cywgaGVhZGVyczogb3B0c0hlYWRlcnMgfSlcbiAgICAgIDogX2RhdGFcblxuICAgIC8vIHV0aWwudHlwZXMuaXNQcm9taXNlIGlzIGxpa2VseSBuZWVkZWQgZm9yIGplc3QuXG4gICAgaWYgKGlzUHJvbWlzZShib2R5KSkge1xuICAgICAgLy8gSWYgaGFuZGxlUmVwbHkgaXMgYXN5bmNocm9ub3VzLCB0aHJvd2luZyBhbiBlcnJvclxuICAgICAgLy8gaW4gdGhlIGNhbGxiYWNrIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLCByYXRoZXIgdGhhblxuICAgICAgLy8gc3luY2hyb25vdXNseSB0aHJvdyB0aGUgZXJyb3IsIHdoaWNoIGJyZWFrcyBzb21lIHRlc3RzLlxuICAgICAgLy8gUmF0aGVyLCB3ZSB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpZiBpdCBpcyBhXG4gICAgICAvLyBwcm9taXNlLCBhbmQgdGhlbiByZS1ydW4gaGFuZGxlUmVwbHkgd2l0aCB0aGUgbmV3IGJvZHkuXG4gICAgICBib2R5LnRoZW4oKG5ld0RhdGEpID0+IGhhbmRsZVJlcGx5KG1vY2tEaXNwYXRjaGVzLCBuZXdEYXRhKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShib2R5KVxuICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKGhlYWRlcnMpXG4gICAgY29uc3QgcmVzcG9uc2VUcmFpbGVycyA9IGdlbmVyYXRlS2V5VmFsdWVzKHRyYWlsZXJzKVxuXG4gICAgaGFuZGxlci5hYm9ydCA9IG5vcFxuICAgIGhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIHJlc3BvbnNlSGVhZGVycywgcmVzdW1lLCBnZXRTdGF0dXNUZXh0KHN0YXR1c0NvZGUpKVxuICAgIGhhbmRsZXIub25EYXRhKEJ1ZmZlci5mcm9tKHJlc3BvbnNlRGF0YSkpXG4gICAgaGFuZGxlci5vbkNvbXBsZXRlKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBnZXRSZXNwb25zZURhdGEsIGJ1aWxkS2V5LCBhZGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrRGlzcGF0Y2hLZXksXG4gIGtEZWZhdWx0SGVhZGVycyxcbiAga0RlZmF1bHRUcmFpbGVycyxcbiAga0NvbnRlbnRMZW5ndGgsXG4gIGtNb2NrRGlzcGF0Y2hcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGJ1aWxkVVJMIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG4vKipcbiAqIERlZmluZXMgdGhlIHNjb3BlIEFQSSBmb3IgYW4gaW50ZXJjZXB0b3IgcmVwbHlcbiAqL1xuY2xhc3MgTW9ja1Njb3BlIHtcbiAgY29uc3RydWN0b3IgKG1vY2tEaXNwYXRjaCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0gPSBtb2NrRGlzcGF0Y2hcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheSBhIHJlcGx5IGJ5IGEgc2V0IGFtb3VudCBpbiBtcy5cbiAgICovXG4gIGRlbGF5ICh3YWl0SW5Ncykge1xuICAgIGlmICh0eXBlb2Ygd2FpdEluTXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHdhaXRJbk1zKSB8fCB3YWl0SW5NcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3dhaXRJbk1zIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5kZWxheSA9IHdhaXRJbk1zXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgYSBkZWZpbmVkIHJlcGx5LCBuZXZlciBtYXJrIGFzIGNvbnN1bWVkLlxuICAgKi9cbiAgcGVyc2lzdCAoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS5wZXJzaXN0ID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgb25lIHRvIGRlZmluZSBhIHJlcGx5IGZvciBhIHNldCBhbW91bnQgb2YgbWF0Y2hpbmcgcmVxdWVzdHMuXG4gICAqL1xuICB0aW1lcyAocmVwZWF0VGltZXMpIHtcbiAgICBpZiAodHlwZW9mIHJlcGVhdFRpbWVzICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcihyZXBlYXRUaW1lcykgfHwgcmVwZWF0VGltZXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBlYXRUaW1lcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0udGltZXMgPSByZXBlYXRUaW1lc1xuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGludGVyY2VwdG9yIGZvciBhIE1vY2tcbiAqL1xuY2xhc3MgTW9ja0ludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIG1vY2tEaXNwYXRjaGVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMucGF0aCBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgb3B0cy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzEyNDVcbiAgICAvLyBBcyBwZXIgUkZDIDM5ODYsIGNsaWVudHMgYXJlIG5vdCBzdXBwb3NlZCB0byBzZW5kIFVSSVxuICAgIC8vIGZyYWdtZW50cyB0byBzZXJ2ZXJzIHdoZW4gdGhleSByZXRyaWV2ZSBhIGRvY3VtZW50LFxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9wdHMucXVlcnkpIHtcbiAgICAgICAgb3B0cy5wYXRoID0gYnVpbGRVUkwob3B0cy5wYXRoLCBvcHRzLnF1ZXJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTWF0Y2hlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iL21haW4vbGliL2ZldGNoL2luZGV4LmpzI0wxODExXG4gICAgICAgIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwob3B0cy5wYXRoLCAnZGF0YTovLycpXG4gICAgICAgIG9wdHMucGF0aCA9IHBhcnNlZFVSTC5wYXRobmFtZSArIHBhcnNlZFVSTC5zZWFyY2hcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gb3B0cy5tZXRob2QudG9VcHBlckNhc2UoKVxuICAgIH1cblxuICAgIHRoaXNba0Rpc3BhdGNoS2V5XSA9IGJ1aWxkS2V5KG9wdHMpXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBtb2NrRGlzcGF0Y2hlc1xuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IHt9XG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHt9XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSBmYWxzZVxuICB9XG5cbiAgY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGdldFJlc3BvbnNlRGF0YShkYXRhKVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzW2tDb250ZW50TGVuZ3RoXSA/IHsgJ2NvbnRlbnQtbGVuZ3RoJzogcmVzcG9uc2VEYXRhLmxlbmd0aCB9IDoge31cbiAgICBjb25zdCBoZWFkZXJzID0geyAuLi50aGlzW2tEZWZhdWx0SGVhZGVyc10sIC4uLmNvbnRlbnRMZW5ndGgsIC4uLnJlc3BvbnNlT3B0aW9ucy5oZWFkZXJzIH1cbiAgICBjb25zdCB0cmFpbGVycyA9IHsgLi4udGhpc1trRGVmYXVsdFRyYWlsZXJzXSwgLi4ucmVzcG9uc2VPcHRpb25zLnRyYWlsZXJzIH1cblxuICAgIHJldHVybiB7IHN0YXR1c0NvZGUsIGRhdGEsIGhlYWRlcnMsIHRyYWlsZXJzIH1cbiAgfVxuXG4gIHZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzIChzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHN0YXR1c0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3N0YXR1c0NvZGUgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdkYXRhIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzcG9uc2VPcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXNwb25zZU9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIHJlcGx5LlxuICAgKi9cbiAgcmVwbHkgKHJlcGx5RGF0YSkge1xuICAgIC8vIFZhbHVlcyBvZiByZXBseSBhcmVuJ3QgYXZhaWxhYmxlIHJpZ2h0IG5vdyBhcyB0aGV5XG4gICAgLy8gY2FuIG9ubHkgYmUgYXZhaWxhYmxlIHdoZW4gdGhlIHJlcGx5IGNhbGxiYWNrIGlzIGludm9rZWQuXG4gICAgaWYgKHR5cGVvZiByZXBseURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFdlJ2xsIGZpcnN0IHdyYXAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGluIGFub3RoZXIgZnVuY3Rpb24sXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvcGVybHkgcmVzb2x2ZSB0aGUgZGF0YSBmcm9tIHRoZSBjYWxsYmFja1xuICAgICAgLy8gd2hlbiBpbnZva2VkLlxuICAgICAgY29uc3Qgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2sgPSAob3B0cykgPT4ge1xuICAgICAgICAvLyBPdXIgcmVwbHkgb3B0aW9ucyBjYWxsYmFjayBjb250YWlucyB0aGUgcGFyYW1ldGVyIGZvciBzdGF0dXNDb2RlLCBkYXRhIGFuZCBvcHRpb25zLlxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSByZXBseURhdGEob3B0cylcblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyBpbiB0aGUgcmlnaHQgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZWREYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwbHkgb3B0aW9ucyBjYWxsYmFjayBtdXN0IHJldHVybiBhbiBvYmplY3QnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9IH0gPSByZXNvbHZlZERhdGFcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIC8vIFNpbmNlIHRoZSB2YWx1ZXMgY2FuIGJlIG9idGFpbmVkIGltbWVkaWF0ZWx5IHdlIHJldHVybiB0aGVtXG4gICAgICAgIC8vIGZyb20gdGhpcyBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdXN1YWwgZGlzcGF0Y2ggZGF0YSwgYnV0IHRoaXMgdGltZSBzZXQgdGhlIGRhdGEgcGFyYW1ldGVyIHRvIGZ1bmN0aW9uIHRoYXQgd2lsbCBldmVudHVhbGx5IHByb3ZpZGUgZGF0YS5cbiAgICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjaylcbiAgICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgICB9XG5cbiAgICAvLyBXZSBjYW4gaGF2ZSBlaXRoZXIgb25lIG9yIHRocmVlIHBhcmFtZXRlcnMsIGlmIHdlIGdldCBoZXJlLFxuICAgIC8vIHdlIHNob3VsZCBoYXZlIDEtMyBwYXJhbWV0ZXJzLiBTbyB3ZSBzcHJlYWQgdGhlIGFyZ3VtZW50cyBvZlxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBwYXJhbWV0ZXJzLCBzaW5jZSByZXBseURhdGEgd2lsbCBhbHdheXNcbiAgICAvLyBqdXN0IGJlIHRoZSBzdGF0dXNDb2RlLlxuICAgIGNvbnN0IFtzdGF0dXNDb2RlLCBkYXRhID0gJycsIHJlc3BvbnNlT3B0aW9ucyA9IHt9XSA9IFsuLi5hcmd1bWVudHNdXG4gICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG5cbiAgICAvLyBTZW5kIGluLWFscmVhZHkgcHJvdmlkZWQgZGF0YSBsaWtlIHVzdWFsXG4gICAgY29uc3QgZGlzcGF0Y2hEYXRhID0gdGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCBkaXNwYXRjaERhdGEpXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgZXJyb3IuXG4gICAqL1xuICByZXBseVdpdGhFcnJvciAoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdlcnJvciBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB7IGVycm9yIH0pXG4gICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IGhlYWRlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseUhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgICBpZiAodHlwZW9mIGhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSBoZWFkZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSB0cmFpbGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5VHJhaWxlcnMgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHR5cGVvZiB0cmFpbGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndHJhaWxlcnMgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0gdHJhaWxlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXBseSBjb250ZW50IGxlbmd0aCBoZWFkZXIgZm9yIHJlcGxpZXMgb24gdGhlIGludGVyY2VwdG9yXG4gICAqL1xuICByZXBseUNvbnRlbnRMZW5ndGggKCkge1xuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuTW9ja0ludGVyY2VwdG9yID0gTW9ja0ludGVyY2VwdG9yXG5tb2R1bGUuZXhwb3J0cy5Nb2NrU2NvcGUgPSBNb2NrU2NvcGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi4vY2xpZW50JylcbmNvbnN0IHsgYnVpbGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrQ2xvc2UsXG4gIGtPcmlnaW5hbENsb3NlLFxuICBrT3JpZ2luLFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga0Nvbm5lY3RlZFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgTW9ja0ludGVyY2VwdG9yIH0gPSByZXF1aXJlKCcuL21vY2staW50ZXJjZXB0b3InKVxuY29uc3QgU3ltYm9scyA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbi8qKlxuICogTW9ja0NsaWVudCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBDbGllbnQgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja0NsaWVudCBleHRlbmRzIENsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tDbGllbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4uL3Bvb2wnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrUG9vbCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBQb29sIHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tQb29sIGV4dGVuZHMgUG9vbCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHNpbmd1bGFycyA9IHtcbiAgcHJvbm91bjogJ2l0JyxcbiAgaXM6ICdpcycsXG4gIHdhczogJ3dhcycsXG4gIHRoaXM6ICd0aGlzJ1xufVxuXG5jb25zdCBwbHVyYWxzID0ge1xuICBwcm9ub3VuOiAndGhleScsXG4gIGlzOiAnYXJlJyxcbiAgd2FzOiAnd2VyZScsXG4gIHRoaXM6ICd0aGVzZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQbHVyYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKHNpbmd1bGFyLCBwbHVyYWwpIHtcbiAgICB0aGlzLnNpbmd1bGFyID0gc2luZ3VsYXJcbiAgICB0aGlzLnBsdXJhbCA9IHBsdXJhbFxuICB9XG5cbiAgcGx1cmFsaXplIChjb3VudCkge1xuICAgIGNvbnN0IG9uZSA9IGNvdW50ID09PSAxXG4gICAgY29uc3Qga2V5cyA9IG9uZSA/IHNpbmd1bGFycyA6IHBsdXJhbHNcbiAgICBjb25zdCBub3VuID0gb25lID8gdGhpcy5zaW5ndWxhciA6IHRoaXMucGx1cmFsXG4gICAgcmV0dXJuIHsgLi4ua2V5cywgY291bnQsIG5vdW4gfVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVHJhbnNmb3JtIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBDb25zb2xlIH0gPSByZXF1aXJlKCdjb25zb2xlJylcblxuLyoqXG4gKiBHZXRzIHRoZSBvdXRwdXQgb2YgYGNvbnNvbGUudGFibGUoXHUyMDI2KWAgYXMgYSBzdHJpbmcuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGRpc2FibGVDb2xvcnMgfSA9IHt9KSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcbiAgICAgIHRyYW5zZm9ybSAoY2h1bmssIF9lbmMsIGNiKSB7XG4gICAgICAgIGNiKG51bGwsIGNodW5rKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBDb25zb2xlKHtcbiAgICAgIHN0ZG91dDogdGhpcy50cmFuc2Zvcm0sXG4gICAgICBpbnNwZWN0T3B0aW9uczoge1xuICAgICAgICBjb2xvcnM6ICFkaXNhYmxlQ29sb3JzICYmICFwcm9jZXNzLmVudi5DSVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmb3JtYXQgKHBlbmRpbmdJbnRlcmNlcHRvcnMpIHtcbiAgICBjb25zdCB3aXRoUHJldHR5SGVhZGVycyA9IHBlbmRpbmdJbnRlcmNlcHRvcnMubWFwKFxuICAgICAgKHsgbWV0aG9kLCBwYXRoLCBkYXRhOiB7IHN0YXR1c0NvZGUgfSwgcGVyc2lzdCwgdGltZXMsIHRpbWVzSW52b2tlZCwgb3JpZ2luIH0pID0+ICh7XG4gICAgICAgIE1ldGhvZDogbWV0aG9kLFxuICAgICAgICBPcmlnaW46IG9yaWdpbixcbiAgICAgICAgUGF0aDogcGF0aCxcbiAgICAgICAgJ1N0YXR1cyBjb2RlJzogc3RhdHVzQ29kZSxcbiAgICAgICAgUGVyc2lzdGVudDogcGVyc2lzdCA/ICdcdTI3MDUnIDogJ1x1Mjc0QycsXG4gICAgICAgIEludm9jYXRpb25zOiB0aW1lc0ludm9rZWQsXG4gICAgICAgIFJlbWFpbmluZzogcGVyc2lzdCA/IEluZmluaXR5IDogdGltZXMgLSB0aW1lc0ludm9rZWRcbiAgICAgIH0pKVxuXG4gICAgdGhpcy5sb2dnZXIudGFibGUod2l0aFByZXR0eUhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWQoKS50b1N0cmluZygpXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ2xpZW50cyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi4vYWdlbnQnKVxuY29uc3Qge1xuICBrQWdlbnQsXG4gIGtNb2NrQWdlbnRTZXQsXG4gIGtNb2NrQWdlbnRHZXQsXG4gIGtEaXNwYXRjaGVzLFxuICBrSXNNb2NrQWN0aXZlLFxuICBrTmV0Q29ubmVjdCxcbiAga0dldE5ldENvbm5lY3QsXG4gIGtPcHRpb25zLFxuICBrRmFjdG9yeVxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9tb2NrLXBvb2wnKVxuY29uc3QgeyBtYXRjaFZhbHVlLCBidWlsZE1vY2tPcHRpb25zIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgRmFrZVdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIE1vY2tBZ2VudCBleHRlbmRzIERpc3BhdGNoZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG5cbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuXG4gICAgLy8gSW5zdGFudGlhdGUgQWdlbnQgYW5kIGVuY2Fwc3VsYXRlXG4gICAgaWYgKChvcHRzICYmIG9wdHMuYWdlbnQgJiYgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cbiAgICBjb25zdCBhZ2VudCA9IG9wdHMgJiYgb3B0cy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgbmV3IEZha2VXZWFrUmVmKGRpc3BhdGNoZXIpKVxuICB9XG5cbiAgW2tGYWN0b3J5XSAob3JpZ2luKSB7XG4gICAgY29uc3QgbW9ja09wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgYWdlbnQ6IHRoaXMgfSwgdGhpc1trT3B0aW9uc10pXG4gICAgcmV0dXJuIHRoaXNba09wdGlvbnNdICYmIHRoaXNba09wdGlvbnNdLmNvbm5lY3Rpb25zID09PSAxXG4gICAgICA/IG5ldyBNb2NrQ2xpZW50KG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gICAgICA6IG5ldyBNb2NrUG9vbChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICB9XG5cbiAgW2tNb2NrQWdlbnRHZXRdIChvcmlnaW4pIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgZmluZCBpdFxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChvcmlnaW4pXG4gICAgaWYgKHJlZikge1xuICAgICAgcmV0dXJuIHJlZi5kZXJlZigpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9yaWdpbiBpcyBub3QgYSBzdHJpbmcgY3JlYXRlIGEgZHVtbXkgcGFyZW50IHBvb2wgYW5kIHJldHVybiB0byB1c2VyXG4gICAgaWYgKHR5cGVvZiBvcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OScpXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgbWF0Y2gsIGNyZWF0ZSBhIHBvb2wgYW5kIGFzc2lnbiB0aGUgc2FtZSBkaXNwYXRjaGVzXG4gICAgZm9yIChjb25zdCBba2V5TWF0Y2hlciwgbm9uRXhwbGljaXRSZWZdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBjb25zdCBub25FeHBsaWNpdERpc3BhdGNoZXIgPSBub25FeHBsaWNpdFJlZi5kZXJlZigpXG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlLmRlcmVmKClba0Rpc3BhdGNoZXNdLm1hcChkaXNwYXRjaCA9PiAoeyAuLi5kaXNwYXRjaCwgb3JpZ2luIH0pKSlcbiAgICAgIC5maWx0ZXIoKHsgcGVuZGluZyB9KSA9PiBwZW5kaW5nKVxuICB9XG5cbiAgYXNzZXJ0Tm9QZW5kaW5nSW50ZXJjZXB0b3JzICh7IHBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSBuZXcgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlcigpIH0gPSB7fSkge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdJbnRlcmNlcHRvcnMoKVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwbHVyYWxpemVyID0gbmV3IFBsdXJhbGl6ZXIoJ2ludGVyY2VwdG9yJywgJ2ludGVyY2VwdG9ycycpLnBsdXJhbGl6ZShwZW5kaW5nLmxlbmd0aClcblxuICAgIHRocm93IG5ldyBVbmRpY2lFcnJvcihgXG4ke3BsdXJhbGl6ZXIuY291bnR9ICR7cGx1cmFsaXplci5ub3VufSAke3BsdXJhbGl6ZXIuaXN9IHBlbmRpbmc6XG5cbiR7cGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlci5mb3JtYXQocGVuZGluZyl9XG5gLnRyaW0oKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBVUkwgfSA9IHJlcXVpcmUoJ3VybCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtBZ2VudCA9IFN5bWJvbCgncHJveHkgYWdlbnQnKVxuY29uc3Qga0NsaWVudCA9IFN5bWJvbCgncHJveHkgY2xpZW50JylcbmNvbnN0IGtQcm94eUhlYWRlcnMgPSBTeW1ib2woJ3Byb3h5IGhlYWRlcnMnKVxuY29uc3Qga1JlcXVlc3RUbHMgPSBTeW1ib2woJ3JlcXVlc3QgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtQcm94eVRscyA9IFN5bWJvbCgncHJveHkgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtDb25uZWN0RW5kcG9pbnQgPSBTeW1ib2woJ2Nvbm5lY3QgZW5kcG9pbnQgZnVuY3Rpb24nKVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvdG9jb2xQb3J0IChwcm90b2NvbCkge1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODBcbn1cblxuZnVuY3Rpb24gYnVpbGRQcm94eU9wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gIH1cblxuICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB1cmk6IG9wdHMudXJpLFxuICAgIHByb3RvY29sOiBvcHRzLnByb3RvY29sIHx8ICdodHRwcydcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIFByb3h5QWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcbiAgICB0aGlzW2tQcm94eV0gPSBidWlsZFByb3h5T3B0aW9ucyhvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudClcbiAgICAgID8gb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudFxuICAgICAgOiBbXVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0cyA9IHsgdXJpOiBvcHRzIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMudXJpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMudXJpIGlzIG1hbmRhdG9yeScpXG4gICAgfVxuXG4gICAgY29uc3QgeyBjbGllbnRGYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnkgfSA9IG9wdHNcblxuICAgIGlmICh0eXBlb2YgY2xpZW50RmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLmNsaWVudEZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgdGhpc1trUmVxdWVzdFRsc10gPSBvcHRzLnJlcXVlc3RUbHNcbiAgICB0aGlzW2tQcm94eVRsc10gPSBvcHRzLnByb3h5VGxzXG4gICAgdGhpc1trUHJveHlIZWFkZXJzXSA9IG9wdHMuaGVhZGVycyB8fCB7fVxuXG4gICAgY29uc3QgcmVzb2x2ZWRVcmwgPSBuZXcgVVJMKG9wdHMudXJpKVxuICAgIGNvbnN0IHsgb3JpZ2luLCBwb3J0LCBob3N0LCB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IHJlc29sdmVkVXJsXG5cbiAgICBpZiAob3B0cy5hdXRoICYmIG9wdHMudG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5hdXRoIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggb3B0cy50b2tlbicpXG4gICAgfSBlbHNlIGlmIChvcHRzLmF1dGgpIHtcbiAgICAgIC8qIEBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBvcHRzLnRva2VuICovXG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtvcHRzLmF1dGh9YFxuICAgIH0gZWxzZSBpZiAob3B0cy50b2tlbikge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gb3B0cy50b2tlblxuICAgIH0gZWxzZSBpZiAodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke2RlY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKX1gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucHJveHlUbHMgfSlcbiAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnJlcXVlc3RUbHMgfSlcbiAgICB0aGlzW2tDbGllbnRdID0gY2xpZW50RmFjdG9yeShyZXNvbHZlZFVybCwgeyBjb25uZWN0IH0pXG4gICAgdGhpc1trQWdlbnRdID0gbmV3IEFnZW50KHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBjb25uZWN0OiBhc3luYyAob3B0cywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RlZEhvc3QgPSBvcHRzLmhvc3RcbiAgICAgICAgaWYgKCFvcHRzLnBvcnQpIHtcbiAgICAgICAgICByZXF1ZXN0ZWRIb3N0ICs9IGA6JHtkZWZhdWx0UHJvdG9jb2xQb3J0KG9wdHMucHJvdG9jb2wpfWBcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgc29ja2V0LCBzdGF0dXNDb2RlIH0gPSBhd2FpdCB0aGlzW2tDbGllbnRdLmNvbm5lY3Qoe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICAgIHBhdGg6IHJlcXVlc3RlZEhvc3QsXG4gICAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAuLi50aGlzW2tQcm94eUhlYWRlcnNdLFxuICAgICAgICAgICAgICBob3N0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgKCkgPT4ge30pLmRlc3Ryb3koKVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoYFByb3h5IHJlc3BvbnNlICgke3N0YXR1c0NvZGV9KSAhPT0gMjAwIHdoZW4gSFRUUCBUdW5uZWxpbmdgKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdHMucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBzb2NrZXQpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHNlcnZlcm5hbWVcbiAgICAgICAgICBpZiAodGhpc1trUmVxdWVzdFRsc10pIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSB0aGlzW2tSZXF1ZXN0VGxzXS5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZlcm5hbWUgPSBvcHRzLnNlcnZlcm5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSh7IC4uLm9wdHMsIHNlcnZlcm5hbWUsIGh0dHBTb2NrZXQ6IHNvY2tldCB9LCBjYWxsYmFjaylcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgeyBob3N0IH0gPSBuZXcgVVJMKG9wdHMub3JpZ2luKVxuICAgIGNvbnN0IGhlYWRlcnMgPSBidWlsZEhlYWRlcnMob3B0cy5oZWFkZXJzKVxuICAgIHRocm93SWZQcm94eUF1dGhJc1NlbnQoaGVhZGVycylcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICBob3N0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5jbG9zZSgpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uZGVzdHJveSgpXG4gICAgYXdhaXQgdGhpc1trQ2xpZW50XS5kZXN0cm95KClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzIChoZWFkZXJzKSB7XG4gIC8vIFdoZW4gdXNpbmcgdW5kaWNpLmZldGNoLCB0aGUgaGVhZGVycyBsaXN0IGlzIHN0b3JlZFxuICAvLyBhcyBhbiBhcnJheS5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgY29uc3QgaGVhZGVyc1BhaXIgPSB7fVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBoZWFkZXJzUGFpcltoZWFkZXJzW2ldXSA9IGhlYWRlcnNbaSArIDFdXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNQYWlyXG4gIH1cblxuICByZXR1cm4gaGVhZGVyc1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICpcbiAqIFByZXZpb3VzIHZlcnNpb25zIG9mIFByb3h5QWdlbnQgc3VnZ2VzdHMgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaW4gcmVxdWVzdCBoZWFkZXJzXG4gKiBOZXZlcnRoZWxlc3MsIGl0IHdhcyBjaGFuZ2VkIGFuZCB0byBhdm9pZCBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYnkgZW5kIHVzZXJzXG4gKiB0aGlzIGNoZWNrIHdhcyBjcmVhdGVkLlxuICogSXQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICovXG5mdW5jdGlvbiB0aHJvd0lmUHJveHlBdXRoSXNTZW50IChoZWFkZXJzKSB7XG4gIGNvbnN0IGV4aXN0UHJveHlBdXRoID0gaGVhZGVycyAmJiBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgIC5maW5kKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSAncHJveHktYXV0aG9yaXphdGlvbicpXG4gIGlmIChleGlzdFByb3h5QXV0aCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgYmUgc2VudCBpbiBQcm94eUFnZW50IGNvbnN0cnVjdG9yJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByb3h5QWdlbnRcbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCB7IGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IFJlcXVlc3RSZXRyeUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGlzRGlzdHVyYmVkLCBwYXJzZUhlYWRlcnMsIHBhcnNlUmFuZ2VIZWFkZXIgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIgKHJldHJ5QWZ0ZXIpIHtcbiAgY29uc3QgY3VycmVudCA9IERhdGUubm93KClcbiAgY29uc3QgZGlmZiA9IG5ldyBEYXRlKHJldHJ5QWZ0ZXIpLmdldFRpbWUoKSAtIGN1cnJlbnRcblxuICByZXR1cm4gZGlmZlxufVxuXG5jbGFzcyBSZXRyeUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcnMpIHtcbiAgICBjb25zdCB7IHJldHJ5T3B0aW9ucywgLi4uZGlzcGF0Y2hPcHRzIH0gPSBvcHRzXG4gICAgY29uc3Qge1xuICAgICAgLy8gUmV0cnkgc2NvcGVkXG4gICAgICByZXRyeTogcmV0cnlGbixcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICBtYXhUaW1lb3V0LFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICAvLyBSZXNwb25zZSBzY29wZWRcbiAgICAgIG1ldGhvZHMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgcmV0cnlBZnRlcixcbiAgICAgIHN0YXR1c0NvZGVzXG4gICAgfSA9IHJldHJ5T3B0aW9ucyA/PyB7fVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGhhbmRsZXJzLmRpc3BhdGNoXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcnMuaGFuZGxlclxuICAgIHRoaXMub3B0cyA9IGRpc3BhdGNoT3B0c1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2VcbiAgICB0aGlzLnJldHJ5T3B0cyA9IHtcbiAgICAgIHJldHJ5OiByZXRyeUZuID8/IFJldHJ5SGFuZGxlcltrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSxcbiAgICAgIHJldHJ5QWZ0ZXI6IHJldHJ5QWZ0ZXIgPz8gdHJ1ZSxcbiAgICAgIG1heFRpbWVvdXQ6IG1heFRpbWVvdXQgPz8gMzAgKiAxMDAwLCAvLyAzMHMsXG4gICAgICB0aW1lb3V0OiBtaW5UaW1lb3V0ID8/IDUwMCwgLy8gLjVzXG4gICAgICB0aW1lb3V0RmFjdG9yOiB0aW1lb3V0RmFjdG9yID8/IDIsXG4gICAgICBtYXhSZXRyaWVzOiBtYXhSZXRyaWVzID8/IDUsXG4gICAgICAvLyBXaGF0IGVycm9ycyB3ZSBzaG91bGQgcmV0cnlcbiAgICAgIG1ldGhvZHM6IG1ldGhvZHMgPz8gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnXSxcbiAgICAgIC8vIEluZGljYXRlcyB3aGljaCBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIHN0YXR1c0NvZGVzOiBzdGF0dXNDb2RlcyA/PyBbNTAwLCA1MDIsIDUwMywgNTA0LCA0MjldLFxuICAgICAgLy8gTGlzdCBvZiBlcnJvcnMgdG8gcmV0cnlcbiAgICAgIGVycm9yQ29kZXM6IGVycm9yQ29kZXMgPz8gW1xuICAgICAgICAnRUNPTk5SRVNFVCcsXG4gICAgICAgICdFQ09OTlJFRlVTRUQnLFxuICAgICAgICAnRU5PVEZPVU5EJyxcbiAgICAgICAgJ0VORVRET1dOJyxcbiAgICAgICAgJ0VORVRVTlJFQUNIJyxcbiAgICAgICAgJ0VIT1NURE9XTicsXG4gICAgICAgICdFSE9TVFVOUkVBQ0gnLFxuICAgICAgICAnRVBJUEUnXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHRoaXMuc3RhcnQgPSAwXG4gICAgdGhpcy5lbmQgPSBudWxsXG4gICAgdGhpcy5ldGFnID0gbnVsbFxuICAgIHRoaXMucmVzdW1lID0gbnVsbFxuXG4gICAgLy8gSGFuZGxlIHBvc3NpYmxlIG9uQ29ubmVjdCBkdXBsaWNhdGlvblxuICAgIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QocmVhc29uID0+IHtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IHRydWVcbiAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgIHRoaXMuYWJvcnQocmVhc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWFzb24gPSByZWFzb25cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgb25SZXF1ZXN0U2VudCAoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25SZXF1ZXN0U2VudCgpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uVXBncmFkZSkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIGFib3J0KHRoaXMucmVhc29uKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICB9XG5cbiAgc3RhdGljIFtrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5XSAoZXJyLCB7IHN0YXRlLCBvcHRzIH0sIGNiKSB7XG4gICAgY29uc3QgeyBzdGF0dXNDb2RlLCBjb2RlLCBoZWFkZXJzIH0gPSBlcnJcbiAgICBjb25zdCB7IG1ldGhvZCwgcmV0cnlPcHRpb25zIH0gPSBvcHRzXG4gICAgY29uc3Qge1xuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBtYXhUaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIHN0YXR1c0NvZGVzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIG1ldGhvZHNcbiAgICB9ID0gcmV0cnlPcHRpb25zXG4gICAgbGV0IHsgY291bnRlciwgY3VycmVudFRpbWVvdXQgfSA9IHN0YXRlXG5cbiAgICBjdXJyZW50VGltZW91dCA9XG4gICAgICBjdXJyZW50VGltZW91dCAhPSBudWxsICYmIGN1cnJlbnRUaW1lb3V0ID4gMCA/IGN1cnJlbnRUaW1lb3V0IDogdGltZW91dFxuXG4gICAgLy8gQW55IGNvZGUgdGhhdCBpcyBub3QgYSBVbmRpY2kncyBvcmlnaW5hdGVkIGFuZCBhbGxvd2VkIHRvIHJldHJ5XG4gICAgaWYgKFxuICAgICAgY29kZSAmJlxuICAgICAgY29kZSAhPT0gJ1VORF9FUlJfUkVRX1JFVFJZJyAmJlxuICAgICAgY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJyAmJlxuICAgICAgIWVycm9yQ29kZXMuaW5jbHVkZXMoY29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIG1ldGhvZCBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IG1ldGhvZCBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXRob2RzKSAmJiAhbWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBzdGF0dXMgY29kZSBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IHN0YXR1cyBjb2RlIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChcbiAgICAgIHN0YXR1c0NvZGUgIT0gbnVsbCAmJlxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0dXNDb2RlcykgJiZcbiAgICAgICFzdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgcmVhY2hlZCB0aGUgbWF4IG51bWJlciBvZiByZXRyaWVzXG4gICAgaWYgKGNvdW50ZXIgPiBtYXhSZXRyaWVzKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgIT0gbnVsbCAmJiBoZWFkZXJzWydyZXRyeS1hZnRlciddXG4gICAgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHtcbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPSBOdW1iZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPSBpc05hTihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA/IGNhbGN1bGF0ZVJldHJ5QWZ0ZXJIZWFkZXIocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgOiByZXRyeUFmdGVySGVhZGVyICogMWUzIC8vIFJldHJ5LUFmdGVyIGlzIGluIHNlY29uZHNcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVRpbWVvdXQgPVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA+IDBcbiAgICAgICAgPyBNYXRoLm1pbihyZXRyeUFmdGVySGVhZGVyLCBtYXhUaW1lb3V0KVxuICAgICAgICA6IE1hdGgubWluKGN1cnJlbnRUaW1lb3V0ICogdGltZW91dEZhY3RvciAqKiBjb3VudGVyLCBtYXhUaW1lb3V0KVxuXG4gICAgc3RhdGUuY3VycmVudFRpbWVvdXQgPSByZXRyeVRpbWVvdXRcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gY2IobnVsbCksIHJldHJ5VGltZW91dClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ICs9IDFcblxuICAgIGlmIChzdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIENoZWNrcG9pbnQgZm9yIHJlc3VtZSBmcm9tIHdoZXJlIHdlIGxlZnQgaXRcbiAgICBpZiAodGhpcy5yZXN1bWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDYpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG4gICAgICAvLyBJZiBubyBjb250ZW50IHJhbmdlXG4gICAgICBpZiAoIWNvbnRlbnRSYW5nZSkge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignQ29udGVudC1SYW5nZSBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gTGV0J3Mgc3RhcnQgd2l0aCBhIHdlYWsgZXRhZyBjaGVja1xuICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsICYmIHRoaXMuZXRhZyAhPT0gaGVhZGVycy5ldGFnKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdFVGFnIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSBjb250ZW50UmFuZ2VcblxuICAgICAgYXNzZXJ0KHRoaXMuc3RhcnQgPT09IHN0YXJ0LCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG4gICAgICBhc3NlcnQodGhpcy5lbmQgPT0gbnVsbCB8fCB0aGlzLmVuZCA9PT0gZW5kLCAnY29udGVudC1yYW5nZSBtaXNtYXRjaCcpXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA2KSB7XG4gICAgICAgIC8vIEZpcnN0IHRpbWUgd2UgcmVjZWl2ZSAyMDZcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcblxuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgICByZXN1bWUsXG4gICAgICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSB9ID0gcmFuZ2VcblxuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgc3RhcnQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmIHRoaXMuc3RhcnQgIT09IHN0YXJ0LFxuICAgICAgICAgICdjb250ZW50LXJhbmdlIG1pc21hdGNoJ1xuICAgICAgICApXG4gICAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoc3RhcnQpKVxuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgZW5kICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGVuZCkgJiYgdGhpcy5lbmQgIT09IGVuZCxcbiAgICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydFxuICAgICAgICB0aGlzLmVuZCA9IGVuZFxuICAgICAgfVxuXG4gICAgICAvLyBXZSBtYWtlIG91ciBiZXN0IHRvIGNoZWNrcG9pbnQgdGhlIGJvZHkgZm9yIGZ1cnRoZXIgcmFuZ2UgaGVhZGVyc1xuICAgICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cbiAgICAgICAgdGhpcy5lbmQgPSBjb250ZW50TGVuZ3RoICE9IG51bGwgPyBOdW1iZXIoY29udGVudExlbmd0aCkgOiBudWxsXG4gICAgICB9XG5cbiAgICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUodGhpcy5zdGFydCkpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHRoaXMuZW5kID09IG51bGwgfHwgTnVtYmVyLmlzRmluaXRlKHRoaXMuZW5kKSxcbiAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICApXG5cbiAgICAgIHRoaXMucmVzdW1lID0gcmVzdW1lXG4gICAgICB0aGlzLmV0YWcgPSBoZWFkZXJzLmV0YWcgIT0gbnVsbCA/IGhlYWRlcnMuZXRhZyA6IG51bGxcblxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgIHJlc3VtZSxcbiAgICAgICAgc3RhdHVzTWVzc2FnZVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignUmVxdWVzdCBmYWlsZWQnLCBzdGF0dXNDb2RlLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgIH0pXG5cbiAgICB0aGlzLmFib3J0KGVycilcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIHRoaXMuc3RhcnQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YShjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHJhd1RyYWlsZXJzKSB7XG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMFxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZShyYXdUcmFpbGVycylcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgIH1cblxuICAgIHRoaXMucmV0cnlPcHRzLnJldHJ5KFxuICAgICAgZXJyLFxuICAgICAge1xuICAgICAgICBzdGF0ZTogeyBjb3VudGVyOiB0aGlzLnJldHJ5Q291bnQrKywgY3VycmVudFRpbWVvdXQ6IHRoaXMucmV0cnlBZnRlciB9LFxuICAgICAgICBvcHRzOiB7IHJldHJ5T3B0aW9uczogdGhpcy5yZXRyeU9wdHMsIC4uLnRoaXMub3B0cyB9XG4gICAgICB9LFxuICAgICAgb25SZXRyeS5iaW5kKHRoaXMpXG4gICAgKVxuXG4gICAgZnVuY3Rpb24gb25SZXRyeSAoZXJyKSB7XG4gICAgICBpZiAoZXJyICE9IG51bGwgfHwgdGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydCAhPT0gMCkge1xuICAgICAgICB0aGlzLm9wdHMgPSB7XG4gICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cy5oZWFkZXJzLFxuICAgICAgICAgICAgcmFuZ2U6IGBieXRlcz0ke3RoaXMuc3RhcnR9LSR7dGhpcy5lbmQgPz8gJyd9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmV0cnlIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFdlIGluY2x1ZGUgYSB2ZXJzaW9uIG51bWJlciBmb3IgdGhlIERpc3BhdGNoZXIgQVBJLiBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsXG4vLyB0aGlzIHZlcnNpb24gbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbERpc3BhdGNoZXIgPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsRGlzcGF0Y2hlci4xJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcblxuaWYgKGdldEdsb2JhbERpc3BhdGNoZXIoKSA9PT0gdW5kZWZpbmVkKSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIobmV3IEFnZW50KCkpXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbERpc3BhdGNoZXIgKGFnZW50KSB7XG4gIGlmICghYWdlbnQgfHwgdHlwZW9mIGFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBhZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbERpc3BhdGNoZXIsIHtcbiAgICB2YWx1ZTogYWdlbnQsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxEaXNwYXRjaGVyICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsRGlzcGF0Y2hlcl1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldEdsb2JhbERpc3BhdGNoZXIsXG4gIGdldEdsb2JhbERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBEZWNvcmF0b3JIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKGhhbmRsZXIpIHtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gIH1cblxuICBvbkNvbm5lY3QgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29ubmVjdCguLi5hcmdzKVxuICB9XG5cbiAgb25FcnJvciAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvciguLi5hcmdzKVxuICB9XG5cbiAgb25VcGdyYWRlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoLi4uYXJncylcbiAgfVxuXG4gIG9uSGVhZGVycyAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKC4uLmFyZ3MpXG4gIH1cblxuICBvbkRhdGEgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRGF0YSguLi5hcmdzKVxuICB9XG5cbiAgb25Db21wbGV0ZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSguLi5hcmdzKVxuICB9XG5cbiAgb25Cb2R5U2VudCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudCguLi5hcmdzKVxuICB9XG59XG4iLCAiLy8gaHR0cHM6Ly9naXRodWIuY29tL0V0aGFuLUFycm93b29kL3VuZGljaS1mZXRjaFxuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IGtHdWFyZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgbWFrZUl0ZXJhdG9yLFxuICBpc1ZhbGlkSGVhZGVyTmFtZSxcbiAgaXNWYWxpZEhlYWRlclZhbHVlXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCBrSGVhZGVyc01hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAnKVxuY29uc3Qga0hlYWRlcnNTb3J0ZWRNYXAgPSBTeW1ib2woJ2hlYWRlcnMgbWFwIHNvcnRlZCcpXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlIChjb2RlKSB7XG4gIHJldHVybiBjb2RlID09PSAweDAwYSB8fCBjb2RlID09PSAweDAwZCB8fCBjb2RlID09PSAweDAwOSB8fCBjb2RlID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLXZhbHVlLW5vcm1hbGl6ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGhlYWRlclZhbHVlTm9ybWFsaXplIChwb3RlbnRpYWxWYWx1ZSkge1xuICAvLyAgVG8gbm9ybWFsaXplIGEgYnl0ZSBzZXF1ZW5jZSBwb3RlbnRpYWxWYWx1ZSwgcmVtb3ZlXG4gIC8vICBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGJ5dGVzIGZyb21cbiAgLy8gIHBvdGVudGlhbFZhbHVlLlxuICBsZXQgaSA9IDA7IGxldCBqID0gcG90ZW50aWFsVmFsdWUubGVuZ3RoXG5cbiAgd2hpbGUgKGogPiBpICYmIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZShwb3RlbnRpYWxWYWx1ZS5jaGFyQ29kZUF0KGogLSAxKSkpIC0talxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaSkpKSArK2lcblxuICByZXR1cm4gaSA9PT0gMCAmJiBqID09PSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGggPyBwb3RlbnRpYWxWYWx1ZSA6IHBvdGVudGlhbFZhbHVlLnN1YnN0cmluZyhpLCBqKVxufVxuXG5mdW5jdGlvbiBmaWxsIChoZWFkZXJzLCBvYmplY3QpIHtcbiAgLy8gVG8gZmlsbCBhIEhlYWRlcnMgb2JqZWN0IGhlYWRlcnMgd2l0aCBhIGdpdmVuIG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBzZXF1ZW5jZSwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gb2JqZWN0OlxuICAvLyBOb3RlOiB3ZWJpZGwgY29udmVyc2lvbiB0byBhcnJheSBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgaGVhZGVyID0gb2JqZWN0W2ldXG4gICAgICAvLyAxLiBJZiBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBleGFjdGx5IHR3byBpdGVtcywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChoZWFkZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgICBtZXNzYWdlOiBgZXhwZWN0ZWQgbmFtZS92YWx1ZSBwYWlyIHRvIGJlIGxlbmd0aCAyLCBmb3VuZCAke2hlYWRlci5sZW5ndGh9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIChoZWFkZXJcdTIwMTlzIGZpcnN0IGl0ZW0sIGhlYWRlclx1MjAxOXMgc2Vjb25kIGl0ZW0pIHRvIGhlYWRlcnMuXG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywgaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIC8vIE5vdGU6IG51bGwgc2hvdWxkIHRocm93XG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIG9iamVjdCBpcyBhIHJlY29yZCwgdGhlbiBmb3IgZWFjaCBrZXkgXHUyMTkyIHZhbHVlIGluIG9iamVjdCxcbiAgICAvLyAgICBhcHBlbmQgKGtleSwgdmFsdWUpIHRvIGhlYWRlcnNcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgYXBwZW5kSGVhZGVyKGhlYWRlcnMsIGtleXNbaV0sIG9iamVjdFtrZXlzW2ldXSlcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlcnMtYXBwZW5kXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZEhlYWRlciAoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICB2YWx1ZSA9IGhlYWRlclZhbHVlTm9ybWFsaXplKHZhbHVlKVxuXG4gIC8vIDIuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUgb3IgdmFsdWUgaXMgbm90IGFcbiAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgfSlcbiAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbHVlKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMuYXBwZW5kJyxcbiAgICAgIHZhbHVlLFxuICAgICAgdHlwZTogJ2hlYWRlciB2YWx1ZSdcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gNC4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgaWYgKGhlYWRlcnNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICB9IGVsc2UgaWYgKGhlYWRlcnNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCI6XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cblxuICAvLyA3LiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmV0dXJuIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQobmFtZSwgdmFsdWUpXG5cbiAgLy8gOC4gSWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIGhlYWRlcnNcbn1cblxuY2xhc3MgSGVhZGVyc0xpc3Qge1xuICAvKiogQHR5cGUge1tzdHJpbmcsIHN0cmluZ11bXXxudWxsfSAqL1xuICBjb29raWVzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChpbml0KSB7XG4gICAgaWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXRba0hlYWRlcnNNYXBdKVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBpbml0W2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgdGhpcy5jb29raWVzID0gaW5pdC5jb29raWVzID09PSBudWxsID8gbnVsbCA6IFsuLi5pbml0LmNvb2tpZXNdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0KVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1saXN0LWNvbnRhaW5zXG4gIGNvbnRhaW5zIChuYW1lKSB7XG4gICAgLy8gQSBoZWFkZXIgbGlzdCBsaXN0IGNvbnRhaW5zIGEgaGVhZGVyIG5hbWUgbmFtZSBpZiBsaXN0XG4gICAgLy8gY29udGFpbnMgYSBoZWFkZXIgd2hvc2UgbmFtZSBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZVxuICAgIC8vIG1hdGNoIGZvciBuYW1lLlxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTWFwXS5oYXMobmFtZSlcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5jbGVhcigpXG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgdGhpcy5jb29raWVzID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtYXBwZW5kXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgbmFtZSB0byB0aGUgZmlyc3Qgc3VjaFxuICAgIC8vICAgIGhlYWRlclx1MjAxOXMgbmFtZS5cbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgZXhpc3RzID0gdGhpc1trSGVhZGVyc01hcF0uZ2V0KGxvd2VyY2FzZU5hbWUpXG5cbiAgICAvLyAyLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBsaXN0LlxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGNvbnN0IGRlbGltaXRlciA9IGxvd2VyY2FzZU5hbWUgPT09ICdjb29raWUnID8gJzsgJyA6ICcsICdcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7XG4gICAgICAgIG5hbWU6IGV4aXN0cy5uYW1lLFxuICAgICAgICB2YWx1ZTogYCR7ZXhpc3RzLnZhbHVlfSR7ZGVsaW1pdGVyfSR7dmFsdWV9YFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgICB9XG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPz89IFtdXG4gICAgICB0aGlzLmNvb2tpZXMucHVzaCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zZXRcbiAgc2V0IChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IFt2YWx1ZV1cbiAgICB9XG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IHRoZSB2YWx1ZSBvZlxuICAgIC8vICAgIHRoZSBmaXJzdCBzdWNoIGhlYWRlciB0byB2YWx1ZSBhbmQgcmVtb3ZlIHRoZVxuICAgIC8vICAgIG90aGVycy5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGFwcGVuZCBoZWFkZXIgKG5hbWUsIHZhbHVlKSB0byBsaXN0LlxuICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1kZWxldGVcbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG5cbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobmFtZS50b0xvd2VyQ2FzZSgpKVxuXG4gICAgLy8gMS4gSWYgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW4gcmV0dXJuIG51bGwuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsXG4gICAgLy8gICAgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSAweDJDIDB4MjAsIGluIG9yZGVyLlxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHZhbHVlLnZhbHVlXG4gIH1cblxuICAqIFtTeW1ib2wuaXRlcmF0b3JdICgpIHtcbiAgICAvLyB1c2UgdGhlIGxvd2VyY2FzZWQgbmFtZVxuICAgIGZvciAoY29uc3QgW25hbWUsIHsgdmFsdWUgfV0gb2YgdGhpc1trSGVhZGVyc01hcF0pIHtcbiAgICAgIHlpZWxkIFtuYW1lLCB2YWx1ZV1cbiAgICB9XG4gIH1cblxuICBnZXQgZW50cmllcyAoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9XG5cbiAgICBpZiAodGhpc1trSGVhZGVyc01hcF0uc2l6ZSkge1xuICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgdGhpc1trSGVhZGVyc01hcF0udmFsdWVzKCkpIHtcbiAgICAgICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVycy1jbGFzc1xuY2xhc3MgSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yIChpbml0ID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGluaXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0gPSBuZXcgSGVhZGVyc0xpc3QoKVxuXG4gICAgLy8gVGhlIG5ldyBIZWFkZXJzKGluaXQpIGNvbnN0cnVjdG9yIHN0ZXBzIGFyZTpcblxuICAgIC8vIDEuIFNldCB0aGlzXHUyMDE5cyBndWFyZCB0byBcIm5vbmVcIi5cbiAgICB0aGlzW2tHdWFyZF0gPSAnbm9uZSdcblxuICAgIC8vIDIuIElmIGluaXQgaXMgZ2l2ZW4sIHRoZW4gZmlsbCB0aGlzIHdpdGggaW5pdC5cbiAgICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQoaW5pdClcbiAgICAgIGZpbGwodGhpcywgaW5pdClcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtYXBwZW5kXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0hlYWRlcnMuYXBwZW5kJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUpXG5cbiAgICByZXR1cm4gYXBwZW5kSGVhZGVyKHRoaXMsIG5hbWUsIHZhbHVlKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmRlbGV0ZScsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCBuYW1lXG4gICAgLy8gICAgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyIG5hbWUsIGFuZFxuICAgIC8vICAgIG5hbWUgaXMgbm90IGEgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QtaGVhZGVyIG5hbWUsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzXG4gICAgLy8gICAgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9IGVsc2UgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyA2LiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIG5hbWUsIHRoZW5cbiAgICAvLyAgICByZXR1cm4uXG4gICAgaWYgKCF0aGlzW2tIZWFkZXJzTGlzdF0uY29udGFpbnMobmFtZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDcuIERlbGV0ZSBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpcy5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0uZGVsZXRlKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5nZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZ2V0JyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgaGVhZGVyXG4gICAgLy8gICAgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdLmdldChuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWhhc1xuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuaGFzJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmhhcycsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIG5hbWU7XG4gICAgLy8gICAgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uY29udGFpbnMobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1zZXRcbiAgc2V0IChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5zZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIC8vIDEuIE5vcm1hbGl6ZSB2YWx1ZS5cbiAgICB2YWx1ZSA9IGhlYWRlclZhbHVlTm9ybWFsaXplKHZhbHVlKVxuXG4gICAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAgIC8vICAgIGhlYWRlciB2YWx1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbHVlKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLnNldCcsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiBhbmRcbiAgICAvLyAgICBuYW1lL3ZhbHVlIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlcixcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDcuIFNldCAobmFtZSwgdmFsdWUpIGluIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIC8vIDguIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoaXNcbiAgICB0aGlzW2tIZWFkZXJzTGlzdF0uc2V0KG5hbWUsIHZhbHVlKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWdldHNldGNvb2tpZVxuICBnZXRTZXRDb29raWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBTZXQtQ29va2llYCwgdGhlbiByZXR1cm4gXHUwMEFCIFx1MDBCQi5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gWy4uLmxpc3RdXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gIGdldCBba0hlYWRlcnNTb3J0ZWRNYXBdICgpIHtcbiAgICBpZiAodGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSkge1xuICAgICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IFsuLi50aGlzW2tIZWFkZXJzTGlzdF1dLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gLTEgOiAxKVxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gbmFtZXNbaV1cbiAgICAgIC8vIDEuIElmIG5hbWUgaXMgYHNldC1jb29raWVgLCB0aGVuOlxuICAgICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICAvLyAxLiBMZXQgdmFsdWVzIGJlIGEgbGlzdCBvZiBhbGwgdmFsdWVzIG9mIGhlYWRlcnMgaW4gbGlzdCB3aG9zZSBuYW1lXG4gICAgICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLCBpbiBvcmRlci5cblxuICAgICAgICAvLyAyLiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gICAgICAgIC8vIDEuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29va2llcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llc1tqXV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuXG4gICAgICAgIC8vIDIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICAgIGFzc2VydCh2YWx1ZSAhPT0gbnVsbClcblxuICAgICAgICAvLyAzLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVyc1xuXG4gICAgLy8gNC4gUmV0dXJuIGhlYWRlcnMuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5JylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICBlbnRyaWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleSt2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogSGVhZGVycykgPT4gdm9pZH0gY2FsbGJhY2tGblxuICAgKiBAcGFyYW0ge3Vua25vd259IHRoaXNBcmdcbiAgICovXG4gIGZvckVhY2ggKGNhbGxiYWNrRm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdIZWFkZXJzJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0Z1bmN0aW9uJy5cIlxuICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGNhbGxiYWNrRm4uYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBrZXksIHRoaXNdKVxuICAgIH1cbiAgfVxuXG4gIFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB2YWx1ZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVudHJpZXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZvckVhY2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiB7IGVudW1lcmFibGU6IGZhbHNlIH0sXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdIZWFkZXJzJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgW3V0aWwuaW5zcGVjdC5jdXN0b21dOiB7XG4gICAgZW51bWVyYWJsZTogZmFsc2VcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoVltTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWKVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgSGVhZGVycyxcbiAgSGVhZGVyc0xpc3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBIZWFkZXJzLCBIZWFkZXJzTGlzdCwgZmlsbCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgZXh0cmFjdEJvZHksIGNsb25lQm9keSwgbWl4aW5Cb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHtcbiAgaXNWYWxpZFJlYXNvblBocmFzZSxcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBpc0Vycm9yTGlrZSxcbiAgaXNvbW9ycGhpY0VuY29kZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgRE9NRXhjZXB0aW9uXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcblxuY29uc3QgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtIHx8IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoJ3V0Zi04JylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3Jlc3BvbnNlLWNsYXNzXG5jbGFzcyBSZXNwb25zZSB7XG4gIC8vIENyZWF0ZXMgbmV0d29yayBlcnJvciBSZXNwb25zZS5cbiAgc3RhdGljIGVycm9yICgpIHtcbiAgICAvLyBUT0RPXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIFRoZSBzdGF0aWMgZXJyb3IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFcbiAgICAvLyBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IG5ldHdvcmsgZXJyb3IsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5c1xuICAgIC8vIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlLWpzb25cbiAgc3RhdGljIGpzb24gKGRhdGEsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5qc29uJyB9KVxuXG4gICAgaWYgKGluaXQgIT09IG51bGwpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNlcmlhbGl6ZSBhIEphdmFTY3JpcHQgdmFsdWUgdG8gSlNPTiBieXRlcyBvbiBkYXRhLlxuICAgIGNvbnN0IGJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKFxuICAgICAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nKGRhdGEpXG4gICAgKVxuXG4gICAgLy8gMi4gTGV0IGJvZHkgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJ5dGVzLlxuICAgIGNvbnN0IGJvZHkgPSBleHRyYWN0Qm9keShieXRlcylcblxuICAgIC8vIDMuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyByZXNwb25zZSxcbiAgICAvLyAgICBcInJlc3BvbnNlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ3Jlc3BvbnNlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNC4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2VPYmplY3QsIGluaXQsIGFuZCAoYm9keSwgXCJhcHBsaWNhdGlvbi9qc29uXCIpLlxuICAgIGluaXRpYWxpemVSZXNwb25zZShyZXNwb25zZU9iamVjdCwgaW5pdCwgeyBib2R5OiBib2R5WzBdLCB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSlcblxuICAgIC8vIDUuIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIENyZWF0ZXMgYSByZWRpcmVjdCBSZXNwb25zZSB0aGF0IHJlZGlyZWN0cyB0byB1cmwgd2l0aCBzdGF0dXMgc3RhdHVzLlxuICBzdGF0aWMgcmVkaXJlY3QgKHVybCwgc3RhdHVzID0gMzAyKSB7XG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXNwb25zZS5yZWRpcmVjdCcgfSlcblxuICAgIHVybCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh1cmwpXG4gICAgc3RhdHVzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oc3RhdHVzKVxuXG4gICAgLy8gMS4gTGV0IHBhcnNlZFVSTCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdXJsIHdpdGggY3VycmVudCBzZXR0aW5nc1xuICAgIC8vIG9iamVjdFx1MjAxOXMgQVBJIGJhc2UgVVJMLlxuICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIFRPRE86IGJhc2UtVVJMP1xuICAgIGxldCBwYXJzZWRVUkxcbiAgICB0cnkge1xuICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwsIGdldEdsb2JhbE9yaWdpbigpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIHVybCksIHtcbiAgICAgICAgY2F1c2U6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZSAnICsgc3RhdHVzKVxuICAgIH1cblxuICAgIC8vIDQuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LFxuICAgIC8vIGdpdmVuIGEgbmV3IHJlc3BvbnNlLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIHN0YXR1cy5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLnN0YXR1cyA9IHN0YXR1c1xuXG4gICAgLy8gNi4gTGV0IHZhbHVlIGJlIHBhcnNlZFVSTCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgIGNvbnN0IHZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShVUkxTZXJpYWxpemVyKHBhcnNlZFVSTCkpXG5cbiAgICAvLyA3LiBBcHBlbmQgYExvY2F0aW9uYC92YWx1ZSB0byByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdsb2NhdGlvbicsIHZhbHVlKVxuXG4gICAgLy8gOC4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZVxuICBjb25zdHJ1Y3RvciAoYm9keSA9IG51bGwsIGluaXQgPSB7fSkge1xuICAgIGlmIChib2R5ICE9PSBudWxsKSB7XG4gICAgICBib2R5ID0gd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQoYm9keSlcbiAgICB9XG5cbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG5cbiAgICAvLyBUT0RPXG4gICAgdGhpc1trUmVhbG1dID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIHJlc3BvbnNlIHRvIGEgbmV3IHJlc3BvbnNlLlxuICAgIHRoaXNba1N0YXRlXSA9IG1ha2VSZXNwb25zZSh7fSlcblxuICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IGFuZCBndWFyZFxuICAgIC8vIGlzIFwicmVzcG9uc2VcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gdGhpc1trU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSBudWxsLlxuICAgIGxldCBib2R5V2l0aFR5cGUgPSBudWxsXG5cbiAgICAvLyA0LiBJZiBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBib2R5V2l0aFR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJvZHkuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIHR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGJvZHlXaXRoVHlwZSA9IHsgYm9keTogZXh0cmFjdGVkQm9keSwgdHlwZSB9XG4gICAgfVxuXG4gICAgLy8gNS4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gdGhpcywgaW5pdCwgYW5kIGJvZHlXaXRoVHlwZS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UodGhpcywgaW5pdCwgYm9keVdpdGhUeXBlKVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgdHlwZSwgZS5nLiwgXCJjb3JzXCIuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSB0eXBlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyB0eXBlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgVVJMLCBpZiBpdCBoYXMgb25lOyBvdGhlcndpc2UgdGhlIGVtcHR5IHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICBjb25zdCB1cmxMaXN0ID0gdGhpc1trU3RhdGVdLnVybExpc3RcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBVUkwgaXMgbnVsbDsgb3RoZXJ3aXNlIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkwsXG4gICAgLy8gc2VyaWFsaXplZCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnQgc2V0IHRvIHRydWUuXG4gICAgY29uc3QgdXJsID0gdXJsTGlzdFt1cmxMaXN0Lmxlbmd0aCAtIDFdID8/IG51bGxcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHVybCwgdHJ1ZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZSB3YXMgb2J0YWluZWQgdGhyb3VnaCBhIHJlZGlyZWN0LlxuICBnZXQgcmVkaXJlY3RlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3RlZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkxcbiAgICAvLyBsaXN0IGhhcyBtb3JlIHRoYW4gb25lIGl0ZW07IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnVybExpc3QubGVuZ3RoID4gMVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICBnZXQgc3RhdHVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW4gb2sgc3RhdHVzLlxuICBnZXQgb2sgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIG9rIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhblxuICAgIC8vIG9rIHN0YXR1czsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW2tTdGF0ZV0uc3RhdHVzIDw9IDI5OVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UuXG4gIGdldCBzdGF0dXNUZXh0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXNUZXh0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXNcbiAgICAvLyBtZXNzYWdlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgaGVhZGVycyBhcyBIZWFkZXJzLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlc3BvbnNlLlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8ICh0aGlzLmJvZHkgJiYgdGhpcy5ib2R5LmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UuY2xvbmUnLFxuICAgICAgICBtZXNzYWdlOiAnQm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXNwb25zZS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuXG4gICAgLy8gY2xvbmVkUmVzcG9uc2UsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXNwb25zZVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICByZXR1cm4gY2xvbmVkUmVzcG9uc2VPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVzcG9uc2UpXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLnByb3RvdHlwZSwge1xuICB0eXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb2s6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0ZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHN0YXR1c1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1Jlc3BvbnNlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UsIHtcbiAganNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXNwb25zZS1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgLy8gVG8gY2xvbmUgYSByZXNwb25zZSByZXNwb25zZSwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2UsIHRoZW4gcmV0dXJuIGEgbmV3IGlkZW50aWNhbFxuICAvLyBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbCByZXNwb25zZSBpcyBhIGNsb25lIG9mIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZS5cbiAgaWYgKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gZmlsdGVyUmVzcG9uc2UoXG4gICAgICBjbG9uZVJlc3BvbnNlKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpLFxuICAgICAgcmVzcG9uc2UudHlwZVxuICAgIClcbiAgfVxuXG4gIC8vIDIuIExldCBuZXdSZXNwb25zZSBiZSBhIGNvcHkgb2YgcmVzcG9uc2UsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1Jlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgLi4ucmVzcG9uc2UsIGJvZHk6IG51bGwgfSlcblxuICAvLyAzLiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgbmV3UmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlc3BvbnNlXHUyMDE5cyBib2R5LlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVzcG9uc2UuYm9keSA9IGNsb25lQm9keShyZXNwb25zZS5ib2R5KVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5ld1Jlc3BvbnNlLlxuICByZXR1cm4gbmV3UmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gbWFrZVJlc3BvbnNlIChpbml0KSB7XG4gIHJldHVybiB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgcmFuZ2VSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93UGFzc2VkOiBmYWxzZSxcbiAgICByZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgIHN0YXR1czogMjAwLFxuICAgIHRpbWluZ0luZm86IG51bGwsXG4gICAgY2FjaGVTdGF0ZTogJycsXG4gICAgc3RhdHVzVGV4dDogJycsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdC5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdC5oZWFkZXJzTGlzdClcbiAgICAgIDogbmV3IEhlYWRlcnNMaXN0KCksXG4gICAgdXJsTGlzdDogaW5pdC51cmxMaXN0ID8gWy4uLmluaXQudXJsTGlzdF0gOiBbXVxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VOZXR3b3JrRXJyb3IgKHJlYXNvbikge1xuICBjb25zdCBpc0Vycm9yID0gaXNFcnJvckxpa2UocmVhc29uKVxuICByZXR1cm4gbWFrZVJlc3BvbnNlKHtcbiAgICB0eXBlOiAnZXJyb3InLFxuICAgIHN0YXR1czogMCxcbiAgICBlcnJvcjogaXNFcnJvclxuICAgICAgPyByZWFzb25cbiAgICAgIDogbmV3IEVycm9yKHJlYXNvbiA/IFN0cmluZyhyZWFzb24pIDogcmVhc29uKSxcbiAgICBhYm9ydGVkOiByZWFzb24gJiYgcmVhc29uLm5hbWUgPT09ICdBYm9ydEVycm9yJ1xuICB9KVxufVxuXG5mdW5jdGlvbiBtYWtlRmlsdGVyZWRSZXNwb25zZSAocmVzcG9uc2UsIHN0YXRlKSB7XG4gIHN0YXRlID0ge1xuICAgIGludGVybmFsUmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgIC4uLnN0YXRlXG4gIH1cblxuICByZXR1cm4gbmV3IFByb3h5KHJlc3BvbnNlLCB7XG4gICAgZ2V0ICh0YXJnZXQsIHApIHtcbiAgICAgIHJldHVybiBwIGluIHN0YXRlID8gc3RhdGVbcF0gOiB0YXJnZXRbcF1cbiAgICB9LFxuICAgIHNldCAodGFyZ2V0LCBwLCB2YWx1ZSkge1xuICAgICAgYXNzZXJ0KCEocCBpbiBzdGF0ZSkpXG4gICAgICB0YXJnZXRbcF0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWZpbHRlcmVkLXJlc3BvbnNlXG5mdW5jdGlvbiBmaWx0ZXJSZXNwb25zZSAocmVzcG9uc2UsIHR5cGUpIHtcbiAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UsIGRlcGVuZGluZyBvbiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZzpcbiAgaWYgKHR5cGUgPT09ICdiYXNpYycpIHtcbiAgICAvLyBBIGJhc2ljIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImJhc2ljXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZS5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2Jhc2ljJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvcnMnKSB7XG4gICAgLy8gQSBDT1JTIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImNvcnNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyXG4gICAgLy8gbGlzdCB3aG9zZSBuYW1lIGlzIG5vdCBhIENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZSwgZ2l2ZW5cbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IENPUlMtc2FmZWxpc3RlZCByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdjb3JzJyxcbiAgICAgIGhlYWRlcnNMaXN0OiByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZScpIHtcbiAgICAvLyBBbiBvcGFxdWUgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzXG4gICAgLy8gXCJvcGFxdWVcIiwgVVJMIGxpc3QgaXMgdGhlIGVtcHR5IGxpc3QsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZVxuICAgIC8vIGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZScsXG4gICAgICB1cmxMaXN0OiBPYmplY3QuZnJlZXplKFtdKSxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29wYXF1ZXJlZGlyZWN0Jykge1xuICAgIC8vIEFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGVcbiAgICAvLyBpcyBcIm9wYXF1ZXJlZGlyZWN0XCIsIHN0YXR1cyBpcyAwLCBzdGF0dXMgbWVzc2FnZSBpcyB0aGUgZW1wdHkgYnl0ZVxuICAgIC8vIHNlcXVlbmNlLCBoZWFkZXIgbGlzdCBpcyBlbXB0eSwgYW5kIGJvZHkgaXMgbnVsbC5cblxuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ29wYXF1ZXJlZGlyZWN0JyxcbiAgICAgIHN0YXR1czogMCxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgaGVhZGVyc0xpc3Q6IFtdLFxuICAgICAgYm9keTogbnVsbFxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGZhbHNlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhcHByb3ByaWF0ZS1uZXR3b3JrLWVycm9yXG5mdW5jdGlvbiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IgKGZldGNoUGFyYW1zLCBlcnIgPSBudWxsKSB7XG4gIC8vIDEuIEFzc2VydDogZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQuXG4gIGFzc2VydChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpXG5cbiAgLy8gMi4gUmV0dXJuIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciBpZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkO1xuICAvLyBvdGhlcndpc2UgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgcmV0dXJuIGlzQWJvcnRlZChmZXRjaFBhcmFtcylcbiAgICA/IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJyksIHsgY2F1c2U6IGVyciB9KSlcbiAgICA6IG1ha2VOZXR3b3JrRXJyb3IoT2JqZWN0LmFzc2lnbihuZXcgRE9NRXhjZXB0aW9uKCdSZXF1ZXN0IHdhcyBjYW5jZWxsZWQuJyksIHsgY2F1c2U6IGVyciB9KSlcbn1cblxuLy8gaHR0cHM6Ly93aGF0cHIub3JnL2ZldGNoLzEzOTIuaHRtbCNpbml0aWFsaXplLWEtcmVzcG9uc2VcbmZ1bmN0aW9uIGluaXRpYWxpemVSZXNwb25zZSAocmVzcG9uc2UsIGluaXQsIGJvZHkpIHtcbiAgLy8gMS4gSWYgaW5pdFtcInN0YXR1c1wiXSBpcyBub3QgaW4gdGhlIHJhbmdlIDIwMCB0byA1OTksIGluY2x1c2l2ZSwgdGhlblxuICAvLyAgICB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gIGlmIChpbml0LnN0YXR1cyAhPT0gbnVsbCAmJiAoaW5pdC5zdGF0dXMgPCAyMDAgfHwgaW5pdC5zdGF0dXMgPiA1OTkpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2luaXRbXCJzdGF0dXNcIl0gbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLicpXG4gIH1cblxuICAvLyAyLiBJZiBpbml0W1wic3RhdHVzVGV4dFwiXSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVhc29uLXBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLFxuICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICAvLyBTZWUsIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yOlxuICAgIC8vICAgcmVhc29uLXBocmFzZSAgPSAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAgICBpZiAoIWlzVmFsaWRSZWFzb25QaHJhc2UoU3RyaW5nKGluaXQuc3RhdHVzVGV4dCkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0YXR1c1RleHQnKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFNldCByZXNwb25zZVx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byBpbml0W1wic3RhdHVzXCJdLlxuICBpZiAoJ3N0YXR1cycgaW4gaW5pdCAmJiBpbml0LnN0YXR1cyAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXMgPSBpbml0LnN0YXR1c1xuICB9XG5cbiAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gaW5pdFtcInN0YXR1c1RleHRcIl0uXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzVGV4dCA9IGluaXQuc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gNS4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIGZpbGwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgd2l0aCBpbml0W1wiaGVhZGVyc1wiXS5cbiAgaWYgKCdoZWFkZXJzJyBpbiBpbml0ICYmIGluaXQuaGVhZGVycyAhPSBudWxsKSB7XG4gICAgZmlsbChyZXNwb25zZVtrSGVhZGVyc10sIGluaXQuaGVhZGVycylcbiAgfVxuXG4gIC8vIDYuIElmIGJvZHkgd2FzIGdpdmVuLCB0aGVuOlxuICBpZiAoYm9keSkge1xuICAgIC8vIDEuIElmIHJlc3BvbnNlJ3Mgc3RhdHVzIGlzIGEgbnVsbCBib2R5IHN0YXR1cywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXNwb25zZSBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlJ3MgYm9keSB0byBib2R5J3MgYm9keS5cbiAgICByZXNwb25zZVtrU3RhdGVdLmJvZHkgPSBib2R5LmJvZHlcblxuICAgIC8vIDMuIElmIGJvZHkncyB0eXBlIGlzIG5vbi1udWxsIGFuZCByZXNwb25zZSdzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW5cbiAgICAvLyAgICBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LVR5cGVgLCBib2R5J3MgdHlwZSkgdG8gcmVzcG9uc2UncyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoYm9keS50eXBlICE9IG51bGwgJiYgIXJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuY29udGFpbnMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICByZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC10eXBlJywgYm9keS50eXBlKVxuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlYWRhYmxlU3RyZWFtXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgRm9ybURhdGFcbilcblxud2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgVVJMU2VhcmNoUGFyYW1zXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyN0eXBlZGVmZGVmLXhtbGh0dHByZXF1ZXN0Ym9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKFYpIHx8IHR5cGVzLmlzVHlwZWRBcnJheShWKSB8fCB0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICB9XG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmIChWIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0oVilcbiAgfVxuXG4gIC8vIE5vdGU6IHRoZSBzcGVjIGRvZXNuJ3QgaW5jbHVkZSBhc3luYyBpdGVyYWJsZXMsXG4gIC8vIHRoaXMgaXMgYW4gdW5kaWNpIGV4dGVuc2lvbi5cbiAgaWYgKFY/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gVlxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlhNTEh0dHBSZXF1ZXN0Qm9keUluaXQoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzdGF0dXNUZXh0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZVJlc3BvbnNlLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBSZXNwb25zZSxcbiAgY2xvbmVSZXNwb25zZVxufVxuIiwgIi8qIGdsb2JhbHMgQWJvcnRDb250cm9sbGVyICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBtaXhpbkJvZHksIGNsb25lQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHsgSGVhZGVycywgZmlsbDogZmlsbEhlYWRlcnMsIEhlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi4vY29tcGF0L2Rpc3BhdGNoZXItd2Vha3JlZicpKClcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIG5vcm1hbGl6ZU1ldGhvZFJlY29yZFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZXF1ZXN0RHVwbGV4XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7IGtIZWFkZXJzLCBrU2lnbmFsLCBrU3RhdGUsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldE1heExpc3RlbmVycywgc2V0TWF4TGlzdGVuZXJzLCBnZXRFdmVudExpc3RlbmVycywgZGVmYXVsdE1heExpc3RlbmVycyB9ID0gcmVxdWlyZSgnZXZlbnRzJylcblxubGV0IFRyYW5zZm9ybVN0cmVhbSA9IGdsb2JhbFRoaXMuVHJhbnNmb3JtU3RyZWFtXG5cbmNvbnN0IGtBYm9ydENvbnRyb2xsZXIgPSBTeW1ib2woJ2Fib3J0Q29udHJvbGxlcicpXG5cbmNvbnN0IHJlcXVlc3RGaW5hbGl6ZXIgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKHsgc2lnbmFsLCBhYm9ydCB9KSA9PiB7XG4gIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtY2xhc3NcbmNsYXNzIFJlcXVlc3Qge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3RcbiAgY29uc3RydWN0b3IgKGlucHV0LCBpbml0ID0ge30pIHtcbiAgICBpZiAoaW5wdXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaW5wdXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhpbnB1dClcbiAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQoaW5pdClcblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNlbnZpcm9ubWVudC1zZXR0aW5ncy1vYmplY3RcbiAgICB0aGlzW2tSZWFsbV0gPSB7XG4gICAgICBzZXR0aW5nc09iamVjdDoge1xuICAgICAgICBiYXNlVXJsOiBnZXRHbG9iYWxPcmlnaW4oKSxcbiAgICAgICAgZ2V0IG9yaWdpbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybD8ub3JpZ2luXG4gICAgICAgIH0sXG4gICAgICAgIHBvbGljeUNvbnRhaW5lcjogbWFrZVBvbGljeUNvbnRhaW5lcigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgbnVsbC5cbiAgICBsZXQgcmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuIExldCBmYWxsYmFja01vZGUgYmUgbnVsbC5cbiAgICBsZXQgZmFsbGJhY2tNb2RlID0gbnVsbFxuXG4gICAgLy8gMy4gTGV0IGJhc2VVUkwgYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyA0LiBMZXQgc2lnbmFsIGJlIG51bGwuXG4gICAgbGV0IHNpZ25hbCA9IG51bGxcblxuICAgIC8vIDUuIElmIGlucHV0IGlzIGEgc3RyaW5nLCB0aGVuOlxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBpbnB1dCB3aXRoIGJhc2VVUkwuXG4gICAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGxldCBwYXJzZWRVUkxcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwoaW5wdXQsIGJhc2VVcmwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyBpbnB1dCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHBhcnNlZFVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChwYXJzZWRVUkwudXNlcm5hbWUgfHwgcGFyc2VkVVJMLnBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gYSBVUkwgdGhhdCBpbmNsdWRlcyBjcmVkZW50aWFsczogJyArXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2hvc2UgVVJMIGlzIHBhcnNlZFVSTC5cbiAgICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IHVybExpc3Q6IFtwYXJzZWRVUkxdIH0pXG5cbiAgICAgIC8vIDUuIFNldCBmYWxsYmFja01vZGUgdG8gXCJjb3JzXCIuXG4gICAgICBmYWxsYmFja01vZGUgPSAnY29ycydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNi4gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyA3LiBBc3NlcnQ6IGlucHV0IGlzIGEgUmVxdWVzdCBvYmplY3QuXG4gICAgICBhc3NlcnQoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KVxuXG4gICAgICAvLyA4LiBTZXQgcmVxdWVzdCB0byBpbnB1dFx1MjAxOXMgcmVxdWVzdC5cbiAgICAgIHJlcXVlc3QgPSBpbnB1dFtrU3RhdGVdXG5cbiAgICAgIC8vIDkuIFNldCBzaWduYWwgdG8gaW5wdXRcdTIwMTlzIHNpZ25hbC5cbiAgICAgIHNpZ25hbCA9IGlucHV0W2tTaWduYWxdXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IG9yaWdpbiBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIG9yaWdpbi5cbiAgICBjb25zdCBvcmlnaW4gPSB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3Qub3JpZ2luXG5cbiAgICAvLyA4LiBMZXQgd2luZG93IGJlIFwiY2xpZW50XCIuXG4gICAgbGV0IHdpbmRvdyA9ICdjbGllbnQnXG5cbiAgICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0IGFuZCBpdHMgb3JpZ2luXG4gICAgLy8gaXMgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW4sIHRoZW4gc2V0IHdpbmRvdyB0byByZXF1ZXN0XHUyMDE5cyB3aW5kb3cuXG4gICAgaWYgKFxuICAgICAgcmVxdWVzdC53aW5kb3c/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdCcgJiZcbiAgICAgIHNhbWVPcmlnaW4ocmVxdWVzdC53aW5kb3csIG9yaWdpbilcbiAgICApIHtcbiAgICAgIHdpbmRvdyA9IHJlcXVlc3Qud2luZG93XG4gICAgfVxuXG4gICAgLy8gMTAuIElmIGluaXRbXCJ3aW5kb3dcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoaW5pdC53aW5kb3cgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJ3dpbmRvdycgb3B0aW9uICcke3dpbmRvd30nIG11c3QgYmUgbnVsbGApXG4gICAgfVxuXG4gICAgLy8gMTEuIElmIGluaXRbXCJ3aW5kb3dcIl0gZXhpc3RzLCB0aGVuIHNldCB3aW5kb3cgdG8gXCJuby13aW5kb3dcIi5cbiAgICBpZiAoJ3dpbmRvdycgaW4gaW5pdCkge1xuICAgICAgd2luZG93ID0gJ25vLXdpbmRvdydcbiAgICB9XG5cbiAgICAvLyAxMi4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgICAgLy8gVVJMIHJlcXVlc3RcdTIwMTlzIFVSTC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiB0aGlzIGlzIHNldCBhcyB0aGUgZmlyc3QgaXRlbSBpbiByZXF1ZXN0J3MgdXJsTGlzdCBpbiBtYWtlUmVxdWVzdFxuICAgICAgLy8gbWV0aG9kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAvLyBoZWFkZXIgbGlzdCBBIGNvcHkgb2YgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyB1bmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogaGVhZGVyc0xpc3QgaXMgY2xvbmVkIGluIG1ha2VSZXF1ZXN0XG4gICAgICBoZWFkZXJzTGlzdDogcmVxdWVzdC5oZWFkZXJzTGlzdCxcbiAgICAgIC8vIHVuc2FmZS1yZXF1ZXN0IGZsYWcgU2V0LlxuICAgICAgdW5zYWZlUmVxdWVzdDogcmVxdWVzdC51bnNhZmVSZXF1ZXN0LFxuICAgICAgLy8gY2xpZW50IFRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC5cbiAgICAgIGNsaWVudDogdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LFxuICAgICAgLy8gd2luZG93IHdpbmRvdy5cbiAgICAgIHdpbmRvdyxcbiAgICAgIC8vIHByaW9yaXR5IHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5LlxuICAgICAgcHJpb3JpdHk6IHJlcXVlc3QucHJpb3JpdHksXG4gICAgICAvLyBvcmlnaW4gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLiBUaGUgcHJvcGFnYXRpb24gb2YgdGhlIG9yaWdpbiBpcyBvbmx5IHNpZ25pZmljYW50IGZvciBuYXZpZ2F0aW9uIHJlcXVlc3RzXG4gICAgICAvLyBiZWluZyBoYW5kbGVkIGJ5IGEgc2VydmljZSB3b3JrZXIuIEluIHRoaXMgc2NlbmFyaW8gYSByZXF1ZXN0IGNhbiBoYXZlIGFuIG9yaWdpbiB0aGF0IGlzIGRpZmZlcmVudFxuICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBjbGllbnQuXG4gICAgICBvcmlnaW46IHJlcXVlc3Qub3JpZ2luLFxuICAgICAgLy8gcmVmZXJyZXIgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgICByZWZlcnJlcjogcmVxdWVzdC5yZWZlcnJlcixcbiAgICAgIC8vIHJlZmVycmVyIHBvbGljeSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgICByZWZlcnJlclBvbGljeTogcmVxdWVzdC5yZWZlcnJlclBvbGljeSxcbiAgICAgIC8vIG1vZGUgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICAgIG1vZGU6IHJlcXVlc3QubW9kZSxcbiAgICAgIC8vIGNyZWRlbnRpYWxzIG1vZGUgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICAgIGNyZWRlbnRpYWxzOiByZXF1ZXN0LmNyZWRlbnRpYWxzLFxuICAgICAgLy8gY2FjaGUgbW9kZSByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgICAgY2FjaGU6IHJlcXVlc3QuY2FjaGUsXG4gICAgICAvLyByZWRpcmVjdCBtb2RlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgICByZWRpcmVjdDogcmVxdWVzdC5yZWRpcmVjdCxcbiAgICAgIC8vIGludGVncml0eSBtZXRhZGF0YSByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEuXG4gICAgICBpbnRlZ3JpdHk6IHJlcXVlc3QuaW50ZWdyaXR5LFxuICAgICAgLy8ga2VlcGFsaXZlIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGtlZXBhbGl2ZTogcmVxdWVzdC5rZWVwYWxpdmUsXG4gICAgICAvLyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZWxvYWROYXZpZ2F0aW9uOiByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24sXG4gICAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uLFxuICAgICAgLy8gVVJMIGxpc3QgQSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgICAgIHVybExpc3Q6IFsuLi5yZXF1ZXN0LnVybExpc3RdXG4gICAgfSlcblxuICAgIGNvbnN0IGluaXRIYXNLZXkgPSBPYmplY3Qua2V5cyhpbml0KS5sZW5ndGggIT09IDBcblxuICAgIC8vIDEzLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gc2V0IGl0IHRvIFwic2FtZS1vcmlnaW5cIi5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgICAgcmVxdWVzdC5tb2RlID0gJ3NhbWUtb3JpZ2luJ1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBVbnNldCByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gMy4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0Lmhpc3RvcnlOYXZpZ2F0aW9uID0gZmFsc2VcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byBcImNsaWVudFwiLlxuICAgICAgcmVxdWVzdC5vcmlnaW4gPSAnY2xpZW50J1xuXG4gICAgICAvLyA1LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIlxuICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDYuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSAnJ1xuXG4gICAgICAvLyA3LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIHRvIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgcmVxdWVzdFx1MjAxOXMgVVJMIFx1MDBCQi5cbiAgICAgIHJlcXVlc3QudXJsTGlzdCA9IFtyZXF1ZXN0LnVybF1cbiAgICB9XG5cbiAgICAvLyAxNC4gSWYgaW5pdFtcInJlZmVycmVyXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5yZWZlcnJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVmZXJyZXIgYmUgaW5pdFtcInJlZmVycmVyXCJdLlxuICAgICAgY29uc3QgcmVmZXJyZXIgPSBpbml0LnJlZmVycmVyXG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwibm8tcmVmZXJyZXJcIi5cbiAgICAgIGlmIChyZWZlcnJlciA9PT0gJycpIHtcbiAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICduby1yZWZlcnJlcidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDEuIExldCBwYXJzZWRSZWZlcnJlciBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgcmVmZXJyZXIgd2l0aFxuICAgICAgICAvLyBiYXNlVVJMLlxuICAgICAgICAvLyAyLiBJZiBwYXJzZWRSZWZlcnJlciBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICBsZXQgcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWRSZWZlcnJlciA9IG5ldyBVUkwocmVmZXJyZXIsIGJhc2VVcmwpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlZmVycmVyIFwiJHtyZWZlcnJlcn1cIiBpcyBub3QgYSB2YWxpZCBVUkwuYCwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIHNjaGVtZSBpcyBcImFib3V0XCIgYW5kIHBhdGggaXMgdGhlIHN0cmluZyBcImNsaWVudFwiXG4gICAgICAgIC8vIC0gcGFyc2VkUmVmZXJyZXJcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBvcmlnaW5cbiAgICAgICAgLy8gdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJjbGllbnRcIi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwYXJzZWRSZWZlcnJlci5wcm90b2NvbCA9PT0gJ2Fib3V0OicgJiYgcGFyc2VkUmVmZXJyZXIuaG9zdG5hbWUgPT09ICdjbGllbnQnKSB8fFxuICAgICAgICAgIChvcmlnaW4gJiYgIXNhbWVPcmlnaW4ocGFyc2VkUmVmZXJyZXIsIHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3RcdTIwMTlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgLy8gMi4gSWYgbWV0aG9kIGlzIG5vdCBhIG1ldGhvZCBvciBtZXRob2QgaXMgYSBmb3JiaWRkZW4gbWV0aG9kLCB0aGVuXG4gICAgICAvLyB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIGlzIG5vdCBhIHZhbGlkIEhUVFAgbWV0aG9kLmApXG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JiaWRkZW5NZXRob2RzU2V0LmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgSFRUUCBtZXRob2QgaXMgdW5zdXBwb3J0ZWQuYClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgIG1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZFJlY29yZFttZXRob2RdID8/IG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgdG8gbWV0aG9kLlxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICB9XG5cbiAgICAvLyAyNi4gSWYgaW5pdFtcInNpZ25hbFwiXSBleGlzdHMsIHRoZW4gc2V0IHNpZ25hbCB0byBpdC5cbiAgICBpZiAoaW5pdC5zaWduYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2lnbmFsID0gaW5pdC5zaWduYWxcbiAgICB9XG5cbiAgICAvLyAyNy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3QgdG8gcmVxdWVzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSByZXF1ZXN0XG5cbiAgICAvLyAyOC4gU2V0IHRoaXNcdTIwMTlzIHNpZ25hbCB0byBhIG5ldyBBYm9ydFNpZ25hbCBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLlxuICAgIC8vIFRPRE86IGNvdWxkIHRoaXMgYmUgc2ltcGxpZmllZCB3aXRoIEFib3J0U2lnbmFsLmFueVxuICAgIC8vIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1hYm9ydHNpZ25hbC1hbnkpXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICB0aGlzW2tTaWduYWxdID0gYWMuc2lnbmFsXG4gICAgdGhpc1trU2lnbmFsXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAyOS4gSWYgc2lnbmFsIGlzIG5vdCBudWxsLCB0aGVuIG1ha2UgdGhpc1x1MjAxOXMgc2lnbmFsIGZvbGxvdyBzaWduYWwuXG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFzaWduYWwgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hYm9ydGVkICE9PSAnYm9vbGVhbicgfHxcbiAgICAgICAgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1JlcXVlc3QnOiBtZW1iZXIgc2lnbmFsIGlzIG5vdCBvZiB0eXBlIEFib3J0U2lnbmFsLlwiXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGFjLmFib3J0KHNpZ25hbC5yZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBLZWVwIGEgc3Ryb25nIHJlZiB0byBhYyB3aGlsZSByZXF1ZXN0IG9iamVjdFxuICAgICAgICAvLyBpcyBhbGl2ZS4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgLy8gZnJvbSBiZWluZyBwcmVtYXR1cmVseSBnYXJiYWdlIGNvbGxlY3RlZC5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTkyNi5cbiAgICAgICAgdGhpc1trQWJvcnRDb250cm9sbGVyXSA9IGFjXG5cbiAgICAgICAgY29uc3QgYWNSZWYgPSBuZXcgV2Vha1JlZihhYylcbiAgICAgICAgY29uc3QgYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgYWMgPSBhY1JlZi5kZXJlZigpXG4gICAgICAgICAgaWYgKGFjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjLmFib3J0KHRoaXMucmVhc29uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXJkLXBhcnR5IEFib3J0Q29udHJvbGxlcnMgbWF5IG5vdCB3b3JrIHdpdGggdGhlc2UuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8xOTEwI2lzc3VlY29tbWVudC0xNDY0NDk1NjE5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXggYW1vdW50IG9mIGxpc3RlbmVycyBpcyBlcXVhbCB0byB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgaXRcbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIG5vZGUgPj0gdjE5LjkuMFxuICAgICAgICAgIGlmICh0eXBlb2YgZ2V0TWF4TGlzdGVuZXJzID09PSAnZnVuY3Rpb24nICYmIGdldE1heExpc3RlbmVycyhzaWduYWwpID09PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTAwLCBzaWduYWwpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG5cbiAgICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgYWJvcnQpXG4gICAgICAgIHJlcXVlc3RGaW5hbGl6ZXIucmVnaXN0ZXIoYWMsIHsgc2lnbmFsLCBhYm9ydCB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdCdcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIiwgdGhlbjpcbiAgICBpZiAobW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCxcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldC5oYXMocmVxdWVzdC5tZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCcke3JlcXVlc3QubWV0aG9kfSBpcyB1bnN1cHBvcnRlZCBpbiBuby1jb3JzIG1vZGUuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCB0byBcInJlcXVlc3Qtbm8tY29yc1wiLlxuICAgICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0LW5vLWNvcnMnXG4gICAgfVxuXG4gICAgLy8gMzIuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvKiogQHR5cGUge0hlYWRlcnNMaXN0fSAqL1xuICAgICAgY29uc3QgaGVhZGVyc0xpc3QgPSB0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc1x1MjAxOXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVyXHUyMDE5cyBuYW1lL2hlYWRlclx1MjAxOXMgdmFsdWUgdG8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzTGlzdC5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXNcdTIwMTlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dFx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICF0aGlzW2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdLmNvbnRhaW5zKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICB0aGlzW2tIZWFkZXJzXS5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDM3LiBMZXQgaW5wdXRPckluaXRCb2R5IGJlIGluaXRCb2R5IGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2VcbiAgICAvLyBpbnB1dEJvZHkuXG4gICAgY29uc3QgaW5wdXRPckluaXRCb2R5ID0gaW5pdEJvZHkgPz8gaW5wdXRCb2R5XG5cbiAgICAvLyAzOC4gSWYgaW5wdXRPckluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbnB1dE9ySW5pdEJvZHlcdTIwMTlzIHNvdXJjZSBpc1xuICAgIC8vIG51bGwsIHRoZW46XG4gICAgaWYgKGlucHV0T3JJbml0Qm9keSAhPSBudWxsICYmIGlucHV0T3JJbml0Qm9keS5zb3VyY2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGluaXRbXCJkdXBsZXhcIl0gZG9lcyBub3QgZXhpc3QsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGluaXRCb2R5ICE9IG51bGwgJiYgaW5pdC5kdXBsZXggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0SW5pdDogZHVwbGV4IG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgYSBib2R5LicpXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgbmVpdGhlciBcInNhbWUtb3JpZ2luXCIgbm9yIFwiY29yc1wiLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicgJiYgcmVxdWVzdC5tb2RlICE9PSAnY29ycycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnSWYgcmVxdWVzdCBpcyBtYWRlIGZyb20gUmVhZGFibGVTdHJlYW0sIG1vZGUgc2hvdWxkIGJlIFwic2FtZS1vcmlnaW5cIiBvciBcImNvcnNcIidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcuXG4gICAgICByZXF1ZXN0LnVzZUNPUlNQcmVmbGlnaHRGbGFnID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIDM5LiBMZXQgZmluYWxCb2R5IGJlIGlucHV0T3JJbml0Qm9keS5cbiAgICBsZXQgZmluYWxCb2R5ID0gaW5wdXRPckluaXRCb2R5XG5cbiAgICAvLyA0MC4gSWYgaW5pdEJvZHkgaXMgbnVsbCBhbmQgaW5wdXRCb2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0Qm9keSA9PSBudWxsICYmIGlucHV0Qm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbnB1dCBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKGlucHV0Qm9keS5zdHJlYW0pIHx8IGlucHV0Qm9keS5zdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0Nhbm5vdCBjb25zdHJ1Y3QgYSBSZXF1ZXN0IHdpdGggYSBSZXF1ZXN0IG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IGZpbmFsQm9keSB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgcHJveHkgZm9yIGlucHV0Qm9keS5cbiAgICAgIGlmICghVHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgIFRyYW5zZm9ybVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5UcmFuc2Zvcm1TdHJlYW1cbiAgICAgIH1cblxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFsXHUyMDE5cyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3Nlclx1MjAxOXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3dhcmQgbmF2aWdhdGlvbikuXG4gIGdldCBpc0hpc3RvcnlOYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzSGlzdG9yeU5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5c1xuICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaGlzdG9yeU5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHNpZ25hbCBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYW4gQWJvcnRTaWduYWxcbiAgLy8gb2JqZWN0IGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkLCBhbmQgaXRzXG4gIC8vIGFib3J0IGV2ZW50IGhhbmRsZXIuXG4gIGdldCBzaWduYWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgc2lnbmFsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICByZXR1cm4gdGhpc1trU2lnbmFsXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIGdldCBkdXBsZXggKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICByZXR1cm4gJ2hhbGYnXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh0aGlzLmJvZHlVc2VkIHx8IHRoaXMuYm9keT8ubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXNcdTIwMTlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3Qoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSBjbG9uZWRSZXF1ZXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgLy8gNC4gTWFrZSBjbG9uZWRSZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWwgZm9sbG93IHRoaXNcdTIwMTlzIHNpZ25hbC5cbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGlmICh0aGlzLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5zaWduYWwsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBhYy5hYm9ydCh0aGlzLnNpZ25hbC5yZWFzb24pXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU2lnbmFsXSA9IGFjLnNpZ25hbFxuXG4gICAgLy8gNC4gUmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3QuXG4gICAgcmV0dXJuIGNsb25lZFJlcXVlc3RPYmplY3RcbiAgfVxufVxuXG5taXhpbkJvZHkoUmVxdWVzdClcblxuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RzXG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBsb2NhbFVSTHNPbmx5OiBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBmYWxzZSxcbiAgICBib2R5OiBudWxsLFxuICAgIGNsaWVudDogbnVsbCxcbiAgICByZXNlcnZlZENsaWVudDogbnVsbCxcbiAgICByZXBsYWNlc0NsaWVudElkOiAnJyxcbiAgICB3aW5kb3c6ICdjbGllbnQnLFxuICAgIGtlZXBhbGl2ZTogZmFsc2UsXG4gICAgc2VydmljZVdvcmtlcnM6ICdhbGwnLFxuICAgIGluaXRpYXRvcjogJycsXG4gICAgZGVzdGluYXRpb246ICcnLFxuICAgIHByaW9yaXR5OiBudWxsLFxuICAgIG9yaWdpbjogJ2NsaWVudCcsXG4gICAgcG9saWN5Q29udGFpbmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXJQb2xpY3k6ICcnLFxuICAgIG1vZGU6ICduby1jb3JzJyxcbiAgICB1c2VDT1JTUHJlZmxpZ2h0RmxhZzogZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgdXNlQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIGNhY2hlOiAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6ICdmb2xsb3cnLFxuICAgIGludGVncml0eTogJycsXG4gICAgY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhOiAnJyxcbiAgICBwYXJzZXJNZXRhZGF0YTogJycsXG4gICAgcmVsb2FkTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgaGlzdG9yeU5hdmlnYXRpb246IGZhbHNlLFxuICAgIHVzZXJBY3RpdmF0aW9uOiBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBmYWxzZSxcbiAgICByZWRpcmVjdENvdW50OiAwLFxuICAgIHJlc3BvbnNlVGFpbnRpbmc6ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGZhbHNlLFxuICAgIGRvbmU6IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBmYWxzZSxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKVxuICB9XG4gIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0WzBdXG4gIHJldHVybiByZXF1ZXN0XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVxdWVzdCAocmVxdWVzdCkge1xuICAvLyBUbyBjbG9uZSBhIHJlcXVlc3QgcmVxdWVzdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIExldCBuZXdSZXF1ZXN0IGJlIGEgY29weSBvZiByZXF1ZXN0LCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyAuLi5yZXF1ZXN0LCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgc2V0IG5ld1JlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlXG4gIC8vIHJlc3VsdCBvZiBjbG9uaW5nIHJlcXVlc3RcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1JlcXVlc3QuYm9keSA9IGNsb25lQm9keShyZXF1ZXN0LmJvZHkpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gbmV3UmVxdWVzdC5cbiAgcmV0dXJuIG5ld1JlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICB7IHN0cmljdDogZmFsc2UgfVxuICAgICAgKVxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3dpbmRvdycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfSxcbiAge1xuICAgIGtleTogJ2R1cGxleCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdER1cGxleFxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVzcG9uc2UsXG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIG1ha2VSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9yZXF1ZXN0JylcbmNvbnN0IHpsaWIgPSByZXF1aXJlKCd6bGliJylcbmNvbnN0IHtcbiAgYnl0ZXNNYXRjaCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIHJlcXVlc3RCYWRQb3J0LFxuICBUQU9DaGVjayxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QsXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgY29yc0NoZWNrLFxuICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2ssXG4gIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGlzQmxvYkxpa2UsXG4gIHNhbWVPcmlnaW4sXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxJc0h0dHBIdHRwc1NjaGVtZSxcbiAgdXJsSGFzSHR0cHNTY2hlbWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IHNhZmVseUV4dHJhY3RCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzU2V0LFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgc3VicmVzb3VyY2VTZXQsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdldmVudHMnKVxuY29uc3QgeyBSZWFkYWJsZSwgcGlwZWxpbmUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IGFkZEFib3J0TGlzdGVuZXIsIGlzRXJyb3JlZCwgaXNSZWFkYWJsZSwgbm9kZU1ham9yLCBub2RlTWlub3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGRhdGFVUkxQcm9jZXNzb3IsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsgVHJhbnNmb3JtU3RyZWFtIH0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IFNUQVRVU19DT0RFUyB9ID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCBHRVRfT1JfSEVBRCA9IFsnR0VUJywgJ0hFQUQnXVxuXG4vKiogQHR5cGUge2ltcG9ydCgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTH0gKi9cbmxldCByZXNvbHZlT2JqZWN0VVJMXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmNsYXNzIEZldGNoIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlcikge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsXG4gICAgdGhpcy5kdW1wID0gZmFsc2VcbiAgICB0aGlzLnN0YXRlID0gJ29uZ29pbmcnXG4gICAgLy8gMiB0ZXJtaW5hdGVkIGxpc3RlbmVycyBnZXQgYWRkZWQgcGVyIHJlcXVlc3QsXG4gICAgLy8gYnV0IG9ubHkgMSBnZXRzIHJlbW92ZWQuIElmIHRoZXJlIGFyZSAyMCByZWRpcmVjdHMsXG4gICAgLy8gMjEgbGlzdGVuZXJzIHdpbGwgYmUgYWRkZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzExXG4gICAgLy8gVE9ETyAoZml4KTogRmluZCBhbmQgZml4IHJvb3QgY2F1c2UgZm9yIGxlYWtlZCBsaXN0ZW5lci5cbiAgICB0aGlzLnNldE1heExpc3RlbmVycygyMSlcbiAgfVxuXG4gIHRlcm1pbmF0ZSAocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICd0ZXJtaW5hdGVkJ1xuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShyZWFzb24pXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgcmVhc29uKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWNvbnRyb2xsZXItYWJvcnRcbiAgYWJvcnQgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHN0YXRlIHRvIFwiYWJvcnRlZFwiLlxuICAgIHRoaXMuc3RhdGUgPSAnYWJvcnRlZCdcblxuICAgIC8vIDIuIExldCBmYWxsYmFja0Vycm9yIGJlIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAvLyAzLiBTZXQgZXJyb3IgdG8gZmFsbGJhY2tFcnJvciBpZiBpdCBpcyBub3QgZ2l2ZW4uXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZXJyb3IpLlxuICAgIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCBjYXRjaCBpdCwgYW5kIGxldFxuICAgIC8vICAgIHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGZhbGxiYWNrRXJyb3IpLlxuXG4gICAgLy8gNS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIHRvIHNlcmlhbGl6ZWRFcnJvci5cbiAgICB0aGlzLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbiA9IGVycm9yXG5cbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3koZXJyb3IpXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgZXJyb3IpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLW1ldGhvZFxuZnVuY3Rpb24gZmV0Y2ggKGlucHV0LCBpbml0ID0ge30pIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dsb2JhbFRoaXMuZmV0Y2gnIH0pXG5cbiAgLy8gMS4gTGV0IHAgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcCA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUgaW5pdGlhbCB2YWx1ZSBvZlxuICAvLyBSZXF1ZXN0IGFzIGNvbnN0cnVjdG9yIHdpdGggaW5wdXQgYW5kIGluaXQgYXMgYXJndW1lbnRzLiBJZiB0aGlzIHRocm93c1xuICAvLyBhbiBleGNlcHRpb24sIHJlamVjdCBwIHdpdGggaXQgYW5kIHJldHVybiBwLlxuICBsZXQgcmVxdWVzdE9iamVjdFxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgcC5yZWplY3QoZSlcbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyAzLiBMZXQgcmVxdWVzdCBiZSByZXF1ZXN0T2JqZWN0XHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdE9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNC4gSWYgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICBpZiAocmVxdWVzdE9iamVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgIC8vIDEuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCBudWxsLCBhbmRcbiAgICAvLyAgICByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIG51bGwsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgIC8vIDIuIFJldHVybiBwLlxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDUuIExldCBnbG9iYWxPYmplY3QgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICBjb25zdCBnbG9iYWxPYmplY3QgPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAvLyA2LiBJZiBnbG9iYWxPYmplY3QgaXMgYSBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUgb2JqZWN0LCB0aGVuIHNldFxuICAvLyByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgaWYgKGdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUnKSB7XG4gICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICB9XG5cbiAgLy8gNy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIG51bGwuXG4gIGxldCByZXNwb25zZU9iamVjdCA9IG51bGxcblxuICAvLyA4LiBMZXQgcmVsZXZhbnRSZWFsbSBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IG51bGxcblxuICAvLyA5LiBMZXQgbG9jYWxseUFib3J0ZWQgYmUgZmFsc2UuXG4gIGxldCBsb2NhbGx5QWJvcnRlZCA9IGZhbHNlXG5cbiAgLy8gMTAuIExldCBjb250cm9sbGVyIGJlIG51bGwuXG4gIGxldCBjb250cm9sbGVyID0gbnVsbFxuXG4gIC8vIDExLiBBZGQgdGhlIGZvbGxvd2luZyBhYm9ydCBzdGVwcyB0byByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWw6XG4gIGFkZEFib3J0TGlzdGVuZXIoXG4gICAgcmVxdWVzdE9iamVjdC5zaWduYWwsXG4gICAgKCkgPT4ge1xuICAgICAgLy8gMS4gU2V0IGxvY2FsbHlBYm9ydGVkIHRvIHRydWUuXG4gICAgICBsb2NhbGx5QWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gQXNzZXJ0OiBjb250cm9sbGVyIGlzIG5vbi1udWxsLlxuICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT0gbnVsbClcblxuICAgICAgLy8gMy4gQWJvcnQgY29udHJvbGxlciB3aXRoIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgY29udHJvbGxlci5hYm9ydChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAgIC8vIDQuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCxcbiAgICAgIC8vICAgIGFuZCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcbiAgICB9XG4gIClcblxuICAvLyAxMi4gTGV0IGhhbmRsZUZldGNoRG9uZSBnaXZlbiByZXNwb25zZSByZXNwb25zZSBiZSB0byBmaW5hbGl6ZSBhbmRcbiAgLy8gcmVwb3J0IHRpbWluZyB3aXRoIHJlc3BvbnNlLCBnbG9iYWxPYmplY3QsIGFuZCBcImZldGNoXCIuXG4gIGNvbnN0IGhhbmRsZUZldGNoRG9uZSA9IChyZXNwb25zZSkgPT5cbiAgICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyhyZXNwb25zZSwgJ2ZldGNoJylcblxuICAvLyAxMy4gU2V0IGNvbnRyb2xsZXIgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGZldGNoIGdpdmVuIHJlcXVlc3QsXG4gIC8vIHdpdGggcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IHNldCB0byBoYW5kbGVGZXRjaERvbmUsIGFuZCBwcm9jZXNzUmVzcG9uc2VcbiAgLy8gZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3Vic3RlcHM6XG5cbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gMS4gSWYgbG9jYWxseUFib3J0ZWQgaXMgdHJ1ZSwgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChsb2NhbGx5QWJvcnRlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgIC8vIDEuIExldCBkZXNlcmlhbGl6ZWRFcnJvciBiZSB0aGUgcmVzdWx0IG9mIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZFxuICAgICAgLy8gICAgYWJvcnQgcmVhc29uIGdpdmVuIGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZFxuICAgICAgLy8gICAgcmVsZXZhbnRSZWFsbS5cblxuICAgICAgLy8gMi4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBhbmRcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplZEVycm9yLlxuXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBjb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbilcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDMuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiByZWplY3QgcCB3aXRoIGEgVHlwZUVycm9yXG4gICAgLy8gYW5kIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgcC5yZWplY3QoXG4gICAgICAgIE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignZmV0Y2ggZmFpbGVkJyksIHsgY2F1c2U6IHJlc3BvbnNlLmVycm9yIH0pXG4gICAgICApXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VPYmplY3QgdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHJlbGV2YW50UmVhbG0uXG4gICAgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFJlc29sdmUgcCB3aXRoIHJlc3BvbnNlT2JqZWN0LlxuICAgIHAucmVzb2x2ZShyZXNwb25zZU9iamVjdClcbiAgfVxuXG4gIGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHk6IGhhbmRsZUZldGNoRG9uZSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgZGlzcGF0Y2hlcjogaW5pdC5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSAvLyB1bmRpY2lcbiAgfSlcblxuICAvLyAxNC4gUmV0dXJuIHAuXG4gIHJldHVybiBwLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLWFuZC1yZXBvcnQtdGltaW5nXG5mdW5jdGlvbiBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyAocmVzcG9uc2UsIGluaXRpYXRvclR5cGUgPSAnb3RoZXInKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InICYmIHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBudWxsIG9yIGVtcHR5LCB0aGVuIHJldHVybi5cbiAgaWYgKCFyZXNwb25zZS51cmxMaXN0Py5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDMuIExldCBvcmlnaW5hbFVSTCBiZSByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3RbMF0uXG4gIGNvbnN0IG9yaWdpbmFsVVJMID0gcmVzcG9uc2UudXJsTGlzdFswXVxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgbGV0IHRpbWluZ0luZm8gPSByZXNwb25zZS50aW1pbmdJbmZvXG5cbiAgLy8gNS4gTGV0IGNhY2hlU3RhdGUgYmUgcmVzcG9uc2VcdTIwMTlzIGNhY2hlIHN0YXRlLlxuICBsZXQgY2FjaGVTdGF0ZSA9IHJlc3BvbnNlLmNhY2hlU3RhdGVcblxuICAvLyA2LiBJZiBvcmlnaW5hbFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4uXG4gIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUob3JpZ2luYWxVUkwpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA3LiBJZiB0aW1pbmdJbmZvIGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAodGltaW5nSW5mbyA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gOC4gSWYgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZyBpcyBub3Qgc2V0LCB0aGVuOlxuICBpZiAoIXJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkKSB7XG4gICAgLy8gIDEuIFNldCB0aW1pbmdJbmZvIHRvIGEgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nIGluZm8gZm9yIHRpbWluZ0luZm8uXG4gICAgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgICAgc3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZVxuICAgIH0pXG5cbiAgICAvLyAgMi4gU2V0IGNhY2hlU3RhdGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICBjYWNoZVN0YXRlID0gJydcbiAgfVxuXG4gIC8vIDkuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBlbmQgdGltZSB0byB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWVcbiAgLy8gZ2l2ZW4gZ2xvYmFsXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5LlxuICAvLyBUT0RPOiBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHk/XG4gIHRpbWluZ0luZm8uZW5kVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKClcblxuICAvLyAxMC4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDExLiBNYXJrIHJlc291cmNlIHRpbWluZyBmb3IgdGltaW5nSW5mbywgb3JpZ2luYWxVUkwsIGluaXRpYXRvclR5cGUsXG4gIC8vIGdsb2JhbCwgYW5kIGNhY2hlU3RhdGUuXG4gIG1hcmtSZXNvdXJjZVRpbWluZyhcbiAgICB0aW1pbmdJbmZvLFxuICAgIG9yaWdpbmFsVVJMLFxuICAgIGluaXRpYXRvclR5cGUsXG4gICAgZ2xvYmFsVGhpcyxcbiAgICBjYWNoZVN0YXRlXG4gIClcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Jlc291cmNlLXRpbWluZy8jZGZuLW1hcmstcmVzb3VyY2UtdGltaW5nXG5mdW5jdGlvbiBtYXJrUmVzb3VyY2VUaW1pbmcgKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLCBnbG9iYWxUaGlzLCBjYWNoZVN0YXRlKSB7XG4gIGlmIChub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMikpIHtcbiAgICBwZXJmb3JtYW5jZS5tYXJrUmVzb3VyY2VUaW1pbmcodGltaW5nSW5mbywgb3JpZ2luYWxVUkwuaHJlZiwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYWJvcnQtZmV0Y2hcbmZ1bmN0aW9uIGFib3J0RmV0Y2ggKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBlcnJvcikge1xuICAvLyBOb3RlOiBBYm9ydFNpZ25hbC5yZWFzb24gd2FzIGFkZGVkIGluIG5vZGUgdjE3LjIuMFxuICAvLyB3aGljaCB3b3VsZCBnaXZlIHVzIGFuIHVuZGVmaW5lZCBlcnJvciB0byByZWplY3Qgd2l0aC5cbiAgLy8gUmVtb3ZlIHRoaXMgb25jZSBub2RlIHYxNiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLlxuICBpZiAoIWVycm9yKSB7XG4gICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxuXG4gIC8vIDEuIFJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIHAucmVqZWN0KGVycm9yKVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGNhbmNlbCByZXF1ZXN0XHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlcXVlc3QuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlcXVlc3QuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlT2JqZWN0IGlzIG51bGwsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2VPYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZS5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdXG5cbiAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwgYW5kIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHJlc3BvbnNlXHUyMDE5c1xuICAvLyBib2R5IHdpdGggZXJyb3IuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXNwb25zZS5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVzcG9uc2UuYm9keS5zdHJlYW0uY2FuY2VsKGVycm9yKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfSU5WQUxJRF9TVEFURScpIHtcbiAgICAgICAgLy8gTm9kZSBidWc/XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2hpbmdcbmZ1bmN0aW9uIGZldGNoaW5nICh7XG4gIHJlcXVlc3QsXG4gIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlLFxuICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICB1c2VQYXJhbGxlbFF1ZXVlID0gZmFsc2UsXG4gIGRpc3BhdGNoZXIgLy8gdW5kaWNpXG59KSB7XG4gIC8vIDEuIExldCB0YXNrRGVzdGluYXRpb24gYmUgbnVsbC5cbiAgbGV0IHRhc2tEZXN0aW5hdGlvbiA9IG51bGxcblxuICAvLyAyLiBMZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgYmUgZmFsc2UuXG4gIGxldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9IGZhbHNlXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCB0YXNrRGVzdGluYXRpb24gdG8gcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICAgIHRhc2tEZXN0aW5hdGlvbiA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gICAgLy8gMi4gU2V0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgY3Jvc3Mtb3JpZ2luXG4gICAgLy8gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9XG4gICAgICByZXF1ZXN0LmNsaWVudC5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNC4gSWYgdXNlUGFyYWxsZWxRdWV1ZSBpcyB0cnVlLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIExldCB0aW1pbmdJbmZvIGJlIGEgbmV3IGZldGNoIHRpbWluZyBpbmZvIHdob3NlIHN0YXJ0IHRpbWUgYW5kXG4gIC8vIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSBhcmUgdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gIC8vIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBjdXJyZW5UaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICBzdGFydFRpbWU6IGN1cnJlblRpbWVcbiAgfSlcblxuICAvLyA2LiBMZXQgZmV0Y2hQYXJhbXMgYmUgYSBuZXcgZmV0Y2ggcGFyYW1zIHdob3NlXG4gIC8vIHJlcXVlc3QgaXMgcmVxdWVzdCxcbiAgLy8gdGltaW5nIGluZm8gaXMgdGltaW5nSW5mbyxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGJvZHkgY2h1bmsgbGVuZ3RoIGlzIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgaXMgcHJvY2Vzc1Jlc3BvbnNlLFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gIC8vIHRhc2sgZGVzdGluYXRpb24gaXMgdGFza0Rlc3RpbmF0aW9uLFxuICAvLyBhbmQgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkgaXMgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgIGNvbnRyb2xsZXI6IG5ldyBGZXRjaChkaXNwYXRjaGVyKSxcbiAgICByZXF1ZXN0LFxuICAgIHRpbWluZ0luZm8sXG4gICAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gICAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgICB0YXNrRGVzdGluYXRpb24sXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvXG4gIC8vICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAvLyBOT1RFOiBTaW5jZSBmZXRjaGluZyBpcyBvbmx5IGNhbGxlZCBmcm9tIGZldGNoLCBib2R5IHNob3VsZCBhbHJlYWR5IGJlXG4gIC8vIGV4dHJhY3RlZC5cbiAgYXNzZXJ0KCFyZXF1ZXN0LmJvZHkgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSlcblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudCwgaWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0IGlzIGEgV2luZG93IG9iamVjdDsgb3RoZXJ3aXNlXG4gIC8vIFwibm8td2luZG93XCIuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC53aW5kb3cgPVxuICAgICAgcmVxdWVzdC5jbGllbnQ/Lmdsb2JhbE9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdXaW5kb3cnXG4gICAgICAgID8gcmVxdWVzdC5jbGllbnRcbiAgICAgICAgOiAnbm8td2luZG93J1xuICB9XG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIG9yaWdpbiB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnRcdTIwMTlzIG9yaWdpbi5cbiAgaWYgKHJlcXVlc3Qub3JpZ2luID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0Lm9yaWdpbiA9IHJlcXVlc3QuY2xpZW50Py5vcmlnaW5cbiAgfVxuXG4gIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgaXMgXCJjbGllbnRcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucG9saWN5Q29udGFpbmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcG9saWN5XG4gICAgLy8gY29udGFpbmVyIHRvIGEgY2xvbmUgb2YgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyLiBbSFRNTF1cbiAgICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBjbG9uZVBvbGljeUNvbnRhaW5lcihcbiAgICAgICAgcmVxdWVzdC5jbGllbnQucG9saWN5Q29udGFpbmVyXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDIuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgdG8gYSBuZXcgcG9saWN5XG4gICAgICAvLyBjb250YWluZXIuXG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHRgLCB0aGVuOlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdCcpKSB7XG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIGAqLypgLlxuICAgIGNvbnN0IHZhbHVlID0gJyovKidcblxuICAgIC8vIDIuIEEgdXNlciBhZ2VudCBzaG91bGQgc2V0IHZhbHVlIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQsIGlmXG4gICAgLy8gYW55LCBzd2l0Y2hpbmcgb24gcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb246XG4gICAgLy8gXCJkb2N1bWVudFwiXG4gICAgLy8gXCJmcmFtZVwiXG4gICAgLy8gXCJpZnJhbWVcIlxuICAgIC8vIGB0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjhgXG4gICAgLy8gXCJpbWFnZVwiXG4gICAgLy8gYGltYWdlL3BuZyxpbWFnZS9zdmcreG1sLGltYWdlLyo7cT0wLjgsKi8qO3E9MC41YFxuICAgIC8vIFwic3R5bGVcIlxuICAgIC8vIGB0ZXh0L2NzcywqLyo7cT0wLjFgXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMy4gQXBwZW5kIGBBY2NlcHRgL3ZhbHVlIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQnLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHQtTGFuZ3VhZ2VgLCB0aGVuXG4gIC8vIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYEFjY2VwdC1MYW5ndWFnZWAvYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG9cbiAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWxhbmd1YWdlJykpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWxhbmd1YWdlJywgJyonKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IGlzIG51bGwsIHRoZW4gdXNlIHJlcXVlc3RcdTIwMTlzIGluaXRpYXRvciBhbmRcbiAgLy8gZGVzdGluYXRpb24gYXBwcm9wcmlhdGVseSBpbiBzZXR0aW5nIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IHRvIGFcbiAgLy8gdXNlci1hZ2VudC1kZWZpbmVkIG9iamVjdC5cbiAgaWYgKHJlcXVlc3QucHJpb3JpdHkgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNS4gSWYgcmVxdWVzdCBpcyBhIHN1YnJlc291cmNlIHJlcXVlc3QsIHRoZW46XG4gIGlmIChzdWJyZXNvdXJjZVNldC5oYXMocmVxdWVzdC5kZXN0aW5hdGlvbikpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNi4gUnVuIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gIG1haW5GZXRjaChmZXRjaFBhcmFtcylcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycilcbiAgICB9KVxuXG4gIC8vIDE3LiBSZXR1cm4gZmV0Y2hQYXJhbSdzIGNvbnRyb2xsZXJcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWFpbi1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gbWFpbkZldGNoIChmZXRjaFBhcmFtcywgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBJZiByZXF1ZXN0XHUyMDE5cyBsb2NhbC1VUkxzLW9ubHkgZmxhZyBpcyBzZXQgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzXG4gIC8vIG5vdCBsb2NhbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5sb2NhbFVSTHNPbmx5ICYmICF1cmxJc0xvY2FsKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignbG9jYWwgVVJMcyBvbmx5JylcbiAgfVxuXG4gIC8vIDQuIFJ1biByZXBvcnQgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdmlvbGF0aW9ucyBmb3IgcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIFVwZ3JhZGUgcmVxdWVzdCB0byBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgaWYgYXBwcm9wcmlhdGUuXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTChyZXF1ZXN0KVxuXG4gIC8vIDYuIElmIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGEgYmFkIHBvcnQsIHNob3VsZCBmZXRjaGluZyByZXF1ZXN0XG4gIC8vIGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudCwgb3Igc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50XG4gIC8vIFNlY3VyaXR5IFBvbGljeSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3RCYWRQb3J0KHJlcXVlc3QpID09PSAnYmxvY2tlZCcpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2JhZCBwb3J0JylcbiAgfVxuICAvLyBUT0RPOiBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQ/XG4gIC8vIFRPRE86IHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3k/XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHBvbGljeSB0byByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyXHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5ID09PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSByZXF1ZXN0LnBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gOC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgbm90IFwibm8tcmVmZXJyZXJcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIgdG8gdGhlIHJlc3VsdCBvZiBpbnZva2luZyBkZXRlcm1pbmUgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyICE9PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlciA9IGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIocmVxdWVzdClcbiAgfVxuXG4gIC8vIDkuIFNldCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIHRvIFwiaHR0cHNcIiBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZ1xuICAvLyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCJcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBpcyBhIGRvbWFpblxuICAvLyAtIE1hdGNoaW5nIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBob3N0IHBlciBLbm93biBIU1RTIEhvc3QgRG9tYWluIE5hbWVcbiAgLy8gICBNYXRjaGluZyByZXN1bHRzIGluIGVpdGhlciBhIHN1cGVyZG9tYWluIG1hdGNoIHdpdGggYW4gYXNzZXJ0ZWRcbiAgLy8gICBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUgb3IgYSBjb25ncnVlbnQgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCBhblxuICAvLyAgIGFzc2VydGVkIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSkuIFtIU1RTXVxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlY3Vyc2l2ZSBpcyBmYWxzZSwgdGhlbiBydW4gdGhlIHJlbWFpbmluZyBzdGVwcyBpbiBwYXJhbGxlbC5cbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuIHNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgLy8gdGhlIHN0ZXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudDpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgcmVzcG9uc2UgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdFx1MjAxOXMgb3JpZ2luLFxuICAgICAgICAvLyAgIGFuZCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImJhc2ljXCJcbiAgICAgICAgKHNhbWVPcmlnaW4oY3VycmVudFVSTCwgcmVxdWVzdC51cmwpICYmIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykgfHxcbiAgICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIlxuICAgICAgICAoY3VycmVudFVSTC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgfHxcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiBvciBcIndlYnNvY2tldFwiXG4gICAgICAgIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JylcbiAgICAgICkge1xuICAgICAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJiYXNpY1wiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnYmFzaWMnXG5cbiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcInNhbWUtb3JpZ2luXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgICAgLy8gMS4gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3JlcXVlc3QgbW9kZSBjYW5ub3QgYmUgXCJzYW1lLW9yaWdpblwiJylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXMgbm90IFwiZm9sbG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdmb2xsb3cnKSB7XG4gICAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAgICAgICAncmVkaXJlY3QgbW9kZSBjYW5ub3QgYmUgXCJmb2xsb3dcIiBmb3IgXCJuby1jb3JzXCIgcmVxdWVzdCdcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJvcGFxdWVcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ29wYXF1ZSdcblxuICAgICAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZVxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJylcbiAgICAgIH1cblxuICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZyBpcyBzZXRcbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdW5zYWZlLXJlcXVlc3QgZmxhZyBpcyBzZXQgYW5kIGVpdGhlciByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXNcbiAgICAgIC8vICAgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCBvciBDT1JTLXVuc2FmZSByZXF1ZXN0LWhlYWRlciBuYW1lcyB3aXRoXG4gICAgICAvLyAgIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGlzIG5vdCBlbXB0eVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgLy8gICAgMi4gTGV0IGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2hcbiAgICAgIC8vICAgIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICAgICAgLy8gICAgMy4gSWYgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gY2xlYXIgY2FjaGVcbiAgICAgIC8vICAgIGVudHJpZXMgdXNpbmcgcmVxdWVzdC5cbiAgICAgIC8vICAgIDQuIFJldHVybiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlLlxuICAgICAgLy8gVE9ET1xuXG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdjb3JzJ1xuXG4gICAgICAvLyAgICAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gYXdhaXQgaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgIH0pKClcbiAgfVxuXG4gIC8vIDEyLiBJZiByZWN1cnNpdmUgaXMgdHJ1ZSwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gIGlmIChyZWN1cnNpdmUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZFxuICAvLyByZXNwb25zZSwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJiAhcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiLCB0aGVuOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgLy8gMS4gTGV0IGhlYWRlck5hbWVzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgIC8vIGdpdmVuIGBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyc2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUgaXMgbm90IFwiaW5jbHVkZVwiIGFuZCBoZWFkZXJOYW1lc1xuICAgICAgLy8gY29udGFpbnMgYCpgLCB0aGVuIHNldCByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG9cbiAgICAgIC8vIGFsbCB1bmlxdWUgaGVhZGVyIG5hbWVzIGluIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgaGVhZGVyTmFtZXMgaXMgbm90IG51bGwgb3IgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0byBoZWFkZXJOYW1lcy5cbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAgIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2Jhc2ljJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnY29ycycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnb3BhcXVlJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDE0LiBMZXQgaW50ZXJuYWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgbGV0IGludGVybmFsUmVzcG9uc2UgPVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMCA/IHJlc3BvbnNlIDogcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuXG4gIC8vIDE1LiBJZiBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eSwgdGhlbiBzZXQgaXQgdG8gYSBjbG9uZSBvZlxuICAvLyByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgaWYgKGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QucHVzaCguLi5yZXF1ZXN0LnVybExpc3QpXG4gIH1cblxuICAvLyAxNi4gSWYgcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnIGlzIHVuc2V0LCB0aGVuIHNldFxuICAvLyBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcuXG4gIGlmICghcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCkge1xuICAgIHJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTcuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGFueSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnNcbiAgLy8gYmxvY2tlZFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBpdHMgTUlNRSB0eXBlXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBub3NuaWZmXG4gIC8vIFRPRE9cblxuICAvLyAxOC4gSWYgcmVzcG9uc2VcdTIwMTlzIHR5cGUgaXMgXCJvcGFxdWVcIiwgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDIwNixcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgcmFuZ2UtcmVxdWVzdGVkIGZsYWcgaXMgc2V0LCBhbmQgcmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZSBhbmQgaW50ZXJuYWxSZXNwb25zZVxuICAvLyB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJyAmJlxuICAgIGludGVybmFsUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkICYmXG4gICAgIXJlcXVlc3QuaGVhZGVycy5jb250YWlucygncmFuZ2UnKVxuICApIHtcbiAgICByZXNwb25zZSA9IGludGVybmFsUmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgfVxuXG4gIC8vIDE5LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gIC8vIGBIRUFEYCBvciBgQ09OTkVDVGAsIG9yIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsXG4gIC8vIHNldCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIG51bGwgYW5kIGRpc3JlZ2FyZCBhbnkgZW5xdWV1aW5nIHRvd2FyZFxuICAvLyBpdCAoaWYgYW55KS5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJlxuICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnIHx8XG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnIHx8XG4gICAgICBudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cykpXG4gICkge1xuICAgIGludGVybmFsUmVzcG9uc2UuYm9keSA9IG51bGxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXAgPSB0cnVlXG4gIH1cblxuICAvLyAyMC4gSWYgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICBpZiAocmVxdWVzdC5pbnRlZ3JpdHkpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXNcbiAgICAvLyBhbmQgYSBuZXR3b3JrIGVycm9yLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAocmVhc29uKSA9PlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIG1ha2VOZXR3b3JrRXJyb3IocmVhc29uKSlcblxuICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwib3BhcXVlXCIsIG9yIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsXG4gICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzQm9keUVycm9yKHJlc3BvbnNlLmVycm9yKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKGJ5dGVzKSA9PiB7XG4gICAgICAvLyAxLiBJZiBieXRlcyBkbyBub3QgbWF0Y2ggcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhLFxuICAgICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuIFtTUkldXG4gICAgICBpZiAoIWJ5dGVzTWF0Y2goYnl0ZXMsIHJlcXVlc3QuaW50ZWdyaXR5KSkge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKCdpbnRlZ3JpdHkgbWlzbWF0Y2gnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIGJ5dGVzIGFzIGEgYm9keS5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShieXRlcylbMF1cblxuICAgICAgLy8gMy4gUnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfVxuXG4gICAgLy8gNC4gRnVsbHkgcmVhZCByZXNwb25zZVx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSBhbmQgcHJvY2Vzc0JvZHlFcnJvci5cbiAgICBhd2FpdCBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICB9IGVsc2Uge1xuICAgIC8vIDIxLiBPdGhlcndpc2UsIHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1zY2hlbWUtZmV0Y2hcbi8vIGdpdmVuIGEgZmV0Y2ggcGFyYW1zIGZldGNoUGFyYW1zXG5mdW5jdGlvbiBzY2hlbWVGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gTm90ZTogc2luY2UgdGhlIGNvbm5lY3Rpb24gaXMgZGVzdHJveWVkIG9uIHJlZGlyZWN0LCB3aGljaCBzZXRzIGZldGNoUGFyYW1zIHRvIGFcbiAgLy8gY2FuY2VsbGVkIHN0YXRlLCB3ZSBkbyBub3Qgd2FudCB0aGlzIGNvbmRpdGlvbiB0byB0cmlnZ2VyICp1bmxlc3MqIHRoZXJlIGhhdmUgYmVlblxuICAvLyBubyByZWRpcmVjdHMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTc3NlxuICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpICYmIGZldGNoUGFyYW1zLnJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKSlcbiAgfVxuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCB7IHJlcXVlc3QgfSA9IGZldGNoUGFyYW1zXG5cbiAgY29uc3QgeyBwcm90b2NvbDogc2NoZW1lIH0gPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGFuZCBydW4gdGhlIGFzc29jaWF0ZWQgc3RlcHM6XG4gIHN3aXRjaCAoc2NoZW1lKSB7XG4gICAgY2FzZSAnYWJvdXQ6Jzoge1xuICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHBhdGggaXMgdGhlIHN0cmluZyBcImJsYW5rXCIsIHRoZW4gcmV0dXJuIGEgbmV3IHJlc3BvbnNlXG4gICAgICAvLyB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSBcdTAwQkIsXG4gICAgICAvLyBhbmQgYm9keSBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSBhcyBhIGJvZHkuXG5cbiAgICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignYWJvdXQgc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQnKSlcbiAgICB9XG4gICAgY2FzZSAnYmxvYjonOiB7XG4gICAgICBpZiAoIXJlc29sdmVPYmplY3RVUkwpIHtcbiAgICAgICAgcmVzb2x2ZU9iamVjdFVSTCA9IHJlcXVpcmUoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGV0IGJsb2JVUkxFbnRyeSBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgYmxvYiBVUkwgZW50cnkuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnkgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9ibG9iLzdiMGViYWNjYzYyYjU2NmExOTY1Mzk2ZTViZTdiYjJiYzA2Zjg0MWYvRmlsZUFQSS91cmwvcmVzb3VyY2VzL2ZldGNoLXRlc3RzLmpzI0w1Mi1MNTZcbiAgICAgIC8vIEJ1ZmZlci5yZXNvbHZlT2JqZWN0VVJMIGRvZXMgbm90IGlnbm9yZSBVUkwgcXVlcmllcy5cbiAgICAgIGlmIChibG9iVVJMRW50cnkuc2VhcmNoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJykpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeU9iamVjdCA9IHJlc29sdmVPYmplY3RVUkwoYmxvYlVSTEVudHJ5LnRvU3RyaW5nKCkpXG5cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAsIGJsb2JVUkxFbnRyeSBpcyBudWxsLCBvciBibG9iVVJMRW50cnlcdTIwMTlzXG4gICAgICAvLyAgICBvYmplY3QgaXMgbm90IGEgQmxvYiBvYmplY3QsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgfHwgIWlzQmxvYkxpa2UoYmxvYlVSTEVudHJ5T2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ludmFsaWQgbWV0aG9kJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgdGhlIHJlc3VsdCBvZiBzYWZlbHkgZXh0cmFjdGluZyBibG9iVVJMRW50cnlcdTIwMTlzIG9iamVjdC5cbiAgICAgIGNvbnN0IGJvZHlXaXRoVHlwZSA9IHNhZmVseUV4dHJhY3RCb2R5KGJsb2JVUkxFbnRyeU9iamVjdClcblxuICAgICAgLy8gNC4gTGV0IGJvZHkgYmUgYm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgY29uc3QgYm9keSA9IGJvZHlXaXRoVHlwZVswXVxuXG4gICAgICAvLyA1LiBMZXQgbGVuZ3RoIGJlIGJvZHlcdTIwMTlzIGxlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgICAgY29uc3QgbGVuZ3RoID0gaXNvbW9ycGhpY0VuY29kZShgJHtib2R5Lmxlbmd0aH1gKVxuXG4gICAgICAvLyA2LiBMZXQgdHlwZSBiZSBib2R5V2l0aFR5cGVcdTIwMTlzIHR5cGUgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICAgIGNvbnN0IHR5cGUgPSBib2R5V2l0aFR5cGVbMV0gPz8gJydcblxuICAgICAgLy8gNy4gUmV0dXJuIGEgbmV3IHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsIGhlYWRlciBsaXN0IGlzXG4gICAgICAvLyAgICBcdTAwQUIgKGBDb250ZW50LUxlbmd0aGAsIGxlbmd0aCksIChgQ29udGVudC1UeXBlYCwgdHlwZSkgXHUwMEJCLCBhbmQgYm9keSBpcyBib2R5LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC1sZW5ndGgnLCB7IG5hbWU6ICdDb250ZW50LUxlbmd0aCcsIHZhbHVlOiBsZW5ndGggfV0sXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogdHlwZSB9XVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICByZXNwb25zZS5ib2R5ID0gYm9keVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgIH1cbiAgICBjYXNlICdkYXRhOic6IHtcbiAgICAgIC8vIDEuIExldCBkYXRhVVJMU3RydWN0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGVcbiAgICAgIC8vICAgIGRhdGE6IFVSTCBwcm9jZXNzb3Igb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAgIGNvbnN0IGRhdGFVUkxTdHJ1Y3QgPSBkYXRhVVJMUHJvY2Vzc29yKGN1cnJlbnRVUkwpXG5cbiAgICAgIC8vIDIuIElmIGRhdGFVUkxTdHJ1Y3QgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYVxuICAgICAgLy8gICAgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChkYXRhVVJMU3RydWN0ID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIExldCBtaW1lVHlwZSBiZSBkYXRhVVJMU3RydWN0XHUyMDE5cyBNSU1FIHR5cGUsIHNlcmlhbGl6ZWQuXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZShkYXRhVVJMU3RydWN0Lm1pbWVUeXBlKVxuXG4gICAgICAvLyA0LiBSZXR1cm4gYSByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLFxuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgbWltZVR5cGUpIFx1MDBCQixcbiAgICAgIC8vICAgIGFuZCBib2R5IGlzIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIGJvZHkgYXMgYSBib2R5LlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlUmVzcG9uc2Uoe1xuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzTGlzdDogW1xuICAgICAgICAgIFsnY29udGVudC10eXBlJywgeyBuYW1lOiAnQ29udGVudC1UeXBlJywgdmFsdWU6IG1pbWVUeXBlIH1dXG4gICAgICAgIF0sXG4gICAgICAgIGJvZHk6IHNhZmVseUV4dHJhY3RCb2R5KGRhdGFVUkxTdHJ1Y3QuYm9keSlbMF1cbiAgICAgIH0pKVxuICAgIH1cbiAgICBjYXNlICdmaWxlOic6IHtcbiAgICAgIC8vIEZvciBub3csIHVuZm9ydHVuYXRlIGFzIGl0IGlzLCBmaWxlIFVSTHMgYXJlIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuXG4gICAgICAvLyBXaGVuIGluIGRvdWJ0LCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdub3QgaW1wbGVtZW50ZWQuLi4geWV0Li4uJykpXG4gICAgfVxuICAgIGNhc2UgJ2h0dHA6JzpcbiAgICBjYXNlICdodHRwczonOiB7XG4gICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG5cbiAgICAgIHJldHVybiBodHRwRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiBtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigndW5rbm93biBzY2hlbWUnKSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZpbmFsaXplLXJlc3BvbnNlXG5mdW5jdGlvbiBmaW5hbGl6ZVJlc3BvbnNlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gU2V0IGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkb25lIGZsYWcuXG4gIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAvLyAyLCBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGlzIG5vdCBudWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2hcbiAgLy8gdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBnaXZlbiByZXNwb25zZSwgd2l0aFxuICAvLyBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZURvbmUocmVzcG9uc2UpKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1maW5hbGVcbmZ1bmN0aW9uIGZldGNoRmluYWxlIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuOlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIC8vIDEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gXHUwMEFCIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdFswXSBcdTAwQkIuXG4gICAgcmVzcG9uc2UudXJsTGlzdCA9IFtmZXRjaFBhcmFtcy5yZXF1ZXN0LnVybExpc3RbMF1dXG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZ1xuICAgIC8vIGluZm8gZm9yIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgICByZXNwb25zZS50aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IGZldGNoUGFyYW1zLnRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgYmUgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgIC8vIDEuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZG9uZSBmbGFnLlxuICAgIGZldGNoUGFyYW1zLnJlcXVlc3QuZG9uZSA9IHRydWVcblxuICAgIC8vIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGlzIG5vdCBudWxsLFxuICAgIC8vIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZVxuICAgIC8vIGVuZC1vZi1ib2R5IGdpdmVuIHJlc3BvbnNlIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAhPSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkocmVzcG9uc2UpKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGlzIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFza1xuICAvLyB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UgIT0gbnVsbCkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSkpXG4gIH1cblxuICAvLyA0LiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHJ1biBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkoKVxuICB9IGVsc2Uge1xuICAvLyA1LiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBMZXQgdHJhbnNmb3JtU3RyZWFtIGJlIGEgbmV3IGEgVHJhbnNmb3JtU3RyZWFtLlxuXG4gICAgLy8gMi4gTGV0IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB3aGljaCwgZ2l2ZW4gY2h1bmssXG4gICAgLy8gZW5xdWV1ZXMgY2h1bmsgaW4gdHJhbnNmb3JtU3RyZWFtLlxuICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHVwIHRyYW5zZm9ybVN0cmVhbSB3aXRoIHRyYW5zZm9ybUFsZ29yaXRobSBzZXQgdG8gaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG1cbiAgICAvLyBhbmQgZmx1c2hBbGdvcml0aG0gc2V0IHRvIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgICBjb25zdCB0cmFuc2Zvcm1TdHJlYW0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHtcbiAgICAgIHN0YXJ0ICgpIHt9LFxuICAgICAgdHJhbnNmb3JtOiBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSxcbiAgICAgIGZsdXNoOiBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHlcbiAgICB9LCB7XG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHRoZSByZXN1bHQgb2YgcGlwaW5nIHJlc3BvbnNlXHUyMDE5cyBib2R5IHRocm91Z2ggdHJhbnNmb3JtU3RyZWFtLlxuICAgIHJlc3BvbnNlLmJvZHkgPSB7IHN0cmVhbTogcmVzcG9uc2UuYm9keS5zdHJlYW0ucGlwZVRocm91Z2godHJhbnNmb3JtU3RyZWFtKSB9XG4gIH1cblxuICAvLyA2LiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSAhPSBudWxsKSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIG51bGxPckJ5dGVzIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgIC8vIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGdpdmVuIHJlc3BvbnNlIGFuZCBudWxsT3JCeXRlcy5cbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChudWxsT3JCeXRlcykgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkocmVzcG9uc2UsIG51bGxPckJ5dGVzKVxuXG4gICAgLy8gMi4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3NcbiAgICAvLyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIGZhaWx1cmUuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChmYWlsdXJlKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgZmFpbHVyZSlcblxuICAgIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keVxuICAgIC8vIGdpdmVuIG51bGwsIHdpdGggZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcHJvY2Vzc0JvZHkobnVsbCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgZnVsbHkgcmVhZCByZXNwb25zZVx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcixcbiAgICAgIC8vIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICAgIHJldHVybiBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cEZldGNoIChmZXRjaFBhcmFtcykge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBhY3R1YWxSZXNwb25zZSBiZSBudWxsLlxuICBsZXQgYWN0dWFsUmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDUuIElmIHJlcXVlc3RcdTIwMTlzIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwiYWxsXCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID09PSAnYWxsJykge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDYuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIC8vIDEuIElmIG1ha2VDT1JTUHJlZmxpZ2h0IGlzIHRydWUgYW5kIG9uZSBvZiB0aGVzZSBjb25kaXRpb25zIGlzIHRydWU6XG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpcyBcImZvbGxvd1wiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAgIC8vIHNlcnZpY2Utd29ya2VycyBtb2RlIHRvIFwibm9uZVwiLlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgcmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9ICdub25lJ1xuICAgIH1cblxuICAgIC8vIDMuIFNldCByZXNwb25zZSBhbmQgYWN0dWFsUmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgLy8gSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgIGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya09yQ2FjaGVGZXRjaChmZXRjaFBhcmFtcylcblxuICAgIC8vIDQuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIGFuZCBhIENPUlMgY2hlY2tcbiAgICAvLyBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmV0dXJucyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKFxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgJiZcbiAgICAgIGNvcnNDaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ2NvcnMgZmFpbHVyZScpXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgdGhlIFRBTyBjaGVjayBmb3IgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmV0dXJucyBmYWlsdXJlLCB0aGVuIHNldFxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZy5cbiAgICBpZiAoVEFPQ2hlY2socmVxdWVzdCwgcmVzcG9uc2UpID09PSAnZmFpbHVyZScpIHtcbiAgICAgIHJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gNy4gSWYgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIG9yIHJlc3BvbnNlXHUyMDE5cyB0eXBlXG4gIC8vIGlzIFwib3BhcXVlXCIsIGFuZCB0aGUgY3Jvc3Mtb3JpZ2luIHJlc291cmNlIHBvbGljeSBjaGVjayB3aXRoXG4gIC8vIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiwgcmVxdWVzdFx1MjAxOXMgY2xpZW50LCByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbixcbiAgLy8gYW5kIGFjdHVhbFJlc3BvbnNlIHJldHVybnMgYmxvY2tlZCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScpICYmXG4gICAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrKFxuICAgICAgcmVxdWVzdC5vcmlnaW4sXG4gICAgICByZXF1ZXN0LmNsaWVudCxcbiAgICAgIHJlcXVlc3QuZGVzdGluYXRpb24sXG4gICAgICBhY3R1YWxSZXNwb25zZVxuICAgICkgPT09ICdibG9ja2VkJ1xuICApIHtcbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignYmxvY2tlZCcpXG4gIH1cblxuICAvLyA4LiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuOlxuICBpZiAocmVkaXJlY3RTdGF0dXNTZXQuaGFzKGFjdHVhbFJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAvLyAxLiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gYW5kIHRoZSBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHVzZXIgYWdlbnRzIG1heSwgYW5kIGFyZSBldmVuXG4gICAgLy8gZW5jb3VyYWdlZCB0bywgdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODhcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgICB9XG5cbiAgICAvLyAyLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZTpcbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigndW5leHBlY3RlZCByZWRpcmVjdCcpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnbWFudWFsJykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIGFuIG9wYXF1ZS1yZWRpcmVjdCBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSBpbnRlcm5hbFxuICAgICAgLy8gcmVzcG9uc2UgaXMgYWN0dWFsUmVzcG9uc2UuXG4gICAgICAvLyBOT1RFKHNwZWMpOiBPbiB0aGUgd2ViIHRoaXMgd291bGQgcmV0dXJuIGFuIGBvcGFxdWVyZWRpcmVjdGAgcmVzcG9uc2UsXG4gICAgICAvLyBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugc2VydmVyIHNpZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzExOTMuXG4gICAgICByZXNwb25zZSA9IGFjdHVhbFJlc3BvbnNlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93Jykge1xuICAgICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLXJlZGlyZWN0IGZldGNoIGdpdmVuXG4gICAgICAvLyBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBSZWRpcmVjdEZldGNoKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDkuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcmVkaXJlY3QtZmV0Y2hcbmZ1bmN0aW9uIGh0dHBSZWRpcmVjdEZldGNoIChmZXRjaFBhcmFtcywgcmVzcG9uc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZCByZXNwb25zZSxcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGNvbnN0IGFjdHVhbFJlc3BvbnNlID0gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgID8gcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuICAgIDogcmVzcG9uc2VcblxuICAvLyAzLiBMZXQgbG9jYXRpb25VUkwgYmUgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIGxvY2F0aW9uIFVSTCBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gIC8vIFVSTFx1MjAxOXMgZnJhZ21lbnQuXG4gIGxldCBsb2NhdGlvblVSTFxuXG4gIHRyeSB7XG4gICAgbG9jYXRpb25VUkwgPSByZXNwb25zZUxvY2F0aW9uVVJMKFxuICAgICAgYWN0dWFsUmVzcG9uc2UsXG4gICAgICByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KS5oYXNoXG4gICAgKVxuXG4gICAgLy8gNC4gSWYgbG9jYXRpb25VUkwgaXMgbnVsbCwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpIHtcbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gNS4gSWYgbG9jYXRpb25VUkwgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICB9XG5cbiAgLy8gNi4gSWYgbG9jYXRpb25VUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyBlcnJvci5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShsb2NhdGlvblVSTCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJykpXG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBpcyAyMCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAyMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigncmVkaXJlY3QgY291bnQgZXhjZWVkZWQnKSlcbiAgfVxuXG4gIC8vIDguIEluY3JlYXNlIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGJ5IDEuXG4gIHJlcXVlc3QucmVkaXJlY3RDb3VudCArPSAxXG5cbiAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcImNvcnNcIiwgbG9jYXRpb25VUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIGFuZFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzIG9yaWdpbiwgdGhlbiByZXR1cm5cbiAgLy8gIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QubW9kZSA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKSAmJlxuICAgICFzYW1lT3JpZ2luKHJlcXVlc3QsIGxvY2F0aW9uVVJMKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Nyb3NzIG9yaWdpbiBub3QgYWxsb3dlZCBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJykpXG4gIH1cblxuICAvLyAxMC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGxvY2F0aW9uVVJMIGluY2x1ZGVzXG4gIC8vIGNyZWRlbnRpYWxzLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgJ1VSTCBjYW5ub3QgY29udGFpbiBjcmVkZW50aWFscyBmb3IgcmVxdWVzdCBtb2RlIFwiY29yc1wiJ1xuICAgICkpXG4gIH1cblxuICAvLyAxMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIGFjdHVhbFJlc3BvbnNlLnN0YXR1cyAhPT0gMzAzICYmXG4gICAgcmVxdWVzdC5ib2R5ICE9IG51bGwgJiZcbiAgICByZXF1ZXN0LmJvZHkuc291cmNlID09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCkpXG4gIH1cblxuICAvLyAxMi4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAxIG9yIDMwMiBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYFxuICAvLyAtIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzAzIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgIG9yIGBIRUFEYFxuICBpZiAoXG4gICAgKFszMDEsIDMwMl0uaW5jbHVkZXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BPU1QnKSB8fFxuICAgIChhY3R1YWxSZXNwb25zZS5zdGF0dXMgPT09IDMwMyAmJlxuICAgICAgIUdFVF9PUl9IRUFELmluY2x1ZGVzKHJlcXVlc3QubWV0aG9kKSlcbiAgKSB7XG4gICAgLy8gdGhlbjpcbiAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIGBHRVRgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIG51bGwuXG4gICAgcmVxdWVzdC5tZXRob2QgPSAnR0VUJ1xuICAgIHJlcXVlc3QuYm9keSA9IG51bGxcblxuICAgIC8vIDIuIEZvciBlYWNoIGhlYWRlck5hbWUgb2YgcmVxdWVzdC1ib2R5LWhlYWRlciBuYW1lLCBkZWxldGUgaGVhZGVyTmFtZSBmcm9tXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgZm9yIChjb25zdCBoZWFkZXJOYW1lIG9mIHJlcXVlc3RCb2R5SGVhZGVyKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZShoZWFkZXJOYW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5c1xuICAvLyAgICAgb3JpZ2luLCB0aGVuIGZvciBlYWNoIGhlYWRlck5hbWUgb2YgQ09SUyBub24td2lsZGNhcmQgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgLy8gICAgIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb20gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghc2FtZU9yaWdpbihyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSwgbG9jYXRpb25VUkwpKSB7XG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtbm9uLXdpbGRjYXJkLXJlcXVlc3QtaGVhZGVyLW5hbWVcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnYXV0aG9yaXphdGlvbicpXG5cbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXV0aGVudGljYXRpb24tZW50cmllc1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdwcm94eS1hdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIFwiQ29va2llXCIgYW5kIFwiSG9zdFwiIGFyZSBmb3JiaWRkZW4gcmVxdWVzdC1oZWFkZXJzLCB3aGljaCB1bmRpY2kgZG9lc24ndCBpbXBsZW1lbnQuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2Nvb2tpZScpXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gdGhlIGZpcnN0IHJldHVyblxuICAvLyB2YWx1ZSBvZiBzYWZlbHkgZXh0cmFjdGluZyByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UuXG4gIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIGFzc2VydChyZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICAgcmVxdWVzdC5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkocmVxdWVzdC5ib2R5LnNvdXJjZSlbMF1cbiAgfVxuXG4gIC8vIDE1LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMTYuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBlbmQgdGltZSBhbmQgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRoZVxuICAvLyBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIHRpbWluZ0luZm8ucmVkaXJlY3RFbmRUaW1lID0gdGltaW5nSW5mby5wb3N0UmVkaXJlY3RTdGFydFRpbWUgPVxuICAgIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGZldGNoUGFyYW1zLmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuXG4gIC8vIDE3LiBJZiB0aW1pbmdJbmZvXHUyMDE5cyByZWRpcmVjdCBzdGFydCB0aW1lIGlzIDAsIHRoZW4gc2V0IHRpbWluZ0luZm9cdTIwMTlzXG4gIC8vICByZWRpcmVjdCBzdGFydCB0aW1lIHRvIHRpbWluZ0luZm9cdTIwMTlzIHN0YXJ0IHRpbWUuXG4gIGlmICh0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID09PSAwKSB7XG4gICAgdGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gIH1cblxuICAvLyAxOC4gQXBwZW5kIGxvY2F0aW9uVVJMIHRvIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXF1ZXN0LnVybExpc3QucHVzaChsb2NhdGlvblVSTClcblxuICAvLyAxOS4gSW52b2tlIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgb24gcmVkaXJlY3Qgb24gcmVxdWVzdCBhbmRcbiAgLy8gYWN0dWFsUmVzcG9uc2UuXG4gIHNldFJlcXVlc3RSZWZlcnJlclBvbGljeU9uUmVkaXJlY3QocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpXG5cbiAgLy8gMjAuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgcmV0dXJuIG1haW5GZXRjaChmZXRjaFBhcmFtcywgdHJ1ZSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1vci1jYWNoZS1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaXNBdXRoZW50aWNhdGlvbkZldGNoID0gZmFsc2UsXG4gIGlzTmV3Q29ubmVjdGlvbkZldGNoID0gZmFsc2Vcbikge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgaHR0cEZldGNoUGFyYW1zIGJlIG51bGwuXG4gIGxldCBodHRwRmV0Y2hQYXJhbXMgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGh0dHBSZXF1ZXN0IGJlIG51bGwuXG4gIGxldCBodHRwUmVxdWVzdCA9IG51bGxcblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdG9yZWRSZXNwb25zZSBiZSBudWxsLlxuICAvLyBUT0RPOiBjYWNoZVxuXG4gIC8vIDYuIExldCBodHRwQ2FjaGUgYmUgbnVsbC5cbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDcuIExldCB0aGUgcmV2YWxpZGF0aW5nRmxhZyBiZSB1bnNldC5cbiAgY29uc3QgcmV2YWxpZGF0aW5nRmxhZyA9IGZhbHNlXG5cbiAgLy8gOC4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiIGFuZCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzXG4gIC8vICAgIFwiZXJyb3JcIiwgdGhlbiBzZXQgaHR0cEZldGNoUGFyYW1zIHRvIGZldGNoUGFyYW1zIGFuZCBodHRwUmVxdWVzdCB0b1xuICAvLyAgICByZXF1ZXN0LlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICBodHRwRmV0Y2hQYXJhbXMgPSBmZXRjaFBhcmFtc1xuICAgIGh0dHBSZXF1ZXN0ID0gcmVxdWVzdFxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFNldCBodHRwUmVxdWVzdCB0byBhIGNsb25lIG9mIHJlcXVlc3QuXG4gICAgaHR0cFJlcXVlc3QgPSBtYWtlUmVxdWVzdChyZXF1ZXN0KVxuXG4gICAgLy8gMi4gU2V0IGh0dHBGZXRjaFBhcmFtcyB0byBhIGNvcHkgb2YgZmV0Y2hQYXJhbXMuXG4gICAgaHR0cEZldGNoUGFyYW1zID0geyAuLi5mZXRjaFBhcmFtcyB9XG5cbiAgICAvLyAzLiBTZXQgaHR0cEZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0IHRvIGh0dHBSZXF1ZXN0LlxuICAgIGh0dHBGZXRjaFBhcmFtcy5yZXF1ZXN0ID0gaHR0cFJlcXVlc3RcbiAgfVxuXG4gIC8vICAgIDMuIExldCBpbmNsdWRlQ3JlZGVudGlhbHMgYmUgdHJ1ZSBpZiBvbmUgb2ZcbiAgY29uc3QgaW5jbHVkZUNyZWRlbnRpYWxzID1cbiAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScgfHxcbiAgICAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ3NhbWUtb3JpZ2luJyAmJlxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKVxuXG4gIC8vICAgIDQuIExldCBjb250ZW50TGVuZ3RoIGJlIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBsZW5ndGgsIGlmIGh0dHBSZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBib2R5IGlzIG5vbi1udWxsOyBvdGhlcndpc2UgbnVsbC5cbiAgY29uc3QgY29udGVudExlbmd0aCA9IGh0dHBSZXF1ZXN0LmJvZHkgPyBodHRwUmVxdWVzdC5ib2R5Lmxlbmd0aCA6IG51bGxcblxuICAvLyAgICA1LiBMZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGJlIG51bGwuXG4gIGxldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBudWxsXG5cbiAgLy8gICAgNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgUE9TVGAgb3JcbiAgLy8gICAgYFBVVGAsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBgMGAuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5ib2R5ID09IG51bGwgJiZcbiAgICBbJ1BPU1QnLCAnUFVUJ10uaW5jbHVkZXMoaHR0cFJlcXVlc3QubWV0aG9kKVxuICApIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSAnMCdcbiAgfVxuXG4gIC8vICAgIDcuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0b1xuICAvLyAgICBjb250ZW50TGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKGAke2NvbnRlbnRMZW5ndGh9YClcbiAgfVxuXG4gIC8vICAgIDguIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENvbnRlbnQtTGVuZ3RoYC9jb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBpZiAoY29udGVudExlbmd0aEhlYWRlclZhbHVlICE9IG51bGwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtbGVuZ3RoJywgY29udGVudExlbmd0aEhlYWRlclZhbHVlKVxuICB9XG5cbiAgLy8gICAgOS4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtTGVuZ3RoYCxcbiAgLy8gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlKSB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgMTAuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbjpcbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBodHRwUmVxdWVzdC5rZWVwYWxpdmUpIHtcbiAgICAvLyBOT1RFOiBrZWVwYWxpdmUgaXMgYSBub29wIG91dHNpZGUgb2YgYnJvd3NlciBjb250ZXh0LlxuICB9XG5cbiAgLy8gICAgMTEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBhIFVSTCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYFJlZmVyZXJgL2h0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLFxuICAvLyAgICAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3JlZmVyZXInLCBpc29tb3JwaGljRW5jb2RlKGh0dHBSZXF1ZXN0LnJlZmVycmVyLmhyZWYpKVxuICB9XG5cbiAgLy8gICAgMTIuIEFwcGVuZCBhIHJlcXVlc3QgYE9yaWdpbmAgaGVhZGVyIGZvciBodHRwUmVxdWVzdC5cbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcihodHRwUmVxdWVzdClcblxuICAvLyAgICAxMy4gQXBwZW5kIHRoZSBGZXRjaCBtZXRhZGF0YSBoZWFkZXJzIGZvciBodHRwUmVxdWVzdC4gW0ZFVENILU1FVEFEQVRBXVxuICBhcHBlbmRGZXRjaE1ldGFkYXRhKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDE0LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgVXNlci1BZ2VudGAsIHRoZW5cbiAgLy8gICAgdXNlciBhZ2VudHMgc2hvdWxkIGFwcGVuZCBgVXNlci1BZ2VudGAvZGVmYXVsdCBgVXNlci1BZ2VudGAgdmFsdWUgdG9cbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd1c2VyLWFnZW50JykpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3VzZXItYWdlbnQnLCB0eXBlb2YgZXNidWlsZERldGVjdGlvbiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kaWNpJyA6ICdub2RlJylcbiAgfVxuXG4gIC8vICAgIDE1LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcImRlZmF1bHRcIiBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0IGNvbnRhaW5zIGBJZi1Nb2RpZmllZC1TaW5jZWAsIGBJZi1Ob25lLU1hdGNoYCxcbiAgLy8gICAgYElmLVVubW9kaWZpZWQtU2luY2VgLCBgSWYtTWF0Y2hgLCBvciBgSWYtUmFuZ2VgLCB0aGVuIHNldFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ2RlZmF1bHQnICYmXG4gICAgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tb2RpZmllZC1zaW5jZScpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbm9uZS1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtdW5tb2RpZmllZC1zaW5jZScpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbWF0Y2gnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXJhbmdlJykpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMTYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tY2FjaGVcIiwgaHR0cFJlcXVlc3RcdTIwMTlzIHByZXZlbnRcbiAgLy8gICAgbm8tY2FjaGUgY2FjaGUtY29udHJvbCBoZWFkZXIgbW9kaWZpY2F0aW9uIGZsYWcgaXMgdW5zZXQsIGFuZFxuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDYWNoZS1Db250cm9sYC9gbWF4LWFnZT0wYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLWNhY2hlJyAmJlxuICAgICFodHRwUmVxdWVzdC5wcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbiAmJlxuICAgICFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpXG4gICkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICdtYXgtYWdlPTAnKVxuICB9XG5cbiAgLy8gICAgMTcuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiBvciBcInJlbG9hZFwiLCB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1zdG9yZScgfHwgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdyZWxvYWQnKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFByYWdtYWAsIHRoZW4gYXBwZW5kXG4gICAgLy8gYFByYWdtYWAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncHJhZ21hJykpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncHJhZ21hJywgJ25vLWNhY2hlJylcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQ2FjaGUtQ29udHJvbGAsXG4gICAgLy8gdGhlbiBhcHBlbmQgYENhY2hlLUNvbnRyb2xgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ25vLWNhY2hlJylcbiAgICB9XG4gIH1cblxuICAvLyAgICAxOC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBBY2NlcHQtRW5jb2RpbmdgL2BpZGVudGl0eWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdpZGVudGl0eScpXG4gIH1cblxuICAvLyAgICAxOS4gTW9kaWZ5IGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBwZXIgSFRUUC4gRG8gbm90IGFwcGVuZCBhIGdpdmVuXG4gIC8vICAgIGhlYWRlciBpZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgdGhhdCBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gIC8vICAgIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyODUjaXNzdWVjb21tZW50LTg5NjU2MDEyOVxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtZW5jb2RpbmcnKSkge1xuICAgIGlmICh1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChodHRwUmVxdWVzdCkpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdiciwgZ3ppcCwgZGVmbGF0ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2d6aXAsIGRlZmxhdGUnKVxuICAgIH1cbiAgfVxuXG4gIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG5cbiAgLy8gICAgMjAuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCB0aGVuOlxuICBpZiAoaW5jbHVkZUNyZWRlbnRpYWxzKSB7XG4gICAgLy8gMS4gSWYgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYmxvY2sgY29va2llcyBmb3IgaHR0cFJlcXVlc3RcbiAgICAvLyAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEF1dGhvcml6YXRpb25gLCB0aGVuOlxuICAgIC8vIFRPRE86IGNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyAgICAyMS4gSWYgdGhlcmVcdTIwMTlzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnksIHVzZSBpdCBhcyBhcHByb3ByaWF0ZS5cbiAgLy8gICAgVE9ETzogcHJveHktYXV0aGVudGljYXRpb25cblxuICAvLyAgICAyMi4gU2V0IGh0dHBDYWNoZSB0byB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlXG4gIC8vICAgIHBhcnRpdGlvbiwgZ2l2ZW4gaHR0cFJlcXVlc3QuXG4gIC8vICAgIFRPRE86IGNhY2hlXG5cbiAgLy8gICAgMjMuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0b1xuICAvLyAgICBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gICAgMjQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIG5laXRoZXIgXCJuby1zdG9yZVwiIG5vciBcInJlbG9hZFwiLFxuICAvLyAgICB0aGVuOlxuICBpZiAoaHR0cFJlcXVlc3QubW9kZSAhPT0gJ25vLXN0b3JlJyAmJiBodHRwUmVxdWVzdC5tb2RlICE9PSAncmVsb2FkJykge1xuICAgIC8vIFRPRE86IGNhY2hlXG4gIH1cblxuICAvLyA5LiBJZiBhYm9ydGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gIC8vIFRPRE9cblxuICAvLyAxMC4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm9ubHktaWYtY2FjaGVkXCIsIHRoZW4gcmV0dXJuIGFcbiAgICAvLyBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChodHRwUmVxdWVzdC5tb2RlID09PSAnb25seS1pZi1jYWNoZWQnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignb25seSBpZiBjYWNoZWQnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBmb3J3YXJkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yayBmZXRjaFxuICAgIC8vIGdpdmVuIGh0dHBGZXRjaFBhcmFtcywgaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgaXNOZXdDb25uZWN0aW9uRmV0Y2guXG4gICAgY29uc3QgZm9yd2FyZFJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtGZXRjaChcbiAgICAgIGh0dHBGZXRjaFBhcmFtcyxcbiAgICAgIGluY2x1ZGVDcmVkZW50aWFscyxcbiAgICAgIGlzTmV3Q29ubmVjdGlvbkZldGNoXG4gICAgKVxuXG4gICAgLy8gMy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyB1bnNhZmUgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzXG4gICAgLy8gaW4gdGhlIHJhbmdlIDIwMCB0byAzOTksIGluY2x1c2l2ZSwgaW52YWxpZGF0ZSBhcHByb3ByaWF0ZSBzdG9yZWRcbiAgICAvLyByZXNwb25zZXMgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlIFwiSW52YWxpZGF0aW9uXCIgY2hhcHRlciBvZiBIVFRQXG4gICAgLy8gQ2FjaGluZywgYW5kIHNldCBzdG9yZWRSZXNwb25zZSB0byBudWxsLiBbSFRUUC1DQUNISU5HXVxuICAgIGlmIChcbiAgICAgICFzYWZlTWV0aG9kc1NldC5oYXMoaHR0cFJlcXVlc3QubWV0aG9kKSAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPD0gMzk5XG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDQuIElmIHRoZSByZXZhbGlkYXRpbmdGbGFnIGlzIHNldCBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMzA0LFxuICAgIC8vIHRoZW46XG4gICAgaWYgKHJldmFsaWRhdGluZ0ZsYWcgJiYgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0KSB7XG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cblxuICAgIC8vIDUuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZSB0byBmb3J3YXJkUmVzcG9uc2UuXG4gICAgICByZXNwb25zZSA9IGZvcndhcmRSZXNwb25zZVxuXG4gICAgICAvLyAyLiBTdG9yZSBodHRwUmVxdWVzdCBhbmQgZm9yd2FyZFJlc3BvbnNlIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZVxuICAgICAgLy8gXCJTdG9yaW5nIFJlc3BvbnNlcyBpbiBDYWNoZXNcIiBjaGFwdGVyIG9mIEhUVFAgQ2FjaGluZy4gW0hUVFAtQ0FDSElOR11cbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuICB9XG5cbiAgLy8gMTEuIFNldCByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgdG8gYSBjbG9uZSBvZiBodHRwUmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlc3BvbnNlLnVybExpc3QgPSBbLi4uaHR0cFJlcXVlc3QudXJsTGlzdF1cblxuICAvLyAxMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5c1xuICAvLyByYW5nZS1yZXF1ZXN0ZWQgZmxhZy5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScpKSB7XG4gICAgcmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0LWluY2x1ZGVzLWNyZWRlbnRpYWxzIHRvIGluY2x1ZGVDcmVkZW50aWFscy5cbiAgcmVzcG9uc2UucmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHMgPSBpbmNsdWRlQ3JlZGVudGlhbHNcblxuICAvLyAxNC4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDEsIGh0dHBSZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBub3RcbiAgLy8gXCJjb3JzXCIsIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlLCBhbmQgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50XG4gIC8vIHNldHRpbmdzIG9iamVjdCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwNywgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA3KSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICduby13aW5kb3cnKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigpXG4gICAgfVxuXG4gICAgLy8gMi4gPz8/XG5cbiAgICAvLyAzLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gNC4gUHJvbXB0IHRoZSBlbmQgdXNlciBhcyBhcHByb3ByaWF0ZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgYW5kIHN0b3JlXG4gICAgLy8gdGhlIHJlc3VsdCBhcyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LiBbSFRUUC1BVVRIXVxuICAgIC8vIFRPRE86IEludm9rZSBzb21lIGtpbmQgb2YgY2FsbGJhY2s/XG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlblxuICAgIC8vIGZldGNoUGFyYW1zLlxuICAgIC8vIFRPRE9cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncHJveHkgYXV0aGVudGljYXRpb24gcmVxdWlyZWQnKVxuICB9XG5cbiAgLy8gMTYuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlXG4gIGlmIChcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQyMVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDIxICYmXG4gICAgLy8gaXNOZXdDb25uZWN0aW9uRmV0Y2ggaXMgZmFsc2VcbiAgICAhaXNOZXdDb25uZWN0aW9uRmV0Y2ggJiZcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwsIG9yIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBub24tbnVsbFxuICAgIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCB8fCByZXF1ZXN0LmJvZHkuc291cmNlICE9IG51bGwpXG4gICkge1xuICAgIC8vIHRoZW46XG5cbiAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGVcbiAgICAvLyBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcywgaXNBdXRoZW50aWNhdGlvbkZldGNoLCBhbmQgdHJ1ZS5cblxuICAgIC8vIFRPRE8gKHNwZWMpOiBUaGUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBidXQgd2UgbmVlZCB0byBjYW5jZWxcbiAgICAvLyB0aGUgYWN0aXZlIHJlc3BvbnNlIGJlZm9yZSB3ZSBjYW4gc3RhcnQgYSBuZXcgb25lLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvZmV0Y2gvaXNzdWVzLzEyOTNcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKFxuICAgICAgZmV0Y2hQYXJhbXMsXG4gICAgICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsXG4gICAgICB0cnVlXG4gICAgKVxuICB9XG5cbiAgLy8gMTcuIElmIGlzQXV0aGVudGljYXRpb25GZXRjaCBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBhbiBhdXRoZW50aWNhdGlvbiBlbnRyeVxuICBpZiAoaXNBdXRoZW50aWNhdGlvbkZldGNoKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTguIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrRmV0Y2ggKFxuICBmZXRjaFBhcmFtcyxcbiAgaW5jbHVkZUNyZWRlbnRpYWxzID0gZmFsc2UsXG4gIGZvcmNlTmV3Q29ubmVjdGlvbiA9IGZhbHNlXG4pIHtcbiAgYXNzZXJ0KCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gfHwgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3llZClcblxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24gPSB7XG4gICAgYWJvcnQ6IG51bGwsXG4gICAgZGVzdHJveWVkOiBmYWxzZSxcbiAgICBkZXN0cm95IChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuYWJvcnQ/LihlcnIgPz8gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDQuIExldCBodHRwQ2FjaGUgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgSFRUUCBjYWNoZSBwYXJ0aXRpb24sXG4gIC8vIGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE86IGNhY2hlXG4gIGNvbnN0IGh0dHBDYWNoZSA9IG51bGxcblxuICAvLyA1LiBJZiBodHRwQ2FjaGUgaXMgbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIHJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyA2LiBMZXQgbmV0d29ya1BhcnRpdGlvbktleSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBuZXR3b3JrXG4gIC8vIHBhcnRpdGlvbiBrZXkgZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDcuIExldCBuZXdDb25uZWN0aW9uIGJlIFwieWVzXCIgaWYgZm9yY2VOZXdDb25uZWN0aW9uIGlzIHRydWU7IG90aGVyd2lzZVxuICAvLyBcIm5vXCIuXG4gIGNvbnN0IG5ld0Nvbm5lY3Rpb24gPSBmb3JjZU5ld0Nvbm5lY3Rpb24gPyAneWVzJyA6ICdubycgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8vIDguIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBtb2RlOlxuICBpZiAocmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0Jykge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24sXG4gICAgLy8gZ2l2ZW4gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgLy8gVE9ET1xuICB9IGVsc2Uge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgY29ubmVjdGlvbiwgZ2l2ZW5cbiAgICAvLyBuZXR3b3JrUGFydGl0aW9uS2V5LCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luLFxuICAgIC8vIGluY2x1ZGVDcmVkZW50aWFscywgYW5kIGZvcmNlTmV3Q29ubmVjdGlvbi5cbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA5LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgY29ubmVjdGlvbiBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgMi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBjYWxsaW5nIGNsYW1wIGFuZCBjb2Fyc2VuIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gd2l0aCBjb25uZWN0aW9uXHUyMDE5c1xuICAvLyAgICB0aW1pbmcgaW5mbywgdGltaW5nSW5mb1x1MjAxOXMgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDMuIElmIGNvbm5lY3Rpb24gaXMgbm90IGFuIEhUVFAvMiBjb25uZWN0aW9uLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyAgICBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gYXBwZW5kIChgVHJhbnNmZXItRW5jb2RpbmdgLFxuICAvLyAgICBgY2h1bmtlZGApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDQuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlcXVlc3Qgc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyAgICBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIG1ha2luZyBhbiBIVFRQIHJlcXVlc3Qgb3ZlciBjb25uZWN0aW9uXG4gIC8vICAgIHVzaW5nIHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGNhdmVhdHM6XG5cbiAgLy8gICAgICAgIC0gRm9sbG93IHRoZSByZWxldmFudCByZXF1aXJlbWVudHMgZnJvbSBIVFRQLiBbSFRUUF0gW0hUVFAtU0VNQU5USUNTXVxuICAvLyAgICAgICAgW0hUVFAtQ09ORF0gW0hUVFAtQ0FDSElOR10gW0hUVFAtQVVUSF1cblxuICAvLyAgICAgICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsXG4gIC8vICAgICAgICB0aGVuIHRoZSB1c2VyIGFnZW50IG1heSBoYXZlIGEgYnVmZmVyIG9mIHVwIHRvIDY0IGtpYmlieXRlcyBhbmQgc3RvcmVcbiAgLy8gICAgICAgIGEgcGFydCBvZiByZXF1ZXN0XHUyMDE5cyBib2R5IGluIHRoYXQgYnVmZmVyLiBJZiB0aGUgdXNlciBhZ2VudCByZWFkcyBmcm9tXG4gIC8vICAgICAgICByZXF1ZXN0XHUyMDE5cyBib2R5IGJleW9uZCB0aGF0IGJ1ZmZlclx1MjAxOXMgc2l6ZSBhbmQgdGhlIHVzZXIgYWdlbnQgbmVlZHMgdG9cbiAgLy8gICAgICAgIHJlc2VuZCByZXF1ZXN0LCB0aGVuIGluc3RlYWQgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAgICAgLSBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LFxuICAvLyAgICAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVzZXIgYWdlbnRcdTIwMTlzIEhUVFAgcGFyc2VyIHJlY2VpdmVzIHRoZSBmaXJzdCBieXRlXG4gIC8vICAgICAgICBvZiB0aGUgcmVzcG9uc2UgKGUuZy4sIGZyYW1lIGhlYWRlciBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1c1xuICAvLyAgICAgICAgbGluZSBmb3IgSFRUUC8xLngpLlxuXG4gIC8vICAgICAgICAtIFdhaXQgdW50aWwgYWxsIHRoZSBoZWFkZXJzIGFyZSB0cmFuc21pdHRlZC5cblxuICAvLyAgICAgICAgLSBBbnkgcmVzcG9uc2VzIHdob3NlIHN0YXR1cyBpcyBpbiB0aGUgcmFuZ2UgMTAwIHRvIDE5OSwgaW5jbHVzaXZlLFxuICAvLyAgICAgICAgYW5kIGlzIG5vdCAxMDEsIGFyZSB0byBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIHRoZSBwdXJwb3NlcyBvZiBzZXR0aW5nXG4gIC8vICAgICAgICB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgYWJvdmUuXG5cbiAgLy8gICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgVHJhbnNmZXItRW5jb2RpbmdgL2BjaHVua2VkYCBhbmRcbiAgLy8gICAgcmVzcG9uc2UgaXMgdHJhbnNmZXJyZWQgdmlhIEhUVFAvMS4wIG9yIG9sZGVyLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgLy8gICAgZXJyb3IuXG5cbiAgLy8gICAgLSBJZiB0aGUgSFRUUCByZXF1ZXN0IHJlc3VsdHMgaW4gYSBUTFMgY2xpZW50IGNlcnRpZmljYXRlIGRpYWxvZywgdGhlbjpcblxuICAvLyAgICAgICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCwgbWFrZSB0aGVcbiAgLy8gICAgICAgIGRpYWxvZyBhdmFpbGFibGUgaW4gcmVxdWVzdFx1MjAxOXMgd2luZG93LlxuXG4gIC8vICAgICAgICAyLiBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gVG8gdHJhbnNtaXQgcmVxdWVzdFx1MjAxOXMgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG4gIGxldCByZXF1ZXN0Qm9keSA9IG51bGxcbiAgLy8gMS4gSWYgYm9keSBpcyBudWxsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzXG4gIC8vIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0XG4gIC8vIGVuZC1vZi1ib2R5IGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKHJlcXVlc3QuYm9keSA9PSBudWxsICYmIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgYm9keSBpcyBub24tbnVsbDpcblxuICAgIC8vICAgIDEuIExldCBwcm9jZXNzQm9keUNodW5rIGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5Q2h1bmsgPSBhc3luYyBmdW5jdGlvbiAqIChieXRlcykge1xuICAgICAgLy8gMS4gSWYgdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6IHRyYW5zbWl0IGJ5dGVzLlxuICAgICAgeWllbGQgYnl0ZXNcblxuICAgICAgLy8gMy4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHJ1blxuICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGdpdmVuIGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aD8uKGJ5dGVzLmJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHByb2Nlc3NFbmRPZkJvZHkgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0VuZE9mQm9keSA9ICgpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBub24tbnVsbCxcbiAgICAgIC8vIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkuXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keUVycm9yIGdpdmVuIGUgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChlKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGUgaXMgYW4gXCJBYm9ydEVycm9yXCIgRE9NRXhjZXB0aW9uLCB0aGVuIGFib3J0IGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJbmNyZW1lbnRhbGx5IHJlYWQgcmVxdWVzdFx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keUNodW5rLCBwcm9jZXNzRW5kT2ZCb2R5LFxuICAgIC8vIHByb2Nlc3NCb2R5RXJyb3IsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICByZXF1ZXN0Qm9keSA9IChhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgYnl0ZXMgb2YgcmVxdWVzdC5ib2R5LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcHJvY2Vzc0JvZHlDaHVuayhieXRlcylcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzRW5kT2ZCb2R5KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKGVycilcbiAgICAgIH1cbiAgICB9KSgpXG4gIH1cblxuICB0cnkge1xuICAgIC8vIHNvY2tldCBpcyBvbmx5IHByb3ZpZGVkIGZvciB3ZWJzb2NrZXRzXG4gICAgY29uc3QgeyBib2R5LCBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSA9IGF3YWl0IGRpc3BhdGNoKHsgYm9keTogcmVxdWVzdEJvZHkgfSlcblxuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gYm9keVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5uZXh0ID0gKCkgPT4gaXRlcmF0b3IubmV4dCgpXG5cbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCB9KVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gMTAuIElmIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgIC8vIDEuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgICAgLy8gMi4gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMsIGVycilcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcihlcnIpXG4gIH1cblxuICAvLyAxMS4gTGV0IHB1bGxBbGdvcml0aG0gYmUgYW4gYWN0aW9uIHRoYXQgcmVzdW1lcyB0aGUgb25nb2luZyBmZXRjaFxuICAvLyBpZiBpdCBpcyBzdXNwZW5kZWQuXG4gIGNvbnN0IHB1bGxBbGdvcml0aG0gPSAoKSA9PiB7XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXN1bWUoKVxuICB9XG5cbiAgLy8gMTIuIExldCBjYW5jZWxBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWJvcnRzIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyBjb250cm9sbGVyIHdpdGggcmVhc29uLCBnaXZlbiByZWFzb24uXG4gIGNvbnN0IGNhbmNlbEFsZ29yaXRobSA9IChyZWFzb24pID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KHJlYXNvbilcbiAgfVxuXG4gIC8vIDEzLiBMZXQgaGlnaFdhdGVyTWFyayBiZSBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiBudW1iZXIsIGNob3NlbiBieVxuICAvLyB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE0LiBMZXQgc2l6ZUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhY2NlcHRzIGEgY2h1bmsgb2JqZWN0XG4gIC8vIGFuZCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOLCBub24taW5maW5pdGUgbnVtYmVyLCBjaG9zZW4gYnkgdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNS4gTGV0IHN0cmVhbSBiZSBhIG5ldyBSZWFkYWJsZVN0cmVhbS5cbiAgLy8gMTYuIFNldCB1cCBzdHJlYW0gd2l0aCBwdWxsQWxnb3JpdGhtIHNldCB0byBwdWxsQWxnb3JpdGhtLFxuICAvLyBjYW5jZWxBbGdvcml0aG0gc2V0IHRvIGNhbmNlbEFsZ29yaXRobSwgaGlnaFdhdGVyTWFyayBzZXQgdG9cbiAgLy8gaGlnaFdhdGVyTWFyaywgYW5kIHNpemVBbGdvcml0aG0gc2V0IHRvIHNpemVBbGdvcml0aG0uXG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHN0YXJ0IChjb250cm9sbGVyKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGF3YWl0IHB1bGxBbGdvcml0aG0oY29udHJvbGxlcilcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBjYW5jZWxBbGdvcml0aG0ocmVhc29uKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaGlnaFdhdGVyTWFyazogMCxcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH1cbiAgKVxuXG4gIC8vIDE3LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIGEgbmV3IGJvZHkgd2hvc2Ugc3RyZWFtIGlzIHN0cmVhbS5cbiAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtIH1cblxuICAvLyAgICAyLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzXG4gIC8vICAgIG5vdCBcIm5vLXN0b3JlXCIsIHRoZW4gdXBkYXRlIHJlc3BvbnNlIGluIGh0dHBDYWNoZSBmb3IgcmVxdWVzdC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vICAgIDMuIElmIGluY2x1ZGVDcmVkZW50aWFscyBpcyB0cnVlIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZFxuICAvLyAgICB0byBibG9jayBjb29raWVzIGZvciByZXF1ZXN0IChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW4gcnVuIHRoZVxuICAvLyAgICBcInNldC1jb29raWUtc3RyaW5nXCIgcGFyc2luZyBhbGdvcml0aG0gKHNlZSBzZWN0aW9uIDUuMiBvZiBbQ09PS0lFU10pIG9uXG4gIC8vICAgIHRoZSB2YWx1ZSBvZiBlYWNoIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAvLyAgICBgU2V0LUNvb2tpZWAgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LCBpZiBhbnksIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgLy8gICAgVE9ET1xuXG4gIC8vIDE4LiBJZiBhYm9ydGVkLCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTkuIFJ1biB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbDpcblxuICAvLyAgICAxLiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkOlxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgb25BYm9ydGVkKVxuICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSA9IGFzeW5jICgpID0+IHtcbiAgICAvLyAxLiBXaGlsZSB0cnVlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIDEtMy4gU2VlIG9uRGF0YS4uLlxuXG4gICAgICAvLyA0LiBTZXQgYnl0ZXMgdG8gdGhlIHJlc3VsdCBvZiBoYW5kbGluZyBjb250ZW50IGNvZGluZ3MgZ2l2ZW5cbiAgICAgIC8vIGNvZGluZ3MgYW5kIGJ5dGVzLlxuICAgICAgbGV0IGJ5dGVzXG4gICAgICBsZXQgaXNGYWlsdXJlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQoKVxuXG4gICAgICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzID0gZG9uZSA/IHVuZGVmaW5lZCA6IHZhbHVlXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgJiYgIXRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplKSB7XG4gICAgICAgICAgLy8gemxpYiBkb2Vzbid0IGxpa2UgZW1wdHkgc3RyZWFtcy5cbiAgICAgICAgICBieXRlcyA9IHVuZGVmaW5lZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5dGVzID0gZXJyXG5cbiAgICAgICAgICAvLyBlcnIgbWF5IGJlIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgcmVhZGFibGVzdHJlYW0uY2FuY2VsLFxuICAgICAgICAgIC8vIHdoaWNoIG1pZ2h0IG5vdCBiZSBhbiBlcnJvci4gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMDlcbiAgICAgICAgICBpc0ZhaWx1cmUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ5dGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYnl0ZXMgdHJhbnNtaXNzaW9uIGZvciByZXNwb25zZVx1MjAxOXMgbWVzc2FnZVxuICAgICAgICAvLyBib2R5IGlzIGRvbmUgbm9ybWFsbHkgYW5kIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBjbG9zZVxuICAgICAgICAvLyBzdHJlYW0sIGZpbmFsaXplIHJlc3BvbnNlIGZvciBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UsIGFuZFxuICAgICAgICAvLyBhYm9ydCB0aGVzZSBpbi1wYXJhbGxlbCBzdGVwcy5cbiAgICAgICAgcmVhZGFibGVTdHJlYW1DbG9zZShmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIpXG5cbiAgICAgICAgZmluYWxpemVSZXNwb25zZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGRlY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICB0aW1pbmdJbmZvLmRlY29kZWRCb2R5U2l6ZSArPSBieXRlcz8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAgIC8vIDYuIElmIGJ5dGVzIGlzIGZhaWx1cmUsIHRoZW4gdGVybWluYXRlIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGlzRmFpbHVyZSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShieXRlcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDcuIEVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgYnl0ZXNcbiAgICAgIC8vIGludG8gc3RyZWFtLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKVxuXG4gICAgICAvLyA4LiBJZiBzdHJlYW0gaXMgZXJyb3JlZCwgdGhlbiB0ZXJtaW5hdGUgdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gOS4gSWYgc3RyZWFtIGRvZXNuXHUyMDE5dCBuZWVkIG1vcmUgZGF0YSBhc2sgdGhlIHVzZXIgYWdlbnQgdG8gc3VzcGVuZFxuICAgICAgLy8gdGhlIG9uZ29pbmcgZmV0Y2guXG4gICAgICBpZiAoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5kZXNpcmVkU2l6ZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAgICAyLiBJZiBhYm9ydGVkLCB0aGVuOlxuICBmdW5jdGlvbiBvbkFib3J0ZWQgKHJlYXNvbikge1xuICAgIC8vIDIuIElmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZVx1MjAxOXMgYWJvcnRlZCBmbGFnLlxuICAgICAgcmVzcG9uc2UuYWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHN0cmVhbSB3aXRoIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gICAgICAvLyAgICBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmQgYW5cbiAgICAgIC8vICAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcmVhbG0uXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihcbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvblxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgc3RyZWFtIGlzIHJlYWRhYmxlLCBlcnJvciBzdHJlYW0gd2l0aCBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKG5ldyBUeXBlRXJyb3IoJ3Rlcm1pbmF0ZWQnLCB7XG4gICAgICAgICAgY2F1c2U6IGlzRXJyb3JMaWtlKHJlYXNvbikgPyByZWFzb24gOiB1bmRlZmluZWRcbiAgICAgICAgfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgdGhlIHVzZXIgYWdlbnQgc2hvdWxkIGNsb3NlIGNvbm5lY3Rpb24gdW5sZXNzIGl0IHdvdWxkIGJlIGJhZCBmb3IgcGVyZm9ybWFuY2UgdG8gZG8gc28uXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICB9XG5cbiAgLy8gMjAuIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2ggKHsgYm9keSB9KSB7XG4gICAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAvKiogQHR5cGUge2ltcG9ydCgnLi4vLi4nKS5BZ2VudH0gKi9cbiAgICBjb25zdCBhZ2VudCA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZGlzcGF0Y2hlclxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGFnZW50LmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICBwYXRoOiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoLFxuICAgICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgIGJvZHk6IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZGlzcGF0Y2hlci5pc01vY2tBY3RpdmUgPyByZXF1ZXN0LmJvZHkgJiYgKHJlcXVlc3QuYm9keS5zb3VyY2UgfHwgcmVxdWVzdC5ib2R5LnN0cmVhbSkgOiBib2R5LFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNMaXN0LmVudHJpZXMsXG4gICAgICAgIG1heFJlZGlyZWN0aW9uczogMCxcbiAgICAgICAgdXBncmFkZTogcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JyA/ICd3ZWJzb2NrZXQnIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBib2R5OiBudWxsLFxuICAgICAgICBhYm9ydDogbnVsbCxcblxuICAgICAgICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCBjb25uZWN0aW9uIGhlcmU/XG4gICAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uIH0gPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICAgICAgICBpZiAoY29ubmVjdGlvbi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGFib3J0KG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vbigndGVybWluYXRlZCcsIGFib3J0KVxuICAgICAgICAgICAgdGhpcy5hYm9ydCA9IGNvbm5lY3Rpb24uYWJvcnQgPSBhYm9ydFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBvbkhlYWRlcnMgKHN0YXR1cywgaGVhZGVyc0xpc3QsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgPCAyMDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBjb2RpbmdzID0gW11cbiAgICAgICAgICBsZXQgbG9jYXRpb24gPSAnJ1xuXG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcblxuICAgICAgICAgIC8vIEZvciBIMiwgdGhlIGhlYWRlcnMgYXJlIGEgcGxhaW4gSlMgb2JqZWN0XG4gICAgICAgICAgLy8gV2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtIGFuZCBpdGVyYXRlIGFjY29yZGluZ2x5XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVyc0xpc3QpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnNMaXN0Lmxlbmd0aDsgbiArPSAyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNMaXN0W24gKyAwXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gdmFsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVyc0xpc3QpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W2tleV1cbiAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1lbmNvZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTMuMS4yLjFcbiAgICAgICAgICAgICAgICAvLyBcIkFsbCBjb250ZW50LWNvZGluZyB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuLi5cIlxuICAgICAgICAgICAgICAgIGNvZGluZ3MgPSB2YWwudG9Mb3dlckNhc2UoKS5zcGxpdCgnLCcpLm1hcCgoeCkgPT4geC50cmltKCkpLnJldmVyc2UoKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVhZDogcmVzdW1lIH0pXG5cbiAgICAgICAgICBjb25zdCBkZWNvZGVycyA9IFtdXG5cbiAgICAgICAgICBjb25zdCB3aWxsRm9sbG93ID0gcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycgJiZcbiAgICAgICAgICAgIGxvY2F0aW9uICYmXG4gICAgICAgICAgICByZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKVxuXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtRW5jb2RpbmdcbiAgICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0NPTk5FQ1QnICYmICFudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhzdGF0dXMpICYmICF3aWxsRm9sbG93KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGluZyBvZiBjb2RpbmdzKSB7XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEyLmh0bWwjc2VjdGlvbi03LjJcbiAgICAgICAgICAgICAgaWYgKGNvZGluZyA9PT0gJ3gtZ3ppcCcgfHwgY29kaW5nID09PSAnZ3ppcCcpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlR3VuemlwKHtcbiAgICAgICAgICAgICAgICAgIC8vIEJlIGxlc3Mgc3RyaWN0IHdoZW4gZGVjb2RpbmcgY29tcHJlc3NlZCByZXNwb25zZXMsIHNpbmNlIHNvbWV0aW1lc1xuICAgICAgICAgICAgICAgICAgLy8gc2VydmVycyBzZW5kIHNsaWdodGx5IGludmFsaWQgcmVzcG9uc2VzIHRoYXQgYXJlIHN0aWxsIGFjY2VwdGVkXG4gICAgICAgICAgICAgICAgICAvLyBieSBjb21tb24gYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXNpbmcgWl9TWU5DX0ZMVVNIIGlzIHdoYXQgY1VSTCBkb2VzLlxuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdkZWZsYXRlJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVJbmZsYXRlKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnYnInKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5sZW5ndGggPSAwXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0OiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0sXG4gICAgICAgICAgICBib2R5OiBkZWNvZGVycy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBwaXBlbGluZSh0aGlzLmJvZHksIC4uLmRlY29kZXJzLCAoKSA9PiB7IH0pXG4gICAgICAgICAgICAgIDogdGhpcy5ib2R5Lm9uKCdlcnJvcicsICgpID0+IHt9KVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRGF0YSAoY2h1bmspIHtcbiAgICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAxLiBJZiBvbmUgb3IgbW9yZSBieXRlcyBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQgZnJvbSByZXNwb25zZVx1MjAxOXNcbiAgICAgICAgICAvLyBtZXNzYWdlIGJvZHksIHRoZW46XG5cbiAgICAgICAgICAvLyAgMS4gTGV0IGJ5dGVzIGJlIHRoZSB0cmFuc21pdHRlZCBieXRlcy5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IGNodW5rXG5cbiAgICAgICAgICAvLyAgMi4gTGV0IGNvZGluZ3MgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgICAgIC8vICBnaXZlbiBgQ29udGVudC1FbmNvZGluZ2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgICAvLyAgU2VlIHB1bGxBbGdvcml0aG0uXG5cbiAgICAgICAgICAvLyAgMy4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZW5jb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgICAgICB0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSArPSBieXRlcy5ieXRlTGVuZ3RoXG5cbiAgICAgICAgICAvLyAgNC4gU2VlIHB1bGxBbGdvcml0aG0uLi5cblxuICAgICAgICAgIHJldHVybiB0aGlzLmJvZHkucHVzaChieXRlcylcbiAgICAgICAgfSxcblxuICAgICAgICBvbkNvbXBsZXRlICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmJvZHkucHVzaChudWxsKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub2ZmKCd0ZXJtaW5hdGVkJywgdGhpcy5hYm9ydClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHk/LmRlc3Ryb3koZXJyb3IpXG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnJvcilcblxuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcblxuICAgICAgICBvblVwZ3JhZGUgKHN0YXR1cywgaGVhZGVyc0xpc3QsIHNvY2tldCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09IDEwMSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcblxuICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNMaXN0W24gKyAwXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W24gKyAxXS50b1N0cmluZygnbGF0aW4xJylcblxuICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IFNUQVRVU19DT0RFU1tzdGF0dXNdLFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIHNvY2tldFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2gsXG4gIEZldGNoLFxuICBmZXRjaGluZyxcbiAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtTdGF0ZTogU3ltYm9sKCdGaWxlUmVhZGVyIHN0YXRlJyksXG4gIGtSZXN1bHQ6IFN5bWJvbCgnRmlsZVJlYWRlciByZXN1bHQnKSxcbiAga0Vycm9yOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXJyb3InKSxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBsYXN0IHByb2dyZXNzIGV2ZW50IGZpcmVkIHRpbWVzdGFtcCcpLFxuICBrRXZlbnRzOiBTeW1ib2woJ0ZpbGVSZWFkZXIgZXZlbnRzJyksXG4gIGtBYm9ydGVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgYWJvcnRlZCcpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuXG5jb25zdCBrU3RhdGUgPSBTeW1ib2woJ1Byb2dyZXNzRXZlbnQgc3RhdGUnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNwcm9ncmVzc2V2ZW50XG4gKi9cbmNsYXNzIFByb2dyZXNzRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogZXZlbnRJbml0RGljdC5sZW5ndGhDb21wdXRhYmxlLFxuICAgICAgbG9hZGVkOiBldmVudEluaXREaWN0LmxvYWRlZCxcbiAgICAgIHRvdGFsOiBldmVudEluaXREaWN0LnRvdGFsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aENvbXB1dGFibGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxlbmd0aENvbXB1dGFibGVcbiAgfVxuXG4gIGdldCBsb2FkZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxvYWRlZFxuICB9XG5cbiAgZ2V0IHRvdGFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50b3RhbFxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGVuZ3RoQ29tcHV0YWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2xvYWRlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0b3RhbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZW5jb2RpbmctZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGxhYmVsXG4gKi9cbmZ1bmN0aW9uIGdldEVuY29kaW5nIChsYWJlbCkge1xuICBpZiAoIWxhYmVsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gbGFiZWwuXG4gIC8vIDIuIElmIGxhYmVsIGlzIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGFueSBvZiB0aGVcbiAgLy8gICAgbGFiZWxzIGxpc3RlZCBpbiB0aGUgdGFibGUgYmVsb3csIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBjb3JyZXNwb25kaW5nIGVuY29kaW5nOyBvdGhlcndpc2UgcmV0dXJuIGZhaWx1cmUuXG4gIHN3aXRjaCAobGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd1bmljb2RlLTEtMS11dGYtOCc6XG4gICAgY2FzZSAndW5pY29kZTExdXRmOCc6XG4gICAgY2FzZSAndW5pY29kZTIwdXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3gtdW5pY29kZTIwdXRmOCc6XG4gICAgICByZXR1cm4gJ1VURi04J1xuICAgIGNhc2UgJzg2Nic6XG4gICAgY2FzZSAnY3A4NjYnOlxuICAgIGNhc2UgJ2NzaWJtODY2JzpcbiAgICBjYXNlICdpYm04NjYnOlxuICAgICAgcmV0dXJuICdJQk04NjYnXG4gICAgY2FzZSAnY3Npc29sYXRpbjInOlxuICAgIGNhc2UgJ2lzby04ODU5LTInOlxuICAgIGNhc2UgJ2lzby1pci0xMDEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMic6XG4gICAgY2FzZSAnaXNvODg1OTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTI6MTk4Nyc6XG4gICAgY2FzZSAnbDInOlxuICAgIGNhc2UgJ2xhdGluMic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTInXG4gICAgY2FzZSAnY3Npc29sYXRpbjMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTMnOlxuICAgIGNhc2UgJ2lzby1pci0xMDknOlxuICAgIGNhc2UgJ2lzbzg4NTktMyc6XG4gICAgY2FzZSAnaXNvODg1OTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTM6MTk4OCc6XG4gICAgY2FzZSAnbDMnOlxuICAgIGNhc2UgJ2xhdGluMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTMnXG4gICAgY2FzZSAnY3Npc29sYXRpbjQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTQnOlxuICAgIGNhc2UgJ2lzby1pci0xMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTktNCc6XG4gICAgY2FzZSAnaXNvODg1OTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQ6MTk4OCc6XG4gICAgY2FzZSAnbDQnOlxuICAgIGNhc2UgJ2xhdGluNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbmN5cmlsbGljJzpcbiAgICBjYXNlICdjeXJpbGxpYyc6XG4gICAgY2FzZSAnaXNvLTg4NTktNSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0NCc6XG4gICAgY2FzZSAnaXNvODg1OS01JzpcbiAgICBjYXNlICdpc284ODU5NSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNToxOTg4JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNSdcbiAgICBjYXNlICdhcmFiaWMnOlxuICAgIGNhc2UgJ2FzbW8tNzA4JzpcbiAgICBjYXNlICdjc2lzbzg4NTk2ZSc6XG4gICAgY2FzZSAnY3Npc284ODU5NmknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5hcmFiaWMnOlxuICAgIGNhc2UgJ2VjbWEtMTE0JzpcbiAgICBjYXNlICdpc28tODg1OS02JzpcbiAgICBjYXNlICdpc28tODg1OS02LWUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtaSc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNyc6XG4gICAgY2FzZSAnaXNvODg1OS02JzpcbiAgICBjYXNlICdpc284ODU5Nic6XG4gICAgY2FzZSAnaXNvXzg4NTktNic6XG4gICAgY2FzZSAnaXNvXzg4NTktNjoxOTg3JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNidcbiAgICBjYXNlICdjc2lzb2xhdGluZ3JlZWsnOlxuICAgIGNhc2UgJ2VjbWEtMTE4JzpcbiAgICBjYXNlICdlbG90XzkyOCc6XG4gICAgY2FzZSAnZ3JlZWsnOlxuICAgIGNhc2UgJ2dyZWVrOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNyc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNic6XG4gICAgY2FzZSAnaXNvODg1OS03JzpcbiAgICBjYXNlICdpc284ODU5Nyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNzoxOTg3JzpcbiAgICBjYXNlICdzdW5fZXVfZ3JlZWsnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS03J1xuICAgIGNhc2UgJ2NzaXNvODg1OThlJzpcbiAgICBjYXNlICdjc2lzb2xhdGluaGVicmV3JzpcbiAgICBjYXNlICdoZWJyZXcnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtZSc6XG4gICAgY2FzZSAnaXNvLWlyLTEzOCc6XG4gICAgY2FzZSAnaXNvODg1OS04JzpcbiAgICBjYXNlICdpc284ODU5OCc6XG4gICAgY2FzZSAnaXNvXzg4NTktOCc6XG4gICAgY2FzZSAnaXNvXzg4NTktODoxOTg4JzpcbiAgICBjYXNlICd2aXN1YWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04J1xuICAgIGNhc2UgJ2NzaXNvODg1OThpJzpcbiAgICBjYXNlICdpc28tODg1OS04LWknOlxuICAgIGNhc2UgJ2xvZ2ljYWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04LUknXG4gICAgY2FzZSAnY3Npc29sYXRpbjYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTEwJzpcbiAgICBjYXNlICdpc28taXItMTU3JzpcbiAgICBjYXNlICdpc284ODU5LTEwJzpcbiAgICBjYXNlICdpc284ODU5MTAnOlxuICAgIGNhc2UgJ2w2JzpcbiAgICBjYXNlICdsYXRpbjYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMCdcbiAgICBjYXNlICdpc28tODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OTEzJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTMnXG4gICAgY2FzZSAnaXNvLTg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE0J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW45JzpcbiAgICBjYXNlICdpc28tODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OTE1JzpcbiAgICBjYXNlICdpc29fODg1OS0xNSc6XG4gICAgY2FzZSAnbDknOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNSdcbiAgICBjYXNlICdpc28tODg1OS0xNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE2J1xuICAgIGNhc2UgJ2Nza29pOHInOlxuICAgIGNhc2UgJ2tvaSc6XG4gICAgY2FzZSAna29pOCc6XG4gICAgY2FzZSAna29pOC1yJzpcbiAgICBjYXNlICdrb2k4X3InOlxuICAgICAgcmV0dXJuICdLT0k4LVInXG4gICAgY2FzZSAna29pOC1ydSc6XG4gICAgY2FzZSAna29pOC11JzpcbiAgICAgIHJldHVybiAnS09JOC1VJ1xuICAgIGNhc2UgJ2NzbWFjaW50b3NoJzpcbiAgICBjYXNlICdtYWMnOlxuICAgIGNhc2UgJ21hY2ludG9zaCc6XG4gICAgY2FzZSAneC1tYWMtcm9tYW4nOlxuICAgICAgcmV0dXJuICdtYWNpbnRvc2gnXG4gICAgY2FzZSAnaXNvLTg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMSc6XG4gICAgY2FzZSAndGlzLTYyMCc6XG4gICAgY2FzZSAnd2luZG93cy04NzQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTg3NCdcbiAgICBjYXNlICdjcDEyNTAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MCc6XG4gICAgY2FzZSAneC1jcDEyNTAnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTAnXG4gICAgY2FzZSAnY3AxMjUxJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTEnOlxuICAgIGNhc2UgJ3gtY3AxMjUxJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUxJ1xuICAgIGNhc2UgJ2Fuc2lfeDMuNC0xOTY4JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnY3AxMjUyJzpcbiAgICBjYXNlICdjcDgxOSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjEnOlxuICAgIGNhc2UgJ2libTgxOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMSc6XG4gICAgY2FzZSAnaXNvLWlyLTEwMCc6XG4gICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICBjYXNlICdpc284ODU5MSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMToxOTg3JzpcbiAgICBjYXNlICdsMSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICBjYXNlICd4LWNwMTI1Mic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MidcbiAgICBjYXNlICdjcDEyNTMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Myc6XG4gICAgY2FzZSAneC1jcDEyNTMnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTMnXG4gICAgY2FzZSAnY3AxMjU0JzpcbiAgICBjYXNlICdjc2lzb2xhdGluNSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0OCc6XG4gICAgY2FzZSAnaXNvODg1OS05JzpcbiAgICBjYXNlICdpc284ODU5OSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOToxOTg5JzpcbiAgICBjYXNlICdsNSc6XG4gICAgY2FzZSAnbGF0aW41JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTQnOlxuICAgIGNhc2UgJ3gtY3AxMjU0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU0J1xuICAgIGNhc2UgJ2NwMTI1NSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU1JzpcbiAgICBjYXNlICd4LWNwMTI1NSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NSdcbiAgICBjYXNlICdjcDEyNTYnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nic6XG4gICAgY2FzZSAneC1jcDEyNTYnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTYnXG4gICAgY2FzZSAnY3AxMjU3JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTcnOlxuICAgIGNhc2UgJ3gtY3AxMjU3JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU3J1xuICAgIGNhc2UgJ2NwMTI1OCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU4JzpcbiAgICBjYXNlICd4LWNwMTI1OCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1OCdcbiAgICBjYXNlICd4LW1hYy1jeXJpbGxpYyc6XG4gICAgY2FzZSAneC1tYWMtdWtyYWluaWFuJzpcbiAgICAgIHJldHVybiAneC1tYWMtY3lyaWxsaWMnXG4gICAgY2FzZSAnY2hpbmVzZSc6XG4gICAgY2FzZSAnY3NnYjIzMTInOlxuICAgIGNhc2UgJ2NzaXNvNThnYjIzMTI4MCc6XG4gICAgY2FzZSAnZ2IyMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyLTgwJzpcbiAgICBjYXNlICdnYmsnOlxuICAgIGNhc2UgJ2lzby1pci01OCc6XG4gICAgY2FzZSAneC1nYmsnOlxuICAgICAgcmV0dXJuICdHQksnXG4gICAgY2FzZSAnZ2IxODAzMCc6XG4gICAgICByZXR1cm4gJ2diMTgwMzAnXG4gICAgY2FzZSAnYmlnNSc6XG4gICAgY2FzZSAnYmlnNS1oa3Njcyc6XG4gICAgY2FzZSAnY24tYmlnNSc6XG4gICAgY2FzZSAnY3NiaWc1JzpcbiAgICBjYXNlICd4LXgtYmlnNSc6XG4gICAgICByZXR1cm4gJ0JpZzUnXG4gICAgY2FzZSAnY3NldWNwa2RmbXRqYXBhbmVzZSc6XG4gICAgY2FzZSAnZXVjLWpwJzpcbiAgICBjYXNlICd4LWV1Yy1qcCc6XG4gICAgICByZXR1cm4gJ0VVQy1KUCdcbiAgICBjYXNlICdjc2lzbzIwMjJqcCc6XG4gICAgY2FzZSAnaXNvLTIwMjItanAnOlxuICAgICAgcmV0dXJuICdJU08tMjAyMi1KUCdcbiAgICBjYXNlICdjc3NoaWZ0amlzJzpcbiAgICBjYXNlICdtczkzMic6XG4gICAgY2FzZSAnbXNfa2FuamknOlxuICAgIGNhc2UgJ3NoaWZ0LWppcyc6XG4gICAgY2FzZSAnc2hpZnRfamlzJzpcbiAgICBjYXNlICdzamlzJzpcbiAgICBjYXNlICd3aW5kb3dzLTMxaic6XG4gICAgY2FzZSAneC1zamlzJzpcbiAgICAgIHJldHVybiAnU2hpZnRfSklTJ1xuICAgIGNhc2UgJ2NzZXVja3InOlxuICAgIGNhc2UgJ2Nza3NjNTYwMTE5ODcnOlxuICAgIGNhc2UgJ2V1Yy1rcic6XG4gICAgY2FzZSAnaXNvLWlyLTE0OSc6XG4gICAgY2FzZSAna29yZWFuJzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4Nyc6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODknOlxuICAgIGNhc2UgJ2tzYzU2MDEnOlxuICAgIGNhc2UgJ2tzY181NjAxJzpcbiAgICBjYXNlICd3aW5kb3dzLTk0OSc6XG4gICAgICByZXR1cm4gJ0VVQy1LUidcbiAgICBjYXNlICdjc2lzbzIwMjJrcic6XG4gICAgY2FzZSAnaHotZ2ItMjMxMic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24nOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuLWV4dCc6XG4gICAgY2FzZSAnaXNvLTIwMjIta3InOlxuICAgIGNhc2UgJ3JlcGxhY2VtZW50JzpcbiAgICAgIHJldHVybiAncmVwbGFjZW1lbnQnXG4gICAgY2FzZSAndW5pY29kZWZmZmUnOlxuICAgIGNhc2UgJ3V0Zi0xNmJlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2QkUnXG4gICAgY2FzZSAnY3N1bmljb2RlJzpcbiAgICBjYXNlICdpc28tMTA2NDYtdWNzLTInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1bmljb2RlJzpcbiAgICBjYXNlICd1bmljb2RlZmVmZic6XG4gICAgY2FzZSAndXRmLTE2JzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICAgIGNhc2UgJ3gtdXNlci1kZWZpbmVkJzpcbiAgICAgIHJldHVybiAneC11c2VyLWRlZmluZWQnXG4gICAgZGVmYXVsdDogcmV0dXJuICdmYWlsdXJlJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRFbmNvZGluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlLCBwYXJzZU1JTUVUeXBlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBTdHJpbmdEZWNvZGVyIH0gPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpXG5jb25zdCB7IGJ0b2EgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2JcdTIwMTlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ1x1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtFdmVudHMsXG4gIGtBYm9ydGVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBGaWxlUmVhZGVyIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trU3RhdGVdID0gJ2VtcHR5J1xuICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgdGhpc1trRXJyb3JdID0gbnVsbFxuICAgIHRoaXNba0V2ZW50c10gPSB7XG4gICAgICBsb2FkZW5kOiBudWxsLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBhYm9ydDogbnVsbCxcbiAgICAgIGxvYWQ6IG51bGwsXG4gICAgICBwcm9ncmVzczogbnVsbCxcbiAgICAgIGxvYWRzdGFydDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzQXJyYXlCdWZmZXJcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0FycmF5QnVmZmVyIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQXJyYXlCdWZmZXIoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQXJyYXlCdWZmZXIuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0JpbmFyeVN0cmluZ1xuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQmluYXJ5U3RyaW5nIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZycgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0JpbmFyeVN0cmluZyhibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBCaW5hcnlTdHJpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQmluYXJ5U3RyaW5nJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNEYXRhVGV4dFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nXG4gICAqL1xuICByZWFkQXNUZXh0IChibG9iLCBlbmNvZGluZyA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNUZXh0JyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RpbmcgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoZW5jb2RpbmcpXG4gICAgfVxuXG4gICAgLy8gVGhlIHJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIFRleHQgYW5kIGVuY29kaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ1RleHQnLCBlbmNvZGluZylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzRGF0YVVSTFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzRGF0YVVSTCAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzRGF0YVVSTChibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCwgbXVzdFxuICAgIC8vIGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBEYXRhVVJMLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0RhdGFVUkwnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1hYm9ydFxuICAgKi9cbiAgYWJvcnQgKCkge1xuICAgIC8vIDEuIElmIHRoaXMncyBzdGF0ZSBpcyBcImVtcHR5XCIgb3IgaWYgdGhpcydzIHN0YXRlIGlzXG4gICAgLy8gICAgXCJkb25lXCIgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbCBhbmQgdGVybWluYXRlXG4gICAgLy8gICAgdGhpcyBhbGdvcml0aG0uXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2VtcHR5JyB8fCB0aGlzW2tTdGF0ZV0gPT09ICdkb25lJykge1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXMncyBzdGF0ZSBpcyBcImxvYWRpbmdcIiBzZXQgdGhpcydzIHN0YXRlIHRvXG4gICAgLy8gICAgXCJkb25lXCIgYW5kIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwuXG4gICAgaWYgKHRoaXNba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSAnZG9uZSdcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGFueSB0YXNrcyBmcm9tIHRoaXMgb24gdGhlIGZpbGUgcmVhZGluZ1xuICAgIC8vICAgIHRhc2sgc291cmNlIGluIGFuIGFmZmlsaWF0ZWQgdGFzayBxdWV1ZSwgdGhlbiByZW1vdmVcbiAgICAvLyAgICB0aG9zZSB0YXNrcyBmcm9tIHRoYXQgdGFzayBxdWV1ZS5cbiAgICB0aGlzW2tBYm9ydGVkXSA9IHRydWVcblxuICAgIC8vIDQuIFRlcm1pbmF0ZSB0aGUgYWxnb3JpdGhtIGZvciB0aGUgcmVhZCBtZXRob2QgYmVpbmcgcHJvY2Vzc2VkLlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDUuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgYWJvcnQgYXQgdGhpcy5cbiAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Fib3J0JywgdGhpcylcblxuICAgIC8vIDYuIElmIHRoaXMncyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoaXMuXG4gICAgaWYgKHRoaXNba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCB0aGlzKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZWFkeXN0YXRlXG4gICAqL1xuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHN3aXRjaCAodGhpc1trU3RhdGVdKSB7XG4gICAgICBjYXNlICdlbXB0eSc6IHJldHVybiB0aGlzLkVNUFRZXG4gICAgICBjYXNlICdsb2FkaW5nJzogcmV0dXJuIHRoaXMuTE9BRElOR1xuICAgICAgY2FzZSAnZG9uZSc6IHJldHVybiB0aGlzLkRPTkVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVzdWx0XG4gICAqL1xuICBnZXQgcmVzdWx0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIHJlc3VsdCBhdHRyaWJ1dGVcdTIwMTlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyByZXN1bHQuXG4gICAgcmV0dXJuIHRoaXNba1Jlc3VsdF1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lcnJvclxuICAgKi9cbiAgZ2V0IGVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgLy8gVGhlIGVycm9yIGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIGVycm9yLlxuICAgIHJldHVybiB0aGlzW2tFcnJvcl1cbiAgfVxuXG4gIGdldCBvbmxvYWRlbmQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkZW5kXG4gIH1cblxuICBzZXQgb25sb2FkZW5kIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkZW5kKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCB0aGlzW2tFdmVudHNdLmxvYWRlbmQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpc1trRXZlbnRzXS5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2Fkc3RhcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnRcbiAgfVxuXG4gIHNldCBvbmxvYWRzdGFydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbnByb2dyZXNzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3NcbiAgfVxuXG4gIHNldCBvbnByb2dyZXNzIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5wcm9ncmVzcykge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRcbiAgfVxuXG4gIHNldCBvbmxvYWQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsIHRoaXNba0V2ZW50c10ubG9hZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25hYm9ydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmFib3J0XG4gIH1cblxuICBzZXQgb25hYm9ydCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uYWJvcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCB0aGlzW2tFdmVudHNdLmFib3J0KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZW1wdHlcbkZpbGVSZWFkZXIuRU1QVFkgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5FTVBUWSA9IDBcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1sb2FkaW5nXG5GaWxlUmVhZGVyLkxPQURJTkcgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5MT0FESU5HID0gMVxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWRvbmVcbkZpbGVSZWFkZXIuRE9ORSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkRPTkUgPSAyXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIucHJvdG90eXBlLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkQXNBcnJheUJ1ZmZlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzQmluYXJ5U3RyaW5nOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNEYXRhVVJMOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVzdWx0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2Fkc3RhcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ucHJvZ3Jlc3M6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25hYm9ydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25lcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZVJlYWRlcicsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLCB7XG4gIEVNUFRZOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBMT0FESU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBET05FOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRmlsZVJlYWRlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0NvbnN0cnVjdDogcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJykua0NvbnN0cnVjdFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgaXNWYWxpZEhlYWRlck5hbWUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1lcXVhbHNcbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBleGNsdWRlRnJhZ21lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1cmxFcXVhbHMgKEEsIEIsIGV4Y2x1ZGVGcmFnbWVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRBID0gVVJMU2VyaWFsaXplcihBLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgY29uc3Qgc2VyaWFsaXplZEIgPSBVUkxTZXJpYWxpemVyKEIsIGV4Y2x1ZGVGcmFnbWVudClcblxuICByZXR1cm4gc2VyaWFsaXplZEEgPT09IHNlcmlhbGl6ZWRCXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi82OTRkMjBkMTM0Y2I1NTNkOGQ4OWU1NTAwYjkxNDgwMTJiMWJhMjk5L2NvbnRlbnQvYnJvd3Nlci9jYWNoZV9zdG9yYWdlL2NhY2hlX3N0b3JhZ2VfY2FjaGUuY2MjTDI2MC1MMjYyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpZWxkVmFsdWVzIChoZWFkZXIpIHtcbiAgYXNzZXJ0KGhlYWRlciAhPT0gbnVsbClcblxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIGZvciAobGV0IHZhbHVlIG9mIGhlYWRlci5zcGxpdCgnLCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAgIGlmICghdmFsdWUubGVuZ3RoKSB7XG4gICAgICBjb250aW51ZVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKHZhbHVlKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXNcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVybEVxdWFscyxcbiAgZmllbGRWYWx1ZXNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB1cmxFcXVhbHMsIGZpZWxkVmFsdWVzOiBnZXRGaWVsZFZhbHVlcyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBSZXNwb25zZSwgY2xvbmVSZXNwb25zZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVzcG9uc2UnKVxuY29uc3QgeyBSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3N5bWJvbHMnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyB1cmxJc0h0dHBIdHRwc1NjaGVtZSwgY3JlYXRlRGVmZXJyZWRQcm9taXNlLCByZWFkQWxsQnl0ZXMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tY2FjaGUtYmF0Y2gtb3BlcmF0aW9uXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYWNoZUJhdGNoT3BlcmF0aW9uXG4gKiBAcHJvcGVydHkgeydkZWxldGUnIHwgJ3B1dCd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXF1ZXN0XG4gKiBAcHJvcGVydHkge2FueX0gcmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gKiBAdHlwZWRlZiB7W2FueSwgYW55XVtdfSByZXF1ZXN0UmVzcG9uc2VMaXN0XG4gKi9cblxuY2xhc3MgQ2FjaGUge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICAgKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0ID0gYXJndW1lbnRzWzFdXG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBjb25zdCBwID0gYXdhaXQgdGhpcy5tYXRjaEFsbChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgaWYgKHAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZXR1cm4gcFswXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2hBbGwgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIDIuMi4xXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXNwb25zZXMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIC8vIFdlIGRvbid0IGltcGxlbWVudCBDT1JzIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIHRoZSByZXNwb25zZXMsIHlheSFcblxuICAgIC8vIDUuNS4xXG4gICAgY29uc3QgcmVzcG9uc2VMaXN0ID0gW11cblxuICAgIC8vIDUuNS4yXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDUuNS4yLjFcbiAgICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKHJlc3BvbnNlLmJvZHk/LnNvdXJjZSA/PyBudWxsKVxuICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IHJlc3BvbnNlXG4gICAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHkgPSBib2R5XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG5cbiAgICAgIHJlc3BvbnNlTGlzdC5wdXNoKHJlc3BvbnNlT2JqZWN0KVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzcG9uc2VMaXN0KVxuICB9XG5cbiAgYXN5bmMgYWRkIChyZXF1ZXN0KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IFtyZXF1ZXN0XVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXNwb25zZUFycmF5UHJvbWlzZSA9IHRoaXMuYWRkQWxsKHJlcXVlc3RzKVxuXG4gICAgLy8gMy5cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2VBcnJheVByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGFkZEFsbCAocmVxdWVzdHMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyB9KVxuXG4gICAgcmVxdWVzdHMgPSB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10ocmVxdWVzdHMpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZXMgPSBbXVxuXG4gICAgLy8gMi5cbiAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAvLyAzLlxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAzLjFcbiAgICAgIGNvbnN0IHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgLy8gMy4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVC4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICAvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIGZldGNoaW5nPltdfSAqL1xuICAgIGNvbnN0IGZldGNoQ29udHJvbGxlcnMgPSBbXVxuXG4gICAgLy8gNS5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIC8vIDUuMVxuICAgICAgY29uc3QgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cblxuICAgICAgLy8gNS4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgaHR0cC9zIHNjaGVtZS4nXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNFxuICAgICAgci5pbml0aWF0b3IgPSAnZmV0Y2gnXG4gICAgICByLmRlc3RpbmF0aW9uID0gJ3N1YnJlc291cmNlJ1xuXG4gICAgICAvLyA1LjVcbiAgICAgIHJlcXVlc3RMaXN0LnB1c2gocilcblxuICAgICAgLy8gNS42XG4gICAgICBjb25zdCByZXNwb25zZVByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgICAvLyA1LjdcbiAgICAgIGZldGNoQ29udHJvbGxlcnMucHVzaChmZXRjaGluZyh7XG4gICAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICAgIGRpc3BhdGNoZXI6IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgfHwgcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+IDI5OSkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhbiBpbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHRoZSByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHsgLy8gMi5cbiAgICAgICAgICAgIC8vIDIuMVxuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgICAgICAgLy8gMi4yXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgZmV0Y2hDb250cm9sbGVycykge1xuICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ2Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi5cbiAgICAgICAgICByZXNwb25zZVByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIC8vIDUuOFxuICAgICAgcmVzcG9uc2VQcm9taXNlcy5wdXNoKHJlc3BvbnNlUHJvbWlzZS5wcm9taXNlKVxuICAgIH1cblxuICAgIC8vIDYuXG4gICAgY29uc3QgcCA9IFByb21pc2UuYWxsKHJlc3BvbnNlUHJvbWlzZXMpXG5cbiAgICAvLyA3LlxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IHBcblxuICAgIC8vIDcuMVxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gNy4yXG4gICAgbGV0IGluZGV4ID0gMFxuXG4gICAgLy8gNy4zXG4gICAgZm9yIChjb25zdCByZXNwb25zZSBvZiByZXNwb25zZXMpIHtcbiAgICAgIC8vIDcuMy4xXG4gICAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICAgIHR5cGU6ICdwdXQnLCAvLyA3LjMuMlxuICAgICAgICByZXF1ZXN0OiByZXF1ZXN0TGlzdFtpbmRleF0sIC8vIDcuMy4zXG4gICAgICAgIHJlc3BvbnNlIC8vIDcuMy40XG4gICAgICB9XG5cbiAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pIC8vIDcuMy41XG5cbiAgICAgIGluZGV4KysgLy8gNy4zLjZcbiAgICB9XG5cbiAgICAvLyA3LjVcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNy42LjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gNy42LjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gNy42LjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA3LjYuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDcuNi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDcuN1xuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgcHV0IChyZXF1ZXN0LCByZXNwb25zZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdDYWNoZS5wdXQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICByZXNwb25zZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlKHJlc3BvbnNlKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgaW5uZXJSZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlubmVyUmVxdWVzdCA9IHJlcXVlc3Rba1N0YXRlXVxuICAgIH0gZWxzZSB7IC8vIDMuXG4gICAgICBpbm5lclJlcXVlc3QgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGlubmVyUmVxdWVzdC51cmwpIHx8IGlubmVyUmVxdWVzdC5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBhbiBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgY29uc3QgaW5uZXJSZXNwb25zZSA9IHJlc3BvbnNlW2tTdGF0ZV1cblxuICAgIC8vIDYuXG4gICAgaWYgKGlubmVyUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ0dvdCAyMDYgc3RhdHVzJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA3LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHtcbiAgICAgIC8vIDcuMS5cbiAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgLy8gNy4yLlxuICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgIC8vIDcuMi4xXG4gICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0dvdCAqIHZhcnkgZmllbGQgdmFsdWUnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDguXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAmJiAoaXNEaXN0dXJiZWQoaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbSkgfHwgaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXNwb25zZSBib2R5IGlzIGxvY2tlZCBvciBkaXN0dXJiZWQnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDkuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKGlubmVyUmVzcG9uc2UpXG5cbiAgICAvLyAxMC5cbiAgICBjb25zdCBib2R5UmVhZFByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTEuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxMS4xXG4gICAgICBjb25zdCBzdHJlYW0gPSBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtXG5cbiAgICAgIC8vIDExLjJcbiAgICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gICAgICAvLyAxMS4zXG4gICAgICByZWFkQWxsQnl0ZXMocmVhZGVyKS50aGVuKGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlLCBib2R5UmVhZFByb21pc2UucmVqZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5UmVhZFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLy8gMTIuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyAxMy5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ3B1dCcsIC8vIDE0LlxuICAgICAgcmVxdWVzdDogaW5uZXJSZXF1ZXN0LCAvLyAxNS5cbiAgICAgIHJlc3BvbnNlOiBjbG9uZWRSZXNwb25zZSAvLyAxNi5cbiAgICB9XG5cbiAgICAvLyAxNy5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgLy8gMTkuXG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBib2R5UmVhZFByb21pc2UucHJvbWlzZVxuXG4gICAgaWYgKGNsb25lZFJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgY2xvbmVkUmVzcG9uc2UuYm9keS5zb3VyY2UgPSBieXRlc1xuICAgIH1cblxuICAgIC8vIDE5LjFcbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gMTkuMi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDE5LjIuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyAxOS4yLjNcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyAxOS4yLjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9IGVsc2UgeyAvLyAxOS4yLjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBkZWxldGUgKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5kZWxldGUnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtSZXF1ZXN0fVxuICAgICAqL1xuICAgIGxldCByID0gbnVsbFxuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKVxuXG4gICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgcmVxdWVzdDogcixcbiAgICAgIG9wdGlvbnNcbiAgICB9XG5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG4gICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSghIXJlcXVlc3RSZXNwb25zZXM/Lmxlbmd0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGUta2V5c1xuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVhZG9ubHkgUmVxdWVzdFtdfVxuICAgKi9cbiAgYXN5bmMga2V5cyAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDIuMVxuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykgeyAvLyAyLjJcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGNvbnN0IHByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgLy8gNS5cbiAgICAvLyA1LjFcbiAgICBjb25zdCByZXF1ZXN0cyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIC8vIDUuMi4xLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gNS4zXG4gICAgICAvLyA1LjMuMVxuICAgICAgY29uc3QgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUociwgb3B0aW9ucylcblxuICAgICAgLy8gNS4zLjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgLy8gNS4zLjIuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAvLyA1LjQuMVxuICAgICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgICAvLyA1LjQuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdCgnaHR0cHM6Ly9hJylcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrU3RhdGVdID0gcmVxdWVzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrUmVhbG1dID0gcmVxdWVzdC5jbGllbnRcblxuICAgICAgICAvLyA1LjQuMi4xXG4gICAgICAgIHJlcXVlc3RMaXN0LnB1c2gocmVxdWVzdE9iamVjdClcbiAgICAgIH1cblxuICAgICAgLy8gNS40LjNcbiAgICAgIHByb21pc2UucmVzb2x2ZShPYmplY3QuZnJlZXplKHJlcXVlc3RMaXN0KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2JhdGNoLWNhY2hlLW9wZXJhdGlvbnMtYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSBvcGVyYXRpb25zXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2JhdGNoQ2FjaGVPcGVyYXRpb25zIChvcGVyYXRpb25zKSB7XG4gICAgLy8gMS5cbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgLy8gMi5cbiAgICBjb25zdCBiYWNrdXBDYWNoZSA9IFsuLi5jYWNoZV1cblxuICAgIC8vIDMuXG4gICAgY29uc3QgYWRkZWRJdGVtcyA9IFtdXG5cbiAgICAvLyA0LjFcbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIHRyeSB7XG4gICAgICAvLyA0LjJcbiAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgLy8gNC4yLjFcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlICE9PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24udHlwZSAhPT0gJ3B1dCcpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ29wZXJhdGlvbiB0eXBlIGRvZXMgbm90IG1hdGNoIFwiZGVsZXRlXCIgb3IgXCJwdXRcIidcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjJcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24ucmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZGVsZXRlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjNcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zLCBhZGRlZEl0ZW1zKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCc/Pz8nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjRcbiAgICAgICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgICAgICAvLyA0LjIuNVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgLy8gNC4yLjUuMVxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucylcblxuICAgICAgICAgIC8vIFRPRE86IHRoZSBzcGVjIGlzIHdyb25nLCB0aGlzIGlzIG5lZWRlZCB0byBwYXNzIFdQVHNcbiAgICAgICAgICBpZiAocmVxdWVzdFJlc3BvbnNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi41LjJcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNS4yLjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbi50eXBlID09PSAncHV0JykgeyAvLyA0LjIuNlxuICAgICAgICAgIC8vIDQuMi42LjFcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLnJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ3B1dCBvcGVyYXRpb24gc2hvdWxkIGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuMlxuICAgICAgICAgIGNvbnN0IHIgPSBvcGVyYXRpb24ucmVxdWVzdFxuXG4gICAgICAgICAgLy8gNC4yLjYuM1xuICAgICAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdleHBlY3RlZCBodHRwIG9yIGh0dHBzIHNjaGVtZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNFxuICAgICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBnZXQgbWV0aG9kJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi41XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5vcHRpb25zICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ29wdGlvbnMgbXVzdCBub3QgYmUgZGVmaW5lZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNlxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0KVxuXG4gICAgICAgICAgLy8gNC4yLjYuN1xuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi42LjcuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi44XG4gICAgICAgICAgY2FjaGUucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG5cbiAgICAgICAgICAvLyA0LjIuNi4xMFxuICAgICAgICAgIGFkZGVkSXRlbXMucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuN1xuICAgICAgICByZXN1bHRMaXN0LnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgfVxuXG4gICAgICAvLyA0LjNcbiAgICAgIHJldHVybiByZXN1bHRMaXN0XG4gICAgfSBjYXRjaCAoZSkgeyAvLyA1LlxuICAgICAgLy8gNS4xXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QubGVuZ3RoID0gMFxuXG4gICAgICAvLyA1LjJcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGJhY2t1cENhY2hlXG5cbiAgICAgIC8vIDUuM1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNxdWVyeS1jYWNoZVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gdGFyZ2V0U3RvcmFnZVxuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNxdWVyeUNhY2hlIChyZXF1ZXN0UXVlcnksIG9wdGlvbnMsIHRhcmdldFN0b3JhZ2UpIHtcbiAgICAvKiogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9ICovXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICBjb25zdCBzdG9yYWdlID0gdGFyZ2V0U3RvcmFnZSA/PyB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IFtjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZV0gPSByZXF1ZXN0UmVzcG9uc2VcbiAgICAgIGlmICh0aGlzLiNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0ocmVxdWVzdFF1ZXJ5LCBjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0TGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3JlcXVlc3QtbWF0Y2hlcy1jYWNoZWQtaXRlbS1hbGdvcml0aG1cbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2FueSB8IG51bGx9IHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zIHwgdW5kZWZpbmVkfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSAocmVxdWVzdFF1ZXJ5LCByZXF1ZXN0LCByZXNwb25zZSA9IG51bGwsIG9wdGlvbnMpIHtcbiAgICAvLyBpZiAob3B0aW9ucz8uaWdub3JlTWV0aG9kID09PSBmYWxzZSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAvLyAgIHJldHVybiBmYWxzZVxuICAgIC8vIH1cblxuICAgIGNvbnN0IHF1ZXJ5VVJMID0gbmV3IFVSTChyZXF1ZXN0UXVlcnkudXJsKVxuXG4gICAgY29uc3QgY2FjaGVkVVJMID0gbmV3IFVSTChyZXF1ZXN0LnVybClcblxuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTZWFyY2gpIHtcbiAgICAgIGNhY2hlZFVSTC5zZWFyY2ggPSAnJ1xuXG4gICAgICBxdWVyeVVSTC5zZWFyY2ggPSAnJ1xuICAgIH1cblxuICAgIGlmICghdXJsRXF1YWxzKHF1ZXJ5VVJMLCBjYWNoZWRVUkwsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXNwb25zZSA9PSBudWxsIHx8XG4gICAgICBvcHRpb25zPy5pZ25vcmVWYXJ5IHx8XG4gICAgICAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0VmFsdWUgPSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IHJlcXVlc3RRdWVyeS5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcblxuICAgICAgLy8gSWYgb25lIGhhcyB0aGUgaGVhZGVyIGFuZCB0aGUgb3RoZXIgZG9lc24ndCwgb3Igb25lIGhhc1xuICAgICAgLy8gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgICAgaWYgKHJlcXVlc3RWYWx1ZSAhPT0gcXVlcnlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbWF0Y2hBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwdXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuY29uc3QgY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMgPSBbXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVTZWFyY2gnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVNZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpZ25vcmVWYXJ5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzLFxuICB7XG4gICAga2V5OiAnY2FjaGVOYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoUmVzcG9uc2UpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm9cbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgQ2FjaGUgfSA9IHJlcXVpcmUoJy4vY2FjaGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIENhY2hlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtbmFtZS10by1jYWNoZS1tYXBcbiAgICogQHR5cGUge01hcDxzdHJpbmcsIGltcG9ydCgnLi9jYWNoZScpLnJlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjY2FjaGVzID0gbmV3IE1hcCgpXG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGlmIChvcHRpb25zLmNhY2hlTmFtZSAhPSBudWxsKSB7XG4gICAgICAvLyAxLjEuMS4xXG4gICAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhvcHRpb25zLmNhY2hlTmFtZSkpIHtcbiAgICAgICAgLy8gMS4xLjEuMS4xXG4gICAgICAgIGNvbnN0IGNhY2hlTGlzdCA9IHRoaXMuI2NhY2hlcy5nZXQob3B0aW9ucy5jYWNoZU5hbWUpXG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICByZXR1cm4gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyAyLlxuICAgICAgLy8gMi4yXG4gICAgICBmb3IgKGNvbnN0IGNhY2hlTGlzdCBvZiB0aGlzLiNjYWNoZXMudmFsdWVzKCkpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIC8vIDIuMi4xLjJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1oYXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGhhcyAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UuaGFzJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIC8vIDIuMS4xXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZXN0b3JhZ2Utb3BlblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENhY2hlPn1cbiAgICovXG4gIGFzeW5jIG9wZW4gKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm9wZW4nIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xXG4gICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMoY2FjaGVOYW1lKSkge1xuICAgICAgLy8gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJykgIT09IGF3YWl0IGNhY2hlcy5vcGVuKCd2MScpXG5cbiAgICAgIC8vIDIuMS4xXG4gICAgICBjb25zdCBjYWNoZSA9IHRoaXMuI2NhY2hlcy5nZXQoY2FjaGVOYW1lKVxuXG4gICAgICAvLyAyLjEuMS4xXG4gICAgICByZXR1cm4gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlKVxuICAgIH1cblxuICAgIC8vIDIuMlxuICAgIGNvbnN0IGNhY2hlID0gW11cblxuICAgIC8vIDIuM1xuICAgIHRoaXMuI2NhY2hlcy5zZXQoY2FjaGVOYW1lLCBjYWNoZSlcblxuICAgIC8vIDIuNFxuICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1kZWxldGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UuZGVsZXRlJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIHJldHVybiB0aGlzLiNjYWNoZXMuZGVsZXRlKGNhY2hlTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWtleXNcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgYXN5bmMga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuXG4gICAgLy8gMi4xXG4gICAgY29uc3Qga2V5cyA9IHRoaXMuI2NhY2hlcy5rZXlzKClcblxuICAgIC8vIDIuMlxuICAgIHJldHVybiBbLi4ua2V5c11cbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVN0b3JhZ2UucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZVN0b3JhZ2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVN0b3JhZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDVExFeGNsdWRpbmdIdGFiICh2YWx1ZSkge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA+PSAweDAwIHx8IGNvZGUgPD0gMHgwOCkgfHxcbiAgICAgIChjb2RlID49IDB4MEEgfHwgY29kZSA8PSAweDFGKSB8fFxuICAgICAgY29kZSA9PT0gMHg3RlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIENIQVIgICAgICAgICAgID0gPGFueSBVUy1BU0NJSSBjaGFyYWN0ZXIgKG9jdGV0cyAwIC0gMTI3KT5cbiB0b2tlbiAgICAgICAgICA9IDEqPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIHNlcGFyYXRvcnM+XG4gc2VwYXJhdG9ycyAgICAgPSBcIihcIiB8IFwiKVwiIHwgXCI8XCIgfCBcIj5cIiB8IFwiQFwiXG4gICAgICAgICAgICAgICAgfCBcIixcIiB8IFwiO1wiIHwgXCI6XCIgfCBcIlxcXCIgfCA8XCI+XG4gICAgICAgICAgICAgICAgfCBcIi9cIiB8IFwiW1wiIHwgXCJdXCIgfCBcIj9cIiB8IFwiPVwiXG4gICAgICAgICAgICAgICAgfCBcIntcIiB8IFwifVwiIHwgU1AgfCBIVFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVOYW1lIChuYW1lKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBuYW1lKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPD0gMHgyMCB8fCBjb2RlID4gMHg3RikgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICc8JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9J1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBuYW1lJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuIGNvb2tpZS1vY3RldCAgICAgID0gJXgyMSAvICV4MjMtMkIgLyAleDJELTNBIC8gJXgzQy01QiAvICV4NUQtN0VcbiAgICAgICAgICAgICAgICAgICAgICAgOyBVUy1BU0NJSSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBDVExzLFxuICAgICAgICAgICAgICAgICAgICAgICA7IHdoaXRlc3BhY2UgRFFVT1RFLCBjb21tYSwgc2VtaWNvbG9uLFxuICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBiYWNrc2xhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVZhbHVlICh2YWx1ZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID09PSAweDIyIHx8XG4gICAgICBjb2RlID09PSAweDJDIHx8XG4gICAgICBjb2RlID09PSAweDNCIHx8XG4gICAgICBjb2RlID09PSAweDVDIHx8XG4gICAgICBjb2RlID4gMHg3RSAvLyBub24tYXNjaWlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZWFkZXIgdmFsdWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBhdGgtdmFsdWUgICAgICAgID0gPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIFwiO1wiPlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVQYXRoIChwYXRoKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiBwYXRoKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKGNvZGUgPCAweDIxIHx8IGNoYXIgPT09ICc7Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBwYXRoJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJIGhhdmUgbm8gaWRlYSB3aHkgdGhlc2UgdmFsdWVzIGFyZW4ndCBhbGxvd2VkIHRvIGJlIGhvbmVzdCxcbiAqIGJ1dCBEZW5vIHRlc3RzIHRoZXNlLiAtIEtoYWZyYVxuICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZURvbWFpbiAoZG9tYWluKSB7XG4gIGlmIChcbiAgICBkb21haW4uc3RhcnRzV2l0aCgnLScpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCcuJykgfHxcbiAgICBkb21haW4uZW5kc1dpdGgoJy0nKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIGRvbWFpbicpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICBjb25zdCBkYXlzID0gW1xuICAgICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAgICdUaHUnLCAnRnJpJywgJ1NhdCdcbiAgXVxuXG4gIGNvbnN0IG1vbnRocyA9IFtcbiAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLFxuICAgICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYydcbiAgXVxuXG4gIGNvbnN0IGRheU5hbWUgPSBkYXlzW2RhdGUuZ2V0VVRDRGF5KCldXG4gIGNvbnN0IGRheSA9IGRhdGUuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtb250aCA9IG1vbnRoc1tkYXRlLmdldFVUQ01vbnRoKCldXG4gIGNvbnN0IHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgY29uc3QgaG91ciA9IGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbWludXRlID0gZGF0ZS5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IHNlY29uZCA9IGRhdGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuXG4gIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn0gJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9IEdNVGBcbn1cblxuLyoqXG4gbWF4LWFnZS1hdiAgICAgICAgPSBcIk1heC1BZ2U9XCIgbm9uLXplcm8tZGlnaXQgKkRJR0lUXG4gICAgICAgICAgICAgICAgICAgICAgIDsgSW4gcHJhY3RpY2UsIGJvdGggZXhwaXJlcy1hdiBhbmQgbWF4LWFnZS1hdlxuICAgICAgICAgICAgICAgICAgICAgICA7IGFyZSBsaW1pdGVkIHRvIGRhdGVzIHJlcHJlc2VudGFibGUgYnkgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgIDsgdXNlciBhZ2VudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhBZ2VcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVNYXhBZ2UgKG1heEFnZSkge1xuICBpZiAobWF4QWdlIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbWF4LWFnZScpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2MjY1I3NlY3Rpb24tNC4xLjFcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuQ29va2llfSBjb29raWVcbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5IChjb29raWUpIHtcbiAgaWYgKGNvb2tpZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICB2YWxpZGF0ZUNvb2tpZU5hbWUoY29va2llLm5hbWUpXG4gIHZhbGlkYXRlQ29va2llVmFsdWUoY29va2llLnZhbHVlKVxuXG4gIGNvbnN0IG91dCA9IFtgJHtjb29raWUubmFtZX09JHtjb29raWUudmFsdWV9YF1cblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjFcbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4yXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX1NlY3VyZS0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gIH1cblxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19Ib3N0LScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgICBjb29raWUuZG9tYWluID0gbnVsbFxuICAgIGNvb2tpZS5wYXRoID0gJy8nXG4gIH1cblxuICBpZiAoY29va2llLnNlY3VyZSkge1xuICAgIG91dC5wdXNoKCdTZWN1cmUnKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5odHRwT25seSkge1xuICAgIG91dC5wdXNoKCdIdHRwT25seScpXG4gIH1cblxuICBpZiAodHlwZW9mIGNvb2tpZS5tYXhBZ2UgPT09ICdudW1iZXInKSB7XG4gICAgdmFsaWRhdGVDb29raWVNYXhBZ2UoY29va2llLm1heEFnZSlcbiAgICBvdXQucHVzaChgTWF4LUFnZT0ke2Nvb2tpZS5tYXhBZ2V9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZG9tYWluKSB7XG4gICAgdmFsaWRhdGVDb29raWVEb21haW4oY29va2llLmRvbWFpbilcbiAgICBvdXQucHVzaChgRG9tYWluPSR7Y29va2llLmRvbWFpbn1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5wYXRoKSB7XG4gICAgdmFsaWRhdGVDb29raWVQYXRoKGNvb2tpZS5wYXRoKVxuICAgIG91dC5wdXNoKGBQYXRoPSR7Y29va2llLnBhdGh9YClcbiAgfVxuXG4gIGlmIChjb29raWUuZXhwaXJlcyAmJiBjb29raWUuZXhwaXJlcy50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgIG91dC5wdXNoKGBFeHBpcmVzPSR7dG9JTUZEYXRlKGNvb2tpZS5leHBpcmVzKX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5zYW1lU2l0ZSkge1xuICAgIG91dC5wdXNoKGBTYW1lU2l0ZT0ke2Nvb2tpZS5zYW1lU2l0ZX1gKVxuICB9XG5cbiAgZm9yIChjb25zdCBwYXJ0IG9mIGNvb2tpZS51bnBhcnNlZCkge1xuICAgIGlmICghcGFydC5pbmNsdWRlcygnPScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5wYXJzZWQnKVxuICAgIH1cblxuICAgIGNvbnN0IFtrZXksIC4uLnZhbHVlXSA9IHBhcnQuc3BsaXQoJz0nKVxuXG4gICAgb3V0LnB1c2goYCR7a2V5LnRyaW0oKX09JHt2YWx1ZS5qb2luKCc9Jyl9YClcbiAgfVxuXG4gIHJldHVybiBvdXQuam9pbignOyAnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNDVExFeGNsdWRpbmdIdGFiLFxuICB2YWxpZGF0ZUNvb2tpZU5hbWUsXG4gIHZhbGlkYXRlQ29va2llUGF0aCxcbiAgdmFsaWRhdGVDb29raWVWYWx1ZSxcbiAgdG9JTUZEYXRlLFxuICBzdHJpbmdpZnlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhOYW1lVmFsdWVQYWlyU2l6ZSwgbWF4QXR0cmlidXRlVmFsdWVTaXplIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGlzQ1RMRXhjbHVkaW5nSHRhYiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFyc2VzIHRoZSBmaWVsZC12YWx1ZSBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXIgc3RyaW5nLlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyXG4gKiBAcmV0dXJucyBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZFxuICovXG5mdW5jdGlvbiBwYXJzZVNldENvb2tpZSAoaGVhZGVyKSB7XG4gIC8vIDEuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4MDAtMDggLyAleDBBLTFGIC8gJXg3RlxuICAvLyAgICBjaGFyYWN0ZXIgKENUTCBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyBIVEFCKTogQWJvcnQgdGhlc2Ugc3RlcHMgYW5kXG4gIC8vICAgIGlnbm9yZSB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChpc0NUTEV4Y2x1ZGluZ0h0YWIoaGVhZGVyKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgbmFtZVZhbHVlUGFpciA9ICcnXG4gIGxldCB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICBsZXQgbmFtZSA9ICcnXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMi4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGhlYWRlci5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sXG4gICAgLy8gICAgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIiksIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBjb25zaXN0IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHNldC1jb29raWUtc3RyaW5nXG4gICAgLy8gICAgKGluY2x1ZGluZyB0aGUgJXgzQiAoXCI7XCIpIGluIHF1ZXN0aW9uKS5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgbmFtZVZhbHVlUGFpciA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KCc7JywgaGVhZGVyLCBwb3NpdGlvbilcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSBoZWFkZXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24pXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgY29uc2lzdHMgb2YgYWxsIHRoZSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgY29udGFpbmVkIGluIHRoZSBzZXQtY29va2llLXN0cmluZywgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgbmFtZVZhbHVlUGFpciA9IGhlYWRlclxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIG5hbWUtdmFsdWUtcGFpciBzdHJpbmcgbGFja3MgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyLCB0aGVuXG4gIC8vICAgIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSwgYW5kIHRoZSB2YWx1ZSBzdHJpbmcgaXMgdGhlIHZhbHVlIG9mXG4gIC8vICAgIG5hbWUtdmFsdWUtcGFpci5cbiAgaWYgKCFuYW1lVmFsdWVQYWlyLmluY2x1ZGVzKCc9JykpIHtcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXJcbiAgfSBlbHNlIHtcbiAgICAvLyAgICBPdGhlcndpc2UsIHRoZSBuYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5XG4gICAgLy8gICAgZW1wdHkpIHZhbHVlIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3RcbiAgICAvLyAgICAleDNEIChcIj1cIikgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG4gICAgbmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgbmFtZVZhbHVlUGFpcixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH1cblxuICAvLyA0LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgbmFtZVxuICAvLyAgICBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmcuXG4gIG5hbWUgPSBuYW1lLnRyaW0oKVxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gIC8vIDUuIElmIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMgb2YgdGhlIG5hbWUgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nXG4gIC8vICAgIGlzIG1vcmUgdGhhbiA0MDk2IG9jdGV0cywgYWJvcnQgdGhlc2Ugc3RlcHMgYW5kIGlnbm9yZSB0aGUgc2V0LVxuICAvLyAgICBjb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAobmFtZS5sZW5ndGggKyB2YWx1ZS5sZW5ndGggPiBtYXhOYW1lVmFsdWVQYWlyU2l6ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyA2LiBUaGUgY29va2llLW5hbWUgaXMgdGhlIG5hbWUgc3RyaW5nLCBhbmQgdGhlIGNvb2tpZS12YWx1ZSBpcyB0aGVcbiAgLy8gICAgdmFsdWUgc3RyaW5nLlxuICByZXR1cm4ge1xuICAgIG5hbWUsIHZhbHVlLCAuLi5wYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGVzIG9mIGEgc2V0LWNvb2tpZSBoZWFkZXJcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IHVucGFyc2VkQXR0cmlidXRlc1xuICogQHBhcmFtIHtbT2JqZWN0LjxzdHJpbmcsIHVua25vd24+XT17fX0gY29va2llQXR0cmlidXRlTGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyAodW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0ID0ge30pIHtcbiAgLy8gMS4gSWYgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgc3RyaW5nIGlzIGVtcHR5LCBza2lwIHRoZSByZXN0IG9mXG4gIC8vICAgIHRoZXNlIHN0ZXBzLlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBjb29raWVBdHRyaWJ1dGVMaXN0XG4gIH1cblxuICAvLyAyLiBEaXNjYXJkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgKHdoaWNoXG4gIC8vICAgIHdpbGwgYmUgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyKS5cbiAgYXNzZXJ0KHVucGFyc2VkQXR0cmlidXRlc1swXSA9PT0gJzsnKVxuICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoMSlcblxuICBsZXQgY29va2llQXYgPSAnJ1xuXG4gIC8vIDMuIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAvLyAgICBjaGFyYWN0ZXI6XG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuICAgIGNvb2tpZUF2ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnOycsXG4gICAgICB1bnBhcnNlZEF0dHJpYnV0ZXMsXG4gICAgICB7IHBvc2l0aW9uOiAwIH1cbiAgICApXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKGNvb2tpZUF2Lmxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBDb25zdW1lIHRoZSByZW1haW5kZXIgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMuXG4gICAgY29va2llQXYgPSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSAnJ1xuICB9XG5cbiAgLy8gTGV0IHRoZSBjb29raWUtYXYgc3RyaW5nIGJlIHRoZSBjaGFyYWN0ZXJzIGNvbnN1bWVkIGluIHRoaXMgc3RlcC5cblxuICBsZXQgYXR0cmlidXRlTmFtZSA9ICcnXG4gIGxldCBhdHRyaWJ1dGVWYWx1ZSA9ICcnXG5cbiAgLy8gNC4gSWYgdGhlIGNvb2tpZS1hdiBzdHJpbmcgY29udGFpbnMgYSAleDNEIChcIj1cIikgY2hhcmFjdGVyOlxuICBpZiAoY29va2llQXYuaW5jbHVkZXMoJz0nKSkge1xuICAgIC8vIDEuIFRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGVcbiAgICAvLyAgICBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHkgZW1wdHkpIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmdcbiAgICAvLyAgICBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyBhZnRlciB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBjb29raWVBdixcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICAgIGF0dHJpYnV0ZVZhbHVlID0gY29va2llQXYuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGVudGlyZSBjb29raWUtYXZcbiAgICAvLyAgICBzdHJpbmcsIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZyBpcyBlbXB0eS5cbiAgICBhdHRyaWJ1dGVOYW1lID0gY29va2llQXZcbiAgfVxuXG4gIC8vIDUuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBhdHRyaWJ1dGUtXG4gIC8vICAgIG5hbWUgc3RyaW5nIGFuZCB0aGUgYXR0cmlidXRlLXZhbHVlIHN0cmluZy5cbiAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudHJpbSgpXG4gIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWUudHJpbSgpXG5cbiAgLy8gNi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBsb25nZXIgdGhhbiAxMDI0IG9jdGV0cywgaWdub3JlIHRoZVxuICAvLyAgICBjb29raWUtYXYgc3RyaW5nIGFuZCByZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID4gbWF4QXR0cmlidXRlVmFsdWVTaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgfVxuXG4gIC8vIDcuIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZS1uYW1lIGFuZCBhdHRyaWJ1dGUtdmFsdWUgYWNjb3JkaW5nIHRvIHRoZVxuICAvLyAgICByZXF1aXJlbWVudHMgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gIChOb3RpY2UgdGhhdFxuICAvLyAgICBhdHRyaWJ1dGVzIHdpdGggdW5yZWNvZ25pemVkIGF0dHJpYnV0ZS1uYW1lcyBhcmUgaWdub3JlZC4pXG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjFcbiAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgLy8gXCJFeHBpcmVzXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG4gIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZXhwaXJlcycpIHtcbiAgICAvLyAxLiBMZXQgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB0aGUgYXR0cmlidXRlLXZhbHVlXG4gICAgLy8gICAgYXMgY29va2llLWRhdGUgKHNlZSBTZWN0aW9uIDUuMS4xKS5cbiAgICBjb25zdCBleHBpcnlUaW1lID0gbmV3IERhdGUoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyAyLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGZhaWxlZCB0byBwYXJzZSBhcyBhIGNvb2tpZSBkYXRlLCBpZ25vcmVcbiAgICAvLyAgICB0aGUgY29va2llLWF2LlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5leHBpcmVzID0gZXhwaXJ5VGltZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdtYXgtYWdlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiTWF4LVxuICAgIC8vIEFnZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCBhIERJR0lUIG9yIGFcbiAgICAvLyAgICBcIi1cIiBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGNvbnN0IGNoYXJDb2RlID0gYXR0cmlidXRlVmFsdWUuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpICYmIGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLScpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhlIHJlbWFpbmRlciBvZiBhdHRyaWJ1dGUtdmFsdWUgY29udGFpbnMgYSBub24tRElHSVRcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGlnbm9yZSB0aGUgY29va2llLWF2LlxuICAgIGlmICghL15cXGQrJC8udGVzdChhdHRyaWJ1dGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGRlbHRhLXNlY29uZHMgYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci5cbiAgICBjb25zdCBkZWx0YVNlY29uZHMgPSBOdW1iZXIoYXR0cmlidXRlVmFsdWUpXG5cbiAgICAvLyA0LiBMZXQgY29va2llLWFnZS1saW1pdCBiZSB0aGUgbWF4aW11bSBhZ2Ugb2YgdGhlIGNvb2tpZSAod2hpY2hcbiAgICAvLyAgICBTSE9VTEQgYmUgNDAwIGRheXMgb3IgbGVzcywgc2VlIFNlY3Rpb24gNC4xLjIuMikuXG5cbiAgICAvLyA1LiBTZXQgZGVsdGEtc2Vjb25kcyB0byB0aGUgc21hbGxlciBvZiBpdHMgcHJlc2VudCB2YWx1ZSBhbmQgY29va2llLVxuICAgIC8vICAgIGFnZS1saW1pdC5cbiAgICAvLyBkZWx0YVNlY29uZHMgPSBNYXRoLm1pbihkZWx0YVNlY29uZHMgKiAxMDAwLCBtYXhFeHBpcmVzTXMpXG5cbiAgICAvLyA2LiBJZiBkZWx0YS1zZWNvbmRzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvICgwKSwgbGV0IGV4cGlyeS1cbiAgICAvLyAgICB0aW1lIGJlIHRoZSBlYXJsaWVzdCByZXByZXNlbnRhYmxlIGRhdGUgYW5kIHRpbWUuICBPdGhlcndpc2UsIGxldFxuICAgIC8vICAgIHRoZSBleHBpcnktdGltZSBiZSB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHBsdXMgZGVsdGEtc2Vjb25kc1xuICAgIC8vICAgIHNlY29uZHMuXG4gICAgLy8gY29uc3QgZXhwaXJ5VGltZSA9IGRlbHRhU2Vjb25kcyA8PSAwID8gRGF0ZS5ub3coKSA6IERhdGUubm93KCkgKyBkZWx0YVNlY29uZHNcblxuICAgIC8vIDcuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgTWF4LUFnZSBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGV4cGlyeS10aW1lLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QubWF4QWdlID0gZGVsdGFTZWNvbmRzXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjNcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIkRvbWFpblwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBMZXQgY29va2llLWRvbWFpbiBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgIGxldCBjb29raWVEb21haW4gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gMi4gSWYgY29va2llLWRvbWFpbiBzdGFydHMgd2l0aCAleDJFIChcIi5cIiksIGxldCBjb29raWUtZG9tYWluIGJlXG4gICAgLy8gICAgY29va2llLWRvbWFpbiB3aXRob3V0IGl0cyBsZWFkaW5nICV4MkUgKFwiLlwiKS5cbiAgICBpZiAoY29va2llRG9tYWluWzBdID09PSAnLicpIHtcbiAgICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi5zbGljZSgxKVxuICAgIH1cblxuICAgIC8vIDMuIENvbnZlcnQgdGhlIGNvb2tpZS1kb21haW4gdG8gbG93ZXIgY2FzZS5cbiAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNC4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBEb21haW4gYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtZG9tYWluLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZG9tYWluID0gY29va2llRG9tYWluXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3BhdGgnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC40XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJQYXRoXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgZW1wdHkgb3IgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGVcbiAgICAvLyAgICBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90ICV4MkYgKFwiL1wiKTpcbiAgICBsZXQgY29va2llUGF0aCA9ICcnXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA9PT0gMCB8fCBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy8nKSB7XG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGRlZmF1bHQtcGF0aC5cbiAgICAgIGNvb2tpZVBhdGggPSAnLydcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyAxLiBMZXQgY29va2llLXBhdGggYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICAgIGNvb2tpZVBhdGggPSBhdHRyaWJ1dGVWYWx1ZVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgUGF0aCBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1wYXRoLlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QucGF0aCA9IGNvb2tpZVBhdGhcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2VjdXJlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNVxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiU2VjdXJlXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3RcbiAgICAvLyB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIFNlY3VyZSBhbmQgYW4gZW1wdHkgYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zZWN1cmUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2h0dHBvbmx5Jykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNlxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJIdHRwT25seVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1cbiAgICAvLyBhdHRyaWJ1dGUtbGlzdCB3aXRoIGFuIGF0dHJpYnV0ZS1uYW1lIG9mIEh0dHBPbmx5IGFuZCBhbiBlbXB0eVxuICAgIC8vIGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuaHR0cE9ubHkgPSB0cnVlXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NhbWVzaXRlJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuN1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gICAgLy8gXCJTYW1lU2l0ZVwiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzOlxuXG4gICAgLy8gMS4gTGV0IGVuZm9yY2VtZW50IGJlIFwiRGVmYXVsdFwiLlxuICAgIGxldCBlbmZvcmNlbWVudCA9ICdEZWZhdWx0J1xuXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UgPSBhdHRyaWJ1dGVWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgLy8gMi4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIk5vbmVcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTm9uZVwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbm9uZScpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdOb25lJ1xuICAgIH1cblxuICAgIC8vIDMuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJTdHJpY3RcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiU3RyaWN0XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdzdHJpY3QnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnU3RyaWN0J1xuICAgIH1cblxuICAgIC8vIDQuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJMYXhcIiwgc2V0IGVuZm9yY2VtZW50IHRvIFwiTGF4XCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdsYXgnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTGF4J1xuICAgIH1cblxuICAgIC8vIDUuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgXCJTYW1lU2l0ZVwiIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2ZcbiAgICAvLyAgICBlbmZvcmNlbWVudC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNhbWVTaXRlID0gZW5mb3JjZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkID8/PSBbXVxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZC5wdXNoKGAke2F0dHJpYnV0ZU5hbWV9PSR7YXR0cmlidXRlVmFsdWV9YClcbiAgfVxuXG4gIC8vIDguIFJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXJzZVNldENvb2tpZSxcbiAgcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwYXJzZVNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9oZWFkZXJzJylcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDb29raWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7RGF0ZXxudW1iZXJ8dW5kZWZpbmVkfSBleHBpcmVzXG4gKiBAcHJvcGVydHkge251bWJlcnx1bmRlZmluZWR9IG1heEFnZVxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBkb21haW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gcGF0aFxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gc2VjdXJlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBodHRwT25seVxuICogQHByb3BlcnR5IHsnU3RyaWN0J3wnTGF4J3wnTm9uZSd9IHNhbWVTaXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSB1bnBhcnNlZFxuICovXG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWUgPSBoZWFkZXJzLmdldCgnY29va2llJylcbiAgY29uc3Qgb3V0ID0ge31cblxuICBpZiAoIWNvb2tpZSkge1xuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIGZvciAoY29uc3QgcGllY2Ugb2YgY29va2llLnNwbGl0KCc7JykpIHtcbiAgICBjb25zdCBbbmFtZSwgLi4udmFsdWVdID0gcGllY2Uuc3BsaXQoJz0nKVxuXG4gICAgb3V0W25hbWUudHJpbSgpXSA9IHZhbHVlLmpvaW4oJz0nKVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7eyBwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcgfXx1bmRlZmluZWR9IGF0dHJpYnV0ZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBkZWxldGVDb29raWUgKGhlYWRlcnMsIG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ2RlbGV0ZUNvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKG5hbWUpXG4gIGF0dHJpYnV0ZXMgPSB3ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpXG5cbiAgLy8gTWF0Y2hlcyBiZWhhdmlvciBvZlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvYmxvYi82MzgyN2IxNjMzMGI4MjQ4OWEwNDYxNDAyN2MzM2I3OTA0ZTA4YmU1L2h0dHAvY29va2llLnRzI0wyNzhcbiAgc2V0Q29va2llKGhlYWRlcnMsIHtcbiAgICBuYW1lLFxuICAgIHZhbHVlOiAnJyxcbiAgICBleHBpcmVzOiBuZXcgRGF0ZSgwKSxcbiAgICAuLi5hdHRyaWJ1dGVzXG4gIH0pXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcmV0dXJucyB7Q29va2llW119XG4gKi9cbmZ1bmN0aW9uIGdldFNldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dldFNldENvb2tpZXMnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llcyA9IGhlYWRlcnMuZ2V0U2V0Q29va2llKClcblxuICBpZiAoIWNvb2tpZXMpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBjb29raWVzLm1hcCgocGFpcikgPT4gcGFyc2VTZXRDb29raWUocGFpcikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge0Nvb2tpZX0gY29va2llXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc2V0Q29va2llIChoZWFkZXJzLCBjb29raWUpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ3NldENvb2tpZScgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb29raWUgPSB3ZWJpZGwuY29udmVydGVycy5Db29raWUoY29va2llKVxuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShjb29raWUpXG5cbiAgaWYgKHN0cikge1xuICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llJywgc3RyaW5naWZ5KGNvb2tpZSkpXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZSA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ25hbWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICd2YWx1ZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKVxuICAgIH0pLFxuICAgIGtleTogJ2V4cGlyZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddKSxcbiAgICBrZXk6ICdtYXhBZ2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ3NlY3VyZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdodHRwT25seScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBrZXk6ICdzYW1lU2l0ZScsXG4gICAgYWxsb3dlZFZhbHVlczogWydTdHJpY3QnLCAnTGF4JywgJ05vbmUnXVxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICd1bnBhcnNlZCcsXG4gICAgZGVmYXVsdFZhbHVlOiBbXVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gVGhpcyBpcyBhIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIHVuaXF1ZSB1c2VkXG4vLyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBlbmRwb2ludCBhY2NlcHRzIHdlYnNvY2tldFxuLy8gY29ubmVjdGlvbnMuXG4vLyBTZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTEuM1xuY29uc3QgdWlkID0gJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSdcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuY29uc3Qgc3RhdGVzID0ge1xuICBDT05ORUNUSU5HOiAwLFxuICBPUEVOOiAxLFxuICBDTE9TSU5HOiAyLFxuICBDTE9TRUQ6IDNcbn1cblxuY29uc3Qgb3Bjb2RlcyA9IHtcbiAgQ09OVElOVUFUSU9OOiAweDAsXG4gIFRFWFQ6IDB4MSxcbiAgQklOQVJZOiAweDIsXG4gIENMT1NFOiAweDgsXG4gIFBJTkc6IDB4OSxcbiAgUE9ORzogMHhBXG59XG5cbmNvbnN0IG1heFVuc2lnbmVkMTZCaXQgPSAyICoqIDE2IC0gMSAvLyA2NTUzNVxuXG5jb25zdCBwYXJzZXJTdGF0ZXMgPSB7XG4gIElORk86IDAsXG4gIFBBWUxPQURMRU5HVEhfMTY6IDIsXG4gIFBBWUxPQURMRU5HVEhfNjQ6IDMsXG4gIFJFQURfREFUQTogNFxufVxuXG5jb25zdCBlbXB0eUJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdWlkLFxuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBzdGF0ZXMsXG4gIG9wY29kZXMsXG4gIG1heFVuc2lnbmVkMTZCaXQsXG4gIHBhcnNlclN0YXRlcyxcbiAgZW1wdHlCdWZmZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtXZWJTb2NrZXRVUkw6IFN5bWJvbCgndXJsJyksXG4gIGtSZWFkeVN0YXRlOiBTeW1ib2woJ3JlYWR5IHN0YXRlJyksXG4gIGtDb250cm9sbGVyOiBTeW1ib2woJ2NvbnRyb2xsZXInKSxcbiAga1Jlc3BvbnNlOiBTeW1ib2woJ3Jlc3BvbnNlJyksXG4gIGtCaW5hcnlUeXBlOiBTeW1ib2woJ2JpbmFyeSB0eXBlJyksXG4gIGtTZW50Q2xvc2U6IFN5bWJvbCgnc2VudCBjbG9zZScpLFxuICBrUmVjZWl2ZWRDbG9zZTogU3ltYm9sKCdyZWNlaXZlZCBjbG9zZScpLFxuICBrQnl0ZVBhcnNlcjogU3ltYm9sKCdieXRlIHBhcnNlcicpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBNZXNzYWdlUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnRcbiAqL1xuY2xhc3MgTWVzc2FnZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudC5pbml0TWVzc2FnZUV2ZW50JyB9KVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI3RoZS1jbG9zZWV2ZW50LWludGVyZmFjZVxuICovXG5jbGFzcyBDbG9zZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDbG9zZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCB3YXNDbGVhbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQud2FzQ2xlYW5cbiAgfVxuXG4gIGdldCBjb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2RlXG4gIH1cblxuICBnZXQgcmVhc29uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5yZWFzb25cbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjdGhlLWVycm9yZXZlbnQtaW50ZXJmYWNlXG5jbGFzcyBFcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAjZXZlbnRJbml0XG5cbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRXJyb3JFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgbWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubWVzc2FnZVxuICB9XG5cbiAgZ2V0IGZpbGVuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5maWxlbmFtZVxuICB9XG5cbiAgZ2V0IGxpbmVubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGluZW5vXG4gIH1cblxuICBnZXQgY29sbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvbG5vXG4gIH1cblxuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmVycm9yXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWVzc2FnZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnTWVzc2FnZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgZGF0YToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3JpZ2luOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0RXZlbnRJZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc291cmNlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwb3J0czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW5pdE1lc3NhZ2VFdmVudDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2xvc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Nsb3NlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICByZWFzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHdhc0NsZWFuOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFcnJvckV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRXJyb3JFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGZpbGVuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsaW5lbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNvbG5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKE1lc3NhZ2VQb3J0KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0XG4pXG5cbmNvbnN0IGV2ZW50SW5pdCA9IFtcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnZGF0YScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvcmlnaW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xhc3RFdmVudElkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzb3VyY2UnLFxuICAgIC8vIE5vZGUgZG9lc24ndCBpbXBsZW1lbnQgV2luZG93UHJveHkgb3IgU2VydmljZVdvcmtlciwgc28gdGhlIG9ubHlcbiAgICAvLyB2YWxpZCB2YWx1ZSBmb3Igc291cmNlIGlzIGEgTWVzc2FnZVBvcnQuXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnQpLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAncG9ydHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga0NvbnRyb2xsZXIsIGtSZXNwb25zZSwga0JpbmFyeVR5cGUsIGtXZWJTb2NrZXRVUkwgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHN0YXRlcywgb3Bjb2RlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBNZXNzYWdlRXZlbnQsIEVycm9yRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcblxuLyogZ2xvYmFscyBCbG9iICovXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0VzdGFibGlzaGVkICh3cykge1xuICAvLyBJZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaXMgdmFsaWRhdGVkIGFzIHByb3ZpZGVkIGZvciBhYm92ZSwgaXQgaXNcbiAgLy8gc2FpZCB0aGF0IF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgRXN0YWJsaXNoZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBpbiB0aGUgT1BFTiBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLk9QRU5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2luZyAod3MpIHtcbiAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0lOR1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNDbG9zZWQgKHdzKSB7XG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TRURcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge0V2ZW50SW5pdCB8IHVuZGVmaW5lZH0gZXZlbnRJbml0RGljdFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQgKGUsIHRhcmdldCwgZXZlbnRDb25zdHJ1Y3RvciA9IEV2ZW50LCBldmVudEluaXREaWN0KSB7XG4gIC8vIDEuIElmIGV2ZW50Q29uc3RydWN0b3IgaXMgbm90IGdpdmVuLCB0aGVuIGxldCBldmVudENvbnN0cnVjdG9yIGJlIEV2ZW50LlxuXG4gIC8vIDIuIExldCBldmVudCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGV2ZW50IGdpdmVuIGV2ZW50Q29uc3RydWN0b3IsXG4gIC8vICAgIGluIHRoZSByZWxldmFudCByZWFsbSBvZiB0YXJnZXQuXG4gIC8vIDMuIEluaXRpYWxpemUgZXZlbnRcdTIwMTlzIHR5cGUgYXR0cmlidXRlIHRvIGUuXG4gIGNvbnN0IGV2ZW50ID0gbmV3IGV2ZW50Q29uc3RydWN0b3IoZSwgZXZlbnRJbml0RGljdCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgLy8gNC4gSW5pdGlhbGl6ZSBhbnkgb3RoZXIgSURMIGF0dHJpYnV0ZXMgb2YgZXZlbnQgYXMgZGVzY3JpYmVkIGluIHRoZVxuICAvLyAgICBpbnZvY2F0aW9uIG9mIHRoaXMgYWxnb3JpdGhtLlxuXG4gIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGRpc3BhdGNoaW5nIGV2ZW50IGF0IHRhcmdldCwgd2l0aCBsZWdhY3kgdGFyZ2V0XG4gIC8vICAgIG92ZXJyaWRlIGZsYWcgc2V0IGlmIHNldC5cbiAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgT3Bjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSBhcHBsaWNhdGlvbiBkYXRhXG4gKi9cbmZ1bmN0aW9uIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCAod3MsIHR5cGUsIGRhdGEpIHtcbiAgLy8gMS4gSWYgcmVhZHkgc3RhdGUgaXMgbm90IE9QRU4gKDEpLCB0aGVuIHJldHVybi5cbiAgaWYgKHdzW2tSZWFkeVN0YXRlXSAhPT0gc3RhdGVzLk9QRU4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDIuIExldCBkYXRhRm9yRXZlbnQgYmUgZGV0ZXJtaW5lZCBieSBzd2l0Y2hpbmcgb24gdHlwZSBhbmQgYmluYXJ5IHR5cGU6XG4gIGxldCBkYXRhRm9yRXZlbnRcblxuICBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBUZXh0XG4gICAgLy8gICAgICBhIG5ldyBET01TdHJpbmcgY29udGFpbmluZyBkYXRhXG4gICAgdHJ5IHtcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShkYXRhKVxuICAgIH0gY2F0Y2gge1xuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBpbnZhbGlkIFVURi04IGluIHRleHQgZnJhbWUuJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSBvcGNvZGVzLkJJTkFSWSkge1xuICAgIGlmICh3c1trQmluYXJ5VHlwZV0gPT09ICdibG9iJykge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYmxvYlwiXG4gICAgICAvLyAgICAgIGEgbmV3IEJsb2Igb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICAgIG9iamVjdCwgdGhhdCByZXByZXNlbnRzIGRhdGEgYXMgaXRzIHJhdyBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgQmxvYihbZGF0YV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImFycmF5YnVmZmVyXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQXJyYXlCdWZmZXIgb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGVcbiAgICAgIC8vICAgICAgV2ViU29ja2V0IG9iamVjdCwgd2hvc2UgY29udGVudHMgYXJlIGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBVaW50OEFycmF5KGRhdGEpLmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgbWVzc2FnZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCwgdXNpbmcgTWVzc2FnZUV2ZW50LFxuICAvLyAgICB3aXRoIHRoZSBvcmlnaW4gYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgb2JqZWN0XHUyMDE5cyB1cmwncyBvcmlnaW4sIGFuZCB0aGUgZGF0YSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gZGF0YUZvckV2ZW50LlxuICBmaXJlRXZlbnQoJ21lc3NhZ2UnLCB3cywgTWVzc2FnZUV2ZW50LCB7XG4gICAgb3JpZ2luOiB3c1trV2ViU29ja2V0VVJMXS5vcmlnaW4sXG4gICAgZGF0YTogZGF0YUZvckV2ZW50XG4gIH0pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTVcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyNjE2XG4gKiBAc2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM5ODQwN1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3RvY29sXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdWJwcm90b2NvbCAocHJvdG9jb2wpIHtcbiAgLy8gSWYgcHJlc2VudCwgdGhpcyB2YWx1ZSBpbmRpY2F0ZXMgb25lXG4gIC8vIG9yIG1vcmUgY29tbWEtc2VwYXJhdGVkIHN1YnByb3RvY29sIHRoZSBjbGllbnQgd2lzaGVzIHRvIHNwZWFrLFxuICAvLyBvcmRlcmVkIGJ5IHByZWZlcmVuY2UuICBUaGUgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGlzIHZhbHVlXG4gIC8vIE1VU1QgYmUgbm9uLWVtcHR5IHN0cmluZ3Mgd2l0aCBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBVKzAwMjEgdG9cbiAgLy8gVSswMDdFIG5vdCBpbmNsdWRpbmcgc2VwYXJhdG9yIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBpblxuICAvLyBbUkZDMjYxNl0gYW5kIE1VU1QgYWxsIGJlIHVuaXF1ZSBzdHJpbmdzLlxuICBpZiAocHJvdG9jb2wubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IGNoYXIgb2YgcHJvdG9jb2wpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fFxuICAgICAgY29kZSA+IDB4N0UgfHxcbiAgICAgIGNoYXIgPT09ICcoJyB8fFxuICAgICAgY2hhciA9PT0gJyknIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICc+JyB8fFxuICAgICAgY2hhciA9PT0gJ0AnIHx8XG4gICAgICBjaGFyID09PSAnLCcgfHxcbiAgICAgIGNoYXIgPT09ICc7JyB8fFxuICAgICAgY2hhciA9PT0gJzonIHx8XG4gICAgICBjaGFyID09PSAnXFxcXCcgfHxcbiAgICAgIGNoYXIgPT09ICdcIicgfHxcbiAgICAgIGNoYXIgPT09ICcvJyB8fFxuICAgICAgY2hhciA9PT0gJ1snIHx8XG4gICAgICBjaGFyID09PSAnXScgfHxcbiAgICAgIGNoYXIgPT09ICc/JyB8fFxuICAgICAgY2hhciA9PT0gJz0nIHx8XG4gICAgICBjaGFyID09PSAneycgfHxcbiAgICAgIGNoYXIgPT09ICd9JyB8fFxuICAgICAgY29kZSA9PT0gMzIgfHwgLy8gU1BcbiAgICAgIGNvZGUgPT09IDkgLy8gSFRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LTRcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdGF0dXNDb2RlIChjb2RlKSB7XG4gIGlmIChjb2RlID49IDEwMDAgJiYgY29kZSA8IDEwMTUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29kZSAhPT0gMTAwNCAmJiAvLyByZXNlcnZlZFxuICAgICAgY29kZSAhPT0gMTAwNSAmJiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICAgIGNvZGUgIT09IDEwMDYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGNvZGUgPj0gMzAwMCAmJiBjb2RlIDw9IDQ5OTlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICovXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiAod3MsIHJlYXNvbikge1xuICBjb25zdCB7IFtrQ29udHJvbGxlcl06IGNvbnRyb2xsZXIsIFtrUmVzcG9uc2VdOiByZXNwb25zZSB9ID0gd3NcblxuICBjb250cm9sbGVyLmFib3J0KClcblxuICBpZiAocmVzcG9uc2U/LnNvY2tldCAmJiAhcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3llZCkge1xuICAgIHJlc3BvbnNlLnNvY2tldC5kZXN0cm95KClcbiAgfVxuXG4gIGlmIChyZWFzb24pIHtcbiAgICBmaXJlRXZlbnQoJ2Vycm9yJywgd3MsIEVycm9yRXZlbnQsIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IocmVhc29uKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzRXN0YWJsaXNoZWQsXG4gIGlzQ2xvc2luZyxcbiAgaXNDbG9zZWQsXG4gIGZpcmVFdmVudCxcbiAgaXNWYWxpZFN1YnByb3RvY29sLFxuICBpc1ZhbGlkU3RhdHVzQ29kZSxcbiAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sXG4gIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHsgdWlkLCBzdGF0ZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHtcbiAga1JlYWR5U3RhdGUsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyLFxuICBrUmVjZWl2ZWRDbG9zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IENsb3NlRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcbmNvbnN0IHsgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3JlcXVlc3QnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyBIZWFkZXJzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9oZWFkZXJzJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5jaGFubmVscy5vcGVuID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpXG5jaGFubmVscy5jbG9zZSA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJylcbmNoYW5uZWxzLnNvY2tldEVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6c29ja2V0X2Vycm9yJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnkpID0+IHZvaWR9IG9uRXN0YWJsaXNoXG4gKiBAcGFyYW0ge1BhcnRpYWw8aW1wb3J0KCcuLi8uLi90eXBlcy93ZWJzb2NrZXQnKS5XZWJTb2NrZXRJbml0Pn0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uICh1cmwsIHByb3RvY29scywgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBzZXJ2aWNlV29ya2VyczogJ25vbmUnLFxuICAgIHJlZmVycmVyOiAnbm8tcmVmZXJyZXInLFxuICAgIG1vZGU6ICd3ZWJzb2NrZXQnLFxuICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgY2FjaGU6ICduby1zdG9yZScsXG4gICAgcmVkaXJlY3Q6ICdlcnJvcidcbiAgfSlcblxuICAvLyBOb3RlOiB1bmRpY2kgZXh0ZW5zaW9uLCBhbGxvdyBzZXR0aW5nIGN1c3RvbSBoZWFkZXJzLlxuICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgY29uc3QgaGVhZGVyc0xpc3QgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpW2tIZWFkZXJzTGlzdF1cblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIC8vIFRPRE86IGVuYWJsZSBvbmNlIHBlcm1lc3NhZ2UtZGVmbGF0ZSBpcyBzdXBwb3J0ZWRcbiAgY29uc3QgcGVybWVzc2FnZURlZmxhdGUgPSAnJyAvLyAncGVybWVzc2FnZS1kZWZsYXRlOyAxNSdcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlIChyZXNwb25zZSkge1xuICAgICAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yIG9yIGl0cyBzdGF0dXMgaXMgbm90IDEwMSxcbiAgICAgIC8vICAgIGZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2Uuc3RhdHVzICE9PSAxMDEpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBuZXR3b3JrIGVycm9yIG9yIG5vbi0xMDEgc3RhdHVzIGNvZGUuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHByb3RvY29scyBpcyBub3QgdGhlIGVtcHR5IGxpc3QgYW5kIGV4dHJhY3RpbmcgaGVhZGVyXG4gICAgICAvLyAgICBsaXN0IHZhbHVlcyBnaXZlbiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgYW5kIHJlc3BvbnNlXHUyMDE5c1xuICAgICAgLy8gICAgaGVhZGVyIGxpc3QgcmVzdWx0cyBpbiBudWxsLCBmYWlsdXJlLCBvciB0aGUgZW1wdHkgYnl0ZVxuICAgICAgLy8gICAgc2VxdWVuY2UsIHRoZW4gZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gMCAmJiAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJykpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCByZXNwb25kIHdpdGggc2VudCBwcm90b2NvbHMuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIEZvbGxvdyB0aGUgcmVxdWlyZW1lbnRzIHN0YXRlZCBzdGVwIDIgdG8gc3RlcCA2LCBpbmNsdXNpdmUsXG4gICAgICAvLyAgICBvZiB0aGUgbGFzdCBzZXQgb2Ygc3RlcHMgaW4gc2VjdGlvbiA0LjEgb2YgVGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgUHJvdG9jb2wgdG8gdmFsaWRhdGUgcmVzcG9uc2UuIFRoaXMgZWl0aGVyIHJlc3VsdHMgaW4gZmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIG9yIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpc1xuICAgICAgLy8gICAgZXN0YWJsaXNoZWQuXG5cbiAgICAgIC8vIDIuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhbiB8VXBncmFkZXwgaGVhZGVyIGZpZWxkIG9yIHRoZSB8VXBncmFkZXxcbiAgICAgIC8vICAgIGhlYWRlciBmaWVsZCBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgbm90IGFuIEFTQ0lJIGNhc2UtXG4gICAgICAvLyAgICBpbnNlbnNpdGl2ZSBtYXRjaCBmb3IgdGhlIHZhbHVlIFwid2Vic29ja2V0XCIsIHRoZSBjbGllbnQgTVVTVFxuICAgICAgLy8gICAgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1VwZ3JhZGUnKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3dlYnNvY2tldCcpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCBzZXQgVXBncmFkZSBoZWFkZXIgdG8gXCJ3ZWJzb2NrZXRcIi4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGEgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBvciB0aGVcbiAgICAgIC8vICAgIHxDb25uZWN0aW9ufCBoZWFkZXIgZmllbGQgZG9lc24ndCBjb250YWluIGEgdG9rZW4gdGhhdCBpcyBhblxuICAgICAgLy8gICAgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgdGhlIHZhbHVlIFwiVXBncmFkZVwiLCB0aGUgY2xpZW50XG4gICAgICAvLyAgICBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdDb25uZWN0aW9uJyk/LnRvTG93ZXJDYXNlKCkgIT09ICd1cGdyYWRlJykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBDb25uZWN0aW9uIGhlYWRlciB0byBcInVwZ3JhZGVcIi4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGEgfFNlYy1XZWJTb2NrZXQtQWNjZXB0fCBoZWFkZXIgZmllbGQgb3JcbiAgICAgIC8vICAgIHRoZSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGNvbnRhaW5zIGEgdmFsdWUgb3RoZXIgdGhhbiB0aGVcbiAgICAgIC8vICAgIGJhc2U2NC1lbmNvZGVkIFNIQS0xIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSB8U2VjLVdlYlNvY2tldC1cbiAgICAgIC8vICAgIEtleXwgKGFzIGEgc3RyaW5nLCBub3QgYmFzZTY0LWRlY29kZWQpIHdpdGggdGhlIHN0cmluZyBcIjI1OEVBRkE1LVxuICAgICAgLy8gICAgRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExXCIgYnV0IGlnbm9yaW5nIGFueSBsZWFkaW5nIGFuZFxuICAgICAgLy8gICAgdHJhaWxpbmcgd2hpdGVzcGFjZSwgdGhlIGNsaWVudCBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgIENvbm5lY3Rpb25fLlxuICAgICAgY29uc3Qgc2VjV1NBY2NlcHQgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JylcbiAgICAgIGNvbnN0IGRpZ2VzdCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGtleVZhbHVlICsgdWlkKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gICAgICBpZiAoc2VjV1NBY2NlcHQgIT09IGRpZ2VzdCkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ0luY29ycmVjdCBoYXNoIHJlY2VpdmVkIGluIFNlYy1XZWJTb2NrZXQtQWNjZXB0IGhlYWRlci4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgfFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc3wgaGVhZGVyXG4gICAgICAvLyAgICBmaWVsZCBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYW4gZXh0ZW5zaW9uXG4gICAgICAvLyAgICB0aGF0IHdhcyBub3QgcHJlc2VudCBpbiB0aGUgY2xpZW50J3MgaGFuZHNoYWtlICh0aGUgc2VydmVyIGhhc1xuICAgICAgLy8gICAgaW5kaWNhdGVkIGFuIGV4dGVuc2lvbiBub3QgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQpLCB0aGUgY2xpZW50XG4gICAgICAvLyAgICBNVVNUIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uICAoVGhlIHBhcnNpbmcgb2YgdGhpc1xuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIHRvIGRldGVybWluZSB3aGljaCBleHRlbnNpb25zIGFyZSByZXF1ZXN0ZWQgaXNcbiAgICAgIC8vICAgIGRpc2N1c3NlZCBpbiBTZWN0aW9uIDkuMS4pXG4gICAgICBjb25zdCBzZWNFeHRlbnNpb24gPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycpXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwgJiYgc2VjRXh0ZW5zaW9uICE9PSBwZXJtZXNzYWdlRGVmbGF0ZSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGRpZmZlcmVudCBwZXJtZXNzYWdlLWRlZmxhdGUgdGhhbiB0aGUgb25lIHNldC4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNi4gSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgfFNlYy1XZWJTb2NrZXQtUHJvdG9jb2x8IGhlYWRlciBmaWVsZFxuICAgICAgLy8gICAgYW5kIHRoaXMgaGVhZGVyIGZpZWxkIGluZGljYXRlcyB0aGUgdXNlIG9mIGEgc3VicHJvdG9jb2wgdGhhdCB3YXNcbiAgICAgIC8vICAgIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzIGluZGljYXRlZCBhXG4gICAgICAvLyAgICBzdWJwcm90b2NvbCBub3QgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQpLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWxcbiAgICAgIC8vICAgIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNQcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpXG5cbiAgICAgIGlmIChzZWNQcm90b2NvbCAhPT0gbnVsbCAmJiBzZWNQcm90b2NvbCAhPT0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1Byb3RvY29sIHdhcyBub3Qgc2V0IGluIHRoZSBvcGVuaW5nIGhhbmRzaGFrZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdkYXRhJywgb25Tb2NrZXREYXRhKVxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcblxuICAgICAgaWYgKGNoYW5uZWxzLm9wZW4uaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgY2hhbm5lbHMub3Blbi5wdWJsaXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiByZXNwb25zZS5zb2NrZXQuYWRkcmVzcygpLFxuICAgICAgICAgIHByb3RvY29sOiBzZWNQcm90b2NvbCxcbiAgICAgICAgICBleHRlbnNpb25zOiBzZWNFeHRlbnNpb25cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgb25Fc3RhYmxpc2gocmVzcG9uc2UpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBjb250cm9sbGVyXG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcblxuICAvLyBJZiB0aGUgVENQIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBhZnRlciB0aGVcbiAgLy8gV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvblxuICAvLyBpcyBzYWlkIHRvIGhhdmUgYmVlbiBjbG9zZWQgX2NsZWFubHlfLlxuICBjb25zdCB3YXNDbGVhbiA9IHdzW2tTZW50Q2xvc2VdICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0KSB7XG4gICAgY29kZSA9IHJlc3VsdC5jb2RlID8/IDEwMDVcbiAgICByZWFzb24gPSByZXN1bHQucmVhc29uXG4gIH0gZWxzZSBpZiAoIXdzW2tTZW50Q2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgZmlyZUV2ZW50KCdjbG9zZScsIHdzLCBDbG9zZUV2ZW50LCB7XG4gICAgd2FzQ2xlYW4sIGNvZGUsIHJlYXNvblxuICB9KVxuXG4gIGlmIChjaGFubmVscy5jbG9zZS5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmNsb3NlLnB1Ymxpc2goe1xuICAgICAgd2Vic29ja2V0OiB3cyxcbiAgICAgIGNvZGUsXG4gICAgICByZWFzb25cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RXJyb3IgKGVycm9yKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcblxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuXG4gIGlmIChjaGFubmVscy5zb2NrZXRFcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLnNvY2tldEVycm9yLnB1Ymxpc2goZXJyb3IpXG4gIH1cblxuICB0aGlzLmRlc3Ryb3koKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heFVuc2lnbmVkMTZCaXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbn0gY2F0Y2gge1xuXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gICAgdGhpcy5tYXNrS2V5ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDQpXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgYm9keUxlbmd0aCA9IHRoaXMuZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gdGhpcy5tYXNrS2V5WzBdXG4gICAgYnVmZmVyW29mZnNldCAtIDNdID0gdGhpcy5tYXNrS2V5WzFdXG4gICAgYnVmZmVyW29mZnNldCAtIDJdID0gdGhpcy5tYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gdGhpcy5tYXNrS2V5WzNdXG5cbiAgICBidWZmZXJbMV0gPSBwYXlsb2FkTGVuZ3RoXG5cbiAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZCRShib2R5TGVuZ3RoLCAyKVxuICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAvLyBDbGVhciBleHRlbmRlZCBwYXlsb2FkIGxlbmd0aFxuICAgICAgYnVmZmVyWzJdID0gYnVmZmVyWzNdID0gMFxuICAgICAgYnVmZmVyLndyaXRlVUludEJFKGJvZHlMZW5ndGgsIDQsIDYpXG4gICAgfVxuXG4gICAgYnVmZmVyWzFdIHw9IDB4ODAgLy8gTUFTS1xuXG4gICAgLy8gbWFzayBib2R5XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltvZmZzZXQgKyBpXSA9IHRoaXMuZnJhbWVEYXRhW2ldIF4gdGhpcy5tYXNrS2V5W2kgJSA0XVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgV3JpdGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbmNvbnN0IHsgcGFyc2VyU3RhdGVzLCBvcGNvZGVzLCBzdGF0ZXMsIGVtcHR5QnVmZmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrU2VudENsb3NlLCBrUmVzcG9uc2UsIGtSZWNlaXZlZENsb3NlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc1ZhbGlkU3RhdHVzQ29kZSwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcblxuLy8gVGhpcyBjb2RlIHdhcyBpbmZsdWVuY2VkIGJ5IHdzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxMSBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT5cbi8vIENvcHlyaWdodCAoYykgMjAxMyBBcm5vdXQgS2F6ZW1pZXIgYW5kIGNvbnRyaWJ1dG9yc1xuLy8gQ29weXJpZ2h0IChjKSAyMDE2IEx1aWdpIFBpbmNhIGFuZCBjb250cmlidXRvcnNcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuY2hhbm5lbHMucGluZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBpbmcnKVxuY2hhbm5lbHMucG9uZyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBvbmcnKVxuXG5jbGFzcyBCeXRlUGFyc2VyIGV4dGVuZHMgV3JpdGFibGUge1xuICAjYnVmZmVycyA9IFtdXG4gICNieXRlT2Zmc2V0ID0gMFxuXG4gICNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgI2luZm8gPSB7fVxuICAjZnJhZ21lbnRzID0gW11cblxuICBjb25zdHJ1Y3RvciAod3MpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLndzID0gd3NcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgX3dyaXRlIChjaHVuaywgXywgY2FsbGJhY2spIHtcbiAgICB0aGlzLiNidWZmZXJzLnB1c2goY2h1bmspXG4gICAgdGhpcy4jYnl0ZU9mZnNldCArPSBjaHVuay5sZW5ndGhcblxuICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2hlbmV2ZXIgYSBuZXcgY2h1bmsgaXMgcmVjZWl2ZWQuXG4gICAqIENhbGxiYWNrIGlzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBhcmUgbm8gbW9yZSBjaHVua3MgYnVmZmVyaW5nLFxuICAgKiBvciBub3QgZW5vdWdoIGJ5dGVzIGFyZSBidWZmZXJlZCB0byBwYXJzZS5cbiAgICovXG4gIHJ1biAoY2FsbGJhY2spIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuSU5GTykge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIGJ5dGVzIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGxlbmd0aCwgZXRjLlxuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5maW4gPSAoYnVmZmVyWzBdICYgMHg4MCkgIT09IDBcbiAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPSBidWZmZXJbMF0gJiAweDBGXG5cbiAgICAgICAgLy8gSWYgd2UgcmVjZWl2ZSBhIGZyYWdtZW50ZWQgbWVzc2FnZSwgd2UgdXNlIHRoZSB0eXBlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyBmcmFtZSB0byBwYXJzZSB0aGUgZnVsbCBtZXNzYWdlIGFzIGJpbmFyeS90ZXh0LCB3aGVuIGl0J3MgdGVybWluYXRlZFxuICAgICAgICB0aGlzLiNpbmZvLm9yaWdpbmFsT3Bjb2RlID8/PSB0aGlzLiNpbmZvLm9wY29kZVxuXG4gICAgICAgIHRoaXMuI2luZm8uZnJhZ21lbnRlZCA9ICF0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5DT05USU5VQVRJT05cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLkJJTkFSWSAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5URVhUKSB7XG4gICAgICAgICAgLy8gT25seSB0ZXh0IGFuZCBiaW5hcnkgZnJhbWVzIGNhbiBiZSBmcmFnbWVudGVkXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgZnJhbWUgdHlwZSB3YXMgZnJhZ21lbnRlZC4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZExlbmd0aCA9IGJ1ZmZlclsxXSAmIDB4N0ZcblxuICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA8PSAxMjUpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBwYXlsb2FkTGVuZ3RoXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNlxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLiNpbmZvLmZyYWdtZW50ZWQgJiYgcGF5bG9hZExlbmd0aCA+IDEyNSkge1xuICAgICAgICAgIC8vIEEgZnJhZ21lbnRlZCBmcmFtZSBjYW4ndCBiZSBmcmFnbWVudGVkIGl0c2VsZlxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdGcmFnbWVudGVkIGZyYW1lIGV4Y2VlZGVkIDEyNSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HIHx8XG4gICAgICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkgJiZcbiAgICAgICAgICBwYXlsb2FkTGVuZ3RoID4gMTI1XG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENvbnRyb2wgZnJhbWVzIGNhbiBoYXZlIGEgcGF5bG9hZCBsZW5ndGggb2YgMTI1IGJ5dGVzIE1BWFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdQYXlsb2FkIGxlbmd0aCBmb3IgY29udHJvbCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DTE9TRSkge1xuICAgICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgY2xvc2UgZnJhbWUgd2l0aCBhIDEtYnl0ZSBib2R5LicpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNpbmZvLmNsb3NlSW5mbyA9IHRoaXMucGFyc2VDbG9zZUJvZHkoZmFsc2UsIGJvZHkpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1NlbnRDbG9zZV0pIHtcbiAgICAgICAgICAgIC8vIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGEgQ2xvc2UgZnJhbWUgYW5kIGRpZCBub3QgcHJldmlvdXNseSBzZW5kIGFcbiAgICAgICAgICAgIC8vIENsb3NlIGZyYW1lLCB0aGUgZW5kcG9pbnQgTVVTVCBzZW5kIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UuICAoV2hlblxuICAgICAgICAgICAgLy8gc2VuZGluZyBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLCB0aGUgZW5kcG9pbnQgdHlwaWNhbGx5IGVjaG9zIHRoZVxuICAgICAgICAgICAgLy8gc3RhdHVzIGNvZGUgaXQgcmVjZWl2ZWQuKVxuICAgICAgICAgICAgY29uc3QgYm9keSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyKVxuICAgICAgICAgICAgYm9keS53cml0ZVVJbnQxNkJFKHRoaXMuI2luZm8uY2xvc2VJbmZvLmNvZGUsIDApXG4gICAgICAgICAgICBjb25zdCBjbG9zZUZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKFxuICAgICAgICAgICAgICBjbG9zZUZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQ0xPU0UpLFxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMud3Nba1NlbnRDbG9zZV0gPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gICAgICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgICAgICB0aGlzLndzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gICAgICAgICAgdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0gPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmVuZCgpXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HKSB7XG4gICAgICAgICAgLy8gVXBvbiByZWNlaXB0IG9mIGEgUGluZyBmcmFtZSwgYW4gZW5kcG9pbnQgTVVTVCBzZW5kIGEgUG9uZyBmcmFtZSBpblxuICAgICAgICAgIC8vIHJlc3BvbnNlLCB1bmxlc3MgaXQgYWxyZWFkeSByZWNlaXZlZCBhIENsb3NlIGZyYW1lLlxuICAgICAgICAgIC8vIEEgUG9uZyBmcmFtZSBzZW50IGluIHJlc3BvbnNlIHRvIGEgUGluZyBmcmFtZSBtdXN0IGhhdmUgaWRlbnRpY2FsXG4gICAgICAgICAgLy8gXCJBcHBsaWNhdGlvbiBkYXRhXCJcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmICghdGhpcy53c1trUmVjZWl2ZWRDbG9zZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuUE9ORykpXG5cbiAgICAgICAgICAgIGlmIChjaGFubmVscy5waW5nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICAgIGNoYW5uZWxzLnBpbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBPTkcpIHtcbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgTUFZIGJlIHNlbnQgdW5zb2xpY2l0ZWQuICBUaGlzIHNlcnZlcyBhcyBhXG4gICAgICAgICAgLy8gdW5pZGlyZWN0aW9uYWwgaGVhcnRiZWF0LiAgQSByZXNwb25zZSB0byBhbiB1bnNvbGljaXRlZCBQb25nIGZyYW1lIGlzXG4gICAgICAgICAgLy8gbm90IGV4cGVjdGVkLlxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgaWYgKGNoYW5uZWxzLnBvbmcuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIGNoYW5uZWxzLnBvbmcucHVibGlzaCh7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBidWZmZXIucmVhZFVJbnQxNkJFKDApXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjQpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCA4KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSg4KVxuICAgICAgICBjb25zdCB1cHBlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoMClcblxuICAgICAgICAvLyAyXjMxIGlzIHRoZSBtYXhpbmltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9ICh1cHBlciA8PCA4KSArIGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIHN0aWxsIG1vcmUgZGF0YSBpbiB0aGlzIGNodW5rIHRoYXQgbmVlZHMgdG8gYmUgcmVhZFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jYnl0ZU9mZnNldCA+PSB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc2VydmVyIHNlbnQgbXVsdGlwbGUgZnJhbWVzIGluIGEgc2luZ2xlIGNodW5rXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGJvZHkpXG5cbiAgICAgICAgICAvLyBJZiB0aGUgZnJhbWUgaXMgdW5mcmFnbWVudGVkLCBvciBhIGZyYWdtZW50ZWQgZnJhbWUgd2FzIHRlcm1pbmF0ZWQsXG4gICAgICAgICAgLy8gYSBtZXNzYWdlIHdhcyByZWNlaXZlZFxuICAgICAgICAgIGlmICghdGhpcy4jaW5mby5mcmFnbWVudGVkIHx8ICh0aGlzLiNpbmZvLmZpbiAmJiB0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5DT05USU5VQVRJT04pKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsTWVzc2FnZSA9IEJ1ZmZlci5jb25jYXQodGhpcy4jZnJhZ21lbnRzKVxuXG4gICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSwgZnVsbE1lc3NhZ2UpXG5cbiAgICAgICAgICAgIHRoaXMuI2luZm8gPSB7fVxuICAgICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLmxlbmd0aCA9IDBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRha2UgbiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBCdWZmZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ8bnVsbH1cbiAgICovXG4gIGNvbnN1bWUgKG4pIHtcbiAgICBpZiAobiA+IHRoaXMuI2J5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIGlmIChuID09PSAwKSB7XG4gICAgICByZXR1cm4gZW1wdHlCdWZmZXJcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYnVmZmVyc1swXS5sZW5ndGggPT09IG4pIHtcbiAgICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gdGhpcy4jYnVmZmVyc1swXS5sZW5ndGhcbiAgICAgIHJldHVybiB0aGlzLiNidWZmZXJzLnNoaWZ0KClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobilcbiAgICBsZXQgb2Zmc2V0ID0gMFxuXG4gICAgd2hpbGUgKG9mZnNldCAhPT0gbikge1xuICAgICAgY29uc3QgbmV4dCA9IHRoaXMuI2J1ZmZlcnNbMF1cbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBuZXh0XG5cbiAgICAgIGlmIChsZW5ndGggKyBvZmZzZXQgPT09IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAobGVuZ3RoICsgb2Zmc2V0ID4gbikge1xuICAgICAgICBidWZmZXIuc2V0KG5leHQuc3ViYXJyYXkoMCwgbiAtIG9mZnNldCksIG9mZnNldClcbiAgICAgICAgdGhpcy4jYnVmZmVyc1swXSA9IG5leHQuc3ViYXJyYXkobiAtIG9mZnNldClcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIG9mZnNldCArPSBuZXh0Lmxlbmd0aFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuI2J5dGVPZmZzZXQgLT0gblxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG5cbiAgcGFyc2VDbG9zZUJvZHkgKG9ubHlDb2RlLCBkYXRhKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjVcbiAgICAvKiogQHR5cGUge251bWJlcnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIGlmIChkYXRhLmxlbmd0aCA+PSAyKSB7XG4gICAgICAvLyBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzXG4gICAgICAvLyBkZWZpbmVkIGFzIHRoZSBzdGF0dXMgY29kZSAoU2VjdGlvbiA3LjQpIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgQ2xvc2VcbiAgICAgIC8vIGNvbnRyb2wgZnJhbWUgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBjb2RlID0gZGF0YS5yZWFkVUludDE2QkUoMClcbiAgICB9XG5cbiAgICBpZiAob25seUNvZGUpIHtcbiAgICAgIGlmICghaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgY29kZSB9XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjZcbiAgICAvKiogQHR5cGUge0J1ZmZlcn0gKi9cbiAgICBsZXQgcmVhc29uID0gZGF0YS5zdWJhcnJheSgyKVxuXG4gICAgLy8gUmVtb3ZlIEJPTVxuICAgIGlmIChyZWFzb25bMF0gPT09IDB4RUYgJiYgcmVhc29uWzFdID09PSAweEJCICYmIHJlYXNvblsyXSA9PT0gMHhCRikge1xuICAgICAgcmVhc29uID0gcmVhc29uLnN1YmFycmF5KDMpXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiAhaXNWYWxpZFN0YXR1c0NvZGUoY29kZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IG9wdGltaXplIHRoaXNcbiAgICAgIHJlYXNvbiA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZShyZWFzb24pXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGUsIHJlYXNvbiB9XG4gIH1cblxuICBnZXQgY2xvc2luZ0luZm8gKCkge1xuICAgIHJldHVybiB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCeXRlUGFyc2VyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBET01FeGNlcHRpb24gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2NvbnN0YW50cycpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2dsb2JhbCcpXG5jb25zdCB7IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsIHN0YXRlcywgb3Bjb2RlcywgZW1wdHlCdWZmZXIgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHtcbiAga1dlYlNvY2tldFVSTCxcbiAga1JlYWR5U3RhdGUsXG4gIGtDb250cm9sbGVyLFxuICBrQmluYXJ5VHlwZSxcbiAga1Jlc3BvbnNlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlclxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzRXN0YWJsaXNoZWQsIGlzQ2xvc2luZywgaXNWYWxpZFN1YnByb3RvY29sLCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiwgZmlyZUV2ZW50IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uIH0gPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24nKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuY29uc3QgeyBCeXRlUGFyc2VyIH0gPSByZXF1aXJlKCcuL3JlY2VpdmVyJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vZ2xvYmFsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5sZXQgZXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLWRlZmluaXRpb25cbmNsYXNzIFdlYlNvY2tldCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgI2V2ZW50cyA9IHtcbiAgICBvcGVuOiBudWxsLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGNsb3NlOiBudWxsLFxuICAgIG1lc3NhZ2U6IG51bGxcbiAgfVxuXG4gICNidWZmZXJlZEFtb3VudCA9IDBcbiAgI3Byb3RvY29sID0gJydcbiAgI2V4dGVuc2lvbnMgPSAnJ1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIHByb3RvY29scyA9IFtdKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGlmICghZXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICBleHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdXZWJTb2NrZXRzIGFyZSBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICAgIGNvZGU6ICdVTkRJQ0ktV1MnXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddKHByb3RvY29scylcblxuICAgIHVybCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh1cmwpXG4gICAgcHJvdG9jb2xzID0gb3B0aW9ucy5wcm90b2NvbHNcblxuICAgIC8vIDEuIExldCBiYXNlVVJMIGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QncyBBUEkgYmFzZSBVUkwuXG4gICAgY29uc3QgYmFzZVVSTCA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICAvLyAxLiBMZXQgdXJsUmVjb3JkIGJlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIFVSTCBwYXJzZXIgdG8gdXJsIHdpdGggYmFzZVVSTC5cbiAgICBsZXQgdXJsUmVjb3JkXG5cbiAgICB0cnkge1xuICAgICAgdXJsUmVjb3JkID0gbmV3IFVSTCh1cmwsIGJhc2VVUkwpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gMy4gSWYgdXJsUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihlLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDQuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiLCB0aGVuIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzXCIuXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzOidcbiAgICB9IGVsc2UgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwc1wiLCBzZXQgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgdG8gXCJ3c3NcIi5cbiAgICAgIHVybFJlY29yZC5wcm90b2NvbCA9ICd3c3M6J1xuICAgIH1cblxuICAgIC8vIDYuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcIndzXCIgb3IgXCJ3c3NcIiwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCAhPT0gJ3dzOicgJiYgdXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3NzOicpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIGBFeHBlY3RlZCBhIHdzOiBvciB3c3M6IHByb3RvY29sLCBnb3QgJHt1cmxSZWNvcmQucHJvdG9jb2x9YCxcbiAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDcuIElmIHVybFJlY29yZFx1MjAxOXMgZnJhZ21lbnQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCJcbiAgICAvLyAgICBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5oYXNoIHx8IHVybFJlY29yZC5ocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0dvdCBmcmFnbWVudCcsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gOC4gSWYgcHJvdG9jb2xzIGlzIGEgc3RyaW5nLCBzZXQgcHJvdG9jb2xzIHRvIGEgc2VxdWVuY2UgY29uc2lzdGluZ1xuICAgIC8vICAgIG9mIGp1c3QgdGhhdCBzdHJpbmcuXG4gICAgaWYgKHR5cGVvZiBwcm90b2NvbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm90b2NvbHMgPSBbcHJvdG9jb2xzXVxuICAgIH1cblxuICAgIC8vIDkuIElmIGFueSBvZiB0aGUgdmFsdWVzIGluIHByb3RvY29scyBvY2N1ciBtb3JlIHRoYW4gb25jZSBvciBvdGhlcndpc2VcbiAgICAvLyAgICBmYWlsIHRvIG1hdGNoIHRoZSByZXF1aXJlbWVudHMgZm9yIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhlIHZhbHVlXG4gICAgLy8gICAgb2YgYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGZpZWxkcyBhcyBkZWZpbmVkIGJ5IFRoZSBXZWJTb2NrZXRcbiAgICAvLyAgICBwcm90b2NvbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggIT09IG5ldyBTZXQocHJvdG9jb2xzLm1hcChwID0+IHAudG9Mb3dlckNhc2UoKSkpLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggPiAwICYmICFwcm90b2NvbHMuZXZlcnkocCA9PiBpc1ZhbGlkU3VicHJvdG9jb2wocCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgdmFsdWUnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDEwLiBTZXQgdGhpcydzIHVybCB0byB1cmxSZWNvcmQuXG4gICAgdGhpc1trV2ViU29ja2V0VVJMXSA9IG5ldyBVUkwodXJsUmVjb3JkLmhyZWYpXG5cbiAgICAvLyAxMS4gTGV0IGNsaWVudCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuXG4gICAgLy8gMTIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6XG5cbiAgICAvLyAgICAxLiBFc3RhYmxpc2ggYSBXZWJTb2NrZXQgY29ubmVjdGlvbiBnaXZlbiB1cmxSZWNvcmQsIHByb3RvY29scyxcbiAgICAvLyAgICAgICBhbmQgY2xpZW50LlxuICAgIHRoaXNba0NvbnRyb2xsZXJdID0gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihcbiAgICAgIHVybFJlY29yZCxcbiAgICAgIHByb3RvY29scyxcbiAgICAgIHRoaXMsXG4gICAgICAocmVzcG9uc2UpID0+IHRoaXMuI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkKHJlc3BvbnNlKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgcmVhZHkgc3RhdGUsIHdoaWNoIGlzIGFcbiAgICAvLyBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4gSW5pdGlhbGx5IGl0IG11c3RcbiAgICAvLyBiZSBDT05ORUNUSU5HICgwKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DT05ORUNUSU5HXG5cbiAgICAvLyBUaGUgZXh0ZW5zaW9ucyBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBUaGUgcHJvdG9jb2wgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gRWFjaCBXZWJTb2NrZXQgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIGJpbmFyeSB0eXBlLCB3aGljaCBpcyBhXG4gICAgLy8gQmluYXJ5VHlwZS4gSW5pdGlhbGx5IGl0IG11c3QgYmUgXCJibG9iXCIuXG4gICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VcbiAgICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gICAqL1xuICBjbG9zZSAoY29kZSA9IHVuZGVmaW5lZCwgcmVhc29uID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29kZSA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKGNvZGUsIHsgY2xhbXA6IHRydWUgfSlcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlYXNvbiA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhyZWFzb24pXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY29kZSBpcyBwcmVzZW50LCBidXQgaXMgbmVpdGhlciBhbiBpbnRlZ2VyIGVxdWFsIHRvIDEwMDAgbm9yIGFuXG4gICAgLy8gICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMzAwMCB0byA0OTk5LCBpbmNsdXNpdmUsIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkQWNjZXNzRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvZGUgIT09IDEwMDAgJiYgKGNvZGUgPCAzMDAwIHx8IGNvZGUgPiA0OTk5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdpbnZhbGlkIGNvZGUnLCAnSW52YWxpZEFjY2Vzc0Vycm9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVhc29uQnl0ZUxlbmd0aCA9IDBcblxuICAgIC8vIDIuIElmIHJlYXNvbiBpcyBwcmVzZW50LCB0aGVuIHJ1biB0aGVzZSBzdWJzdGVwczpcbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWFzb25CeXRlcyBiZSB0aGUgcmVzdWx0IG9mIGVuY29kaW5nIHJlYXNvbi5cbiAgICAgIC8vIDIuIElmIHJlYXNvbkJ5dGVzIGlzIGxvbmdlciB0aGFuIDEyMyBieXRlcywgdGhlbiB0aHJvdyBhXG4gICAgICAvLyAgICBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgcmVhc29uQnl0ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlYXNvbilcblxuICAgICAgaWYgKHJlYXNvbkJ5dGVMZW5ndGggPiAxMjMpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgICBgUmVhc29uIG11c3QgYmUgbGVzcyB0aGFuIDEyMyBieXRlczsgcmVjZWl2ZWQgJHtyZWFzb25CeXRlTGVuZ3RofWAsXG4gICAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gUnVuIHRoZSBmaXJzdCBtYXRjaGluZyBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICBpZiAodGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TSU5HIHx8IHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ0xPU0VEKSB7XG4gICAgICAvLyBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ0xPU0lORyAoMikgb3IgQ0xPU0VEICgzKVxuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKCFpc0VzdGFibGlzaGVkKHRoaXMpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgICAgLy8gRmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gYW5kIHNldCB0aGlzJ3MgcmVhZHkgc3RhdGVcbiAgICAgIC8vIHRvIENMT1NJTkcgKDIpLlxuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcywgJ0Nvbm5lY3Rpb24gd2FzIGNsb3NlZCBiZWZvcmUgaXQgd2FzIGVzdGFibGlzaGVkLicpXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DTE9TSU5HXG4gICAgfSBlbHNlIGlmICghaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgICAgLy8gU3RhcnQgdGhlIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSBhbmQgc2V0IHRoaXMncyByZWFkeVxuICAgICAgLy8gc3RhdGUgdG8gQ0xPU0lORyAoMikuXG4gICAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAgIC8vICAgbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cbiAgICAgIC8vIC0gSWYgY29kZSBpcyBwcmVzZW50LCB0aGVuIHRoZSBzdGF0dXMgY29kZSB0byB1c2UgaW4gdGhlXG4gICAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIC8vIC0gSWYgcmVhc29uIGlzIGFsc28gcHJlc2VudCwgdGhlbiByZWFzb25CeXRlcyBtdXN0IGJlXG4gICAgICAvLyAgIHByb3ZpZGVkIGluIHRoZSBDbG9zZSBtZXNzYWdlIGFmdGVyIHRoZSBzdGF0dXMgY29kZS5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgLy8gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgICAgLy8gSWYgY29kZSBpcyBwcmVzZW50LCB0aGVuIHRoZSBzdGF0dXMgY29kZSB0byB1c2UgaW4gdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgQ2xvc2UgbWVzc2FnZSBtdXN0IGJlIHRoZSBpbnRlZ2VyIGdpdmVuIGJ5IGNvZGUuXG4gICAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGVVSW50MTZCRShjb2RlLCAwKVxuICAgICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gSWYgcmVhc29uIGlzIGFsc28gcHJlc2VudCwgdGhlbiByZWFzb25CeXRlcyBtdXN0IGJlXG4gICAgICAgIC8vIHByb3ZpZGVkIGluIHRoZSBDbG9zZSBtZXNzYWdlIGFmdGVyIHRoZSBzdGF0dXMgY29kZS5cbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGVVSW50MTZCRShjb2RlLCAwKVxuICAgICAgICAvLyB0aGUgYm9keSBNQVkgY29udGFpbiBVVEYtOC1lbmNvZGVkIGRhdGEgd2l0aCB2YWx1ZSAvcmVhc29uL1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gZW1wdHlCdWZmZXJcbiAgICAgIH1cblxuICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbScpLkR1cGxleH0gKi9cbiAgICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgICAgc29ja2V0LndyaXRlKGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQ0xPU0UpLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgdGhpc1trU2VudENsb3NlXSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gVXBvbiBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcgYSBDbG9zZSBjb250cm9sIGZyYW1lLCBpdCBpcyBzYWlkXG4gICAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LXNlbmRcbiAgICogQHBhcmFtIHtOb2RlSlMuVHlwZWRBcnJheXxBcnJheUJ1ZmZlcnxCbG9ifHN0cmluZ30gZGF0YVxuICAgKi9cbiAgc2VuZCAoZGF0YSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdXZWJTb2NrZXQuc2VuZCcgfSlcblxuICAgIGRhdGEgPSB3ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YShkYXRhKVxuXG4gICAgLy8gMS4gSWYgdGhpcydzIHJlYWR5IHN0YXRlIGlzIENPTk5FQ1RJTkcsIHRoZW4gdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRTdGF0ZUVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1NlbnQgYmVmb3JlIGNvbm5lY3RlZC4nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgIH1cblxuICAgIC8vIDIuIFJ1biB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTYuMVxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTUuMlxuXG4gICAgaWYgKCFpc0VzdGFibGlzaGVkKHRoaXMpIHx8IGlzQ2xvc2luZyh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbScpLkR1cGxleH0gKi9cbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tSZXNwb25zZV0uc29ja2V0XG5cbiAgICAvLyBJZiBkYXRhIGlzIGEgc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50XG4gICAgICAvLyBtdXN0IHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgdGhlIGRhdGEgYXJndW1lbnRcbiAgICAgIC8vIHVzaW5nIGEgdGV4dCBmcmFtZSBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuXG4gICAgICAvLyBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCxcbiAgICAgIC8vIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2VcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhXG4gICAgICAvLyBzdHJpbmcgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZVxuICAgICAgLy8gdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0b1xuICAgICAgLy8gZXhwcmVzcyB0aGUgYXJndW1lbnQgYXMgVVRGLTguXG5cbiAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCh2YWx1ZSlcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuVEVYVClcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkXG4gICAgICAvLyB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWdcbiAgICAgIC8vIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICAvLyBUaGUgZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgYnVmZmVyIGRlc2NyaWJlZFxuICAgICAgLy8gYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdC4gQW55IGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhblxuICAgICAgLy8gQXJyYXlCdWZmZXIgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdFxuICAgICAgLy8gaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgbGVuZ3RoIG9mIHRoZVxuICAgICAgLy8gQXJyYXlCdWZmZXIgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oZGF0YSlcbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCh2YWx1ZSlcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGVcbiAgICAgIC8vIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIHNlY3Rpb24gb2YgdGhlIGJ1ZmZlclxuICAgICAgLy8gZGVzY3JpYmVkIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QgdGhhdCBkYXRhIHJlZmVyZW5jZXMuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIHRoaXMga2luZCBvZiBhcmd1bWVudCB0aGF0IGRvZXNcbiAgICAgIC8vIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlXG4gICAgICAvLyBieSB0aGUgbGVuZ3RoIG9mIGRhdGFcdTIwMTlzIGJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgYWIgPSBCdWZmZXIuZnJvbShkYXRhLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aClcblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGFiKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGFiLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gYWIuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGUgZGF0YVxuICAgICAgLy8gdG8gYmUgc2VudCBpcyB0aGUgcmF3IGRhdGEgcmVwcmVzZW50ZWQgYnkgdGhlIEJsb2Igb2JqZWN0LiBBbnlcbiAgICAgIC8vIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhIEJsb2IgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvd1xuICAgICAgLy8gYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgc2l6ZVxuICAgICAgLy8gb2YgdGhlIEJsb2Igb2JqZWN0XHUyMDE5cyByYXcgZGF0YSwgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAgIGRhdGEuYXJyYXlCdWZmZXIoKS50aGVuKChhYikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGFiKVxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSB2YWx1ZVxuICAgICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgcmVhZHlTdGF0ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzJ3MgcmVhZHkgc3RhdGUuXG4gICAgcmV0dXJuIHRoaXNba1JlYWR5U3RhdGVdXG4gIH1cblxuICBnZXQgYnVmZmVyZWRBbW91bnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNidWZmZXJlZEFtb3VudFxuICB9XG5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzJ3MgdXJsLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1dlYlNvY2tldFVSTF0pXG4gIH1cblxuICBnZXQgZXh0ZW5zaW9ucyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V4dGVuc2lvbnNcbiAgfVxuXG4gIGdldCBwcm90b2NvbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI3Byb3RvY29sXG4gIH1cblxuICBnZXQgb25vcGVuICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLm9wZW5cbiAgfVxuXG4gIHNldCBvbm9wZW4gKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5vcGVuKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29wZW4nLCB0aGlzLiNldmVudHMub3BlbilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLiNldmVudHMuZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmNsb3NlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmNsb3NlXG4gIH1cblxuICBzZXQgb25jbG9zZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmNsb3NlKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy4jZXZlbnRzLmNsb3NlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5jbG9zZSA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5jbG9zZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25tZXNzYWdlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLm1lc3NhZ2VcbiAgfVxuXG4gIHNldCBvbm1lc3NhZ2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLiNldmVudHMubWVzc2FnZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGJpbmFyeVR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzW2tCaW5hcnlUeXBlXVxuICB9XG5cbiAgc2V0IGJpbmFyeVR5cGUgKHR5cGUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodHlwZSAhPT0gJ2Jsb2InICYmIHR5cGUgIT09ICdhcnJheWJ1ZmZlcicpIHtcbiAgICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0JpbmFyeVR5cGVdID0gdHlwZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gICAqL1xuICAjb25Db25uZWN0aW9uRXN0YWJsaXNoZWQgKHJlc3BvbnNlKSB7XG4gICAgLy8gcHJvY2Vzc1Jlc3BvbnNlIGlzIGNhbGxlZCB3aGVuIHRoZSBcInJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCBoYXMgYmVlbiByZWNlaXZlZCBhbmQgaW5pdGlhbGl6ZWQuXCJcbiAgICAvLyBvbmNlIHRoaXMgaGFwcGVucywgdGhlIGNvbm5lY3Rpb24gaXMgb3BlblxuICAgIHRoaXNba1Jlc3BvbnNlXSA9IHJlc3BvbnNlXG5cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQnl0ZVBhcnNlcih0aGlzKVxuICAgIHBhcnNlci5vbignZHJhaW4nLCBmdW5jdGlvbiBvblBhcnNlckRyYWluICgpIHtcbiAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQucmVzdW1lKClcbiAgICB9KVxuXG4gICAgcmVzcG9uc2Uuc29ja2V0LndzID0gdGhpc1xuICAgIHRoaXNba0J5dGVQYXJzZXJdID0gcGFyc2VyXG5cbiAgICAvLyAxLiBDaGFuZ2UgdGhlIHJlYWR5IHN0YXRlIHRvIE9QRU4gKDEpLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLk9QRU5cblxuICAgIC8vIDIuIENoYW5nZSB0aGUgZXh0ZW5zaW9ucyBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBleHRlbnNpb25zIGluIHVzZSwgaWZcbiAgICAvLyAgICBpdCBpcyBub3QgdGhlIG51bGwgdmFsdWUuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tOS4xXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJylcblxuICAgIGlmIChleHRlbnNpb25zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIH1cblxuICAgIC8vIDMuIENoYW5nZSB0aGUgcHJvdG9jb2wgYXR0cmlidXRlXHUyMDE5cyB2YWx1ZSB0byB0aGUgc3VicHJvdG9jb2wgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi0xLjlcbiAgICBjb25zdCBwcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcpXG5cbiAgICBpZiAocHJvdG9jb2wgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI3Byb3RvY29sID0gcHJvdG9jb2xcbiAgICB9XG5cbiAgICAvLyA0LiBGaXJlIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gICAgZmlyZUV2ZW50KCdvcGVuJywgdGhpcylcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNvbm5lY3RpbmdcbldlYlNvY2tldC5DT05ORUNUSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DT05ORUNUSU5HID0gc3RhdGVzLkNPTk5FQ1RJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtb3BlblxuV2ViU29ja2V0Lk9QRU4gPSBXZWJTb2NrZXQucHJvdG90eXBlLk9QRU4gPSBzdGF0ZXMuT1BFTlxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zaW5nXG5XZWJTb2NrZXQuQ0xPU0lORyA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0lORyA9IHN0YXRlcy5DTE9TSU5HXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlZFxuV2ViU29ja2V0LkNMT1NFRCA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0VEID0gc3RhdGVzLkNMT1NFRFxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQucHJvdG90eXBlLCB7XG4gIENPTk5FQ1RJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIE9QRU46IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NFRDogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBidWZmZXJlZEFtb3VudDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9zZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25tZXNzYWdlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBiaW5hcnlUeXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBleHRlbnNpb25zOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwcm90b2NvbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1dlYlNvY2tldCcsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgU3ltYm9sLml0ZXJhdG9yIGluIFYpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPERPTVN0cmluZz4nXShWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxufVxuXG4vLyBUaGlzIGltcGxlbWVudHMgdGhlIHByb3BzYWwgbWFkZSBpbiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3dlYnNvY2tldHMvaXNzdWVzLzQyXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAncHJvdG9jb2xzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAnZGlzcGF0Y2hlcicsXG4gICAgY29udmVydGVyOiAoVikgPT4gVixcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBnZXRHbG9iYWxEaXNwYXRjaGVyKClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdClcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+IG9yIFdlYlNvY2tldEluaXQnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiBWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRJbml0KFYpXG4gIH1cblxuICByZXR1cm4geyBwcm90b2NvbHM6IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEgPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhWKSB8fCB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2ViU29ja2V0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2NsaWVudCcpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlcicpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9saWIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9iYWxhbmNlZC1wb29sJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9saWIvYWdlbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vbGliL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSBlcnJvcnNcbmNvbnN0IGFwaSA9IHJlcXVpcmUoJy4vbGliL2FwaScpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vbGliL2NvcmUvY29ubmVjdCcpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stYWdlbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stcG9vbCcpXG5jb25zdCBtb2NrRXJyb3JzID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWVycm9ycycpXG5jb25zdCBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvcHJveHktYWdlbnQnKVxuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZXRyeUhhbmRsZXInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyLCBzZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuL2xpYi9nbG9iYWwnKVxuY29uc3QgRGVjb3JhdG9ySGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvRGVjb3JhdG9ySGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JlZGlyZWN0SGFuZGxlcicpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvcicpXG5cbmxldCBoYXNDcnlwdG9cbnRyeSB7XG4gIHJlcXVpcmUoJ2NyeXB0bycpXG4gIGhhc0NyeXB0byA9IHRydWVcbn0gY2F0Y2gge1xuICBoYXNDcnlwdG8gPSBmYWxzZVxufVxuXG5PYmplY3QuYXNzaWduKERpc3BhdGNoZXIucHJvdG90eXBlLCBhcGkpXG5cbm1vZHVsZS5leHBvcnRzLkRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5DbGllbnQgPSBDbGllbnRcbm1vZHVsZS5leHBvcnRzLlBvb2wgPSBQb29sXG5tb2R1bGUuZXhwb3J0cy5CYWxhbmNlZFBvb2wgPSBCYWxhbmNlZFBvb2xcbm1vZHVsZS5leHBvcnRzLkFnZW50ID0gQWdlbnRcbm1vZHVsZS5leHBvcnRzLlByb3h5QWdlbnQgPSBQcm94eUFnZW50XG5tb2R1bGUuZXhwb3J0cy5SZXRyeUhhbmRsZXIgPSBSZXRyeUhhbmRsZXJcblxubW9kdWxlLmV4cG9ydHMuRGVjb3JhdG9ySGFuZGxlciA9IERlY29yYXRvckhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLlJlZGlyZWN0SGFuZGxlciA9IFJlZGlyZWN0SGFuZGxlclxubW9kdWxlLmV4cG9ydHMuY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3JcblxubW9kdWxlLmV4cG9ydHMuYnVpbGRDb25uZWN0b3IgPSBidWlsZENvbm5lY3RvclxubW9kdWxlLmV4cG9ydHMuZXJyb3JzID0gZXJyb3JzXG5cbmZ1bmN0aW9uIG1ha2VEaXNwYXRjaGVyIChmbikge1xuICByZXR1cm4gKHVybCwgb3B0cywgaGFuZGxlcikgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaGFuZGxlciA9IG9wdHNcbiAgICAgIG9wdHMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF1cmwgfHwgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB1cmwgIT09ICdvYmplY3QnICYmICEodXJsIGluc3RhbmNlb2YgVVJMKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICE9IG51bGwgJiYgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wYXRoICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cy5wYXRoJylcbiAgICAgIH1cblxuICAgICAgbGV0IHBhdGggPSBvcHRzLnBhdGhcbiAgICAgIGlmICghb3B0cy5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgICAgfVxuXG4gICAgICB1cmwgPSBuZXcgVVJMKHV0aWwucGFyc2VPcmlnaW4odXJsKS5vcmlnaW4gKyBwYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgb3B0cyA9IHR5cGVvZiB1cmwgPT09ICdvYmplY3QnID8gdXJsIDoge31cbiAgICAgIH1cblxuICAgICAgdXJsID0gdXRpbC5wYXJzZVVSTCh1cmwpXG4gICAgfVxuXG4gICAgY29uc3QgeyBhZ2VudCwgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSB9ID0gb3B0c1xuXG4gICAgaWYgKGFnZW50KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG9wdHMuYWdlbnQuIERpZCB5b3UgbWVhbiBvcHRzLmNsaWVudD8nKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5jYWxsKGRpc3BhdGNoZXIsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICBwYXRoOiB1cmwuc2VhcmNoID8gYCR7dXJsLnBhdGhuYW1lfSR7dXJsLnNlYXJjaH1gIDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAob3B0cy5ib2R5ID8gJ1BVVCcgOiAnR0VUJylcbiAgICB9LCBoYW5kbGVyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbERpc3BhdGNoZXIgPSBzZXRHbG9iYWxEaXNwYXRjaGVyXG5tb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxEaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlclxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPiAxNiB8fCAodXRpbC5ub2RlTWFqb3IgPT09IDE2ICYmIHV0aWwubm9kZU1pbm9yID49IDgpKSB7XG4gIGxldCBmZXRjaEltcGwgPSBudWxsXG4gIG1vZHVsZS5leHBvcnRzLmZldGNoID0gYXN5bmMgZnVuY3Rpb24gZmV0Y2ggKHJlc291cmNlKSB7XG4gICAgaWYgKCFmZXRjaEltcGwpIHtcbiAgICAgIGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoJykuZmV0Y2hcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbCguLi5hcmd1bWVudHMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyLCB0aGlzKVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbiAgbW9kdWxlLmV4cG9ydHMuSGVhZGVycyA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2hlYWRlcnMnKS5IZWFkZXJzXG4gIG1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVzcG9uc2UnKS5SZXNwb25zZVxuICBtb2R1bGUuZXhwb3J0cy5SZXF1ZXN0ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3RcbiAgbW9kdWxlLmV4cG9ydHMuRm9ybURhdGEgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9mb3JtZGF0YScpLkZvcm1EYXRhXG4gIG1vZHVsZS5leHBvcnRzLkZpbGUgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9maWxlJykuRmlsZVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvZmlsZWFwaS9maWxlcmVhZGVyJykuRmlsZVJlYWRlclxuXG4gIGNvbnN0IHsgc2V0R2xvYmFsT3JpZ2luLCBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2dsb2JhbCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsT3JpZ2luID0gc2V0R2xvYmFsT3JpZ2luXG4gIG1vZHVsZS5leHBvcnRzLmdldEdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpblxuXG4gIGNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9jYWNoZXN0b3JhZ2UnKVxuICBjb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL3N5bWJvbHMnKVxuXG4gIC8vIENhY2hlICYgQ2FjaGVTdG9yYWdlIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBmZXRjaC4gRXZlbiBpZiBpdCBtYXkgcnVuXG4gIC8vIGluIGFuIG9sZGVyIHZlcnNpb24gb2YgTm9kZSwgaXQgZG9lc24ndCBoYXZlIGFueSB1c2Ugd2l0aG91dCBmZXRjaC5cbiAgbW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTYpIHtcbiAgY29uc3QgeyBkZWxldGVDb29raWUsIGdldENvb2tpZXMsIGdldFNldENvb2tpZXMsIHNldENvb2tpZSB9ID0gcmVxdWlyZSgnLi9saWIvY29va2llcycpXG5cbiAgbW9kdWxlLmV4cG9ydHMuZGVsZXRlQ29va2llID0gZGVsZXRlQ29va2llXG4gIG1vZHVsZS5leHBvcnRzLmdldENvb2tpZXMgPSBnZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG4gIG1vZHVsZS5leHBvcnRzLnNldENvb2tpZSA9IHNldENvb2tpZVxuXG4gIGNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9kYXRhVVJMJylcblxuICBtb2R1bGUuZXhwb3J0cy5wYXJzZU1JTUVUeXBlID0gcGFyc2VNSU1FVHlwZVxuICBtb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE4ICYmIGhhc0NyeXB0bykge1xuICBjb25zdCB7IFdlYlNvY2tldCB9ID0gcmVxdWlyZSgnLi9saWIvd2Vic29ja2V0L3dlYnNvY2tldCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMuV2ViU29ja2V0ID0gV2ViU29ja2V0XG59XG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkucmVxdWVzdClcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5zdHJlYW0pXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS5waXBlbGluZSlcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSBtYWtlRGlzcGF0Y2hlcihhcGkuY29ubmVjdClcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSBtYWtlRGlzcGF0Y2hlcihhcGkudXBncmFkZSlcblxubW9kdWxlLmV4cG9ydHMuTW9ja0NsaWVudCA9IE1vY2tDbGllbnRcbm1vZHVsZS5leHBvcnRzLk1vY2tQb29sID0gTW9ja1Bvb2xcbm1vZHVsZS5leHBvcnRzLk1vY2tBZ2VudCA9IE1vY2tBZ2VudFxubW9kdWxlLmV4cG9ydHMubW9ja0Vycm9ycyA9IG1vY2tFcnJvcnNcbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIndXNlIHN0cmljdCdcblxuY29uc3QgTnVsbE9iamVjdCA9IGZ1bmN0aW9uIE51bGxPYmplY3QgKCkgeyB9XG5OdWxsT2JqZWN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggKiggXCI7XCIgcGFyYW1ldGVyICkgaW4gUkZDIDcyMzEgc2VjIDMuMS4xLjFcbiAqXG4gKiBwYXJhbWV0ZXIgICAgID0gdG9rZW4gXCI9XCIgKCB0b2tlbiAvIHF1b3RlZC1zdHJpbmcgKVxuICogdG9rZW4gICAgICAgICA9IDEqdGNoYXJcbiAqIHRjaGFyICAgICAgICAgPSBcIiFcIiAvIFwiI1wiIC8gXCIkXCIgLyBcIiVcIiAvIFwiJlwiIC8gXCInXCIgLyBcIipcIlxuICogICAgICAgICAgICAgICAvIFwiK1wiIC8gXCItXCIgLyBcIi5cIiAvIFwiXlwiIC8gXCJfXCIgLyBcImBcIiAvIFwifFwiIC8gXCJ+XCJcbiAqICAgICAgICAgICAgICAgLyBESUdJVCAvIEFMUEhBXG4gKiAgICAgICAgICAgICAgIDsgYW55IFZDSEFSLCBleGNlcHQgZGVsaW1pdGVyc1xuICogcXVvdGVkLXN0cmluZyA9IERRVU9URSAqKCBxZHRleHQgLyBxdW90ZWQtcGFpciApIERRVU9URVxuICogcWR0ZXh0ICAgICAgICA9IEhUQUIgLyBTUCAvICV4MjEgLyAleDIzLTVCIC8gJXg1RC03RSAvIG9icy10ZXh0XG4gKiBvYnMtdGV4dCAgICAgID0gJXg4MC1GRlxuICogcXVvdGVkLXBhaXIgICA9IFwiXFxcIiAoIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICovXG5jb25zdCBwYXJhbVJFID0gLzsgKihbISMkJSYnKisuXlxcd2B8fi1dKyk9KFwiKD86W1xcdlxcdTAwMjBcXHUwMDIxXFx1MDAyMy1cXHUwMDViXFx1MDA1ZC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXXxcXFxcW1xcdlxcdTAwMjAtXFx1MDBmZl0pKlwifFshIyQlJicqKy5eXFx3YHx+LV0rKSAqL2d1XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHF1b3RlZC1wYWlyIGluIFJGQyA3MjMwIHNlYyAzLjIuNlxuICpcbiAqIHF1b3RlZC1wYWlyID0gXCJcXFwiICggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gKiBvYnMtdGV4dCAgICA9ICV4ODAtRkZcbiAqL1xuY29uc3QgcXVvdGVkUGFpclJFID0gL1xcXFwoW1xcdlxcdTAwMjAtXFx1MDBmZl0pL2d1XG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIHR5cGUgaW4gUkZDIDcyMzEgc2VjIDMuMS4xLjFcbiAqXG4gKiBtZWRpYS10eXBlID0gdHlwZSBcIi9cIiBzdWJ0eXBlXG4gKiB0eXBlICAgICAgID0gdG9rZW5cbiAqIHN1YnR5cGUgICAgPSB0b2tlblxuICovXG5jb25zdCBtZWRpYVR5cGVSRSA9IC9eWyEjJCUmJyorLl5cXHd8fi1dK1xcL1shIyQlJicqKy5eXFx3fH4tXSskL3VcblxuLy8gZGVmYXVsdCBDb250ZW50VHlwZSB0byBwcmV2ZW50IHJlcGVhdGVkIG9iamVjdCBjcmVhdGlvblxuY29uc3QgZGVmYXVsdENvbnRlbnRUeXBlID0geyB0eXBlOiAnJywgcGFyYW1ldGVyczogbmV3IE51bGxPYmplY3QoKSB9XG5PYmplY3QuZnJlZXplKGRlZmF1bHRDb250ZW50VHlwZS5wYXJhbWV0ZXJzKVxuT2JqZWN0LmZyZWV6ZShkZWZhdWx0Q29udGVudFR5cGUpXG5cbi8qKlxuICogUGFyc2UgbWVkaWEgdHlwZSB0byBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBoZWFkZXJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZSAoaGVhZGVyKSB7XG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IGhlYWRlciBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhIHN0cmluZycpXG4gIH1cblxuICBsZXQgaW5kZXggPSBoZWFkZXIuaW5kZXhPZignOycpXG4gIGNvbnN0IHR5cGUgPSBpbmRleCAhPT0gLTFcbiAgICA/IGhlYWRlci5zbGljZSgwLCBpbmRleCkudHJpbSgpXG4gICAgOiBoZWFkZXIudHJpbSgpXG5cbiAgaWYgKG1lZGlhVHlwZVJFLnRlc3QodHlwZSkgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBtZWRpYSB0eXBlJylcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiB0eXBlLnRvTG93ZXJDYXNlKCksXG4gICAgcGFyYW1ldGVyczogbmV3IE51bGxPYmplY3QoKVxuICB9XG5cbiAgLy8gcGFyc2UgcGFyYW1ldGVyc1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgbGV0IGtleVxuICBsZXQgbWF0Y2hcbiAgbGV0IHZhbHVlXG5cbiAgcGFyYW1SRS5sYXN0SW5kZXggPSBpbmRleFxuXG4gIHdoaWxlICgobWF0Y2ggPSBwYXJhbVJFLmV4ZWMoaGVhZGVyKSkpIHtcbiAgICBpZiAobWF0Y2guaW5kZXggIT09IGluZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhcmFtZXRlciBmb3JtYXQnKVxuICAgIH1cblxuICAgIGluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aFxuICAgIGtleSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIC8vIHJlbW92ZSBxdW90ZXMgYW5kIGVzY2FwZXNcbiAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnNsaWNlKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG5cbiAgICAgIHF1b3RlZFBhaXJSRS50ZXN0KHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHF1b3RlZFBhaXJSRSwgJyQxJykpXG4gICAgfVxuXG4gICAgcmVzdWx0LnBhcmFtZXRlcnNba2V5XSA9IHZhbHVlXG4gIH1cblxuICBpZiAoaW5kZXggIT09IGhlYWRlci5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHBhcmFtZXRlciBmb3JtYXQnKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBzYWZlUGFyc2UgKGhlYWRlcikge1xuICBpZiAodHlwZW9mIGhlYWRlciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICBsZXQgaW5kZXggPSBoZWFkZXIuaW5kZXhPZignOycpXG4gIGNvbnN0IHR5cGUgPSBpbmRleCAhPT0gLTFcbiAgICA/IGhlYWRlci5zbGljZSgwLCBpbmRleCkudHJpbSgpXG4gICAgOiBoZWFkZXIudHJpbSgpXG5cbiAgaWYgKG1lZGlhVHlwZVJFLnRlc3QodHlwZSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpXG4gIH1cblxuICAvLyBwYXJzZSBwYXJhbWV0ZXJzXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsZXQga2V5XG4gIGxldCBtYXRjaFxuICBsZXQgdmFsdWVcblxuICBwYXJhbVJFLmxhc3RJbmRleCA9IGluZGV4XG5cbiAgd2hpbGUgKChtYXRjaCA9IHBhcmFtUkUuZXhlYyhoZWFkZXIpKSkge1xuICAgIGlmIChtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgICB9XG5cbiAgICBpbmRleCArPSBtYXRjaFswXS5sZW5ndGhcbiAgICBrZXkgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG4gICAgdmFsdWUgPSBtYXRjaFsyXVxuXG4gICAgaWYgKHZhbHVlWzBdID09PSAnXCInKSB7XG4gICAgICAvLyByZW1vdmUgcXVvdGVzIGFuZCBlc2NhcGVzXG4gICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgIC5zbGljZSgxLCB2YWx1ZS5sZW5ndGggLSAxKVxuXG4gICAgICBxdW90ZWRQYWlyUkUudGVzdCh2YWx1ZSkgJiYgKHZhbHVlID0gdmFsdWUucmVwbGFjZShxdW90ZWRQYWlyUkUsICckMScpKVxuICAgIH1cblxuICAgIHJlc3VsdC5wYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZVxuICB9XG5cbiAgaWYgKGluZGV4ICE9PSBoZWFkZXIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0geyBwYXJzZSwgc2FmZVBhcnNlIH1cbm1vZHVsZS5leHBvcnRzLnBhcnNlID0gcGFyc2Vcbm1vZHVsZS5leHBvcnRzLnNhZmVQYXJzZSA9IHNhZmVQYXJzZVxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdENvbnRlbnRUeXBlID0gZGVmYXVsdENvbnRlbnRUeXBlXG4iLCAiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCBwa2cgZnJvbSBcIi4uL3BhY2thZ2UuanNvblwiIGFzc2VydCB7IHR5cGU6IFwianNvblwiIH07XG5cbmltcG9ydCB7IHJlYWRTZXJ2ZXJJbmZvIH0gZnJvbSBcIi4vcmVhZFNlcnZlckluZm9cIjtcbmltcG9ydCB7XG4gIFNhbmRib3hNb2RlLFxuICBPdXRwdXRTY2hlbWFTb3VyY2UsXG4gIFByb21wdFNvdXJjZSxcbiAgcnVuQ29kZXhFeGVjLFxuICBTYWZldHlTdHJhdGVneSxcbn0gZnJvbSBcIi4vcnVuQ29kZXhFeGVjXCI7XG5pbXBvcnQgeyBkcm9wU3VkbyB9IGZyb20gXCIuL2Ryb3BTdWRvXCI7XG5pbXBvcnQgeyBlbnN1cmVBY3Rvckhhc1dyaXRlQWNjZXNzIH0gZnJvbSBcIi4vY2hlY2tBY3RvclBlcm1pc3Npb25zXCI7XG5pbXBvcnQgcGFyc2VBcmdzU3RyaW5nVG9Bcmd2IGZyb20gXCJzdHJpbmctYXJndlwiO1xuaW1wb3J0IHsgd3JpdGVQcm94eUNvbmZpZyB9IGZyb20gXCIuL3dyaXRlUHJveHlDb25maWdcIjtcbmltcG9ydCB7IGNoZWNrT3V0cHV0IH0gZnJvbSBcIi4vY2hlY2tPdXRwdXRcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG4gIHByb2dyYW1cbiAgICAubmFtZShcImNvZGV4LWFjdGlvblwiKVxuICAgIC52ZXJzaW9uKHBrZy52ZXJzaW9uKVxuICAgIC5kZXNjcmlwdGlvbihcIk11bHRpdG9vbCB0byBzdXBwb3J0IG9wZW5haS9jb2RleC1hY3Rpb24uXCIpO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlYWQtc2VydmVyLWluZm9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJSZWFkIHNlcnZlciBpbmZvIGZyb20gdGhlIHJlc3BvbnNlcyBBUEkgcHJveHlcIilcbiAgICAuYXJndW1lbnQoXCI8c2VydmVySW5mb0ZpbGU+XCIsIFwiUGF0aCB0byB0aGUgc2VydmVyIGluZm8gZmlsZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNlcnZlckluZm9GaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIGF3YWl0IHJlYWRTZXJ2ZXJJbmZvKHNlcnZlckluZm9GaWxlKTtcbiAgICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJyZXNvbHZlLWNvZGV4LWhvbWVcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIlJlc29sdmUgdGhlIENvZGV4IGhvbWUgZGlyZWN0b3J5IHdpdGggcHJlY2VkZW5jZTogaW5wdXQsIGVudiwgZGVmYXVsdCAofi8uY29kZXgpXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWNvZGV4LWhvbWUtb3ZlcnJpZGUgPERJUkVDVE9SWT5cIixcbiAgICAgIFwiT3B0aW9uYWwgY29kZXgtaG9tZSBpbnB1dCB2YWx1ZSAobWF5IGJlIGVtcHR5KVwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1zYWZldHktc3RyYXRlZ3kgPHN0cmF0ZWd5PlwiLFxuICAgICAgXCJTYWZldHkgc3RyYXRlZ3kgdG8gdGFrZSBpbnRvIGFjY291bnQgd2hlbiBwaWNraW5nIGRlZmF1bHRzXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWNvZGV4LXVzZXIgPHVzZXI+XCIsXG4gICAgICBcIkNvZGV4IHVzZXIgdG8gY29uc2lkZXIgd2hlbiBzYWZldHkgc3RyYXRlZ3kgaXMgJ3VucHJpdmlsZWdlZC11c2VyJ1wiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tZ2l0aHViLXJ1bi1pZCA8aWQ+XCIsIFwiR2l0SHViIHJ1biBJRFwiKVxuICAgIC5hY3Rpb24oXG4gICAgICBhc3luYyAob3B0aW9uczoge1xuICAgICAgICBjb2RleEhvbWVPdmVycmlkZTogc3RyaW5nO1xuICAgICAgICBzYWZldHlTdHJhdGVneTogc3RyaW5nO1xuICAgICAgICBjb2RleFVzZXI6IHN0cmluZztcbiAgICAgICAgZ2l0aHViUnVuSWQ6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZXR5U3RyYXRlZ3kgPSB0b1NhZmV0eVN0cmF0ZWd5KG9wdGlvbnMuc2FmZXR5U3RyYXRlZ3kpO1xuICAgICAgICBjb25zdCBjb2RleFVzZXIgPSBlbXB0eUFzTnVsbChvcHRpb25zLmNvZGV4VXNlcik7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUNvZGV4SG9tZShcbiAgICAgICAgICBlbXB0eUFzTnVsbChvcHRpb25zLmNvZGV4SG9tZU92ZXJyaWRlKSxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneSxcbiAgICAgICAgICBjb2RleFVzZXIsXG4gICAgICAgICAgb3B0aW9ucy5naXRodWJSdW5JZFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHsgc2V0T3V0cHV0IH0gPSBhd2FpdCBpbXBvcnQoXCJAYWN0aW9ucy9jb3JlXCIpO1xuICAgICAgICBzZXRPdXRwdXQoXCJjb2RleC1ob21lXCIsIHJlc29sdmVkKTtcbiAgICAgICAgY29uc29sZS5sb2coYFJlc29sdmVkIENvZGV4IGhvbWU6ICR7cmVzb2x2ZWR9YCk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJ3cml0ZS1wcm94eS1jb25maWdcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIldyaXRlIHRoZSBPcGVuQUkgUHJveHkgbW9kZWwgcHJvdmlkZXIgY29uZmlnIGludG8gQ09ERVhfSE9NRS9jb25maWcudG9tbFwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tY29kZXgtaG9tZSA8RElSRUNUT1JZPlwiLCBcIlBhdGggdG8gQ29kZXggaG9tZSBkaXJlY3RvcnlcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLXBvcnQgPHBvcnQ+XCIsIFwiUHJveHkgc2VydmVyIHBvcnRcIiwgcGFyc2VJbnRTdHJpY3QpXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhZmV0eS1zdHJhdGVneSA8c3RyYXRlZ3k+XCIsXG4gICAgICBcIlNhZmV0eSBzdHJhdGVneSB0byB1c2UuIE9uZSBvZiAnZHJvcC1zdWRvJywgJ3JlYWQtb25seScsICd1bnByaXZpbGVnZWQtdXNlcicsIG9yICd1bnNhZmUnLlwiXG4gICAgKVxuICAgIC5hY3Rpb24oXG4gICAgICBhc3luYyAob3B0aW9uczoge1xuICAgICAgICBjb2RleEhvbWU6IHN0cmluZztcbiAgICAgICAgcG9ydDogbnVtYmVyO1xuICAgICAgICBzYWZldHlTdHJhdGVneTogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZldHlTdHJhdGVneSA9IHRvU2FmZXR5U3RyYXRlZ3kob3B0aW9ucy5zYWZldHlTdHJhdGVneSk7XG4gICAgICAgIGF3YWl0IHdyaXRlUHJveHlDb25maWcob3B0aW9ucy5jb2RleEhvbWUsIG9wdGlvbnMucG9ydCwgc2FmZXR5U3RyYXRlZ3kpO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiZHJvcC1zdWRvXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiRHJvcHMgc3VkbyBwcml2aWxlZ2VzIGZvciB0aGUgY29uZmlndXJlZCB1c2VyLlwiKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbihcIi0tdXNlciA8dXNlcj5cIiwgXCJVc2VyIHRvIG1vZGlmeVwiKS5kZWZhdWx0KFwicnVubmVyXCIpKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFwiLS1ncm91cCA8Z3JvdXA+XCIsIFwiR3JvdXAgZ3JhbnRpbmcgc3VkbyBwcml2aWxlZ2VzXCIpLmRlZmF1bHQoXG4gICAgICAgIFwic3Vkb1wiXG4gICAgICApXG4gICAgKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbihcIi0tcm9vdC1waGFzZVwiLCBcImludGVybmFsXCIpLmRlZmF1bHQoZmFsc2UpLmhpZGVIZWxwKCkpXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7IHVzZXI6IHN0cmluZzsgZ3JvdXA6IHN0cmluZzsgcm9vdFBoYXNlOiBib29sZWFuIH0pID0+IHtcbiAgICAgICAgYXdhaXQgZHJvcFN1ZG8oe1xuICAgICAgICAgIHVzZXI6IG9wdGlvbnMudXNlcixcbiAgICAgICAgICBncm91cDogb3B0aW9ucy5ncm91cCxcbiAgICAgICAgICByb290UGhhc2U6IG9wdGlvbnMucm9vdFBoYXNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJ1bi1jb2RleC1leGVjXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiSW52b2tlcyBgY29kZXggZXhlY2Agd2l0aCB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzXCIpXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1wcm9tcHQgPHByb21wdD5cIiwgXCJQcm9tcHQgdG8gcGFzcyB0byBgY29kZXggZXhlY2AuXCIpXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXByb21wdC1maWxlIDxGSUxFPlwiLFxuICAgICAgXCJGaWxlIGNvbnRhaW5pbmcgdGhlIHByb21wdCB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtaG9tZSA8RElSRUNUT1JZPlwiLFxuICAgICAgXCJQYXRoIHRvIHRoZSBDb2RleCBDTEkgaG9tZSBkaXJlY3RvcnkgKHdoZXJlIGNvbmZpZyBmaWxlcyBhcmUgc3RvcmVkKS5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLWNkIDxESVJFQ1RPUlk+XCIsIFwiV29ya2luZyBkaXJlY3RvcnkgZm9yIENvZGV4XCIpXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWV4dHJhLWFyZ3MgPGFyZ3M+XCIsXG4gICAgICBcIkFkZGl0aW9uYWwgYXJncyB0byBwYXNzIHRocm91Z2ggdG8gYGNvZGV4IGV4ZWNgIGFzIEpTT04gYXJyYXkgb3Igc2hlbGwgc3RyaW5nLlwiLFxuICAgICAgcGFyc2VFeHRyYUFyZ3NcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1maWxlIDxGSUxFPlwiLFxuICAgICAgXCJQYXRoIHdoZXJlIHRoZSBmaW5hbCBtZXNzYWdlIGZyb20gYGNvZGV4IGV4ZWNgIHdpbGwgYmUgd3JpdHRlbi5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tb3V0cHV0LXNjaGVtYS1maWxlIDxGSUxFPlwiLFxuICAgICAgXCJQYXRoIHRvIGEgc2NoZW1hIGZpbGUgdG8gcGFzcyB0byBgY29kZXggZXhlYyAtLW91dHB1dC1zY2hlbWFgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1vdXRwdXQtc2NoZW1hIDxTQ0hFTUE+XCIsXG4gICAgICBcIklubGluZSBzY2hlbWEgY29udGVudHMgdG8gcGFzcyB0byBgY29kZXggZXhlYyAtLW91dHB1dC1zY2hlbWFgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1zYW5kYm94IDxTQU5EQk9YPlwiLFxuICAgICAgXCJMZWdhY3kgc2FuZGJveCBtb2RlIG92ZXJyaWRlIHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgIChtYXkgYmUgZW1wdHkpLlwiXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tcGVybWlzc2lvbi1wcm9maWxlIDxQUk9GSUxFPlwiLFxuICAgICAgXCJQZXJtaXNzaW9uIHByb2ZpbGUgdG8gc2VsZWN0IHRocm91Z2ggYGRlZmF1bHRfcGVybWlzc2lvbnNgIChtYXkgYmUgZW1wdHkpLlwiLFxuICAgICAgXCJcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLW1vZGVsIDxtb2RlbD5cIiwgXCJNb2RlbCB0aGUgYWdlbnQgc2hvdWxkIHVzZVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tZWZmb3J0IDxlZmZvcnQ+XCIsIFwiUmVhc29uaW5nIGVmZm9ydCB0aGUgYWdlbnQgc2hvdWxkIHVzZVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1zYWZldHktc3RyYXRlZ3kgPHN0cmF0ZWd5PlwiLFxuICAgICAgXCJTYWZldHkgc3RyYXRlZ3kgdG8gdXNlLiBPbmUgb2YgJ2Ryb3Atc3VkbycsICdyZWFkLW9ubHknLCAndW5wcml2aWxlZ2VkLXVzZXInLCBvciAndW5zYWZlJy5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiVXNlciB0byBydW4gY29kZXggZXhlYyBhcyB3aGVuIHVzaW5nIHRoZSAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneS5cIlxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHtcbiAgICAgICAgcHJvbXB0OiBzdHJpbmc7XG4gICAgICAgIHByb21wdEZpbGU6IHN0cmluZztcbiAgICAgICAgY29kZXhIb21lOiBzdHJpbmc7XG4gICAgICAgIGNkOiBzdHJpbmc7XG4gICAgICAgIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgICAgICAgb3V0cHV0RmlsZTogc3RyaW5nO1xuICAgICAgICBvdXRwdXRTY2hlbWFGaWxlOiBzdHJpbmc7XG4gICAgICAgIG91dHB1dFNjaGVtYTogc3RyaW5nO1xuICAgICAgICBzYW5kYm94OiBzdHJpbmc7XG4gICAgICAgIHBlcm1pc3Npb25Qcm9maWxlOiBzdHJpbmc7XG4gICAgICAgIG1vZGVsOiBzdHJpbmc7XG4gICAgICAgIGVmZm9ydDogc3RyaW5nO1xuICAgICAgICBzYWZldHlTdHJhdGVneTogc3RyaW5nO1xuICAgICAgICBjb2RleFVzZXI6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHByb21wdCxcbiAgICAgICAgICBwcm9tcHRGaWxlLFxuICAgICAgICAgIG91dHB1dEZpbGUsXG4gICAgICAgICAgY29kZXhIb21lLFxuICAgICAgICAgIGNkLFxuICAgICAgICAgIGV4dHJhQXJncyxcbiAgICAgICAgICBvdXRwdXRTY2hlbWEsXG4gICAgICAgICAgb3V0cHV0U2NoZW1hRmlsZSxcbiAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgIHBlcm1pc3Npb25Qcm9maWxlLFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIGVmZm9ydCxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneSxcbiAgICAgICAgICBjb2RleFVzZXIsXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9tcHQgPSBlbXB0eUFzTnVsbChwcm9tcHQpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUHJvbXB0RmlsZSA9IGVtcHR5QXNOdWxsKHByb21wdEZpbGUpO1xuICAgICAgICBpZiAobm9ybWFsaXplZFByb21wdCAhPSBudWxsICYmIG5vcm1hbGl6ZWRQcm9tcHRGaWxlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIk9ubHkgb25lIG9mIGBwcm9tcHRgIG9yIGBwcm9tcHQtZmlsZWAgbWF5IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvbXB0U291cmNlOiBQcm9tcHRTb3VyY2U7XG4gICAgICAgIGlmIChub3JtYWxpemVkUHJvbXB0ICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9tcHRTb3VyY2UgPSB7IHR5cGU6IFwiaW5saW5lXCIsIGNvbnRlbnQ6IG5vcm1hbGl6ZWRQcm9tcHQgfTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkUHJvbXB0RmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbXB0U291cmNlID0geyB0eXBlOiBcImZpbGVcIiwgcGF0aDogbm9ybWFsaXplZFByb21wdEZpbGUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkVpdGhlciBgcHJvbXB0YCBvciBgcHJvbXB0LWZpbGVgIG11c3QgYmUgc3BlY2lmaWVkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyB0byBjb2VyY2VzIHRvIG51bGwgZG9lcyBub3Qgd29yayB3aXRoXG4gICAgICAgIC8vIENvbW1hbmRlci5qcydzIHJlcXVpcmVkT3B0aW9uLCBzbyB3ZSBoYXZlIHRvIHBvc3QtcHJvY2VzcyBoZXJlLlxuICAgICAgICBjb25zdCBub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSA9IGVtcHR5QXNOdWxsKG91dHB1dFNjaGVtYUZpbGUpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkT3V0cHV0U2NoZW1hID0gZW1wdHlBc051bGwob3V0cHV0U2NoZW1hKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUgIT0gbnVsbCAmJlxuICAgICAgICAgIG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIk9ubHkgb25lIG9mIGBvdXRwdXQtc2NoZW1hYCBvciBgb3V0cHV0LXNjaGVtYS1maWxlYCBtYXkgYmUgc3BlY2lmaWVkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvdXRwdXRTY2hlbWFTb3VyY2U6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAobm9ybWFsaXplZE91dHB1dFNjaGVtYSAhPSBudWxsKSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hU291cmNlID0ge1xuICAgICAgICAgICAgdHlwZTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgIGNvbnRlbnQ6IG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hU291cmNlID0ge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBwYXRoOiBub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcnVuQ29kZXhFeGVjKHtcbiAgICAgICAgICBwcm9tcHQ6IHByb21wdFNvdXJjZSxcbiAgICAgICAgICBjb2RleEhvbWU6IGVtcHR5QXNOdWxsKGNvZGV4SG9tZSksXG4gICAgICAgICAgY2QsXG4gICAgICAgICAgZXh0cmFBcmdzLFxuICAgICAgICAgIGV4cGxpY2l0T3V0cHV0RmlsZTogZW1wdHlBc051bGwob3V0cHV0RmlsZSksXG4gICAgICAgICAgb3V0cHV0U2NoZW1hOiBvdXRwdXRTY2hlbWFTb3VyY2UsXG4gICAgICAgICAgc2FuZGJveDogdG9PcHRpb25hbFNhbmRib3hNb2RlKHNhbmRib3gpLFxuICAgICAgICAgIHBlcm1pc3Npb25Qcm9maWxlOiBlbXB0eUFzTnVsbChwZXJtaXNzaW9uUHJvZmlsZSksXG4gICAgICAgICAgbW9kZWw6IGVtcHR5QXNOdWxsKG1vZGVsKSxcbiAgICAgICAgICBlZmZvcnQ6IGVtcHR5QXNOdWxsKGVmZm9ydCksXG4gICAgICAgICAgc2FmZXR5U3RyYXRlZ3k6IHRvU2FmZXR5U3RyYXRlZ3koc2FmZXR5U3RyYXRlZ3kpLFxuICAgICAgICAgIGNvZGV4VXNlcjogZW1wdHlBc051bGwoY29kZXhVc2VyKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJjaGVjay13cml0ZS1hY2Nlc3NcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIkNoZWNrcyB0aGF0IHRoZSB0cmlnZ2VyaW5nIGFjdG9yIGhhcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIHJlcG9zaXRvcnlcIlxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgXCItLWFsbG93LWJvdHMgPGJvb2xlYW4+XCIsXG4gICAgICBcIkFsbG93IHRydXN0ZWQgR2l0SHViIGJvdCBhY3RvcnMgdG8gYnlwYXNzIHRoZSB3cml0ZS1hY2Nlc3MgY2hlY2sgKGRlZmF1bHQ6IGZhbHNlKS5cIixcbiAgICAgIHBhcnNlQm9vbGVhbixcbiAgICAgIGZhbHNlXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tYWxsb3ctdXNlcnMgPHVzZXJzPlwiLFxuICAgICAgXCJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBHaXRIdWIgdXNlcm5hbWVzIHdobyBjYW4gcnVuIHRoaXMgYWN0aW9uLCBvciAnKicgdG8gYWxsb3cgYWxsIHVzZXJzLlwiLFxuICAgICAgXCJcIlxuICAgIClcbiAgICAub3B0aW9uKFxuICAgICAgXCItLWFsbG93LWJvdC11c2VycyA8dXNlcnM+XCIsXG4gICAgICBcIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIEdpdEh1YiBib3QgdXNlcm5hbWVzIHRoYXQgY2FuIGJ5cGFzcyB0aGUgd3JpdGUtYWNjZXNzIGNoZWNrLiAnKicgaXMgbm90IHN1cHBvcnRlZC5cIixcbiAgICAgIFwiXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jICh7XG4gICAgICAgIGFsbG93Qm90cyxcbiAgICAgICAgYWxsb3dVc2VycyxcbiAgICAgICAgYWxsb3dCb3RVc2VycyxcbiAgICAgIH06IHtcbiAgICAgICAgYWxsb3dCb3RzOiBib29sZWFuO1xuICAgICAgICBhbGxvd1VzZXJzOiBzdHJpbmc7XG4gICAgICAgIGFsbG93Qm90VXNlcnM6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2Vzcyh7XG4gICAgICAgICAgYWxsb3dCb3RBY3RvcnM6IGFsbG93Qm90cyxcbiAgICAgICAgICBhbGxvd1VzZXJzLFxuICAgICAgICAgIGFsbG93Qm90VXNlcnMsXG4gICAgICAgIH0pO1xuICAgICAgICBzd2l0Y2ggKHJlc3VsdC5zdGF0dXMpIHtcbiAgICAgICAgICBjYXNlIFwiYXBwcm92ZWRcIjoge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEFjdG9yICcke3Jlc3VsdC5hY3Rvcn0nIGlzIHBlcm1pdHRlZCB0byBjb250aW51ZS5gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjoge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBBY3RvciAnJHtyZXN1bHQuYWN0b3J9JyBpcyBub3QgcGVybWl0dGVkIHRvIHJ1biB0aGlzIGFjdGlvbjogJHtyZXN1bHQucmVhc29ufWA7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbS5wYXJzZSgpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUludFN0cmljdCh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKHBhcnNlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW50ZWdlcjogJHt2YWx1ZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4dHJhQXJncyh2YWx1ZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIltcIikpIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlQXJnc1N0cmluZ1RvQXJndih2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9TYWZldHlTdHJhdGVneSh2YWx1ZTogc3RyaW5nKTogU2FmZXR5U3RyYXRlZ3kge1xuICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgY2FzZSBcImRyb3Atc3Vkb1wiOlxuICAgIGNhc2UgXCJyZWFkLW9ubHlcIjpcbiAgICBjYXNlIFwidW5wcml2aWxlZ2VkLXVzZXJcIjpcbiAgICBjYXNlIFwidW5zYWZlXCI6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgc2FmZXR5IHN0cmF0ZWd5OiAke3ZhbHVlfS4gTXVzdCBiZSBvbmUgb2YgJ2Ryb3Atc3VkbycsICdyZWFkLW9ubHknLCAndW5wcml2aWxlZ2VkLXVzZXInLCBvciAndW5zYWZlJy5gXG4gICAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvT3B0aW9uYWxTYW5kYm94TW9kZSh2YWx1ZTogc3RyaW5nKTogU2FuZGJveE1vZGUgfCBudWxsIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGVtcHR5QXNOdWxsKHZhbHVlKTtcbiAgc3dpdGNoIChub3JtYWxpemVkKSB7XG4gICAgY2FzZSBudWxsOlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSBcInJlYWQtb25seVwiOlxuICAgIGNhc2UgXCJ3b3Jrc3BhY2Utd3JpdGVcIjpcbiAgICBjYXNlIFwiZGFuZ2VyLWZ1bGwtYWNjZXNzXCI6XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzYW5kYm94OiAke25vcm1hbGl6ZWR9LiBNdXN0IGJlIG9uZSBvZiAncmVhZC1vbmx5JywgJ3dvcmtzcGFjZS13cml0ZScsIG9yICdkYW5nZXItZnVsbC1hY2Nlc3MnLmBcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1wdHlBc051bGwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA9PSAwID8gbnVsbCA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2xlYW4odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkID0gdmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChbXCJ0cnVlXCIsIFwiMVwiLCBcInllc1wiLCBcInlcIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoW1wiZmFsc2VcIiwgXCIwXCIsIFwibm9cIiwgXCJuXCJdLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBib29sZWFuIHZhbHVlOiAke3ZhbHVlfWApO1xufVxuXG5tYWluKCk7XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb2RleEhvbWUoXG4gIGlucHV0Q29kZXhIb21lOiBzdHJpbmcgfCBudWxsLFxuICBzYWZldHlTdHJhdGVneTogU2FmZXR5U3RyYXRlZ3ksXG4gIGNvZGV4VXNlcjogc3RyaW5nIHwgbnVsbCxcbiAgZ2l0aHViUnVuSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKGlucHV0Q29kZXhIb21lICE9IG51bGwpIHtcbiAgICByZXR1cm4gZXhwYW5kVGlsZGUoaW5wdXRDb2RleEhvbWUpO1xuICB9XG4gIGNvbnN0IGVudkhvbWUgPSBlbXB0eUFzTnVsbChwcm9jZXNzLmVudi5DT0RFWF9IT01FID8/IFwiXCIpO1xuICBpZiAoZW52SG9tZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGVudkhvbWU7XG4gIH1cblxuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwidW5wcml2aWxlZ2VkLXVzZXJcIikge1xuICAgIGlmIChjb2RleFVzZXIgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNvZGV4LXVzZXIgaW5wdXQgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHVzaW5nICd1bnByaXZpbGVnZWQtdXNlcicgc2FmZXR5IHN0cmF0ZWd5IGFuZCBubyBjb2RleC1ob21lIGlzIHNwZWNpZmllZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgZGVyaXZlU2hhcmVkQ29kZXhIb21lRm9yVW5wcml2aWxlZ2VkVXNlcihcbiAgICAgIGNvZGV4VXNlcixcbiAgICAgIGdpdGh1YlJ1bklkXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb2RleEhvbWUgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5jb2RleFwiKTtcbiAgICAvLyBFbnN1cmUgZGlyZWN0b3J5IGV4aXN0cyBmb3IgZG93bnN0cmVhbSBzdGVwcyB0aGF0IHdpbGwgd3JpdGUgZmlsZXMgaGVyZS5cbiAgICBhd2FpdCBmcy5ta2Rpcihjb2RleEhvbWUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHJldHVybiBjb2RleEhvbWU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVyaXZlU2hhcmVkQ29kZXhIb21lRm9yVW5wcml2aWxlZ2VkVXNlcihcbiAgdXNlcjogc3RyaW5nLFxuICBnaXRodWJSdW5JZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBob21lID0gKFxuICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCItdVwiLCB1c2VyLCBcIi0tXCIsIFwicHJpbnRlbnZcIiwgXCJIT01FXCJdKVxuICApLnRyaW0oKTtcbiAgaWYgKCFob21lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIGhvbWUgZGlyZWN0b3J5IGZvciB1c2VyICcke3VzZXJ9Jy5gKTtcbiAgfVxuICBjb25zdCBjb2RleEhvbWUgPSBwYXRoLmpvaW4oaG9tZSwgXCIuY29kZXhcIik7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGF3YWl0IGZzLnN0YXQoY29kZXhIb21lKTtcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBEaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgYW5kIG1heSBjb250YWluIGEgY29uZmlnLnRvbWwgY3JlYXRlZCBieSB0aGVcbiAgICAgIC8vIHVzZXIgKG9yIGEgcHJldmlvdXMgaW52b2NhdGlvbiBvZiBjb2RleC1hY3Rpb24pLCBzbyBhc3N1bWUgaXQnc1xuICAgICAgLy8gY29ycmVjdGx5IHBlcm1pc3Npb25lZC5cbiAgICAgIHJldHVybiBjb2RleEhvbWU7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgc3RhdCBlcnJvcnMgYW5kIHRyeSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeS5cbiAgfVxuXG4gIC8vIFdlIG11c3QgdXNlIHN1ZG8gZm9yIHRoZSBmb2xsb3dpbmcgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBiZWNhdXNlIHdlXG4gIC8vIGFyZSB3cml0aW5nIHRvIHRoZSBob21lIGRpcmVjdG9yeSBvZiBhIGRpZmZlcmVudCB1c2VyLlxuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwibWtkaXJcIiwgY29kZXhIb21lXSk7XG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJjaG93blwiLCBgJHt1c2VyfWAsIGNvZGV4SG9tZV0pO1xuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwiY2htb2RcIiwgXCI3NTVcIiwgY29kZXhIb21lXSk7XG5cbiAgLy8gY29kZXgtcmVzcG9uc2VzLWFwaS1wcm94eSB3aWxsIG5lZWQgdG8gd3JpdGUgdGhlIHNlcnZlciBpbmZvIGZpbGUuXG4gIGNvbnN0IHNlcnZlckluZm9GaWxlID0gcGF0aC5qb2luKGNvZGV4SG9tZSwgYCR7Z2l0aHViUnVuSWR9Lmpzb25gKTtcbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcInRvdWNoXCIsIHNlcnZlckluZm9GaWxlXSk7XG4gIC8vIE1ha2UgdGhlIGZpbGUgd29ybGQtd3JpdGFibGUgZm9yIHRoZSBtb21lbnQsIGJ1dCB0aGlzIHdpbGwgYmUgbG9ja2VkIGRvd25cbiAgLy8gdG8gcmVhZC1vbmx5IGJ5IHJvb3QgYmVmb3JlIHRoZSBhY3Rpb24gY29tcGxldGVzLlxuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwiY2htb2RcIiwgXCI2NjZcIiwgc2VydmVySW5mb0ZpbGVdKTtcblxuICByZXR1cm4gY29kZXhIb21lO1xufVxuXG5mdW5jdGlvbiBleHBhbmRUaWxkZShwOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocCA9PT0gXCJ+XCIpIHtcbiAgICByZXR1cm4gb3MuaG9tZWRpcigpO1xuICB9XG4gIGlmIChwLnN0YXJ0c1dpdGgoXCJ+L1wiKSB8fCBwLnN0YXJ0c1dpdGgoXCJ+XFxcXFwiKSkge1xuICAgIHJldHVybiBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBwLnNsaWNlKDIpKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cbiIsICJpbXBvcnQgY29tbWFuZGVyIGZyb20gJy4vaW5kZXguanMnO1xuXG4vLyB3cmFwcGVyIHRvIHByb3ZpZGUgbmFtZWQgZXhwb3J0cyBmb3IgRVNNLlxuZXhwb3J0IGNvbnN0IHtcbiAgcHJvZ3JhbSxcbiAgY3JlYXRlQ29tbWFuZCxcbiAgY3JlYXRlQXJndW1lbnQsXG4gIGNyZWF0ZU9wdGlvbixcbiAgQ29tbWFuZGVyRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciwgLy8gZGVwcmVjYXRlZCBvbGQgbmFtZVxuICBDb21tYW5kLFxuICBBcmd1bWVudCxcbiAgT3B0aW9uLFxuICBIZWxwLFxufSA9IGNvbW1hbmRlcjtcbiIsICJ7XG4gIFwibmFtZVwiOiBcIkBvcGVuYWkvY29kZXgtYWN0aW9uXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuMC4wXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJHaXRIdWIgQWN0aW9uIHRvIHJ1biBjb2RleCBleGVjIHZpYSB0aGUgQ29kZXggQ0xJIHdpdGggYWNjb21wYW55aW5nIGhlbHBlciBzdGVwc1wiLFxuICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImJ1aWxkXCI6IFwiZXNidWlsZCBzcmMvbWFpbi50cyAtLXNvdXJjZW1hcD1pbmxpbmUgLS1mb3JtYXQ9Y2pzIC0tYnVuZGxlIC0tcGxhdGZvcm09bm9kZSAtLXRhcmdldD1ub2RlMjAgLS1vdXRkaXI9ZGlzdFwiLFxuICAgIFwiY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJwbnBtIHJ1biBidWlsZCAmJiBub2RlIC0tdGVzdCB0ZXN0LyoudGVzdC5tanNcIixcbiAgICBcInRlc3Q6cHJpdmlsZWdlZFwiOiBcInBucG0gcnVuIGJ1aWxkICYmIG5vZGUgLS10ZXN0IHRlc3QvcHJpdmlsZWdlZC8qLnRlc3QubWpzXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFjdGlvbnMvY29yZVwiOiBcIl4xLjExLjFcIixcbiAgICBcIkBvY3Rva2l0L2dyYXBocWxcIjogXCJeOC4yLjJcIixcbiAgICBcIkBvY3Rva2l0L3Jlc3RcIjogXCJeMjEuMS4xXCIsXG4gICAgXCJjb21tYW5kZXJcIjogXCIxNC4wLjFcIixcbiAgICBcInN0cmluZy1hcmd2XCI6IFwiMC4zLjJcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMi43XCIsXG4gICAgXCJlc2J1aWxkXCI6IFwiXjAuMjMuMFwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjQuNVwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDEwLjMzLjArc2hhNTEyLjEwNTY4YmI0YTZhZmI1OGM5ZWIzNjMwZGE5MGNjOTUxNjQxN2FiZWJkM2ZhYmJlNjczOWYwYWU3OTU3MjhkYTE0OTFlOWRiNWE1NDRjNzZhZDhlYjc1NzBmNWM0YmIzZDZjNjM3YjJjYjQxYmZkY2RiNDdmYTgyM2M4NjQ5MzE5XCJcbn1cbiIsICJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCJAYWN0aW9ucy9jb3JlXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcblxuLyoqXG4gKiBJbiB0aGVvcnksIHRoaXMgaXMgbm90IGNhbGxlZCB1bnRpbCBgc2VydmVySW5mb0ZpbGVgIGlzIG5vbi1lbXB0eSwgYnV0IHdlXG4gKiB3aWxsIHBvbGwgaW4gdGhlIHJhcmUgY2FzZSB0aGF0IGl0IHdhcyBhIHBhcnRpYWwgd3JpdGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU2VydmVySW5mbyhzZXJ2ZXJJbmZvRmlsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgMTAwOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShzZXJ2ZXJJbmZvRmlsZSwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSk7XG4gICAgICBjb25zdCB7IHBvcnQgfSA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgICAgaWYgKHR5cGVvZiBwb3J0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb3JlLnNldE91dHB1dChcInBvcnRcIiwgcG9ydC50b1N0cmluZygpKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmVhZGluZyBzZXJ2ZXIgaW5mbzogJHtlcnJvcn1gKTtcbiAgICAgIGF3YWl0IHNsZWVwKDEwMCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgRXJyb3IoYEZhaWxlZCB0byByZWFkIHNlcnZlciBpbmZvIGZyb20gJHtzZXJ2ZXJJbmZvRmlsZX1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQge1xuICBjaG1vZCxcbiAgbWtkaXIsXG4gIG1rZHRlbXAsXG4gIHJlYWRGaWxlLFxuICByZWFscGF0aCxcbiAgcm0sXG4gIHdyaXRlRmlsZSxcbiAgdHlwZSBGaWxlSGFuZGxlLFxufSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBzZXRPdXRwdXQgfSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuaW1wb3J0IHsgZHJvcFN1ZG8sIHZlcmlmeVN1ZG9VbmF2YWlsYWJsZSB9IGZyb20gXCIuL2Ryb3BTdWRvXCI7XG5pbXBvcnQge1xuICBwcmVwYXJlTGludXhDb2RleElkZW50aXR5LFxuICB0eXBlIExpbnV4Q29kZXhJZGVudGl0eSxcbn0gZnJvbSBcIi4vbGludXhEcm9wU3Vkb1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRHYXRlZENvZGV4Q29tbWFuZCxcbiAgZW5kQ2hpbGRJbnB1dCxcbiAgd2FpdEZvckxpbnV4R2F0ZSxcbiAgdHlwZSBHYXRlZENvZGV4Q29tbWFuZCxcbn0gZnJvbSBcIi4vbGludXhEcm9wU3Vkb0dhdGVcIjtcbmltcG9ydCB7IHByZXBhcmVMaW51eE91dHB1dEZpbGUgfSBmcm9tIFwiLi9saW51eE91dHB1dEZpbGVcIjtcblxuZXhwb3J0IHR5cGUgUHJvbXB0U291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImlubGluZVwiO1xuICAgICAgY29udGVudDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTYWZldHlTdHJhdGVneSA9XG4gIHwgXCJkcm9wLXN1ZG9cIlxuICB8IFwicmVhZC1vbmx5XCJcbiAgfCBcInVucHJpdmlsZWdlZC11c2VyXCJcbiAgfCBcInVuc2FmZVwiO1xuXG5leHBvcnQgdHlwZSBTYW5kYm94TW9kZSA9XG4gIHwgXCJyZWFkLW9ubHlcIlxuICB8IFwid29ya3NwYWNlLXdyaXRlXCJcbiAgfCBcImRhbmdlci1mdWxsLWFjY2Vzc1wiO1xuXG50eXBlIFBlcm1pc3Npb25TZWxlY3Rpb24gPVxuICB8IHsgdHlwZTogXCJzYW5kYm94XCI7IG1vZGU6IFNhbmRib3hNb2RlIH1cbiAgfCB7IHR5cGU6IFwicHJvZmlsZVwiOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgT3V0cHV0U2NoZW1hU291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9O1xuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcnVucyBhIGBjb2RleCBleGVjYCBjb21tYW5kLCB3cml0ZXMgdGhlIHByb21wdCB0byBpdHMgc3RhbmRhcmQgaW5wdXQsIGFuZCBwdWJsaXNoZXNcbiAqIHRoZSBjb21tYW5kJ3MgZmluYWwgbWVzc2FnZSBhcyB0aGUgYWN0aW9uIG91dHB1dC5cbiAqXG4gKiBBdXRoZW50aWNhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG91dHNpZGUgdGhpcyBmdW5jdGlvbi4gVGhlIGNvbXBvc2l0ZSBhY3Rpb24gc3RhcnRzIG9yIHJldXNlc1xuICogdGhlIFJlc3BvbnNlcyBBUEkgcHJveHkgYW5kIHdyaXRlcyB0aGUgY29ycmVzcG9uZGluZyBDb2RleCBjb25maWd1cmF0aW9uIGJlZm9yZSBpbnZva2luZyB0aGlzXG4gKiBjb21tYW5kLiBLZWVwaW5nIHRoYXQgc2V0dXAgc2VwYXJhdGUgYWxzbyBsZXRzIHRlc3RzIHB1dCBhIGZha2UgYGNvZGV4YCBleGVjdXRhYmxlIG9uIGBQQVRIYCB0b1xuICogdmVyaWZ5IGNvbW1hbmQgY29uc3RydWN0aW9uIGFuZCBvdXRwdXQgaGFuZGxpbmcgd2l0aG91dCBhbiBBUEkga2V5IG9yIG5ldHdvcmsgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvZGV4RXhlYyh7XG4gIHByb21wdCxcbiAgY29kZXhIb21lLFxuICBjZCxcbiAgZXh0cmFBcmdzLFxuICBleHBsaWNpdE91dHB1dEZpbGUsXG4gIG91dHB1dFNjaGVtYSxcbiAgbW9kZWwsXG4gIGVmZm9ydCxcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIGNvZGV4VXNlcixcbiAgc2FuZGJveCxcbiAgcGVybWlzc2lvblByb2ZpbGUsXG59OiB7XG4gIHByb21wdDogUHJvbXB0U291cmNlO1xuICBjb2RleEhvbWU6IHN0cmluZyB8IG51bGw7XG4gIGNkOiBzdHJpbmc7XG4gIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgZXhwbGljaXRPdXRwdXRGaWxlOiBzdHJpbmcgfCBudWxsO1xuICBvdXRwdXRTY2hlbWE6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGw7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBlZmZvcnQ6IHN0cmluZyB8IG51bGw7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgY29kZXhVc2VyOiBzdHJpbmcgfCBudWxsO1xuICBzYW5kYm94OiBTYW5kYm94TW9kZSB8IG51bGw7XG4gIHBlcm1pc3Npb25Qcm9maWxlOiBzdHJpbmcgfCBudWxsO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgaW5wdXQ6IHN0cmluZztcbiAgc3dpdGNoIChwcm9tcHQudHlwZSkge1xuICAgIGNhc2UgXCJpbmxpbmVcIjpcbiAgICAgIGlucHV0ID0gcHJvbXB0LmNvbnRlbnQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgaW5wdXQgPSBhd2FpdCByZWFkRmlsZShwcm9tcHQucGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGwgPVxuICAgIHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIgPyBjb2RleFVzZXIgOiBudWxsO1xuXG4gIGxldCBvdXRwdXRGaWxlOiBPdXRwdXRGaWxlO1xuICBpZiAoZXhwbGljaXRPdXRwdXRGaWxlICE9IG51bGwpIHtcbiAgICBvdXRwdXRGaWxlID0geyB0eXBlOiBcImV4cGxpY2l0XCIsIGZpbGU6IGV4cGxpY2l0T3V0cHV0RmlsZSB9O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dEZpbGUgPSBhd2FpdCBjcmVhdGVUZW1wT3V0cHV0RmlsZSh7IHJ1bkFzVXNlciB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3V0cHV0U2NoZW1hID0gYXdhaXQgcmVzb2x2ZU91dHB1dFNjaGVtYShcbiAgICBvdXRwdXRTY2hlbWEsXG4gICAgcnVuQXNVc2VyXG4gICk7XG4gIGNvbnN0IHBlcm1pc3Npb25TZWxlY3Rpb24gPSBkZXRlcm1pbmVQZXJtaXNzaW9uU2VsZWN0aW9uKHtcbiAgICBzYWZldHlTdHJhdGVneSxcbiAgICByZXF1ZXN0ZWRTYW5kYm94OiBzYW5kYm94LFxuICAgIHBlcm1pc3Npb25Qcm9maWxlLFxuICAgIGV4dHJhQXJncyxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZFByZWZpeDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBsZXQgbGludXhEcm9wU3Vkb1VzZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBsZXQgbGludXhHYXRlOiBHYXRlZENvZGV4Q29tbWFuZCB8IG51bGwgPSBudWxsO1xuICBsZXQgbGludXhJZGVudGl0eTogTGludXhDb2RleElkZW50aXR5IHwgbnVsbCA9IG51bGw7XG4gIGxldCBsaW51eE91dHB1dEhhbmRsZTogRmlsZUhhbmRsZSB8IG51bGwgPSBudWxsO1xuICBsZXQgZWZmZWN0aXZlQ2QgPSBjZDtcblxuICBsZXQgcGF0aFRvQ29kZXggPSBcImNvZGV4XCI7XG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJkcm9wLXN1ZG9cIiAmJiBwcm9jZXNzLnBsYXRmb3JtID09PSBcImxpbnV4XCIpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgIT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgdHlwZW9mIHByb2Nlc3MuZ2V0Z2lkICE9PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkxpbnV4IGRyb3Atc3VkbyByZXF1aXJlcyBQT1NJWCB1c2VyIGFuZCBncm91cCBBUElzLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1aWQgPSBwcm9jZXNzLmdldHVpZCgpO1xuICAgIGlmICh1aWQgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMaW51eCBkcm9wLXN1ZG8gY2Fubm90IHJ1biBDb2RleCBmcm9tIGEgcnVubmVyIHdob3NlIGRlZmF1bHQgdXNlciBpcyByb290LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHBhdGhUb0NvZGV4ID0gKGF3YWl0IGNoZWNrT3V0cHV0KFtcIi91c3IvYmluL3doaWNoXCIsIFwiY29kZXhcIl0pKS50cmltKCk7XG4gICAgaWYgKCFwYXRoVG9Db2RleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IGZpbmQgJ2NvZGV4JyBpbiBQQVRIXCIpO1xuICAgIH1cblxuICAgIGxpbnV4RHJvcFN1ZG9Vc2VyID0gb3MudXNlckluZm8oKS51c2VybmFtZTtcblxuICAgIGlmIChjb2RleEhvbWUgIT0gbnVsbCkge1xuICAgICAgY29uc3QgYWJzb2x1dGVDb2RleEhvbWUgPSBwYXRoLnJlc29sdmUoY29kZXhIb21lKTtcbiAgICAgIGF3YWl0IG1rZGlyKGFic29sdXRlQ29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvZGV4SG9tZSA9IGF3YWl0IHJlYWxwYXRoKGFic29sdXRlQ29kZXhIb21lKTtcbiAgICAgIGlmIChjb2RleEhvbWUgIT09IGFic29sdXRlQ29kZXhIb21lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTGludXggZHJvcC1zdWRvIHJlZnVzZXMgYSBDb2RleCBob21lIHBhdGggY29udGFpbmluZyBzeW1ib2xpYyBsaW5rczogJyR7YWJzb2x1dGVDb2RleEhvbWV9Jy5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHByZXBhcmVkT3V0cHV0ID0gYXdhaXQgcHJlcGFyZUxpbnV4T3V0cHV0RmlsZShvdXRwdXRGaWxlLmZpbGUpO1xuICAgIG91dHB1dEZpbGUuZmlsZSA9IHByZXBhcmVkT3V0cHV0LmZpbGU7XG4gICAgbGludXhPdXRwdXRIYW5kbGUgPSBwcmVwYXJlZE91dHB1dC5oYW5kbGU7XG4gICAgdHJ5IHtcbiAgICAgIGxpbnV4SWRlbnRpdHkgPSBhd2FpdCBwcmVwYXJlTGludXhDb2RleElkZW50aXR5KHtcbiAgICAgICAgcnVubmVyVWlkOiB1aWQsXG4gICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IGNkLFxuICAgICAgICBjb2RleEhvbWUsXG4gICAgICAgIG91dHB1dEZpbGU6IG91dHB1dEZpbGUuZmlsZSxcbiAgICAgICAgb3V0cHV0U2NoZW1hOiByZXNvbHZlZE91dHB1dFNjaGVtYT8uZmlsZSA/PyBudWxsLFxuICAgICAgICBjb2RleEV4ZWN1dGFibGU6IHBhdGhUb0NvZGV4LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IGxpbnV4T3V0cHV0SGFuZGxlLmNsb3NlKCk7XG4gICAgICBsaW51eE91dHB1dEhhbmRsZSA9IG51bGw7XG4gICAgICBhd2FpdCBjbGVhbnVwT3V0cHV0U2NoZW1hKHJlc29sdmVkT3V0cHV0U2NoZW1hKTtcbiAgICAgIGF3YWl0IGNsZWFudXBUZW1wT3V0cHV0KG91dHB1dEZpbGUsIHJ1bkFzVXNlcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcGF0aFRvQ29kZXggPSBsaW51eElkZW50aXR5LmNvZGV4RXhlY3V0YWJsZTtcbiAgICBlZmZlY3RpdmVDZCA9IGxpbnV4SWRlbnRpdHkud29ya2luZ0RpcmVjdG9yeTtcbiAgfSBlbHNlIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWQtdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXhVc2VyIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgdGhlICd1bnByaXZpbGVnZWQtdXNlcicgc2FmZXR5IHN0cmF0ZWd5LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdlIGFyZSBjdXJyZW50bHkgcnVubmluZyBhcyBhIHByaXZpbGVnZWQgdXNlciwgYnV0IGBjb2RleFVzZXJgIHdpbGwgcnVuXG4gICAgLy8gd2l0aCBhIGRpZmZlcmVudCAkUEFUSCB2YXJpYWJsZSwgc28gd2UgbmVlZCB0byBmaW5kIHRoZSBmdWxsIHBhdGggdG9cbiAgICAvLyBgY29kZXhgLlxuICAgIHBhdGhUb0NvZGV4ID0gKGF3YWl0IGNoZWNrT3V0cHV0KFtcIndoaWNoXCIsIFwiY29kZXhcIl0pKS50cmltKCk7XG4gICAgaWYgKCFwYXRoVG9Db2RleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY291bGQgbm90IGZpbmQgJ2NvZGV4JyBpbiBQQVRIXCIpO1xuICAgIH1cblxuICAgIGNvbW1hbmRQcmVmaXgucHVzaChcInN1ZG9cIiwgXCItdVwiLCBjb2RleFVzZXIsIFwiLS1cIik7XG4gIH1cblxuICBjb25zdCBjb2RleEFyZ3MgPSBbXG4gICAgXCJleGVjXCIsXG4gICAgXCItLXNraXAtZ2l0LXJlcG8tY2hlY2tcIixcbiAgICBcIi0tY2RcIixcbiAgICBlZmZlY3RpdmVDZCxcbiAgICBcIi0tb3V0cHV0LWxhc3QtbWVzc2FnZVwiLFxuICAgIG91dHB1dEZpbGUuZmlsZSxcbiAgXTtcblxuICBpZiAocmVzb2x2ZWRPdXRwdXRTY2hlbWEgIT0gbnVsbCkge1xuICAgIGNvZGV4QXJncy5wdXNoKFwiLS1vdXRwdXQtc2NoZW1hXCIsIHJlc29sdmVkT3V0cHV0U2NoZW1hLmZpbGUpO1xuICB9XG5cbiAgaWYgKG1vZGVsICE9IG51bGwpIHtcbiAgICBjb2RleEFyZ3MucHVzaChcIi0tbW9kZWxcIiwgbW9kZWwpO1xuICB9XG5cbiAgaWYgKGVmZm9ydCAhPSBudWxsKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjY29uZmlnXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjbW9kZWxfcmVhc29uaW5nX2VmZm9ydFxuICAgIGNvZGV4QXJncy5wdXNoKFwiLS1jb25maWdcIiwgYG1vZGVsX3JlYXNvbmluZ19lZmZvcnQ9XCIke2VmZm9ydH1cImApO1xuICB9XG5cbiAgY29kZXhBcmdzLnB1c2goLi4uZXh0cmFBcmdzKTtcblxuICBzd2l0Y2ggKHBlcm1pc3Npb25TZWxlY3Rpb24udHlwZSkge1xuICAgIGNhc2UgXCJzYW5kYm94XCI6XG4gICAgICBjb2RleEFyZ3MucHVzaChcIi0tc2FuZGJveFwiLCBwZXJtaXNzaW9uU2VsZWN0aW9uLm1vZGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInByb2ZpbGVcIjpcbiAgICAgIGNvZGV4QXJncy5wdXNoKFxuICAgICAgICBcIi0tY29uZmlnXCIsXG4gICAgICAgIGBkZWZhdWx0X3Blcm1pc3Npb25zPSR7SlNPTi5zdHJpbmdpZnkocGVybWlzc2lvblNlbGVjdGlvbi5uYW1lKX1gXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBlbnYgPSB7IC4uLnByb2Nlc3MuZW52IH07XG4gIGlmICghZW52LkNPREVYX0lOVEVSTkFMX09SSUdJTkFUT1JfT1ZFUlJJREUpIHtcbiAgICBlbnYuQ09ERVhfSU5URVJOQUxfT1JJR0lOQVRPUl9PVkVSUklERSA9IFwiY29kZXhfZ2l0aHViX2FjdGlvblwiO1xuICB9XG4gIGxldCBleHRyYUVudiA9IFwiXCI7XG4gIGlmIChjb2RleEhvbWUgIT0gbnVsbCkge1xuICAgIGVudi5DT0RFWF9IT01FID0gY29kZXhIb21lO1xuICAgIGV4dHJhRW52ID0gYENPREVYX0hPTUU9JHtjb2RleEhvbWV9IGA7XG4gIH0gZWxzZSBpZiAobGludXhJZGVudGl0eSAhPSBudWxsKSB7XG4gICAgZGVsZXRlIGVudi5DT0RFWF9IT01FO1xuICB9XG5cbiAgbGV0IHByb2dyYW06IHN0cmluZztcbiAgbGV0IGNvbW1hbmQ6IEFycmF5PHN0cmluZz47XG4gIGlmIChsaW51eElkZW50aXR5ICE9IG51bGwpIHtcbiAgICBsaW51eEdhdGUgPSBidWlsZEdhdGVkQ29kZXhDb21tYW5kKHtcbiAgICAgIGlkZW50aXR5OiBsaW51eElkZW50aXR5LFxuICAgICAgY29kZXhBcmdzLFxuICAgIH0pO1xuICAgIHByb2dyYW0gPSBsaW51eEdhdGUucHJvZ3JhbTtcbiAgICBjb21tYW5kID0gbGludXhHYXRlLmFyZ3M7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUnVubmluZyB3aXRoIExpbnV4IGRyb3Atc3VkbyBwcm90ZWN0aW9uOiAke2V4dHJhRW52fSR7cGF0aFRvQ29kZXh9ICR7Y29kZXhBcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gSlNPTi5zdHJpbmdpZnkoYXJnKSlcbiAgICAgICAgLmpvaW4oXCIgXCIpfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZ1bGxDb21tYW5kID0gWy4uLmNvbW1hbmRQcmVmaXgsIHBhdGhUb0NvZGV4LCAuLi5jb2RleEFyZ3NdO1xuICAgIHByb2dyYW0gPSBmdWxsQ29tbWFuZC5zaGlmdCgpITtcbiAgICBjb21tYW5kID0gZnVsbENvbW1hbmQ7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUnVubmluZzogJHtleHRyYUVudn0ke3Byb2dyYW19ICR7Y29tbWFuZFxuICAgICAgICAubWFwKChhcmcpID0+IEpTT04uc3RyaW5naWZ5KGFyZykpXG4gICAgICAgIC5qb2luKFwiIFwiKX1gXG4gICAgKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvZ3JhbSwgY29tbWFuZCwge1xuICAgICAgZW52LFxuICAgICAgc3RkaW86IFtcInBpcGVcIiwgbGludXhHYXRlID09IG51bGwgPyBcImluaGVyaXRcIiA6IFwicGlwZVwiLCBcImluaGVyaXRcIl0sXG4gICAgfSk7XG4gICAgY29uc3QgZ2F0ZVJlYWR5ID1cbiAgICAgIGxpbnV4R2F0ZSA9PSBudWxsXG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgOiB3YWl0Rm9yTGludXhHYXRlKGNoaWxkLCBsaW51eEdhdGUucmVhZHlUb2tlbik7XG4gICAgY29uc3Qgc3Bhd25lZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uY2UoXCJzcGF3blwiLCByZXNvbHZlKTtcbiAgICAgIGNoaWxkLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbXBsZXRlZCA9IG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGQub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICBjaGlsZC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3NwYXduZWQsIGdhdGVSZWFkeV0pO1xuICAgICAgaWYgKGxpbnV4RHJvcFN1ZG9Vc2VyICE9IG51bGwpIHtcbiAgICAgICAgYXdhaXQgZHJvcFN1ZG8oe1xuICAgICAgICAgIHVzZXI6IGxpbnV4RHJvcFN1ZG9Vc2VyLFxuICAgICAgICAgIGdyb3VwOiBcInN1ZG9cIixcbiAgICAgICAgICByb290UGhhc2U6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdmVyaWZ5U3Vkb1VuYXZhaWxhYmxlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZC5leGl0Q29kZSAhPSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtwcm9ncmFtfSBleGl0ZWQgYmVmb3JlIHByaXZpbGVnZSBjbGVhbnVwIGNvbXBsZXRlZCAoY29kZSAke2NoaWxkLmV4aXRDb2RlfSlgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBnYXRlZElucHV0ID1cbiAgICAgICAgbGludXhHYXRlID09IG51bGwgPyBpbnB1dCA6IGAke2xpbnV4R2F0ZS5nb1Rva2VufVxcbiR7aW5wdXR9YDtcbiAgICAgIGF3YWl0IGVuZENoaWxkSW5wdXQoY2hpbGQsIGdhdGVkSW5wdXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEbyBub3QgcmVsZWFzZSB0aGUgcHJvbXB0IHdoZW4gcHJpdmlsZWdlIGNsZWFudXAgZmFpbHMuIENsb3Npbmcgc3RkaW5cbiAgICAgIC8vIGNhdXNlcyBgY29kZXggZXhlY2AgdG8gZXhpdCB3aXRob3V0IGF0dGFja2VyLWNvbnRyb2xsZWQgaW5wdXQuXG4gICAgICBpZiAoY2hpbGQuc3RkaW4gIT0gbnVsbCAmJiAhY2hpbGQuc3RkaW4uZGVzdHJveWVkKSB7XG4gICAgICAgIGNoaWxkLnN0ZGluLm9uKFwiZXJyb3JcIiwgKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgY2hpbGQuc3RkaW4uZW5kKCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBjb21wbGV0ZWQuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBjb21wbGV0ZWQ7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9ncmFtfSBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKTtcbiAgICB9XG4gICAgYXdhaXQgZmluYWxpemVFeGVjdXRpb24ob3V0cHV0RmlsZSwgcnVuQXNVc2VyLCBsaW51eE91dHB1dEhhbmRsZSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgbGludXhPdXRwdXRIYW5kbGU/LmNsb3NlKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICBhd2FpdCBjbGVhbnVwT3V0cHV0U2NoZW1hKHJlc29sdmVkT3V0cHV0U2NoZW1hKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZUV4ZWN1dGlvbihcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsLFxuICBsaW51eE91dHB1dEhhbmRsZTogRmlsZUhhbmRsZSB8IG51bGxcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGxldCBsYXN0TWVzc2FnZTogc3RyaW5nO1xuICAgIGlmIChsaW51eE91dHB1dEhhbmRsZSAhPSBudWxsKSB7XG4gICAgICBsYXN0TWVzc2FnZSA9IGF3YWl0IGxpbnV4T3V0cHV0SGFuZGxlLnJlYWRGaWxlKFwidXRmOFwiKTtcbiAgICB9IGVsc2UgaWYgKHJ1bkFzVXNlciA9PSBudWxsKSB7XG4gICAgICBsYXN0TWVzc2FnZSA9IGF3YWl0IHJlYWRGaWxlKG91dHB1dEZpbGUuZmlsZSwgXCJ1dGY4XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TWVzc2FnZSA9IGF3YWl0IGNoZWNrT3V0cHV0KFtcbiAgICAgICAgXCJzdWRvXCIsXG4gICAgICAgIFwiLXVcIixcbiAgICAgICAgcnVuQXNVc2VyLFxuICAgICAgICBcImNhdFwiLFxuICAgICAgICBvdXRwdXRGaWxlLmZpbGUsXG4gICAgICBdKTtcbiAgICB9XG4gICAgc2V0T3V0cHV0KFwiZmluYWwtbWVzc2FnZVwiLCBsYXN0TWVzc2FnZSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY2xlYW51cFRlbXBPdXRwdXQob3V0cHV0RmlsZSwgcnVuQXNVc2VyKTtcbiAgfVxufVxuXG50eXBlIE91dHB1dEZpbGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZXhwbGljaXRcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJ0ZW1wXCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfTtcblxudHlwZSBSZXNvbHZlZE91dHB1dFNjaGVtYSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJleHBsaWNpdFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRlbXBcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICAgIGRpcjogc3RyaW5nO1xuICAgIH07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBPdXRwdXRGaWxlKHtcbiAgcnVuQXNVc2VyLFxufToge1xuICBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGw7XG59KTogUHJvbWlzZTxPdXRwdXRGaWxlPiB7XG4gIGNvbnN0IGRpciA9IGF3YWl0IGNyZWF0ZVRlbXBEaXIoXCJjb2RleC1leGVjLVwiLCBydW5Bc1VzZXIpO1xuICByZXR1cm4geyB0eXBlOiBcInRlbXBcIiwgZmlsZTogcGF0aC5qb2luKGRpciwgXCJvdXRwdXQubWRcIikgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xlYW51cFRlbXBPdXRwdXQoXG4gIG91dHB1dEZpbGU6IE91dHB1dEZpbGUsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN3aXRjaCAob3V0cHV0RmlsZS50eXBlKSB7XG4gICAgY2FzZSBcImV4cGxpY2l0XCI6XG4gICAgICAvLyBEbyBub3QgZGVsZXRlIHVzZXItc3BlY2lmaWVkIG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidGVtcFwiOiB7XG4gICAgICBjb25zdCB7IGZpbGUgfSA9IG91dHB1dEZpbGU7XG4gICAgICBpZiAocnVuQXNVc2VyID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpO1xuICAgICAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJybVwiLCBcIi1yZlwiLCBwYXRoLmRpcm5hbWUoZmlsZSldKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlT3V0cHV0U2NoZW1hKFxuICBzY2hlbWE6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGwsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTxSZXNvbHZlZE91dHB1dFNjaGVtYSB8IG51bGw+IHtcbiAgaWYgKHNjaGVtYSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgY2FzZSBcImZpbGVcIjpcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZXhwbGljaXRcIiwgZmlsZTogc2NoZW1hLnBhdGggfTtcbiAgICBjYXNlIFwiaW5saW5lXCI6IHtcbiAgICAgIGNvbnN0IGRpciA9IGF3YWl0IGNyZWF0ZVRlbXBEaXIoXCJjb2RleC1vdXRwdXQtc2NoZW1hLVwiLCBydW5Bc1VzZXIpO1xuICAgICAgY29uc3QgZmlsZSA9IHBhdGguam9pbihkaXIsIFwic2NoZW1hLmpzb25cIik7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZSwgc2NoZW1hLmNvbnRlbnQpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0ZW1wXCIsIGZpbGUsIGRpciB9O1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwT3V0cHV0U2NoZW1hKFxuICBzY2hlbWE6IFJlc29sdmVkT3V0cHV0U2NoZW1hIHwgbnVsbFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzY2hlbWEgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICBjYXNlIFwiZXhwbGljaXRcIjpcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidGVtcFwiOlxuICAgICAgYXdhaXQgcm0oc2NoZW1hLmRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBEaXIoXG4gIHByZWZpeDogc3RyaW5nLFxuICBydW5Bc1VzZXI6IHN0cmluZyB8IG51bGxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChydW5Bc1VzZXIgPT0gbnVsbCkge1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgcHJlZml4KSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcbiAgICAgICAgXCJzdWRvXCIsXG4gICAgICAgIFwiLXVcIixcbiAgICAgICAgcnVuQXNVc2VyLFxuICAgICAgICBcIm1rdGVtcFwiLFxuICAgICAgICBcIi1kXCIsXG4gICAgICAgIFwiLXRcIixcbiAgICAgICAgYCR7cHJlZml4fS5YWFhYWFhgLFxuICAgICAgXSlcbiAgICApLnRyaW0oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVQZXJtaXNzaW9uU2VsZWN0aW9uKHtcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIHJlcXVlc3RlZFNhbmRib3gsXG4gIHBlcm1pc3Npb25Qcm9maWxlLFxuICBleHRyYUFyZ3MsXG59OiB7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgcmVxdWVzdGVkU2FuZGJveDogU2FuZGJveE1vZGUgfCBudWxsO1xuICBwZXJtaXNzaW9uUHJvZmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgZXh0cmFBcmdzOiBBcnJheTxzdHJpbmc+O1xufSk6IFBlcm1pc3Npb25TZWxlY3Rpb24ge1xuICBpZiAocGVybWlzc2lvblByb2ZpbGUgIT0gbnVsbCAmJiByZXF1ZXN0ZWRTYW5kYm94ICE9IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImBwZXJtaXNzaW9uLXByb2ZpbGVgIGFuZCBgc2FuZGJveGAgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gUGVybWlzc2lvbiBwcm9maWxlcyBkbyBub3QgY29tcG9zZSB3aXRoIGxlZ2FjeSBzYW5kYm94IHNldHRpbmdzLlwiXG4gICAgKTtcbiAgfVxuICBpZiAocGVybWlzc2lvblByb2ZpbGUgIT0gbnVsbCAmJiBzYWZldHlTdHJhdGVneSA9PT0gXCJyZWFkLW9ubHlcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYHBlcm1pc3Npb24tcHJvZmlsZWAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdGhlIGByZWFkLW9ubHlgIHNhZmV0eSBzdHJhdGVneSBiZWNhdXNlIHRoYXQgc3RyYXRlZ3kgZm9yY2VzIHRoZSBsZWdhY3kgcmVhZC1vbmx5IHNhbmRib3guXCJcbiAgICApO1xuICB9XG4gIGlmIChwZXJtaXNzaW9uUHJvZmlsZSAhPSBudWxsICYmIGV4dHJhQXJnc1NlbGVjdFNhbmRib3goZXh0cmFBcmdzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiYHBlcm1pc3Npb24tcHJvZmlsZWAgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYSBzYW5kYm94IG92ZXJyaWRlIGluIGBjb2RleC1hcmdzYC5cIlxuICAgICk7XG4gIH1cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInJlYWQtb25seVwiKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJzYW5kYm94XCIsIG1vZGU6IFwicmVhZC1vbmx5XCIgfTtcbiAgfVxuICBpZiAocGVybWlzc2lvblByb2ZpbGUgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IHR5cGU6IFwicHJvZmlsZVwiLCBuYW1lOiBwZXJtaXNzaW9uUHJvZmlsZSB9O1xuICB9XG4gIHJldHVybiB7IHR5cGU6IFwic2FuZGJveFwiLCBtb2RlOiByZXF1ZXN0ZWRTYW5kYm94ID8/IFwid29ya3NwYWNlLXdyaXRlXCIgfTtcbn1cblxuZnVuY3Rpb24gZXh0cmFBcmdzU2VsZWN0U2FuZGJveChhcmdzOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIHJldHVybiBhcmdzLnNvbWUoKGFyZywgaW5kZXgpID0+IHtcbiAgICBpZiAoXG4gICAgICBhcmcgPT09IFwiLS1zYW5kYm94XCIgfHxcbiAgICAgIGFyZy5zdGFydHNXaXRoKFwiLS1zYW5kYm94PVwiKSB8fFxuICAgICAgYXJnID09PSBcIi1zXCIgfHxcbiAgICAgIGFyZy5zdGFydHNXaXRoKFwiLXM9XCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGFyZyA9PT0gXCItLWNvbmZpZ1wiIHx8IGFyZyA9PT0gXCItY1wiKSB7XG4gICAgICByZXR1cm4gY29uZmlnT3ZlcnJpZGVTZWxlY3RzU2FuZGJveChhcmdzW2luZGV4ICsgMV0pO1xuICAgIH1cbiAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLWNvbmZpZz1cIikpIHtcbiAgICAgIHJldHVybiBjb25maWdPdmVycmlkZVNlbGVjdHNTYW5kYm94KGFyZy5zbGljZShcIi0tY29uZmlnPVwiLmxlbmd0aCkpO1xuICAgIH1cbiAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItYz1cIikpIHtcbiAgICAgIHJldHVybiBjb25maWdPdmVycmlkZVNlbGVjdHNTYW5kYm94KGFyZy5zbGljZShcIi1jPVwiLmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25maWdPdmVycmlkZVNlbGVjdHNTYW5kYm94KG92ZXJyaWRlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5ID0gb3ZlcnJpZGU/LnRyaW1TdGFydCgpLnNwbGl0KC9bPS5dLywgMSlbMF07XG4gIHJldHVybiBrZXkgPT09IFwic2FuZGJveF9tb2RlXCIgfHwga2V5ID09PSBcInNhbmRib3hfd29ya3NwYWNlX3dyaXRlXCI7XG59XG4iLCAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tPdXRwdXQoY29tbWFuZDogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtwcm9nLCAuLi5hcmdzXSA9IGNvbW1hbmQ7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24ocHJvZywgYXJncywge1xuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaW5oZXJpdFwiXSxcbiAgICB9KTtcblxuICAgIHByb2Mub24oXCJlcnJvclwiLCByZWplY3QpO1xuXG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XG4gICAgcHJvYy5zdGRvdXQub24oXCJkYXRhXCIsIChjaHVuaykgPT4ge1xuICAgICAgb3V0cHV0ICs9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgfSk7XG5cbiAgICBwcm9jLm9uKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCR7cHJvZ30gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcblxuaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgY2FwdHVyZT86IGJvb2xlYW47XG4gIGlnbm9yZUZhaWx1cmU/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRXhlY1Jlc3VsdCB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BTdWRvT3B0aW9ucyB7XG4gIHVzZXI6IHN0cmluZztcbiAgZ3JvdXA6IHN0cmluZztcbiAgcm9vdFBoYXNlOiBib29sZWFuO1xufVxuXG5jb25zdCBMSU5VWF9QTEFURk9STSA9IFwibGludXhcIjtcbmNvbnN0IE1BQ09TX1BMQVRGT1JNID0gXCJkYXJ3aW5cIjtcbmNvbnN0IFNVRE9fUEFUSCA9IFwiL3Vzci9iaW4vc3Vkb1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZHJvcFN1ZG8ob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybTtcbiAgaWYgKCFbTElOVVhfUExBVEZPUk0sIE1BQ09TX1BMQVRGT1JNXS5pbmNsdWRlcyhwbGF0Zm9ybSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgT1MgZm9yIGRyb3Atc3VkbyBzYWZldHkgc3RyYXRlZ3k6ICR7cGxhdGZvcm19YFxuICAgICk7XG4gIH1cblxuICBjb25zdCB7IHJvb3RQaGFzZSB9ID0gb3B0aW9ucztcbiAgaWYgKHJvb3RQaGFzZSkge1xuICAgIGF3YWl0IGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9ucyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpO1xuICAvLyBgc3VkbyAtS2AgaW52YWxpZGF0ZXMgY2FjaGVkIGNyZWRlbnRpYWxzIGJ1dCBleGl0cyBub24temVybyB3aGVuIG5vIHRpY2tldFxuICAvLyBleGlzdHMgeWV0LiBJZ25vcmUgdGhhdCBmYWlsdXJlIHNvIGZyZXNoIHJ1bm5lcnMgZG9uJ3QgYmxvdyB1cC5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoU1VET19QQVRILCBbXCItS1wiXSwgeyBpZ25vcmVGYWlsdXJlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IGV4ZWNBcmdzID0gWy4uLnByb2Nlc3MuZXhlY0FyZ3ZdO1xuICBjb25zdCBzY3JpcHRQYXRoID0gcHJvY2Vzcy5hcmd2WzFdO1xuICAvLyBSZS1lbnRlciB0aGlzIGNvbW1hbmQgdW5kZXIgc3VkbyBzbyB0aGUgcHJpdmlsZWdlLWRyb3BwaW5nIHdvcmsgaGFwcGVucyBpbiBhXG4gIC8vIHNpbmdsZSBwbGFjZSByZWdhcmRsZXNzIG9mIHRoZSBob3N0IHBsYXRmb3JtLlxuICBhd2FpdCBleGVjQ29tbWFuZChTVURPX1BBVEgsIFtcbiAgICBcIi1uXCIsXG4gICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAuLi5leGVjQXJncyxcbiAgICBzY3JpcHRQYXRoLFxuICAgIFwiZHJvcC1zdWRvXCIsXG4gICAgXCItLXJvb3QtcGhhc2VcIixcbiAgICBcIi0tdXNlclwiLFxuICAgIG9wdGlvbnMudXNlcixcbiAgICBcIi0tZ3JvdXBcIixcbiAgICBvcHRpb25zLmdyb3VwLFxuICBdKTtcblxuICAvLyBJbnZhbGlkYXRlIHRoZSBzdWRvIHRpY2tldCBhZ2FpbjsgaWdub3JlIGZhaWx1cmVzIGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgLy8gYWJvdmUgKHNvbWUgZW52aXJvbm1lbnRzIHJldHVybiBhbiBlcnJvciB3aGVuIG5vIHRpbWVzdGFtcCBleGlzdHMpLlxuICBhd2FpdCBleGVjQ29tbWFuZChTVURPX1BBVEgsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlTdWRvVW5hdmFpbGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNDb21tYW5kKFNVRE9fUEFUSCwgW1wiLW5cIiwgXCJ0cnVlXCJdLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBpZ25vcmVGYWlsdXJlOiB0cnVlLFxuICB9KTtcbiAgaWYgKHJlc3VsdC5jb2RlID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc3VkbyB0byBiZSBkaXNhYmxlZCwgYnV0IHN1ZG8gc3VjY2VlZGVkLlwiKTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIkNvbmZpcm1lZCBzdWRvIHByaXZpbGVnZSBpcyBkaXNhYmxlZC5cIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgPT09IFwiZnVuY3Rpb25cIiAmJiBwcm9jZXNzLmdldHVpZCgpICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcC1zdWRvIHJvb3QgcGhhc2UgbXVzdCBydW4gYXMgcm9vdC5cIik7XG4gIH1cblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXG4gIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIGNhc2UgTElOVVhfUExBVEZPUk06IHtcbiAgICAgIGlmIChhd2FpdCBpc1VzZXJJbkdyb3VwKG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJkZWx1c2VyXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkZWx1c2VyXCIsIFtvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXBdKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBVc2VkICdkZWx1c2VyICR7b3B0aW9ucy51c2VyfSAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJncGFzc3dkXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJncGFzc3dkXCIsIFtcIi1kXCIsIG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cF0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFVzZWQgJ2dwYXNzd2QgLWQgJHtvcHRpb25zLnVzZXJ9ICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmVpdGhlciBkZWx1c2VyIG5vciBncGFzc3dkIGF2YWlsYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtvcHRpb25zLnVzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtvcHRpb25zLmdyb3VwfSBncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBNQUNPU19QTEFURk9STToge1xuICAgICAgaWYgKGF3YWl0IGlzVXNlckluR3JvdXAob3B0aW9ucy51c2VyLCBvcHRpb25zLmdyb3VwKSkge1xuICAgICAgICBhd2FpdCBleGVjQ29tbWFuZChcImRzZWRpdGdyb3VwXCIsIFtcbiAgICAgICAgICBcIi1vXCIsXG4gICAgICAgICAgXCJlZGl0XCIsXG4gICAgICAgICAgXCItZFwiLFxuICAgICAgICAgIG9wdGlvbnMudXNlcixcbiAgICAgICAgICBcIi10XCIsXG4gICAgICAgICAgXCJ1c2VyXCIsXG4gICAgICAgICAgb3B0aW9ucy5ncm91cCxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBVc2VkICdkc2VkaXRncm91cCAtbyBlZGl0IC1kICR7b3B0aW9ucy51c2VyfSAtdCB1c2VyICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICApO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAke29wdGlvbnMudXNlcn0gaXMgbm90IGEgbWVtYmVyIG9mIHRoZSAke29wdGlvbnMuZ3JvdXB9IGdyb3VwLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcC1zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwcm9jZXNzLnBsYXRmb3JtfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCByZW1vdmVVc2VyRnJvbVN1ZG9lcnNEKG9wdGlvbnMudXNlcik7XG4gIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzLmQgcmVxdWlyaW5nIGNoYW5nZXMuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzdWRvZXJzTWVzc2FnZSA9IGF3YWl0IHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShcbiAgICBcIi9ldGMvc3Vkb2Vyc1wiLFxuICAgIG9wdGlvbnMudXNlclxuICApO1xuICBpZiAoc3Vkb2Vyc01lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhzdWRvZXJzTWVzc2FnZSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzIHJlcXVpcmluZyBjaGFuZ2VzLmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgY29uc29sZS5sb2coYCR7b3B0aW9ucy51c2VyfSBhbHJlYWR5IGxhY2tzIHN1ZG8gcHJpdmlsZWdlcy5gKTtcbiAgfVxuXG4gIGNvbnN0IGdyb3Vwc0FmdGVyID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItR25cIiwgb3B0aW9ucy51c2VyXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gIH0pO1xuICBjb25zb2xlLmxvZyhcbiAgICBgR3JvdXBzIGZvciAke29wdGlvbnMudXNlcn0gYWZ0ZXIgY2xlYW51cDogJHtncm91cHNBZnRlci5zdGRvdXQudHJpbSgpfWBcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChTVURPX1BBVEgsIFtcIi1uXCIsIFwidHJ1ZVwiXSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQ6IHBhc3N3b3JkbGVzcyBzdWRvIG5vdCBhdmFpbGFibGUuXCIpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzVXNlckluR3JvdXAodXNlcjogc3RyaW5nLCBncm91cDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNDb21tYW5kKFwiaWRcIiwgW1wiLW5HXCIsIHVzZXJdLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBpZ25vcmVGYWlsdXJlOiB0cnVlLFxuICB9KTtcbiAgaWYgKHJlc3VsdC5jb2RlICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGdyb3VwcyA9IHJlc3VsdC5zdGRvdXRcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUubGVuZ3RoID4gMCk7XG4gIHJldHVybiBncm91cHMuaW5jbHVkZXMoZ3JvdXApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21tYW5kRXhpc3RzKGJpbmFyeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNDb21tYW5kKFwic2hcIiwgW1wiLWNcIiwgYGNvbW1hbmQgLXYgJHtiaW5hcnl9YF0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gIH0pO1xuICByZXR1cm4gcmVzdWx0LmNvZGUgPT09IDA7XG59XG5cbi8qKlxuICogU3RyaXBzIG5vbi1jb21tZW50IGVudHJpZXMgZ3JhbnRpbmcgc3VkbyB0byBgdXNlcmAgYWNyb3NzIGAvZXRjL3N1ZG9lcnMuZGBcbiAqIGZpbGVzLlxuICpcbiAqIFN0cmF0ZWd5OlxuICogICAtIGVudW1lcmF0ZSByZWd1bGFyIGZpbGVzIHVuZGVyIGAvZXRjL3N1ZG9lcnMuZGBcbiAqICAgLSByZW1vdmUgbGluZXMgd2hvc2UgZmlyc3QgdG9rZW4gbWF0Y2hlcyB0aGUgdGFyZ2V0IHVzZXIgd2hpbGUga2VlcGluZ1xuICogICAgIGNvbW1lbnRzL2JsYW5rIGxpbmVzIGludGFjdFxuICogICAtIHJld3JpdGUgZmlsZXMgaW4tcGxhY2Ugd2l0aCBvcmlnaW5hbCBuZXdsaW5lIHN0eWxlIGFuZCBwZXJtaXNzaW9uc1xuICogICAtIHJlcG9ydCB3aGljaCBmaWxlcyB3ZXJlIGNoYW5nZWQgc28gY2FsbGVycyBjYW4gc3VyZmFjZSB1c2VmdWwgbG9nc1xuICovXG5hc3luYyBmdW5jdGlvbiByZW1vdmVVc2VyRnJvbVN1ZG9lcnNEKHVzZXI6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICBjb25zdCBzdWRvZXJzRGlyID0gXCIvZXRjL3N1ZG9lcnMuZFwiO1xuICBsZXQgZW50cmllczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IGRpckVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHN1ZG9lcnNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICBlbnRyaWVzID0gZGlyRW50cmllc1xuICAgICAgLmZpbHRlcigoZGlyZW50KSA9PiBkaXJlbnQuaXNGaWxlKCkpXG4gICAgICAubWFwKChkaXJlbnQpID0+IHBhdGguam9pbihzdWRvZXJzRGlyLCBkaXJlbnQubmFtZSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVudHJ5UGF0aCBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShlbnRyeVBhdGgsIHVzZXIpO1xuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXNzYWdlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICB1c2VyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICBsZXQgc3RhdHM7XG4gIGxldCBvcmlnaW5hbDogc3RyaW5nO1xuICB0cnkge1xuICAgIHN0YXRzID0gYXdhaXQgZnMuc3RhdChmaWxlUGF0aCk7XG4gICAgb3JpZ2luYWwgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld2xpbmUgPSBvcmlnaW5hbC5pbmNsdWRlcyhcIlxcclxcblwiKSA/IFwiXFxyXFxuXCIgOiBcIlxcblwiO1xuICBjb25zdCBlbmRzV2l0aE5ld2xpbmUgPVxuICAgIG9yaWdpbmFsLmVuZHNXaXRoKFwiXFxuXCIpIHx8IG9yaWdpbmFsLmVuZHNXaXRoKFwiXFxyXFxuXCIpO1xuICBjb25zdCByYXdMaW5lcyA9IG9yaWdpbmFsLnNwbGl0KC9cXHI/XFxuLyk7XG4gIGlmIChyYXdMaW5lcy5sZW5ndGggPiAwICYmIHJhd0xpbmVzW3Jhd0xpbmVzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XG4gICAgcmF3TGluZXMucG9wKCk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJlZExpbmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHJhd0xpbmVzKSB7XG4gICAgY29uc3QgdHJpbW1lZExlYWRpbmcgPSBsaW5lLnRyaW1TdGFydCgpO1xuICAgIGlmICh0cmltbWVkTGVhZGluZy5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh0cmltbWVkTGVhZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZpbHRlcmVkTGluZXMucHVzaChsaW5lKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbnMgPSB0cmltbWVkTGVhZGluZy5zcGxpdCgvXFxzKy8pO1xuICAgIGlmICh0b2tlbnNbMF0gPT09IHVzZXIpIHtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZpbHRlcmVkTGluZXMucHVzaChsaW5lKTtcbiAgfVxuXG4gIGlmICghY2hhbmdlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVidWlsdCA9IGZpbHRlcmVkTGluZXMuam9pbihuZXdsaW5lKSArIChlbmRzV2l0aE5ld2xpbmUgPyBuZXdsaW5lIDogXCJcIik7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCByZWJ1aWx0LCBcInV0ZjhcIik7XG4gICAgYXdhaXQgZnMuY2htb2QoZmlsZVBhdGgsIHN0YXRzLm1vZGUgJiAwbzc3Nyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGBSZW1vdmVkICR7dXNlcn0gZW50cnkgZnJvbSAke2ZpbGVQYXRofWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNDb21tYW5kKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IEFycmF5PHN0cmluZz4sXG4gIG9wdGlvbnM6IEV4ZWNPcHRpb25zID0ge31cbik6IFByb21pc2U8RXhlY1Jlc3VsdD4ge1xuICBjb25zdCBjYXB0dXJlID0gb3B0aW9ucy5jYXB0dXJlID8/IGZhbHNlO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKGNvbW1hbmQsIGFyZ3MsIHtcbiAgICBzdGRpbzogY2FwdHVyZSA/IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdIDogXCJpbmhlcml0XCIsXG4gIH0pO1xuXG4gIGxldCBzdGRvdXQgPSBcIlwiO1xuICBsZXQgc3RkZXJyID0gXCJcIjtcblxuICBpZiAoY2FwdHVyZSAmJiBjaGlsZC5zdGRvdXQpIHtcbiAgICBjaGlsZC5zdGRvdXQuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gY2h1bms7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoY2FwdHVyZSAmJiBjaGlsZC5zdGRlcnIpIHtcbiAgICBjaGlsZC5zdGRlcnIuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBzdGRlcnIgKz0gY2h1bms7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8RXhlY1Jlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgY29uc3QgZXhpdENvZGUgPSBjb2RlID8/IDA7XG4gICAgICBpZiAoZXhpdENvZGUgIT09IDAgJiYgIW9wdGlvbnMuaWdub3JlRmFpbHVyZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXCIgXCIpfSAoZXhpdCBjb2RlICR7ZXhpdENvZGV9KWBcbiAgICAgICAgKTtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuY29kZSA9IGV4aXRDb2RlO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5zdGRvdXQgPSBzdGRvdXQ7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZGVyciA9IHN0ZGVycjtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7IGNvZGU6IGV4aXRDb2RlLCBzdGRvdXQsIHN0ZGVyciB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmludGVyZmFjZSBFeGVjRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc3Rkb3V0OiBzdHJpbmc7XG4gIHN0ZGVycjogc3RyaW5nO1xufVxuIiwgImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGxzdGF0LCByZWFscGF0aCwgc3RhdCB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBkaXNjb3Zlck5lc3RlZEdpdFJlcG9zaXRvcmllcyB9IGZyb20gXCIuL2xpbnV4R2l0UmVwb3NpdG9yaWVzXCI7XG5pbXBvcnQge1xuICBFTlZfUEFUSCxcbiAgRklORF9QQVRILFxuICBHSVRfUEFUSCxcbiAgSURfUEFUSCxcbiAgTk9MT0dJTl9QQVRILFxuICBTRVRGQUNMX1BBVEgsXG4gIFNFVFBSSVZfUEFUSCxcbiAgU0hFTExfUEFUSCxcbiAgU1VET19QQVRILFxuICBVU0VSQUREX1BBVEgsXG4gIFVTRVJERUxfUEFUSCxcbn0gZnJvbSBcIi4vbGludXhTeXN0ZW1QYXRoc1wiO1xuXG5jb25zdCBUUlVTVEVEX0VYRUNVVEFCTEVTID0gW1xuICBTVURPX1BBVEgsXG4gIFNFVFBSSVZfUEFUSCxcbiAgU0VURkFDTF9QQVRILFxuICBGSU5EX1BBVEgsXG4gIEVOVl9QQVRILFxuICBJRF9QQVRILFxuICBHSVRfUEFUSCxcbiAgVVNFUkFERF9QQVRILFxuICBVU0VSREVMX1BBVEgsXG4gIE5PTE9HSU5fUEFUSCxcbiAgU0hFTExfUEFUSCxcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGludXhDb2RleElkZW50aXR5IHtcbiAgdXNlcjogc3RyaW5nO1xuICB1aWQ6IG51bWJlcjtcbiAgZ2lkOiBudW1iZXI7XG4gIGhvbWU6IHN0cmluZztcbiAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nO1xuICBjb2RleEV4ZWN1dGFibGU6IHN0cmluZztcbiAgZ2l0U2FmZURpcmVjdG9yaWVzOiBBcnJheTxzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgUHJlcGFyZUxpbnV4Q29kZXhJZGVudGl0eU9wdGlvbnMge1xuICBydW5uZXJVaWQ6IG51bWJlcjtcbiAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nO1xuICBjb2RleEhvbWU6IHN0cmluZyB8IG51bGw7XG4gIG91dHB1dEZpbGU6IHN0cmluZztcbiAgb3V0cHV0U2NoZW1hOiBzdHJpbmcgfCBudWxsO1xuICBjb2RleEV4ZWN1dGFibGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcGVyLWludm9jYXRpb24gTGludXggYWNjb3VudCBhbmQgZ3JhbnRzIGl0IGFjY2VzcyBvbmx5IHRvIHRoZSBwYXRocyBDb2RleCBuZWVkcy5cbiAqIFRoZSBhY2NvdW50IGRlbGliZXJhdGVseSBkaWZmZXJzIGZyb20gdGhlIHJ1bm5lciBpZGVudGl0eSBzbyBDb2RleCBjYW5ub3Qgc2lnbmFsIG9yIHB0cmFjZVxuICogcnVubmVyLW93bmVkIHByb2Nlc3NlcyB0aGF0IHN0aWxsIGNhcnJ5IHN1cHBsZW1lbnRhcnkgZ3JvdXBzIHN1Y2ggYXMgYGRvY2tlcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlTGludXhDb2RleElkZW50aXR5KHtcbiAgcnVubmVyVWlkLFxuICB3b3JraW5nRGlyZWN0b3J5LFxuICBjb2RleEhvbWUsXG4gIG91dHB1dEZpbGUsXG4gIG91dHB1dFNjaGVtYSxcbiAgY29kZXhFeGVjdXRhYmxlLFxufTogUHJlcGFyZUxpbnV4Q29kZXhJZGVudGl0eU9wdGlvbnMpOiBQcm9taXNlPExpbnV4Q29kZXhJZGVudGl0eT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChUUlVTVEVEX0VYRUNVVEFCTEVTLm1hcCh2ZXJpZnlUcnVzdGVkRXhlY3V0YWJsZSkpO1xuXG4gIGNvbnN0IHJlc29sdmVkV29ya2luZ0RpcmVjdG9yeSA9IGF3YWl0IHJlc29sdmVEaXJlY3Rvcnkod29ya2luZ0RpcmVjdG9yeSk7XG4gIGNvbnN0IHJlc29sdmVkQ29kZXhFeGVjdXRhYmxlID0gYXdhaXQgcmVzb2x2ZUNvZGV4RXhlY3V0YWJsZShjb2RleEV4ZWN1dGFibGUpO1xuICBjb25zdCB3b3Jrc3BhY2VBY2Nlc3MgPSBhd2FpdCBkaXNjb3ZlcldvcmtzcGFjZVJvb3RzKFxuICAgIHJlc29sdmVkV29ya2luZ0RpcmVjdG9yeVxuICApO1xuICBjb25zdCB3b3Jrc3BhY2VSb290cyA9IFsuLi53b3Jrc3BhY2VBY2Nlc3Mucm9vdHNdO1xuICBpZiAoY29kZXhIb21lICE9IG51bGwpIHtcbiAgICB3b3Jrc3BhY2VSb290cy5wdXNoKGF3YWl0IHJlc29sdmVEaXJlY3RvcnkoY29kZXhIb21lKSk7XG4gIH1cbiAgY29uc3QgYWNjZXNzUm9vdHMgPSByZW1vdmVOZXN0ZWRQYXRocyh3b3Jrc3BhY2VSb290cyk7XG4gIGNvbnN0IHVzZXIgPSBjcmVhdGVJZGVudGl0eU5hbWUocnVubmVyVWlkKTtcbiAgY29uc3QgaG9tZSA9IGAvaG9tZS8ke3VzZXJ9YDtcbiAgbGV0IGNyZWF0ZWQgPSBmYWxzZTtcbiAgbGV0IGFjY2Vzc0dyYW50ZWQgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGF3YWl0IHJ1blJvb3RDb21tYW5kKFVTRVJBRERfUEFUSCwgW1xuICAgICAgXCItLXN5c3RlbVwiLFxuICAgICAgXCItLWNyZWF0ZS1ob21lXCIsXG4gICAgICBcIi0tdXNlci1ncm91cFwiLFxuICAgICAgXCItLWhvbWUtZGlyXCIsXG4gICAgICBob21lLFxuICAgICAgXCItLXNoZWxsXCIsXG4gICAgICBOT0xPR0lOX1BBVEgsXG4gICAgICB1c2VyLFxuICAgIF0pO1xuICAgIGNyZWF0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3QgdWlkID0gYXdhaXQgcmVhZE51bWVyaWNJZGVudGl0eSh1c2VyLCBcIi11XCIpO1xuICAgIGNvbnN0IGdpZCA9IGF3YWl0IHJlYWROdW1lcmljSWRlbnRpdHkodXNlciwgXCItZ1wiKTtcbiAgICBpZiAodWlkID09PSAwIHx8IHVpZCA9PT0gcnVubmVyVWlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBMaW51eCBkcm9wLXN1ZG8gY3JlYXRlZCBhbiBpbnZhbGlkIENvZGV4IFVJRCAoJHt1aWR9KTsgZXhwZWN0ZWQgYSBub24tcm9vdCBpZGVudGl0eSBkaXN0aW5jdCBmcm9tIHJ1bm5lciBVSUQgJHtydW5uZXJVaWR9LmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGdyb3VwcyA9IGF3YWl0IHJlYWRJZGVudGl0eUdyb3Vwcyh1c2VyKTtcbiAgICBpZiAoZ3JvdXBzLmxlbmd0aCAhPT0gMSB8fCBncm91cHNbMF0gIT09IGdpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIHRoZSBkZWRpY2F0ZWQgQ29kZXggYWNjb3VudCB0byBoYXZlIG9ubHkgcHJpbWFyeSBHSUQgJHtnaWR9OyBmb3VuZCAke2dyb3Vwcy5qb2luKFwiLCBcIil9LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYWNjZXNzR3JhbnRlZCA9IHRydWU7XG4gICAgYXdhaXQgZ3JhbnRGaWxlQWNjZXNzKG91dHB1dEZpbGUsIHVpZCwgXCJydy1cIiwgcnVubmVyVWlkKTtcbiAgICBpZiAob3V0cHV0U2NoZW1hICE9IG51bGwpIHtcbiAgICAgIGF3YWl0IGdyYW50RmlsZUFjY2VzcyhvdXRwdXRTY2hlbWEsIHVpZCwgXCJyLS1cIiwgcnVubmVyVWlkKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByb290IG9mIGFjY2Vzc1Jvb3RzKSB7XG4gICAgICBhd2FpdCBncmFudFRyZWVBY2Nlc3Mocm9vdCwgdWlkLCBydW5uZXJVaWQpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFByZXBhcmVkIGRlZGljYXRlZCBMaW51eCBDb2RleCBpZGVudGl0eSAke3VzZXJ9ICh1aWQgJHt1aWR9LCBnaWQgJHtnaWR9KS5gXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgdXNlcixcbiAgICAgIHVpZCxcbiAgICAgIGdpZCxcbiAgICAgIGhvbWUsXG4gICAgICB3b3JraW5nRGlyZWN0b3J5OiByZXNvbHZlZFdvcmtpbmdEaXJlY3RvcnksXG4gICAgICBjb2RleEV4ZWN1dGFibGU6IHJlc29sdmVkQ29kZXhFeGVjdXRhYmxlLFxuICAgICAgZ2l0U2FmZURpcmVjdG9yaWVzOiB3b3Jrc3BhY2VBY2Nlc3MuZ2l0U2FmZURpcmVjdG9yaWVzLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGNyZWF0ZWQgJiYgIWFjY2Vzc0dyYW50ZWQpIHtcbiAgICAgIGF3YWl0IHJ1blJvb3RDb21tYW5kKFVTRVJERUxfUEFUSCwgW1wiLS1yZW1vdmVcIiwgdXNlcl0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoY3JlYXRlZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTGludXggZHJvcC1zdWRvIHNldHVwIGZhaWxlZCBhZnRlciBncmFudGluZyBBQ0xzOyBsZWF2aW5nIGxvY2tlZCBhY2NvdW50ICcke3VzZXJ9JyBpbiBwbGFjZSB0byBwcmV2ZW50IFVJRCByZXVzZS5gXG4gICAgICApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNjb3ZlcldvcmtzcGFjZVJvb3RzKFxuICB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmdcbik6IFByb21pc2U8e1xuICByb290czogQXJyYXk8c3RyaW5nPjtcbiAgZ2l0U2FmZURpcmVjdG9yaWVzOiBBcnJheTxzdHJpbmc+O1xufT4ge1xuICBjb25zdCByb290cyA9IFt3b3JraW5nRGlyZWN0b3J5XTtcbiAgY29uc3QgZ2l0U2FmZURpcmVjdG9yaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGdpdGh1YldvcmtzcGFjZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9XT1JLU1BBQ0U7XG4gIGlmIChnaXRodWJXb3Jrc3BhY2UgIT0gbnVsbCAmJiBnaXRodWJXb3Jrc3BhY2UubGVuZ3RoID4gMCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZFdvcmtzcGFjZSA9IGF3YWl0IHJlc29sdmVEaXJlY3RvcnkoZ2l0aHViV29ya3NwYWNlKTtcbiAgICAgIGlmIChpc1BhdGhXaXRoaW4od29ya2luZ0RpcmVjdG9yeSwgcmVzb2x2ZWRXb3Jrc3BhY2UpKSB7XG4gICAgICAgIHJvb3RzLnB1c2gocmVzb2x2ZWRXb3Jrc3BhY2UpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSByZXF1ZXN0ZWQgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBHSVRIVUJfV09SS1NQQUNFIGlzIHN0YWxlLlxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdpdFJvb3QgPSBhd2FpdCBydW5Db21tYW5kKFxuICAgIEdJVF9QQVRILFxuICAgIFtcIi1DXCIsIHdvcmtpbmdEaXJlY3RvcnksIFwicmV2LXBhcnNlXCIsIFwiLS1zaG93LXRvcGxldmVsXCJdLFxuICAgIHRydWVcbiAgKTtcbiAgaWYgKGdpdFJvb3QuY29kZSA9PT0gMCAmJiBnaXRSb290LnN0ZG91dC50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNvbHZlZEdpdFJvb3QgPSBhd2FpdCByZXNvbHZlRGlyZWN0b3J5KGdpdFJvb3Quc3Rkb3V0LnRyaW0oKSk7XG4gICAgICBpZiAoaXNQYXRoV2l0aGluKHdvcmtpbmdEaXJlY3RvcnksIHJlc29sdmVkR2l0Um9vdCkpIHtcbiAgICAgICAgcm9vdHMucHVzaChyZXNvbHZlZEdpdFJvb3QpO1xuICAgICAgICBnaXRTYWZlRGlyZWN0b3JpZXMuYWRkKHJlc29sdmVkR2l0Um9vdCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBgd29ya2luZ0RpcmVjdG9yeWAgaXMgc3RpbGwgc3VmZmljaWVudCBmb3Igbm9uLXN0YW5kYXJkIEdpdCBsYXlvdXRzLlxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNhZmVEaXJlY3RvcnlSb290cyA9IHJlbW92ZU5lc3RlZFBhdGhzKHJvb3RzKTtcbiAgZm9yIChjb25zdCByb290IG9mIHNhZmVEaXJlY3RvcnlSb290cykge1xuICAgIGdpdFNhZmVEaXJlY3Rvcmllcy5hZGQocm9vdCk7XG4gICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIGF3YWl0IGRpc2NvdmVyTmVzdGVkR2l0UmVwb3NpdG9yaWVzKHJvb3QpKSB7XG4gICAgICBnaXRTYWZlRGlyZWN0b3JpZXMuYWRkKHJlcG9zaXRvcnkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHJvb3RzLFxuICAgIGdpdFNhZmVEaXJlY3RvcmllczogWy4uLmdpdFNhZmVEaXJlY3Rvcmllc10sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdyYW50VHJlZUFjY2VzcyhcbiAgcm9vdDogc3RyaW5nLFxuICB1aWQ6IG51bWJlcixcbiAgcnVubmVyVWlkOiBudW1iZXJcbik6IFByb21pc2U8dm9pZD4ge1xuICBhc3NlcnRTYWZlUmVjdXJzaXZlUm9vdChyb290KTtcbiAgY29uc3Qgcm9vdFN0YXRzID0gYXdhaXQgc3RhdChyb290KTtcbiAgaWYgKHJvb3RTdGF0cy51aWQgIT09IHJ1bm5lclVpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVxdWlyZXMgYWNjZXNzIHJvb3RzIHRvIGJlIG93bmVkIGJ5IHJ1bm5lciBVSUQgJHtydW5uZXJVaWR9OyAnJHtyb290fScgaXMgb3duZWQgYnkgVUlEICR7cm9vdFN0YXRzLnVpZH0uYFxuICAgICk7XG4gIH1cbiAgYXdhaXQgZ3JhbnRUcmF2ZXJzZUFjY2Vzcyhyb290LCB1aWQsIHJ1bm5lclVpZCk7XG4gIGF3YWl0IHJ1blJvb3RDb21tYW5kKEZJTkRfUEFUSCwgW1xuICAgIFwiLVBcIixcbiAgICByb290LFxuICAgIFwiLXhkZXZcIixcbiAgICBcIihcIixcbiAgICBcIi10eXBlXCIsXG4gICAgXCJkXCIsXG4gICAgXCItb1wiLFxuICAgIFwiKFwiLFxuICAgIFwiLXR5cGVcIixcbiAgICBcImZcIixcbiAgICBcIi1saW5rc1wiLFxuICAgIFwiMVwiLFxuICAgIFwiKVwiLFxuICAgIFwiKVwiLFxuICAgIFwiLXVpZFwiLFxuICAgIFN0cmluZyhydW5uZXJVaWQpLFxuICAgIFwiLWV4ZWNcIixcbiAgICBTRVRGQUNMX1BBVEgsXG4gICAgXCItbVwiLFxuICAgIGB1OiR7dWlkfTpyd1gsdToke3J1bm5lclVpZH06cndYYCxcbiAgICBcIi0tXCIsXG4gICAgXCJ7fVwiLFxuICAgIFwiK1wiLFxuICBdKTtcbiAgYXdhaXQgcnVuUm9vdENvbW1hbmQoRklORF9QQVRILCBbXG4gICAgXCItUFwiLFxuICAgIHJvb3QsXG4gICAgXCIteGRldlwiLFxuICAgIFwiLXR5cGVcIixcbiAgICBcImRcIixcbiAgICBcIi11aWRcIixcbiAgICBTdHJpbmcocnVubmVyVWlkKSxcbiAgICBcIi1leGVjXCIsXG4gICAgU0VURkFDTF9QQVRILFxuICAgIFwiLW1cIixcbiAgICBgdToke3VpZH06cnd4LHU6JHtydW5uZXJVaWR9OnJ3eCxkOnU6JHtydW5uZXJVaWR9OnJ3eGAsXG4gICAgXCItLVwiLFxuICAgIFwie31cIixcbiAgICBcIitcIixcbiAgXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdyYW50RmlsZUFjY2VzcyhcbiAgZmlsZTogc3RyaW5nLFxuICB1aWQ6IG51bWJlcixcbiAgcGVybWlzc2lvbnM6IFwicnctXCIgfCBcInItLVwiLFxuICBydW5uZXJVaWQ6IG51bWJlclxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFic29sdXRlRmlsZSA9IHBhdGgucmVzb2x2ZShmaWxlKTtcbiAgY29uc3QgbGlua1N0YXRzID0gYXdhaXQgbHN0YXQoYWJzb2x1dGVGaWxlKTtcbiAgY29uc3QgY2Fub25pY2FsRmlsZSA9IGF3YWl0IHJlYWxwYXRoKGFic29sdXRlRmlsZSk7XG4gIGlmIChsaW5rU3RhdHMuaXNTeW1ib2xpY0xpbmsoKSB8fCBjYW5vbmljYWxGaWxlICE9PSBhYnNvbHV0ZUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTGludXggZHJvcC1zdWRvIHJlZnVzZXMgYSBmaWxlIHBhdGggY29udGFpbmluZyBzeW1ib2xpYyBsaW5rczogJyR7YWJzb2x1dGVGaWxlfScuYFxuICAgICk7XG4gIH1cbiAgY29uc3QgZmlsZVN0YXRzID0gYXdhaXQgc3RhdChjYW5vbmljYWxGaWxlKTtcbiAgaWYgKCFmaWxlU3RhdHMuaXNGaWxlKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTGludXggZHJvcC1zdWRvIGV4cGVjdGVkIGEgcmVndWxhciBmaWxlIGJ1dCBmb3VuZCAnJHthYnNvbHV0ZUZpbGV9Jy5gXG4gICAgKTtcbiAgfVxuICBpZiAoZmlsZVN0YXRzLnVpZCAhPT0gcnVubmVyVWlkKSB7XG4gICAgaWYgKChmaWxlU3RhdHMubW9kZSAmIDBvMDA0KSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGludXggZHJvcC1zdWRvIHJlZnVzZXMgdG8gdHJhbnNmZXIgZ3JvdXAtZGVyaXZlZCBmaWxlIGFjY2VzcyBmb3IgJyR7YWJzb2x1dGVGaWxlfScuIFRoZSBmaWxlIG11c3QgYmUgb3duZWQgYnkgcnVubmVyIFVJRCAke3J1bm5lclVpZH0gb3IgYWxyZWFkeSBiZSB3b3JsZC1yZWFkYWJsZS5gXG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCBncmFudFRyYXZlcnNlQWNjZXNzKGFic29sdXRlRmlsZSwgdWlkLCBydW5uZXJVaWQpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZmlsZVN0YXRzLm5saW5rICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYExpbnV4IGRyb3Atc3VkbyByZWZ1c2VzIHRvIGdyYW50IGFjY2VzcyB0byBhIGZpbGUgd2l0aCBtdWx0aXBsZSBoYXJkIGxpbmtzOiAnJHthYnNvbHV0ZUZpbGV9Jy5gXG4gICAgKTtcbiAgfVxuICBhd2FpdCBncmFudFRyYXZlcnNlQWNjZXNzKGFic29sdXRlRmlsZSwgdWlkLCBydW5uZXJVaWQpO1xuICBhd2FpdCBydW5Sb290Q29tbWFuZChTRVRGQUNMX1BBVEgsIFtcbiAgICBcIi1tXCIsXG4gICAgYHU6JHt1aWR9OiR7cGVybWlzc2lvbnN9YCxcbiAgICBcIi0tXCIsXG4gICAgY2Fub25pY2FsRmlsZSxcbiAgXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVDb2RleEV4ZWN1dGFibGUoZmlsZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWJzb2x1dGVGaWxlID0gcGF0aC5yZXNvbHZlKGZpbGUpO1xuICBjb25zdCBjYW5vbmljYWxGaWxlID0gYXdhaXQgcmVhbHBhdGgoYWJzb2x1dGVGaWxlKTtcbiAgY29uc3QgZmlsZVN0YXRzID0gYXdhaXQgc3RhdChjYW5vbmljYWxGaWxlKTtcbiAgaWYgKCFmaWxlU3RhdHMuaXNGaWxlKCkgfHwgKGZpbGVTdGF0cy5tb2RlICYgMG8wMDUpICE9PSAwbzAwNSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVxdWlyZXMgdGhlIENvZGV4IGV4ZWN1dGFibGUgdG8gcmVzb2x2ZSB0byBhIHJlZ3VsYXIgZmlsZSB0aGF0IGlzIGFscmVhZHkgd29ybGQtcmVhZGFibGUgYW5kIGV4ZWN1dGFibGU6ICcke2Fic29sdXRlRmlsZX0nLmBcbiAgICApO1xuICB9XG5cbiAgbGV0IGN1cnJlbnQgPSBwYXRoLmRpcm5hbWUoY2Fub25pY2FsRmlsZSk7XG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBkaXJlY3RvcnlTdGF0cyA9IGF3YWl0IHN0YXQoY3VycmVudCk7XG4gICAgaWYgKCFkaXJlY3RvcnlTdGF0cy5pc0RpcmVjdG9yeSgpIHx8IChkaXJlY3RvcnlTdGF0cy5tb2RlICYgMG8wMDEpID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVxdWlyZXMgZXZlcnkgQ29kZXggZXhlY3V0YWJsZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGFscmVhZHkgYmUgd29ybGQtc2VhcmNoYWJsZTogJyR7Y3VycmVudH0nLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IHBhdGguZGlybmFtZShjdXJyZW50KTtcbiAgICBpZiAocGFyZW50ID09PSBjdXJyZW50KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY3VycmVudCA9IHBhcmVudDtcbiAgfVxuXG4gIHJldHVybiBjYW5vbmljYWxGaWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBncmFudFRyYXZlcnNlQWNjZXNzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgdWlkOiBudW1iZXIsXG4gIHJ1bm5lclVpZDogbnVtYmVyXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYW5jZXN0b3JzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGxldCBjdXJyZW50ID0gcGF0aC5kaXJuYW1lKHBhdGgucmVzb2x2ZSh0YXJnZXQpKTtcbiAgd2hpbGUgKGN1cnJlbnQgIT09IHBhdGgucGFyc2UoY3VycmVudCkucm9vdCkge1xuICAgIGNvbnN0IGRpcmVjdG9yeVN0YXRzID0gYXdhaXQgc3RhdChjdXJyZW50KTtcbiAgICBpZiAoIWRpcmVjdG9yeVN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExpbnV4IGRyb3Atc3VkbyBleHBlY3RlZCBhIGRpcmVjdG9yeSB3aGlsZSBjaGVja2luZyAnJHtjdXJyZW50fScuYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeVN0YXRzLnVpZCA9PT0gcnVubmVyVWlkKSB7XG4gICAgICBhbmNlc3RvcnMucHVzaChjdXJyZW50KTtcbiAgICB9IGVsc2UgaWYgKChkaXJlY3RvcnlTdGF0cy5tb2RlICYgMG8wMDEpID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVmdXNlcyB0byB0cmFuc2ZlciBncm91cC1kZXJpdmVkIGRpcmVjdG9yeSBhY2Nlc3MgdGhyb3VnaCAnJHtjdXJyZW50fScuIEl0IG11c3QgYmUgb3duZWQgYnkgcnVubmVyIFVJRCAke3J1bm5lclVpZH0gb3IgYWxyZWFkeSBiZSB3b3JsZC1zZWFyY2hhYmxlLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBwYXRoLmRpcm5hbWUoY3VycmVudCk7XG4gIH1cbiAgaWYgKGFuY2VzdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgYXdhaXQgcnVuUm9vdENvbW1hbmQoU0VURkFDTF9QQVRILCBbXG4gICAgICBcIi1tXCIsXG4gICAgICBgdToke3VpZH06LS14YCxcbiAgICAgIFwiLS1cIixcbiAgICAgIC4uLmFuY2VzdG9ycyxcbiAgICBdKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkTnVtZXJpY0lkZW50aXR5KFxuICB1c2VyOiBzdHJpbmcsXG4gIGZsYWc6IFwiLXVcIiB8IFwiLWdcIlxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQ29tbWFuZChJRF9QQVRILCBbZmxhZywgdXNlcl0pO1xuICBjb25zdCB2YWx1ZSA9IE51bWJlcihyZXN1bHQuc3Rkb3V0LnRyaW0oKSk7XG4gIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHJlc29sdmUgJHtmbGFnfSBmb3IgZGVkaWNhdGVkIHVzZXIgJyR7dXNlcn0nLmApO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZElkZW50aXR5R3JvdXBzKHVzZXI6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8bnVtYmVyPj4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5Db21tYW5kKElEX1BBVEgsIFtcIi1HXCIsIHVzZXJdKTtcbiAgY29uc3QgZ3JvdXBzID0gcmVzdWx0LnN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAoTnVtYmVyKTtcbiAgaWYgKGdyb3Vwcy5zb21lKChncm91cCkgPT4gIU51bWJlci5pc1NhZmVJbnRlZ2VyKGdyb3VwKSB8fCBncm91cCA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcmVzb2x2ZSBncm91cHMgZm9yIGRlZGljYXRlZCB1c2VyICcke3VzZXJ9Jy5gKTtcbiAgfVxuICByZXR1cm4gWy4uLm5ldyBTZXQoZ3JvdXBzKV07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeVRydXN0ZWRFeGVjdXRhYmxlKGZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY2Fub25pY2FsRmlsZTogc3RyaW5nO1xuICBsZXQgZmlsZVN0YXRzO1xuICB0cnkge1xuICAgIGNhbm9uaWNhbEZpbGUgPSBhd2FpdCByZWFscGF0aChmaWxlKTtcbiAgICBmaWxlU3RhdHMgPSBhd2FpdCBzdGF0KGNhbm9uaWNhbEZpbGUpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIHRydXN0ZWQgZXhlY3V0YWJsZSAnJHtmaWxlfScuYFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgICFmaWxlU3RhdHMuaXNGaWxlKCkgfHxcbiAgICBmaWxlU3RhdHMudWlkICE9PSAwIHx8XG4gICAgKGZpbGVTdGF0cy5tb2RlICYgMG8xMTEpID09PSAwIHx8XG4gICAgKGZpbGVTdGF0cy5tb2RlICYgMG8wMjIpICE9PSAwXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVxdWlyZXMgJyR7ZmlsZX0nIHRvIHJlc29sdmUgdG8gYSByb290LW93bmVkIGV4ZWN1dGFibGUgdGhhdCBpcyBub3QgZ3JvdXAtIG9yIHdvcmxkLXdyaXRhYmxlLmBcbiAgICApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVEaXJlY3RvcnkoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhYnNvbHV0ZURpcmVjdG9yeSA9IHBhdGgucmVzb2x2ZShkaXJlY3RvcnkpO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlYWxwYXRoKGFic29sdXRlRGlyZWN0b3J5KTtcbiAgaWYgKHJlc29sdmVkICE9PSBhYnNvbHV0ZURpcmVjdG9yeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVmdXNlcyBhIGRpcmVjdG9yeSBwYXRoIGNvbnRhaW5pbmcgc3ltYm9saWMgbGlua3M6ICcke2Fic29sdXRlRGlyZWN0b3J5fScuYFxuICAgICk7XG4gIH1cbiAgY29uc3QgZGlyZWN0b3J5U3RhdHMgPSBhd2FpdCBzdGF0KHJlc29sdmVkKTtcbiAgaWYgKCFkaXJlY3RvcnlTdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYExpbnV4IGRyb3Atc3VkbyBleHBlY3RlZCBhIGRpcmVjdG9yeSBidXQgZm91bmQgJyR7cmVzb2x2ZWR9Jy5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5lc3RlZFBhdGhzKHBhdGhzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8c3RyaW5nPiB7XG4gIGNvbnN0IHNvcnRlZCA9IFsuLi5uZXcgU2V0KHBhdGhzLm1hcCgodmFsdWUpID0+IHBhdGgucmVzb2x2ZSh2YWx1ZSkpKV0uc29ydChcbiAgICAobGVmdCwgcmlnaHQpID0+IGxlZnQubGVuZ3RoIC0gcmlnaHQubGVuZ3RoXG4gICk7XG4gIHJldHVybiBzb3J0ZWQuZmlsdGVyKFxuICAgIChjYW5kaWRhdGUsIGluZGV4KSA9PlxuICAgICAgIXNvcnRlZFxuICAgICAgICAuc2xpY2UoMCwgaW5kZXgpXG4gICAgICAgIC5zb21lKChwYXJlbnQpID0+IGlzUGF0aFdpdGhpbihjYW5kaWRhdGUsIHBhcmVudCkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUGF0aFdpdGhpbihjYW5kaWRhdGU6IHN0cmluZywgcGFyZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKHBhcmVudCwgY2FuZGlkYXRlKTtcbiAgcmV0dXJuIChcbiAgICByZWxhdGl2ZSA9PT0gXCJcIiB8fFxuICAgICghcmVsYXRpdmUuc3RhcnRzV2l0aChcIi4uXCIpICYmICFwYXRoLmlzQWJzb2x1dGUocmVsYXRpdmUpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTYWZlUmVjdXJzaXZlUm9vdChyb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKHJvb3QgPT09IHBhdGgucGFyc2Uocm9vdCkucm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiTGludXggZHJvcC1zdWRvIHJlZnVzZXMgdG8gZ3JhbnQgcmVjdXJzaXZlIGFjY2VzcyB0byB0aGUgZmlsZXN5c3RlbSByb290LlwiXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJZGVudGl0eU5hbWUocnVubmVyVWlkOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzdWZmaXggPSByYW5kb21CeXRlcyg0KS50b1N0cmluZyhcImhleFwiKTtcbiAgY29uc3QgcHJlZml4ID0gYGNvZGV4YWN0aW9uJHtydW5uZXJVaWR9YC5zbGljZSgwLCAyMyk7XG4gIHJldHVybiBgJHtwcmVmaXh9eCR7c3VmZml4fWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blJvb3RDb21tYW5kKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIGFyZ3M6IEFycmF5PHN0cmluZz4sXG4gIGlnbm9yZUZhaWx1cmUgPSBmYWxzZVxuKTogUHJvbWlzZTxDb21tYW5kUmVzdWx0PiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFxuICAgIFNVRE9fUEFUSCxcbiAgICBbXCItblwiLCBcIi0tXCIsIGNvbW1hbmQsIC4uLmFyZ3NdLFxuICAgIGlnbm9yZUZhaWx1cmVcbiAgKTtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRSZXN1bHQge1xuICBjb2RlOiBudW1iZXI7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBBcnJheTxzdHJpbmc+LFxuICBpZ25vcmVGYWlsdXJlID0gZmFsc2Vcbik6IFByb21pc2U8Q29tbWFuZFJlc3VsdD4ge1xuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8Q29tbWFuZFJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgIH0pO1xuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNoaWxkLnN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZG91dCArPSBjaHVuaztcbiAgICB9KTtcbiAgICBjaGlsZC5zdGRlcnIuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICBzdGRlcnIgKz0gY2h1bms7XG4gICAgfSk7XG4gICAgY2hpbGQub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgY2hpbGQub25jZShcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBjb25zdCBleGl0Q29kZSA9IGNvZGUgPz8gMTtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhaWdub3JlRmFpbHVyZSkge1xuICAgICAgICByZWplY3QoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmR9ICR7YXJncy5qb2luKFwiIFwiKX0gKGV4aXQgY29kZSAke2V4aXRDb2RlfSk6ICR7c3RkZXJyLnRyaW0oKX1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgY29kZTogZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHJlYWxwYXRoIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEZJTkRfUEFUSCB9IGZyb20gXCIuL2xpbnV4U3lzdGVtUGF0aHNcIjtcbmNvbnN0IE1BWF9HSVRfRElSRUNUT1JZX09VVFBVVF9CWVRFUyA9IDY0ICogMTAyNDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2NvdmVyTmVzdGVkR2l0UmVwb3NpdG9yaWVzKFxuICByb290OiBzdHJpbmdcbik6IFByb21pc2U8QXJyYXk8c3RyaW5nPj4ge1xuICBjb25zdCBvdXRwdXQgPSBhd2FpdCBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKEZJTkRfUEFUSCwgW1xuICAgICAgXCItUFwiLFxuICAgICAgcm9vdCxcbiAgICAgIFwiLXhkZXZcIixcbiAgICAgIFwiLW5hbWVcIixcbiAgICAgIFwiLmdpdFwiLFxuICAgICAgXCIoXCIsXG4gICAgICBcIi10eXBlXCIsXG4gICAgICBcImZcIixcbiAgICAgIFwiLW9cIixcbiAgICAgIFwiLXR5cGVcIixcbiAgICAgIFwiZFwiLFxuICAgICAgXCIpXCIsXG4gICAgICBcIi1wcmludGZcIixcbiAgICAgIFwiJWhcXFxcMFwiLFxuICAgICAgXCItcHJ1bmVcIixcbiAgICBdKTtcbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcbiAgICBsZXQgZXhjZWVkZWRMaW1pdCA9IGZhbHNlO1xuICAgIGNoaWxkLnN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgc3Rkb3V0ICs9IGNodW5rO1xuICAgICAgaWYgKFxuICAgICAgICAhZXhjZWVkZWRMaW1pdCAmJlxuICAgICAgICBCdWZmZXIuYnl0ZUxlbmd0aChzdGRvdXQpID4gTUFYX0dJVF9ESVJFQ1RPUllfT1VUUFVUX0JZVEVTXG4gICAgICApIHtcbiAgICAgICAgZXhjZWVkZWRMaW1pdCA9IHRydWU7XG4gICAgICAgIGNoaWxkLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNoaWxkLnN0ZGVyci5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHN0ZGVyci5sZW5ndGggPCA0MDk2KSB7XG4gICAgICAgIHN0ZGVyciArPSBjaHVuaztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjaGlsZC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBjaGlsZC5vbmNlKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmIChleGNlZWRlZExpbWl0KSB7XG4gICAgICAgIHJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgTGludXggZHJvcC1zdWRvIGZvdW5kIHRvbyBtYW55IG5lc3RlZCBHaXQgcmVwb3NpdG9yaWVzIGJlbmVhdGggJyR7cm9vdH0nLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBMaW51eCBkcm9wLXN1ZG8gY291bGQgbm90IGRpc2NvdmVyIG5lc3RlZCBHaXQgcmVwb3NpdG9yaWVzIGJlbmVhdGggJyR7cm9vdH0nOiAke3N0ZGVyci50cmltKCl9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgcmVwb3NpdG9yaWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIG91dHB1dC5zcGxpdChcIlxcMFwiKSkge1xuICAgIGlmIChjYW5kaWRhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYWJzb2x1dGVDYW5kaWRhdGUgPSBwYXRoLnJlc29sdmUoY2FuZGlkYXRlKTtcbiAgICBjb25zdCByZXNvbHZlZENhbmRpZGF0ZSA9IGF3YWl0IHJlYWxwYXRoKGFic29sdXRlQ2FuZGlkYXRlKTtcbiAgICBpZiAoXG4gICAgICByZXNvbHZlZENhbmRpZGF0ZSA9PT0gYWJzb2x1dGVDYW5kaWRhdGUgJiZcbiAgICAgIGlzUGF0aFdpdGhpbihyZXNvbHZlZENhbmRpZGF0ZSwgcm9vdClcbiAgICApIHtcbiAgICAgIHJlcG9zaXRvcmllcy5wdXNoKHJlc29sdmVkQ2FuZGlkYXRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcG9zaXRvcmllcztcbn1cblxuZnVuY3Rpb24gaXNQYXRoV2l0aGluKGNhbmRpZGF0ZTogc3RyaW5nLCBwYXJlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUocGFyZW50LCBjYW5kaWRhdGUpO1xuICByZXR1cm4gKFxuICAgIHJlbGF0aXZlID09PSBcIlwiIHx8XG4gICAgKCFyZWxhdGl2ZS5zdGFydHNXaXRoKFwiLi5cIikgJiYgIXBhdGguaXNBYnNvbHV0ZShyZWxhdGl2ZSkpXG4gICk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFNVRE9fUEFUSCA9IFwiL3Vzci9iaW4vc3Vkb1wiO1xuZXhwb3J0IGNvbnN0IFNFVFBSSVZfUEFUSCA9IFwiL3Vzci9iaW4vc2V0cHJpdlwiO1xuZXhwb3J0IGNvbnN0IFNFVEZBQ0xfUEFUSCA9IFwiL3Vzci9iaW4vc2V0ZmFjbFwiO1xuZXhwb3J0IGNvbnN0IEZJTkRfUEFUSCA9IFwiL3Vzci9iaW4vZmluZFwiO1xuZXhwb3J0IGNvbnN0IEVOVl9QQVRIID0gXCIvdXNyL2Jpbi9lbnZcIjtcbmV4cG9ydCBjb25zdCBJRF9QQVRIID0gXCIvdXNyL2Jpbi9pZFwiO1xuZXhwb3J0IGNvbnN0IEdJVF9QQVRIID0gXCIvdXNyL2Jpbi9naXRcIjtcbmV4cG9ydCBjb25zdCBVU0VSQUREX1BBVEggPSBcIi91c3Ivc2Jpbi91c2VyYWRkXCI7XG5leHBvcnQgY29uc3QgVVNFUkRFTF9QQVRIID0gXCIvdXNyL3NiaW4vdXNlcmRlbFwiO1xuZXhwb3J0IGNvbnN0IE5PTE9HSU5fUEFUSCA9IFwiL3Vzci9zYmluL25vbG9naW5cIjtcbmV4cG9ydCBjb25zdCBTSEVMTF9QQVRIID0gXCIvYmluL3NoXCI7XG4iLCAiaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IHR5cGUgQ2hpbGRQcm9jZXNzIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgdHlwZSBMaW51eENvZGV4SWRlbnRpdHkgfSBmcm9tIFwiLi9saW51eERyb3BTdWRvXCI7XG5pbXBvcnQge1xuICBFTlZfUEFUSCxcbiAgU0VUUFJJVl9QQVRILFxuICBTSEVMTF9QQVRILFxuICBTVURPX1BBVEgsXG59IGZyb20gXCIuL2xpbnV4U3lzdGVtUGF0aHNcIjtcblxuY29uc3QgR0FURV9TQ1JJUFQgPSBbXG4gIGBwcmludGYgJyVzXFxcXG4nIFwiJDFcImAsXG4gIGBJRlM9IHJlYWQgLXIgZ2F0ZSB8fCBleGl0IDEyNWAsXG4gIGBbIFwiJGdhdGVcIiA9IFwiJDJcIiBdIHx8IGV4aXQgMTI1YCxcbiAgYHNoaWZ0IDJgLFxuICBgZXhlYyBcIiRAXCJgLFxuXS5qb2luKFwiOyBcIik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZWRDb2RleENvbW1hbmQge1xuICBwcm9ncmFtOiBzdHJpbmc7XG4gIGFyZ3M6IEFycmF5PHN0cmluZz47XG4gIHJlYWR5VG9rZW46IHN0cmluZztcbiAgZ29Ub2tlbjogc3RyaW5nO1xufVxuXG4vKiogQnVpbGRzIGEgY29tbWFuZCB0aGF0IHN0b3BzIGF0IGEgdHJ1c3RlZCBzaGVsbCBnYXRlIGFmdGVyIHRoZSBpZGVudGl0eSB0cmFuc2l0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkR2F0ZWRDb2RleENvbW1hbmQoe1xuICBpZGVudGl0eSxcbiAgY29kZXhBcmdzLFxufToge1xuICBpZGVudGl0eTogTGludXhDb2RleElkZW50aXR5O1xuICBjb2RleEFyZ3M6IEFycmF5PHN0cmluZz47XG59KTogR2F0ZWRDb2RleENvbW1hbmQge1xuICBjb25zdCByZWFkeVRva2VuID0gYGNvZGV4LWFjdGlvbi1yZWFkeS0ke3JhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKX1gO1xuICBjb25zdCBnb1Rva2VuID0gYGNvZGV4LWFjdGlvbi1nby0ke3JhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKX1gO1xuICBjb25zdCBhcmdzID0gW1xuICAgIFwiLW5cIixcbiAgICBcIi1FXCIsXG4gICAgXCItLVwiLFxuICAgIFNFVFBSSVZfUEFUSCxcbiAgICBgLS1yZXVpZD0ke2lkZW50aXR5LnVpZH1gLFxuICAgIGAtLXJlZ2lkPSR7aWRlbnRpdHkuZ2lkfWAsXG4gICAgXCItLWNsZWFyLWdyb3Vwc1wiLFxuICAgIFwiLS1uby1uZXctcHJpdnNcIixcbiAgICBcIi0taW5oLWNhcHM9LWFsbFwiLFxuICAgIFwiLS1hbWJpZW50LWNhcHM9LWFsbFwiLFxuICAgIFwiLS1ib3VuZGluZy1zZXQ9LWFsbFwiLFxuICAgIFwiLS1cIixcbiAgICBFTlZfUEFUSCxcbiAgICBcIi11XCIsXG4gICAgXCJTVURPX0NPTU1BTkRcIixcbiAgICBcIi11XCIsXG4gICAgXCJTVURPX1VTRVJcIixcbiAgICBcIi11XCIsXG4gICAgXCJTVURPX1VJRFwiLFxuICAgIFwiLXVcIixcbiAgICBcIlNVRE9fR0lEXCIsXG4gICAgXCItdVwiLFxuICAgIFwiR0lUSFVCX0VOVlwiLFxuICAgIFwiLXVcIixcbiAgICBcIkdJVEhVQl9QQVRIXCIsXG4gICAgXCItdVwiLFxuICAgIFwiR0lUSFVCX09VVFBVVFwiLFxuICAgIFwiLXVcIixcbiAgICBcIkdJVEhVQl9TVEVQX1NVTU1BUllcIixcbiAgICBcIi11XCIsXG4gICAgXCJFTlZcIixcbiAgICBcIi11XCIsXG4gICAgXCJCQVNIX0VOVlwiLFxuICAgIFwiLXVcIixcbiAgICBcIlNIRUxMT1BUU1wiLFxuICAgIGBIT01FPSR7aWRlbnRpdHkuaG9tZX1gLFxuICAgIGBVU0VSPSR7aWRlbnRpdHkudXNlcn1gLFxuICAgIGBMT0dOQU1FPSR7aWRlbnRpdHkudXNlcn1gLFxuICAgIGBQQVRIPSR7cHJvY2Vzcy5lbnYuUEFUSCA/PyBcIlwifWAsXG4gIF07XG5cbiAgaWRlbnRpdHkuZ2l0U2FmZURpcmVjdG9yaWVzLmZvckVhY2goKGRpcmVjdG9yeSwgaW5kZXgpID0+IHtcbiAgICBhcmdzLnB1c2goXG4gICAgICBgR0lUX0NPTkZJR19LRVlfJHtpbmRleH09c2FmZS5kaXJlY3RvcnlgLFxuICAgICAgYEdJVF9DT05GSUdfVkFMVUVfJHtpbmRleH09JHtkaXJlY3Rvcnl9YFxuICAgICk7XG4gIH0pO1xuICBhcmdzLnB1c2goXG4gICAgYEdJVF9DT05GSUdfQ09VTlQ9JHtpZGVudGl0eS5naXRTYWZlRGlyZWN0b3JpZXMubGVuZ3RofWAsXG4gICAgU0hFTExfUEFUSCxcbiAgICBcIi1jXCIsXG4gICAgR0FURV9TQ1JJUFQsXG4gICAgXCJjb2RleC1hY3Rpb24tZ2F0ZVwiLFxuICAgIHJlYWR5VG9rZW4sXG4gICAgZ29Ub2tlbixcbiAgICBpZGVudGl0eS5jb2RleEV4ZWN1dGFibGUsXG4gICAgLi4uY29kZXhBcmdzXG4gICk7XG5cbiAgcmV0dXJuIHsgcHJvZ3JhbTogU1VET19QQVRILCBhcmdzLCByZWFkeVRva2VuLCBnb1Rva2VuIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yTGludXhHYXRlKFxuICBjaGlsZDogQ2hpbGRQcm9jZXNzLFxuICByZWFkeVRva2VuOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGRvdXQgPSBjaGlsZC5zdGRvdXQ7XG4gIGlmIChzdGRvdXQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkxpbnV4IGRyb3Atc3VkbyBnYXRlIHJlcXVpcmVzIGEgc3Rkb3V0IHBpcGUuXCIpO1xuICB9XG4gIHN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG5cbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBidWZmZXJlZCA9IFwiXCI7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIHN0ZG91dC5vZmYoXCJkYXRhXCIsIG9uRGF0YSk7XG4gICAgICBzdGRvdXQub2ZmKFwiZXJyb3JcIiwgb25FcnJvcik7XG4gICAgICBzdGRvdXQub2ZmKFwiZW5kXCIsIG9uRW5kKTtcbiAgICAgIGNoaWxkLm9mZihcImNsb3NlXCIsIG9uQ2xvc2UpO1xuICAgIH07XG4gICAgY29uc3QgZmFpbCA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfTtcbiAgICBjb25zdCBvbkRhdGEgPSAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgYnVmZmVyZWQgKz0gY2h1bms7XG4gICAgICBpZiAoYnVmZmVyZWQubGVuZ3RoID4gMTAyNCkge1xuICAgICAgICBmYWlsKFxuICAgICAgICAgIG5ldyBFcnJvcihcIkxpbnV4IGRyb3Atc3VkbyBnYXRlIGVtaXR0ZWQgYW4gaW52YWxpZCByZWFkaW5lc3MgbWFya2VyLlwiKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdsaW5lID0gYnVmZmVyZWQuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgIGlmIChuZXdsaW5lIDwgMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBsaW5lID0gYnVmZmVyZWQuc2xpY2UoMCwgbmV3bGluZSkucmVwbGFjZSgvXFxyJC8sIFwiXCIpO1xuICAgICAgaWYgKGxpbmUgIT09IHJlYWR5VG9rZW4pIHtcbiAgICAgICAgZmFpbChcbiAgICAgICAgICBuZXcgRXJyb3IoXCJMaW51eCBkcm9wLXN1ZG8gZ2F0ZSBkaWQgbm90IGNvbmZpcm0gdGhlIGNsZWFuIGlkZW50aXR5LlwiKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbWFpbmRlciA9IGJ1ZmZlcmVkLnNsaWNlKG5ld2xpbmUgKyAxKTtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIGlmIChyZW1haW5kZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZW1haW5kZXIpO1xuICAgICAgfVxuICAgICAgc3Rkb3V0LnBpcGUocHJvY2Vzcy5zdGRvdXQsIHsgZW5kOiBmYWxzZSB9KTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiBmYWlsKGVycm9yKTtcbiAgICBjb25zdCBvbkVuZCA9ICgpID0+XG4gICAgICBmYWlsKG5ldyBFcnJvcihcIkxpbnV4IGRyb3Atc3VkbyBnYXRlIGV4aXRlZCBiZWZvcmUgYmVjb21pbmcgcmVhZHkuXCIpKTtcbiAgICBjb25zdCBvbkNsb3NlID0gKCkgPT5cbiAgICAgIGZhaWwobmV3IEVycm9yKFwiTGludXggZHJvcC1zdWRvIGdhdGUgY2xvc2VkIGJlZm9yZSBiZWNvbWluZyByZWFkeS5cIikpO1xuXG4gICAgc3Rkb3V0Lm9uKFwiZGF0YVwiLCBvbkRhdGEpO1xuICAgIHN0ZG91dC5vbmNlKFwiZXJyb3JcIiwgb25FcnJvcik7XG4gICAgc3Rkb3V0Lm9uY2UoXCJlbmRcIiwgb25FbmQpO1xuICAgIGNoaWxkLm9uY2UoXCJjbG9zZVwiLCBvbkNsb3NlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmRDaGlsZElucHV0KFxuICBjaGlsZDogQ2hpbGRQcm9jZXNzLFxuICBpbnB1dDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RkaW4gPSBjaGlsZC5zdGRpbjtcbiAgaWYgKHN0ZGluID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb2RleCBjaGlsZCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgYSBzdGRpbiBwaXBlLlwiKTtcbiAgfVxuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHN0ZGluLm9mZihcImZpbmlzaFwiLCBvbkZpbmlzaCk7XG4gICAgICByZWplY3QoZXJyb3IpO1xuICAgIH07XG4gICAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgICBzdGRpbi5vZmYoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9O1xuICAgIHN0ZGluLm9uY2UoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICBzdGRpbi5vbmNlKFwiZmluaXNoXCIsIG9uRmluaXNoKTtcbiAgICBzdGRpbi5lbmQoaW5wdXQpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjb25zdGFudHMgYXMgZnNDb25zdGFudHMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgbHN0YXQsIG9wZW4sIHJlYWxwYXRoLCB0eXBlIEZpbGVIYW5kbGUgfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUxpbnV4T3V0cHV0RmlsZShmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgZmlsZTogc3RyaW5nO1xuICBoYW5kbGU6IEZpbGVIYW5kbGU7XG59PiB7XG4gIGNvbnN0IGFic29sdXRlRmlsZSA9IHBhdGgucmVzb2x2ZShmaWxlKTtcbiAgY29uc3QgYWJzb2x1dGVQYXJlbnQgPSBwYXRoLmRpcm5hbWUoYWJzb2x1dGVGaWxlKTtcbiAgY29uc3QgY2Fub25pY2FsUGFyZW50ID0gYXdhaXQgcmVhbHBhdGgoYWJzb2x1dGVQYXJlbnQpO1xuICBpZiAoY2Fub25pY2FsUGFyZW50ICE9PSBhYnNvbHV0ZVBhcmVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVmdXNlcyBhbiBvdXRwdXQgcGF0aCBjb250YWluaW5nIHN5bWJvbGljIGxpbmtzOiAnJHthYnNvbHV0ZUZpbGV9Jy5gXG4gICAgKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHBhdGhTdGF0cyA9IGF3YWl0IGxzdGF0KGFic29sdXRlRmlsZSk7XG4gICAgaWYgKHBhdGhTdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVmdXNlcyBhbiBvdXRwdXQgcGF0aCBjb250YWluaW5nIHN5bWJvbGljIGxpbmtzOiAnJHthYnNvbHV0ZUZpbGV9Jy5gXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXBhdGhTdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIGEgcmVndWxhciBvdXRwdXQgZmlsZTsgZm91bmQgJyR7YWJzb2x1dGVGaWxlfScuYFxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgIT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGUgPSBhd2FpdCBvcGVuKFxuICAgIGFic29sdXRlRmlsZSxcbiAgICBmc0NvbnN0YW50cy5PX0FQUEVORCB8XG4gICAgICBmc0NvbnN0YW50cy5PX0NSRUFUIHxcbiAgICAgIGZzQ29uc3RhbnRzLk9fUkRXUiB8XG4gICAgICBmc0NvbnN0YW50cy5PX05PRk9MTE9XLFxuICAgIDBvNjAwXG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZVN0YXRzID0gYXdhaXQgaGFuZGxlLnN0YXQoKTtcbiAgICBpZiAoIWZpbGVTdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIGEgcmVndWxhciBvdXRwdXQgZmlsZTsgZm91bmQgJyR7YWJzb2x1dGVGaWxlfScuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcnVubmVyVWlkID0gcHJvY2Vzcy5nZXR1aWQhKCk7XG4gICAgaWYgKGZpbGVTdGF0cy51aWQgIT09IHJ1bm5lclVpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGludXggZHJvcC1zdWRvIHJlcXVpcmVzIHRoZSBvdXRwdXQgZmlsZSB0byBiZSBvd25lZCBieSBydW5uZXIgVUlEICR7cnVubmVyVWlkfTsgJyR7YWJzb2x1dGVGaWxlfScgaXMgb3duZWQgYnkgVUlEICR7ZmlsZVN0YXRzLnVpZH0uYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGZpbGVTdGF0cy5ubGluayAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTGludXggZHJvcC1zdWRvIHJlZnVzZXMgYW4gb3V0cHV0IGZpbGUgd2l0aCBtdWx0aXBsZSBoYXJkIGxpbmtzOiAnJHthYnNvbHV0ZUZpbGV9Jy5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjYW5vbmljYWxGaWxlID0gYXdhaXQgcmVhbHBhdGgoYWJzb2x1dGVGaWxlKTtcbiAgICBpZiAoY2Fub25pY2FsRmlsZSAhPT0gYWJzb2x1dGVGaWxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBMaW51eCBkcm9wLXN1ZG8gcmVmdXNlcyBhbiBvdXRwdXQgcGF0aCBjb250YWluaW5nIHN5bWJvbGljIGxpbmtzOiAnJHthYnNvbHV0ZUZpbGV9Jy5gXG4gICAgICApO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhd2FpdCBoYW5kbGUuY2xvc2UoKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICByZXR1cm4geyBmaWxlOiBhYnNvbHV0ZUZpbGUsIGhhbmRsZSB9O1xufVxuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcbmltcG9ydCB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvcmVzdFwiO1xuXG5leHBvcnQgdHlwZSBXcml0ZUFjY2Vzc0NoZWNrID1cbiAgfCB7XG4gICAgICBzdGF0dXM6IFwiYXBwcm92ZWRcIjtcbiAgICAgIGFjdG9yOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiO1xuICAgICAgYWN0b3I6IHN0cmluZztcbiAgICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIH07XG5cbnR5cGUgRW5zdXJlV3JpdGVBY2Nlc3NPcHRpb25zID0ge1xuICBvY3Rva2l0PzogT2N0b2tpdDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGFjdG9yPzogc3RyaW5nO1xuICByZXBvc2l0b3J5Pzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0cnVzdGVkIEdpdEh1YiBib3QgYWN0b3JzIGFyZSBhbGxvd2VkIHdpdGhvdXQgY2hlY2tpbmdcbiAgICogY29sbGFib3JhdG9yIHBlcm1pc3Npb25zLiBPdGhlciBib3RzIG11c3QgcGFzcyB0aGUgc2FtZSBjaGVja3MgYXMgaHVtYW5cbiAgICogdXNlcnMuXG4gICAqL1xuICBhbGxvd0JvdEFjdG9ycz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGxvd2VkIEdpdEh1YiB1c2VybmFtZXMgb3IgJyonIHRvIGFsbG93IGFsbCB1c2Vycy5cbiAgICogQ2FzZS1pbnNlbnNpdGl2ZTsgZW1wdHkgc3RyaW5nIG9yIHVuZGVmaW5lZCBkaXNhYmxlcyB0aGlzIG92ZXJyaWRlLlxuICAgKi9cbiAgYWxsb3dVc2Vycz86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgR2l0SHViIGJvdCB1c2VybmFtZXMuICcqJyBpcyBub3Qgc3VwcG9ydGVkLlxuICAgKiBFbnRyaWVzIG1heSBpbmNsdWRlIG9yIG9taXQgdGhlIHRyYWlsaW5nIFtib3RdIHN1ZmZpeC5cbiAgICovXG4gIGFsbG93Qm90VXNlcnM/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IHRoZSBHaXRIdWIgYWN0b3Igd2hpY2ggdHJpZ2dlcmVkIHRoZSBjdXJyZW50IHdvcmtmbG93IGhhcyB3cml0ZVxuICogYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2VzcyhcbiAgb3B0aW9uczogRW5zdXJlV3JpdGVBY2Nlc3NPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFdyaXRlQWNjZXNzQ2hlY2s+IHtcbiAgY29uc3QgYWN0b3IgPSBvcHRpb25zLmFjdG9yID8/IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RPUjtcbiAgY29uc3QgcmVwb3NpdG9yeSA9IG9wdGlvbnMucmVwb3NpdG9yeSA/PyBwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWTtcbiAgY29uc3QgYWxsb3dCb3RBY3RvcnMgPSBvcHRpb25zLmFsbG93Qm90QWN0b3JzID8/IGZhbHNlO1xuXG4gIGlmICghYWN0b3IgfHwgYWN0b3IudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yOiBhY3RvciA/PyBcIjx1bmtub3duPlwiLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9BQ1RPUiBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRyaWdnZXJpbmcgdXNlci5cIixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFyZXBvc2l0b3J5IHx8IHJlcG9zaXRvcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9SRVBPU0lUT1JZIGlzIG5vdCBzZXQ7IGNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHJlcG9zaXRvcnkuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFtvd25lciwgcmVwb10gPSByZXBvc2l0b3J5LnNwbGl0KFwiL1wiKTtcbiAgaWYgKCFvd25lciB8fCAhcmVwbykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgR0lUSFVCX1JFUE9TSVRPUlkgbXVzdCBiZSBpbiB0aGUgZm9ybWF0ICdvd25lci9yZXBvJywgcmVjZWl2ZWQ6ICcke3JlcG9zaXRvcnl9Jy5gLFxuICAgIH07XG4gIH1cblxuICAvLyBHaXRIdWItYnVpbHQgd29ya2Zsb3dzIGRvIG5vdCBoYXZlIGEgbWVhbmluZ2Z1bCBjb2xsYWJvcmF0b3IgcGVybWlzc2lvblxuICAvLyBsZXZlbC4gT25seSB0cnVzdCB0aGUgYnVpbHQtaW4gYm90IGFjdG9ycyBHaXRIdWIgb3ducy5cbiAgaWYgKGFsbG93Qm90QWN0b3JzICYmIGlzVHJ1c3RlZEdpdEh1YkJvdEFjdG9yKGFjdG9yKSkge1xuICAgIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBpcyBhIHRydXN0ZWQgR2l0SHViIGJvdCBhY2NvdW50OyBza2lwcGluZyBleHBsaWNpdCBwZXJtaXNzaW9uIGNoZWNrLmApO1xuICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICB9XG5cbiAgY29uc3QgYWxsb3dlZEJvdEFjdG9ycyA9IHBhcnNlQWxsb3dlZEJvdEFjdG9ycyhvcHRpb25zLmFsbG93Qm90VXNlcnMgPz8gXCJcIik7XG4gIGlmIChhbGxvd2VkQm90QWN0b3JzIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYWxsb3dlZEJvdEFjdG9ycy5tZXNzYWdlLFxuICAgIH07XG4gIH1cbiAgaWYgKGlzQm90QWN0b3IoYWN0b3IpICYmIGFsbG93ZWRCb3RBY3RvcnMuaGFzKG5vcm1hbGl6ZUJvdEFjdG9yKGFjdG9yKSkpIHtcbiAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgZXhwbGljaXRseSBhbGxvd2VkIHZpYSBhbGxvdy1ib3QtdXNlcnMuYCk7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICAvLyBBbGxvdy1saXN0IG92ZXJyaWRlOiBpZiBhbGxvd1VzZXJzIGlzICcqJyBhbGxvdyBhbGwgdXNlcnMuIElmIGl0IGlzIGFcbiAgLy8gY29tbWEtc2VwYXJhdGVkIGxpc3QsIGFsbG93IGxpc3RlZCB1c2VycyAoY2FzZS1pbnNlbnNpdGl2ZSkgd2l0aG91dCBjaGVja2luZ1xuICAvLyBjb2xsYWJvcmF0b3IgcGVybWlzc2lvbnMuXG4gIGNvbnN0IGFsbG93VXNlcnNTcGVjID0gKG9wdGlvbnMuYWxsb3dVc2VycyA/PyBcIlwiKS50cmltKCk7XG4gIGlmIChhbGxvd1VzZXJzU3BlYy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGFsbG93VXNlcnNTcGVjID09PSBcIipcIikge1xuICAgICAgY29yZS5pbmZvKFwiYWxsb3ctdXNlcnM9JyonIHNwZWNpZmllZDsgYWxsb3dpbmcgYWxsIHVzZXJzIHRvIHByb2NlZWQuXCIpO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gICAgfVxuICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgYWxsb3dVc2Vyc1NwZWNcbiAgICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgICAubWFwKChzKSA9PiBzLnRyaW0oKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApLFxuICAgICk7XG4gICAgaWYgKGFsbG93ZWQuaGFzKGFjdG9yLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgZXhwbGljaXRseSBhbGxvd2VkIHZpYSBhbGxvdy11c2Vycy5gKTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlbiA/PyBnZXRUb2tlbkZyb21FbnYoKTtcbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkEgR2l0SHViIHRva2VuIGlzIHJlcXVpcmVkIHRvIGNoZWNrIHBlcm1pc3Npb25zIChzZXQgR0lUSFVCX1RPS0VOIG9yIEdIX1RPS0VOKS5cIixcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYmFzZVVybCA9IHByb2Nlc3MuZW52LkdJVEhVQl9BUElfVVJMPy50cmltKCk7XG4gIGNvbnN0IG9jdG9raXQgPVxuICAgIG9wdGlvbnMub2N0b2tpdCA/P1xuICAgIG5ldyBPY3Rva2l0KHtcbiAgICAgIGF1dGg6IHRva2VuLFxuICAgICAgLi4uKGJhc2VVcmwgPyB7IGJhc2VVcmwgfSA6IHt9KSxcbiAgICB9KTtcblxuICBjb3JlLmluZm8oYENoZWNraW5nIHdyaXRlIGFjY2VzcyBmb3IgYWN0b3IgJyR7YWN0b3J9JyBvbiAke293bmVyfS8ke3JlcG99YCk7XG5cbiAgbGV0IHBlcm1pc3Npb246IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9jdG9raXQucmVwb3MuZ2V0Q29sbGFib3JhdG9yUGVybWlzc2lvbkxldmVsKHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICAgIHVzZXJuYW1lOiBhY3RvcixcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uID0gcmVzcG9uc2UuZGF0YS5wZXJtaXNzaW9uID8/IFwibm9uZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgICAgYWN0b3IsXG4gICAgICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgaXMgbm90IGEgY29sbGFib3JhdG9yIG9uICR7b3duZXJ9LyR7cmVwb307IHdyaXRlIGFjY2VzcyBpcyByZXF1aXJlZC5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgIDogXCJGYWlsZWQgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIGZvciBhY3RvciBkdWUgdG8gdW5rbm93biBlcnJvci5cIjtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgRmFpbGVkIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyBmb3IgJyR7YWN0b3J9JzogJHttZXNzYWdlfWAsXG4gICAgfTtcbiAgfVxuXG4gIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBoYXMgcGVybWlzc2lvbiBsZXZlbCAnJHtwZXJtaXNzaW9ufScuYCk7XG5cbiAgaWYgKHBlcm1pc3Npb24gPT09IFwiYWRtaW5cIiB8fCBwZXJtaXNzaW9uID09PSBcIndyaXRlXCIgfHwgcGVybWlzc2lvbiA9PT0gXCJtYWludGFpblwiKSB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgIGFjdG9yLFxuICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgbXVzdCBoYXZlIHdyaXRlIGFjY2VzcyB0byAke293bmVyfS8ke3JlcG99LiBEZXRlY3RlZCBwZXJtaXNzaW9uOiAnJHtwZXJtaXNzaW9ufScuYCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tRW52KCk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOID8/IHByb2Nlc3MuZW52LkdIX1RPS0VOO1xuICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHJpbSgpLmxlbmd0aCA+IDAgPyB0b2tlbiA6IFwiXCI7XG59XG5cbmNvbnN0IFRSVVNURURfR0lUSFVCX0JPVF9BQ1RPUlMgPSBuZXcgU2V0KFtcImdpdGh1Yi1hY3Rpb25zW2JvdF1cIl0pO1xuXG5mdW5jdGlvbiBpc1RydXN0ZWRHaXRIdWJCb3RBY3RvcihhY3Rvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0JvdEFjdG9yKGFjdG9yKSAmJiBUUlVTVEVEX0dJVEhVQl9CT1RfQUNUT1JTLmhhcyhub3JtYWxpemVCb3RBY3RvcihhY3RvcikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFsbG93ZWRCb3RBY3RvcnMoYWxsb3dCb3RVc2Vyczogc3RyaW5nKTogU2V0PHN0cmluZz4gfCBFcnJvciB7XG4gIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBhbGxvd0JvdFVzZXJzLnNwbGl0KFwiLFwiKSkge1xuICAgIGNvbnN0IGJvdCA9IGVudHJ5LnRyaW0oKTtcbiAgICBpZiAoYm90Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChib3QuaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiYWxsb3ctYm90LXVzZXJzIGRvZXMgbm90IHN1cHBvcnQgJyonOyBsaXN0IHRydXN0ZWQgYm90IHVzZXJuYW1lcyBleHBsaWNpdGx5LlwiKTtcbiAgICB9XG4gICAgYWxsb3dlZC5hZGQobm9ybWFsaXplQm90QWN0b3IoYm90KSk7XG4gIH1cbiAgcmV0dXJuIGFsbG93ZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQm90QWN0b3IoYWN0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gYWN0b3IudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChcIltib3RdXCIpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVCb3RBY3RvcihhY3Rvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGFjdG9yLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBpc0JvdEFjdG9yKG5vcm1hbGl6ZWQpID8gbm9ybWFsaXplZCA6IGAke25vcm1hbGl6ZWR9W2JvdF1gO1xufVxuXG5mdW5jdGlvbiBpc05vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzXCIgaW4gZXJyb3IgJiYgKGVycm9yIGFzIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDA0LFxuICApO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtcbiAgICAgIHByb2Nlc3MuYXJjaFxuICAgIH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZSgoY2FsbGJhY2ssIG5hbWUpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZSgobWV0aG9kLCByZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICBjb25zdCBvcmlnID0gaG9vaztcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHN0YXRlLnJlZ2lzdHJ5W25hbWVdID0gW107XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJiZWZvcmVcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4ob3JpZy5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImFmdGVyXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdF8pID0+IHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHRfO1xuICAgICAgICAgIHJldHVybiBvcmlnKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiZXJyb3JcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JpZyhlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5wdXNoKHtcbiAgICBob29rOiBob29rLFxuICAgIG9yaWc6IG9yaWcsXG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcCgocmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4vbGliL3JlZ2lzdGVyLmpzXCI7XG5pbXBvcnQgeyBhZGRIb29rIH0gZnJvbSBcIi4vbGliL2FkZC5qc1wiO1xuaW1wb3J0IHsgcmVtb3ZlSG9vayB9IGZyb20gXCIuL2xpYi9yZW1vdmUuanNcIjtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG5jb25zdCBiaW5kID0gRnVuY3Rpb24uYmluZDtcbmNvbnN0IGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIGNvbnN0IHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaCgoa2luZCkgPT4ge1xuICAgIGNvbnN0IGFyZ3MgPSBuYW1lID8gW3N0YXRlLCBraW5kLCBuYW1lXSA6IFtzdGF0ZSwga2luZF07XG4gICAgaG9va1traW5kXSA9IGhvb2suYXBpW2tpbmRdID0gYmluZGFibGUoYWRkSG9vaywgbnVsbCkuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBTaW5ndWxhcigpIHtcbiAgY29uc3Qgc2luZ3VsYXJIb29rTmFtZSA9IFN5bWJvbChcIlNpbmd1bGFyXCIpO1xuICBjb25zdCBzaW5ndWxhckhvb2tTdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG4gIGNvbnN0IHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBDb2xsZWN0aW9uKCkge1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG5cbiAgY29uc3QgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBTaW5ndWxhciwgQ29sbGVjdGlvbiB9O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W157fX1dK1xcfS9nO1xuZnVuY3Rpb24gcmVtb3ZlTm9uQ2hhcnModmFyaWFibGVOYW1lKSB7XG4gIHJldHVybiB2YXJpYWJsZU5hbWUucmVwbGFjZSgvKD86XlxcVyspfCg/Oig/PCFcXFcpXFxXKyQpL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgZGVmYXVsdHNfZGVmYXVsdCA9IHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tIFwiZmFzdC1jb250ZW50LXR5cGUtcGFyc2VcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpIDogcmVxdWVzdE9wdGlvbnMuYm9keTtcbiAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmVxdWVzdE9wdGlvbnMuaGVhZGVycykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbXG4gICAgICBuYW1lLFxuICAgICAgU3RyaW5nKHZhbHVlKVxuICAgIF0pXG4gICk7XG4gIGxldCBmZXRjaFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGZldGNoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgICAgYm9keSxcbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5yZWRpcmVjdCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgc2lnbmFsOiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5zaWduYWwsXG4gICAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAgIC8vIFNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3Rpbml0LWR1cGxleC5cbiAgICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsZXQgbWVzc2FnZSA9IFwiVW5rbm93biBFcnJvclwiO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gNTAwO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiVHlwZUVycm9yXCIgJiYgXCJjYXVzZVwiIGluIGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yLmNhdXNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RFcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICAgIHJlcXVlc3RFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIHRocm93IHJlcXVlc3RFcnJvcjtcbiAgfVxuICBjb25zdCBzdGF0dXMgPSBmZXRjaFJlc3BvbnNlLnN0YXR1cztcbiAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZS51cmw7XG4gIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmZXRjaFJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICByZXNwb25zZUhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG4gIGNvbnN0IG9jdG9raXRSZXNwb25zZSA9IHtcbiAgICB1cmwsXG4gICAgc3RhdHVzLFxuICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICBkYXRhOiBcIlwiXG4gIH07XG4gIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gcmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlc3BvbnNlSGVhZGVycy5saW5rICYmIHJlc3BvbnNlSGVhZGVycy5saW5rLm1hdGNoKC88KFtePD5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgIGxvZy53YXJuKFxuICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke3Jlc3BvbnNlSGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgfVxuICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoZmV0Y2hSZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICByZXNwb25zZTogb2N0b2tpdFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2Uob2N0b2tpdFJlc3BvbnNlLmRhdGEpLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIG9jdG9raXRSZXNwb25zZS5kYXRhID0gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpIDogZmV0Y2hSZXNwb25zZS5ib2R5O1xuICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gIGlmICghY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGNvbnN0IG1pbWV0eXBlID0gc2FmZVBhcnNlKGNvbnRlbnRUeXBlKTtcbiAgaWYgKGlzSlNPTlJlc3BvbnNlKG1pbWV0eXBlKSkge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaCgoKSA9PiBuZXcgQXJyYXlCdWZmZXIoMCkpO1xuICB9XG59XG5mdW5jdGlvbiBpc0pTT05SZXNwb25zZShtaW1ldHlwZSkge1xuICByZXR1cm4gbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIgfHwgbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9zY2ltK2pzb25cIjtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBcIlVua25vd24gZXJyb3JcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBkYXRhID8gYCAtICR7ZGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykgPyBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4iLCAiY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYW1lO1xuICAvKipcbiAgICogaHR0cCBzdGF0dXMgY29kZVxuICAgKi9cbiAgc3RhdHVzO1xuICAvKipcbiAgICogUmVxdWVzdCBvcHRpb25zIHRoYXQgbGVhZCB0byB0aGUgZXJyb3IuXG4gICAqL1xuICByZXF1ZXN0O1xuICAvKipcbiAgICogUmVzcG9uc2Ugb2JqZWN0IGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkXG4gICAqL1xuICByZXNwb25zZTtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8oPzwhICkgLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgUmVxdWVzdEVycm9yXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0MiB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZXJyb3IuanNcbmZ1bmN0aW9uIF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhkYXRhKSB7XG4gIHJldHVybiBgUmVxdWVzdCBmYWlsZWQgZHVlIHRvIGZvbGxvd2luZyByZXNwb25zZSBlcnJvcnM6XG5gICsgZGF0YS5lcnJvcnMubWFwKChlKSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cbnZhciBHcmFwaHFsUmVzcG9uc2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0MiwgaGVhZGVycywgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMocmVzcG9uc2UpKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0MjtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG4gIG5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7XG4gIGVycm9ycztcbiAgZGF0YTtcbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIixcbiAgXCJvcGVyYXRpb25OYW1lXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKHJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbmV4cG9ydCB7XG4gIEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsMiBhcyBncmFwaHFsLFxuICB3aXRoQ3VzdG9tUmVxdWVzdFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaXMtand0LmpzXG52YXIgYjY0dXJsID0gXCIoPzpbYS16QS1aMC05Xy1dKylcIjtcbnZhciBzZXAgPSBcIlxcXFwuXCI7XG52YXIgand0UkUgPSBuZXcgUmVnRXhwKGBeJHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JGApO1xudmFyIGlzSldUID0gand0UkUudGVzdC5iaW5kKGp3dFJFKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2F1dGguanNcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSBpc0pXVCh0b2tlbik7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gdG9rZW4uc3RhcnRzV2l0aChcInYxLlwiKSB8fCB0b2tlbi5zdGFydHNXaXRoKFwiZ2hzX1wiKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSB0b2tlbi5zdGFydHNXaXRoKFwiZ2h1X1wiKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuLFxuICAgIHRva2VuVHlwZVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1hdXRob3JpemF0aW9uLXByZWZpeC5qc1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cbiAgcmV0dXJuIGB0b2tlbiAke3Rva2VufWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9ob29rLmpzXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2UoXG4gICAgcm91dGUsXG4gICAgcGFyYW1ldGVyc1xuICApO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoMih0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCJcbiAgICApO1xuICB9XG4gIHRva2VuID0gdG9rZW4ucmVwbGFjZSgvXih0b2tlbnxiZWFyZXIpICsvaSwgXCJcIik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGF1dGguYmluZChudWxsLCB0b2tlbiksIHtcbiAgICBob29rOiBob29rLmJpbmQobnVsbCwgdG9rZW4pXG4gIH0pO1xufTtcbmV4cG9ydCB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI2LjEuNlwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcbmltcG9ydCBIb29rIGZyb20gXCJiZWZvcmUtYWZ0ZXItaG9va1wiO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyB3aXRoQ3VzdG9tUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9ncmFwaHFsXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbkF1dGggfSBmcm9tIFwiQG9jdG9raXQvYXV0aC10b2tlblwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihsb2dnZXIgPSB7fSkge1xuICBpZiAodHlwZW9mIGxvZ2dlci5kZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmRlYnVnID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuaW5mbyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIud2FybiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLndhcm4gPSBjb25zb2xlV2FybjtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5lcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmVycm9yID0gY29uc29sZUVycm9yO1xuICB9XG4gIHJldHVybiBsb2dnZXI7XG59XG5jb25zdCB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG5jbGFzcyBPY3Rva2l0IHtcbiAgc3RhdGljIFZFUlNJT04gPSBWRVJTSU9OO1xuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyBwbHVnaW5zID0gW107XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBzdGF0aWMgcGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgbmV3UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpXG4gICAgICApO1xuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBIb29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiByZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IHdpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgLy8gYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdG9yXG4gIHJlcXVlc3Q7XG4gIGdyYXBocWw7XG4gIGxvZztcbiAgaG9vaztcbiAgLy8gVE9ETzogdHlwZSBgb2N0b2tpdC5hdXRoYCBiYXNlZCBvbiBwYXNzZWQgb3B0aW9ucy5hdXRoU3RyYXRlZ3lcbiAgYXV0aDtcbn1cbmV4cG9ydCB7XG4gIE9jdG9raXRcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNS4zLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSByZXNwb25zZS5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXTtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oXG4gICAgICAgIGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7cmVzcG9uc2Uuc3RhdHVzfSB3aXRoIGlkICR7cmVxdWVzdElkfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSBlcnJvci5yZXNwb25zZT8uaGVhZGVyc1tcIngtZ2l0aHViLXJlcXVlc3QtaWRcIl0gfHwgXCJVTktOT1dOXCI7XG4gICAgICBvY3Rva2l0LmxvZy5lcnJvcihcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtlcnJvci5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICByZXF1ZXN0TG9nXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG4gIGlmICh0eXBlb2YgcmVwb3NpdG9yeVNlbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb24gPSByZXBvc2l0b3J5U2VsZWN0aW9uO1xuICB9XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pdGVyYXRvci5qc1xuZnVuY3Rpb24gaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUuZW5kcG9pbnQocGFyYW1ldGVycykgOiBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQocm91dGUsIHBhcmFtZXRlcnMpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZSA6IG9jdG9raXQucmVxdWVzdDtcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gIGxldCB1cmwgPSBvcHRpb25zLnVybDtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiAoe1xuICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePD5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9yb3V0ZS1zdGF0cy97YWN0b3JfdHlwZX0ve2FjdG9yX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvc3ViamVjdC1zdGF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvdXNlci1zdGF0cy97dXNlcl9pZH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQsXG4gIHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50c1xufTtcbiIsICJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMTMuNS4wXCI7XG4iLCAiaW1wb3J0IHR5cGUgeyBFbmRwb2ludHNEZWZhdWx0c0FuZERlY29yYXRpb25zIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5jb25zdCBFbmRwb2ludHM6IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZFJlcG9BY2Nlc3NUb1NlbGZIb3N0ZWRSdW5uZXJHcm91cEluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FwcHJvdmVcIixcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXN7P2tleSxyZWZ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1ZhcmlhYmxlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNhYmxlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9lbmFibGVcIixcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL2dlbmVyYXRlLWppdGNvbmZpZ1wiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1VzYWdlUmVwb3J0T3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCIsXG4gICAgXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICAgIHVzYWdlTWV0cmljc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC91c2FnZVwiXSxcbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl0sXG4gIH0sXG4gIGhvc3RlZENvbXB1dGU6IHtcbiAgICBjcmVhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZU5ldHdvcmtDb25maWd1cmF0aW9uRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtTZXR0aW5nc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1zZXR0aW5ncy97bmV0d29ya19zZXR0aW5nc19pZH1cIixcbiAgICBdLFxuICAgIGxpc3ROZXR3b3JrQ29uZmlndXJhdGlvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIGFkZExhYmVsczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBhZGRTdWJJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxpc3RTdWJJc3N1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVMYWJlbDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdWJJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVcIixcbiAgICBdLFxuICAgIHJlcHJpb3JpdGl6ZVN1Yklzc3VlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlcy9wcmlvcml0eVwiLFxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdLFxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfSxcbiAgICBdLFxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl0sXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjYWRkLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUlzc3VlVHlwZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3M6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS97c2VjdXJpdHlfcHJvZHVjdH0ve2VuYWJsZW1lbnR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3MoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL29yZ3MjZW5hYmxlLW9yLWRpc2FibGUtYS1zZWN1cml0eS1mZWF0dXJlLWZvci1hbi1vcmdhbml6YXRpb25cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIl0sXG4gICAgbGlzdEN1c3RvbVByb3BlcnRpZXNWYWx1ZXNGb3JSZXBvczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MucmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjcmVtb3ZlLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIixcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgcmV2b2tlT3JnUm9sZVVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZUlzc3VlVHlwZTogW1wiUFVUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICB1cGRhdGVNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICByZW5hbWVkOiBbXG4gICAgICAgICAgXCJwYWNrYWdlc1wiLFxuICAgICAgICAgIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICB9LFxuICBwcml2YXRlUmVnaXN0cmllczoge1xuICAgIGNyZWF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgZGVsZXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0T3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3B1YmxpYy1rZXlcIl0sXG4gICAgbGlzdE9yZ1ByaXZhdGVSZWdpc3RyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIHVwZGF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuYWRkQ29sbGFib3JhdG9yKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNhZGQtcHJvamVjdC1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNjcmVhdGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjY3JlYXRlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hLXVzZXItcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYW4tb3JnYW5pemF0aW9uLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtcmVwb3NpdG9yeS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGUoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNkZWxldGUtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ2FyZDogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZGVsZXRlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZGVsZXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNkZWxldGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjZ2V0LWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENhcmQ6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2dldC1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENvbHVtbjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmdldENvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjZ2V0LWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0UGVybWlzc2lvbkZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2dldC1wcm9qZWN0LXBlcm1pc3Npb24tZm9yLWEtdXNlclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDYXJkczogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDYXJkcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2xpc3QtcHJvamVjdC1jYXJkc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2xsYWJvcmF0b3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNsaXN0LXByb2plY3QtY29sbGFib3JhdG9yc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2x1bW5zOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2x1bW5zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNsaXN0LXByb2plY3QtY29sdW1uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1vcmdhbml6YXRpb24tcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yUmVwbygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtcmVwb3NpdG9yeS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdEZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LXVzZXItcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ2FyZDogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfS9tb3Zlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubW92ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNtb3ZlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbW92ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNtb3ZlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5yZW1vdmVDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI3JlbW92ZS11c2VyLWFzLWEtY29sbGFib3JhdG9yXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI3VwZGF0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDYXJkOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI3VwZGF0ZS1hbi1leGlzdGluZy1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZpbGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGRlbGV0ZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvUnVsZXNldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXSB9LFxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCIsXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGVuYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCIsXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICBdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgIF0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXG4gICAgICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Quc2VhcmNoLmlzc3Vlc0FuZFB1bGxSZXF1ZXN0cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3NlYXJjaC9zZWFyY2gjc2VhcmNoLWlzc3Vlcy1hbmQtcHVsbC1yZXF1ZXN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdLFxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGNyZWF0ZVB1c2hQcm90ZWN0aW9uQnlwYXNzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9wdXNoLXByb3RlY3Rpb24tYnlwYXNzZXNcIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0U2Nhbkhpc3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3NjYW4taGlzdG9yeVwiXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RMb2NhdGlvbnNGb3JBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5hZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0xlZ2FjeTogW1xuICAgICAgXCJQVVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNjaGVjay10ZWFtLXBlcm1pc3Npb25zLWZvci1hLXByb2plY3QtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclJlcG9Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2xpc3QtdGVhbS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0xlZ2FjeTogW1xuICAgICAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMubGlzdFByb2plY3RzTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzLWxlZ2FjeVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLnJlbW92ZVByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkRFTEVURSAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW0tbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiLFxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5SWQ6IFtcIkdFVCAvdXNlci97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0U3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRW5kcG9pbnRzO1xuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50T3B0aW9ucywgUmVxdWVzdFBhcmFtZXRlcnMsIFJvdXRlIH0gZnJvbSBcIkBvY3Rva2l0L3R5cGVzXCI7XG5pbXBvcnQgRU5EUE9JTlRTIGZyb20gXCIuL2dlbmVyYXRlZC9lbmRwb2ludHMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9tZXRob2QtdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnREZWNvcmF0aW9ucyB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgcmVmYWN0b3JlZCBpbjogaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy5qcy9wdWxsLzYyMlxuLy8gdG8gb3B0aW1pc2UgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2Ugb2YgT2N0b2tpdCBpbml0aWFsaXphdGlvbi5cbi8vXG4vLyBUaGlzIG9wdGltaXphdGlvbiBpbnZvbHZlcyB0d28ga2V5IGNoYW5nZXM6XG4vLyAxLiBQcmUtQ29tcHV0YXRpb246IFRoZSBlbmRwb2ludCBtZXRob2RzIGFyZSBwcmUtY29tcHV0ZWQgb25jZSBhdCBtb2R1bGUgbG9hZFxuLy8gICAgdGltZSBpbnN0ZWFkIG9mIGVhY2ggaW52b2NhdGlvbiBvZiBgZW5kcG9pbnRzVG9NZXRob2RzKClgLlxuLy8gMi4gTGF6eSBpbml0aWFsaXphdGlvbiBhbmQgY2FjaGluZzogV2UgdXNlIGEgUHJveHkgZm9yIGVhY2ggc2NvcGUgdG8gb25seVxuLy8gICAgaW5pdGlhbGl6ZSBtZXRob2RzIHRoYXQgYXJlIGFjdHVhbGx5IGNhbGxlZC4gVGhpcyByZWR1Y2VzIHJ1bnRpbWUgb3ZlcmhlYWRcbi8vICAgIGFzIHRoZSBpbml0aWFsaXphdGlvbiBpbnZvbHZlcyBkZWVwIG1lcmdpbmcgb2Ygb2JqZWN0cy4gVGhlIGluaXRpYWxpemVkXG4vLyAgICBtZXRob2RzIGFyZSB0aGVuIGNhY2hlZCBmb3IgZnV0dXJlIHVzZS5cblxuY29uc3QgZW5kcG9pbnRNZXRob2RzTWFwID0gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoRU5EUE9JTlRTKSkge1xuICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgIGNvbnN0IFtyb3V0ZSwgZGVmYXVsdHMsIGRlY29yYXRpb25zXSA9IGVuZHBvaW50O1xuICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0cyxcbiAgICApO1xuXG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbnR5cGUgUHJveHlUYXJnZXQgPSB7XG4gIG9jdG9raXQ6IE9jdG9raXQ7XG4gIHNjb3BlOiBzdHJpbmc7XG4gIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55W10pID0+IGFueT47XG59O1xuXG5jb25zdCBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSwgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkoXG4gICAgdGFyZ2V0OiBQcm94eVRhcmdldCxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yLFxuICApIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuICh0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZSk7XG4gIH0sXG4gIGdldCh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNhY2hlW21ldGhvZE5hbWVdKSB7XG4gICAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcblxuICAgIGlmIChkZWNvcmF0aW9ucykge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBkZWNvcmF0ZShcbiAgICAgICAgb2N0b2tpdCxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICAgIGRlY29yYXRpb25zLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogUmVzdEVuZHBvaW50TWV0aG9kcyB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB9O1xuXG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdNZXRob2RzIGFzIFJlc3RFbmRwb2ludE1ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKFxuICBvY3Rva2l0OiBPY3Rva2l0LFxuICBzY29wZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGRlZmF1bHRzOiBFbmRwb2ludE9wdGlvbnMsXG4gIGRlY29yYXRpb25zOiBFbmRwb2ludERlY29yYXRpb25zLFxuKSB7XG4gIGNvbnN0IHJlcXVlc3RXaXRoRGVmYXVsdHMgPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZGVmYXVsdHMpO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyhcbiAgICAuLi5hcmdzOiBbUm91dGUsIFJlcXVlc3RQYXJhbWV0ZXJzP10gfCBbRW5kcG9pbnRPcHRpb25zXVxuICApIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAvLyBUaGVyZSBhcmUgY3VycmVudGx5IG5vIG90aGVyIGRlY29yYXRpb25zIHRoYW4gYC5tYXBUb0RhdGFgXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMsXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9uc1thbGlhc10gPSBvcHRpb25zW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuXG5leHBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZFR5cGVzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL3BhcmFtZXRlcnMtYW5kLXJlc3BvbnNlLXR5cGVzLmpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGkgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgZW5kcG9pbnRzVG9NZXRob2RzIH0gZnJvbSBcIi4vZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcIjtcblxuLy8gRXhwb3J0IHRoZSB0eXBlIGZvciBkb3duc3RyZWFtIHVzZXJzIGluIG9yZGVyIHRvIGZpeCBhIFR5cGVTY3JpcHQgZXJyb3Jcbi8vIFRoZSBpbmZlcnJlZCB0eXBlIG9mICdPY3Rva2l0JyBjYW5ub3QgYmUgbmFtZWQgd2l0aG91dCBhIHJlZmVyZW5jZSB0byAnLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC10eXBlcy90eXBlcy5qcycuIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LlxuZXhwb3J0IHR5cGUgeyBBcGkgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpW1wicmVzdFwiXSAmIEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbiIsICJjb25zdCBWRVJTSU9OID0gXCIyMS4xLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgT2N0b2tpdCBhcyBDb3JlIH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2cgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCI7XG5pbXBvcnQge1xuICBwYWdpbmF0ZVJlc3Rcbn0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCI7XG5pbXBvcnQgeyBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBPY3Rva2l0ID0gQ29yZS5wbHVnaW4ocmVxdWVzdExvZywgbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcywgcGFnaW5hdGVSZXN0KS5kZWZhdWx0cyhcbiAge1xuICAgIHVzZXJBZ2VudDogYG9jdG9raXQtcmVzdC5qcy8ke1ZFUlNJT059YFxuICB9XG4pO1xuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJleHBvcnQgeyBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgfTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlQXJnc1N0cmluZ1RvQXJndih2YWx1ZSwgZW52LCBmaWxlKSB7XG4gICAgLy8gKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopIE1hdGNoZXMgbmVzdGVkIHF1b3RlcyB1bnRpbCB0aGUgZmlyc3Qgc3BhY2Ugb3V0c2lkZSBvZiBxdW90ZXNcbiAgICAvLyBbXlxccydcIl0rIG9yIE1hdGNoIGlmIG5vdCBhIHNwYWNlICcgb3IgXCJcbiAgICAvLyAoWydcIl0pKFteXFw1XSo/KVxcNSBvciBNYXRjaCBcInF1b3RlZCB0ZXh0XCIgd2l0aG91dCBxdW90ZXNcbiAgICAvLyBgXFwzYCBhbmQgYFxcNWAgYXJlIGEgYmFja3JlZmVyZW5jZSB0byB0aGUgcXVvdGUgc3R5bGUgKCcgb3IgXCIpIGNhcHR1cmVkXG4gICAgdmFyIG15UmVnZXhwID0gLyhbXlxccydcIl0oW15cXHMnXCJdKihbJ1wiXSkoW15cXDNdKj8pXFwzKStbXlxccydcIl0qKXxbXlxccydcIl0rfChbJ1wiXSkoW15cXDVdKj8pXFw1L2dpO1xuICAgIHZhciBteVN0cmluZyA9IHZhbHVlO1xuICAgIHZhciBteUFycmF5ID0gW107XG4gICAgaWYgKGVudikge1xuICAgICAgICBteUFycmF5LnB1c2goZW52KTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgbXlBcnJheS5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICB2YXIgbWF0Y2g7XG4gICAgZG8ge1xuICAgICAgICAvLyBFYWNoIGNhbGwgdG8gZXhlYyByZXR1cm5zIHRoZSBuZXh0IHJlZ2V4IG1hdGNoIGFzIGFuIGFycmF5XG4gICAgICAgIG1hdGNoID0gbXlSZWdleHAuZXhlYyhteVN0cmluZyk7XG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSW5kZXggMSBpbiB0aGUgYXJyYXkgaXMgdGhlIGNhcHR1cmVkIGdyb3VwIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgLy8gSW5kZXggMCBpcyB0aGUgbWF0Y2hlZCB0ZXh0LCB3aGljaCB3ZSB1c2UgaWYgbm8gY2FwdHVyZWQgZ3JvdXAgZXhpc3RzXG4gICAgICAgICAgICBteUFycmF5LnB1c2goZmlyc3RTdHJpbmcobWF0Y2hbMV0sIG1hdGNoWzZdLCBtYXRjaFswXSkpO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAobWF0Y2ggIT09IG51bGwpO1xuICAgIHJldHVybiBteUFycmF5O1xufVxuLy8gQWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cywgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIGEgc3RyaW5nXG4vLyAoZXZlbiBhbiBlbXB0eSBzdHJpbmcpXG5mdW5jdGlvbiBmaXJzdFN0cmluZygpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgU2FmZXR5U3RyYXRlZ3kgfSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGNoZWNrT3V0cHV0IH0gZnJvbSBcIi4vY2hlY2tPdXRwdXRcIjtcblxuY29uc3QgTU9ERUxfUFJPVklERVIgPSBcImNvZGV4LWFjdGlvbi1yZXNwb25zZXMtcHJveHlcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUHJveHlDb25maWcoXG4gIGNvZGV4SG9tZTogc3RyaW5nLFxuICBwb3J0OiBudW1iZXIsXG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4oY29kZXhIb21lLCBcImNvbmZpZy50b21sXCIpO1xuXG4gIGxldCBleGlzdGluZyA9IFwiXCI7XG4gIHRyeSB7XG4gICAgZXhpc3RpbmcgPSBhd2FpdCBmcy5yZWFkRmlsZShjb25maWdQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIGV4aXN0aW5nID0gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlciA9IGAjIEFkZGVkIGJ5IGNvZGV4LWFjdGlvbi5cbm1vZGVsX3Byb3ZpZGVyID0gXCIke01PREVMX1BST1ZJREVSfVwiXG5cblxuYDtcbiAgY29uc3QgdGFibGUgPSBgXG5cbiMgQWRkZWQgYnkgY29kZXgtYWN0aW9uLlxuW21vZGVsX3Byb3ZpZGVycy4ke01PREVMX1BST1ZJREVSfV1cbm5hbWUgPSBcIkNvZGV4IEFjdGlvbiBSZXNwb25zZXMgUHJveHlcIlxuYmFzZV91cmwgPSBcImh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fS92MVwiXG53aXJlX2FwaSA9IFwicmVzcG9uc2VzXCJcbmA7XG5cbiAgLy8gUHJlcGVuZCBtb2RlbF9wcm92aWRlciBhdCB0aGUgdmVyeSB0b3AuXG4gIGxldCBvdXRwdXQgPSBgJHtoZWFkZXJ9JHtleGlzdGluZ30ke3RhYmxlfWA7XG5cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICAvLyBXZSBrbm93IHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBDT0RFWF9IT01FIGRpcmVjdG9yeSwgYnV0IGl0IGlzIG93bmVkXG4gICAgLy8gYnkgYW5vdGhlciB1c2VyLCBzbyB3ZSBuZWVkIHRvIHVzZSBzdWRvIHRvIHdyaXRlIHRoZSBmaWxlLlxuICAgIGNvbnN0IHRlbXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjb2RleC1jb25maWdcIikpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZW1wQ29uZmlnUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCBcImNvbmZpZy50b21sXCIpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDb25maWdQYXRoLCBvdXRwdXQsIFwidXRmOFwiKTtcbiAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJtdlwiLCB0ZW1wQ29uZmlnUGF0aCwgY29uZmlnUGF0aF0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5ybSh0ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IGZzLm1rZGlyKGNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGNvbmZpZ1BhdGgsIG91dHB1dCwgXCJ1dGY4XCIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDRFQUFBQSxVQUFBO0FBR0EsUUFBTUMsa0JBQU4sY0FBNkIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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Q0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1B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O0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxN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QUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1B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U0FBQUEsU0FBQSxLQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxLQUFBLElBQUEsQ0FBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxTQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxTQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsQ0FBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxXQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxLQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxZQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxXQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxhQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxZQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxLQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxlQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxlQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0Es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aEIsUUFBTSxpQkFBaUI7QUFDdkIsUUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQSxzQkFBQUM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixRQUFNLGlCQUFpQjtBQUN2QixRQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBO0FBQUEsTUFFQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBR0osUUFBSTtBQUNKLFFBQUk7QUFDRixjQUFRLFFBQVEsT0FBTztBQUFBLElBQ3pCLFFBQVE7QUFFTixjQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFBQSxJQUMxQjtBQUVBLFFBQU07QUFBQSxNQUNKLFdBQVc7QUFBQSxRQUNUO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FB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S0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FB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SSxLQUFLLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDN0MsV0FBWSxXQUFRLFlBQVEsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQUEsRUFDM0M7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJBcmd1bWVudCIsICJleHBvcnRzIiwgIkhlbHAiLCAiY21kIiwgImV4cG9ydHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiT3B0aW9uIiwgInN0ciIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJmcyIsICJwcm9jZXNzIiwgIkFyZ3VtZW50IiwgIkNvbW1hbmRlckVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgIkNvbW1hbmQiLCAiaG9vayIsICJvcHRpb24iLCAiZXhwb3J0cyIsICJBcmd1bWVudCIsICJDb21tYW5kIiwgIkNvbW1hbmRlckVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgImV4cG9ydHMiLCAib3MiLCAiQ29tbWFuZCIsICJleHBvcnRzIiwgImZzIiwgIm9zIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9wdGlvbnMiLCAic29ja2V0IiwgInJlcXVpcmVfdHVubmVsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkJsb2IiLCAicGF0aCIsICJpZHgiLCAic3RyZWFtIiwgImVyciIsICJoYW5kbGVyIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInN0cnVjdHVyZWRDbG9uZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGVyZm9ybWFuY2UiLCAicmVxdWVzdCIsICJpdGVyYXRvciIsICJraW5kIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImF0b2IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImVudHJ5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJCbG9iIiwgImNodW5rIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBhdGgiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImVyciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInNlc3Npb24iLCAib25Db25uZWN0VGltZW91dCIsICJleHBvcnRzIiwgIkVSUk9SIiwgImV4cG9ydHMiLCAiVFlQRSIsICJGTEFHUyIsICJMRU5JRU5UX0ZMQUdTIiwgIk1FVEhPRFMiLCAiRklOSVNIIiwgIkhFQURFUl9TVEFURSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjb25uZWN0IiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJzb2NrZXQiLCAicGF0aCIsICJoZWFkZXJzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJXZWFrUmVmIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJub29wIiwgImNvbnN1bWUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiY2FsbGJhY2siLCAicmVzIiwgIm9wYXF1ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibW9ja0Rpc3BhdGNoIiwgInBhdGgiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInN0YXR1c0NvZGUiLCAiZGF0YSIsICJyZXNwb25zZU9wdGlvbnMiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJVUkwiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAib3B0cyIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImVyciIsICJyZXF1aXJlX2dsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJyZXF1aXJlX3JlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWVzdCIsICJhYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAicmVxdWVzdCIsICJnbG9iYWxUaGlzIiwgIml0ZXJhdG9yIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInR5cGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJIdHRwQ29kZXMiLCAiZXhwb3J0cyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAidXNlckFnZW50IiwgImluZm8iLCAiaGFuZGxlciIsICJsb3dlcmNhc2VLZXlzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJ3cml0ZUZpbGUiLCAiZXhwb3J0cyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIl9hIiwgInBhdGgiLCAiZXhwb3J0cyIsICJvcyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9zIiwgInBhdGgiLCAiRXhpdENvZGUiLCAiZXhwb3J0cyIsICJzZXRPdXRwdXQiLCAiaW5mbyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJOdWxsT2JqZWN0IiwgInBhcnNlIiwgInNhZmVQYXJzZSIsICJjb21tYW5kZXIiLCAiZnMiLCAib3MiLCAicGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJpbXBvcnRfcHJvbWlzZXMiLCAiZnMiLCAiaW1wb3J0X25vZGVfY2hpbGRfcHJvY2VzcyIsICJpbXBvcnRfcHJvbWlzZXMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJpbXBvcnRfbm9kZV9jaGlsZF9wcm9jZXNzIiwgIlNVRE9fUEFUSCIsICJwYXRoIiwgIlNVRE9fUEFUSCIsICJpc1BhdGhXaXRoaW4iLCAicGF0aCIsICJpbXBvcnRfbm9kZV9jcnlwdG8iLCAiU1VET19QQVRIIiwgImltcG9ydF9ub2RlX2ZzIiwgImltcG9ydF9wcm9taXNlcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgInBhdGgiLCAiZnNDb25zdGFudHMiLCAib3MiLCAicGF0aCIsICJwcm9ncmFtIiwgImNvZGUiLCAiY29yZSIsICJuYW1lIiwgIm1ldGhvZCIsICJob29rIiwgImhvb2siLCAiVkVSU0lPTiIsICJpc1BsYWluT2JqZWN0IiwgIndpdGhEZWZhdWx0cyIsICJWRVJTSU9OIiwgIndpdGhEZWZhdWx0cyIsICJyZXF1ZXN0IiwgImVuZHBvaW50IiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJob29rIiwgImF1dGgiLCAiVkVSU0lPTiIsICJyZXF1ZXN0IiwgInBhdGgiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJlbmRwb2ludCIsICJvcHRpb25zIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJPY3Rva2l0IiwgIlZFUlNJT04iLCAiT2N0b2tpdCIsICJmcyIsICJwYXRoIiwgIm9zIiwgInByb2dyYW0iLCAic2V0T3V0cHV0IiwgInN0YXQiXQp9Cg== diff --git a/docs/security.md b/docs/security.md index 94894a7..ee67fe2 100644 --- a/docs/security.md +++ b/docs/security.md @@ -31,6 +31,36 @@ Permission profiles constrain commands that Codex runs; they do not replace the `drop-sudo` or a deliberately configured `unprivileged-user` when a profile grants filesystem writes or network access. +On Linux, `drop-sudo` creates a unique locked system account and grants it ACL access only to the +checkout and the Codex state, schema, and output paths needed for the invocation. Codex starts under +that distinct UID with one primary group, no process capabilities, and `no_new_privs`. A trusted gate +prevents Codex configuration or MCP startup from running until the action has revoked the original +job user's sudo authorization. The separate UID prevents Codex from signaling or attaching to +runner-owned processes that still carry groups such as `docker`. + +The action does not grant root ACL access to the resolved Codex executable. Its canonical target must +already be a world-readable and executable regular file, and each parent directory must already be +world-searchable. This prevents a workflow-controlled `PATH` symlink from using setup as an ACL +confused deputy for a runner- or privileged-group-only executable. + +ACL transfer is similarly limited to runner-owned roots and files. The action rejects symbolic-link +components and non-runner-owned parent directories that are reachable only through one of the +runner's supplementary groups, and it refuses to transfer ACLs through hard-linked files. Existing +sockets, FIFOs, devices, foreign-owned files, and new files created concurrently by the runner do not +receive the Codex account's ACL. This is what keeps a Docker socket or comparable group-owned runtime +endpoint unavailable to the clean identity. + +The separate execution identity is currently Linux-only. On macOS, `drop-sudo` revokes sudo but +continues to run Codex as the default user, so it does not clear other supplementary groups already +present in that process. Do not treat the macOS strategy as isolation from non-sudo group resources. + +This clean execution identity applies only to Codex launched by the action. A direct `codex` command +in a later workflow step is a new descendant of the runner service and inherits that service's +original groups. The sudo revocation also means a second protected action invocation cannot prepare +another identity in the same job. Put each protected invocation in a fresh job. On persistent +self-hosted runners, prefer a preprovisioned `unprivileged-user`; Linux `drop-sudo` is designed for +disposable runners and leaves its locked per-invocation account on the host. + Permission profiles and the legacy `sandbox` input do not compose. The action rejects both inputs together, but a `sandbox_mode` setting in `codex-args` or a loaded `config.toml` also opts Codex into the legacy sandbox model. Review every loaded configuration layer when a workflow is expected to use diff --git a/package.json b/package.json index dc068e7..578768b 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "build": "esbuild src/main.ts --sourcemap=inline --format=cjs --bundle --platform=node --target=node20 --outdir=dist", "check": "tsc --noEmit", - "test": "pnpm run build && node --test test/*.test.mjs" + "test": "pnpm run build && node --test test/*.test.mjs", + "test:privileged": "pnpm run build && node --test test/privileged/*.test.mjs" }, "dependencies": { "@actions/core": "^1.11.1", diff --git a/src/dropSudo.ts b/src/dropSudo.ts index 3f31548..7eb25fd 100644 --- a/src/dropSudo.ts +++ b/src/dropSudo.ts @@ -21,6 +21,7 @@ export interface DropSudoOptions { const LINUX_PLATFORM = "linux"; const MACOS_PLATFORM = "darwin"; +const SUDO_PATH = "/usr/bin/sudo"; export async function dropSudo(options: DropSudoOptions): Promise { const platform = process.platform; @@ -39,15 +40,15 @@ export async function dropSudo(options: DropSudoOptions): Promise { await ensurePasswordlessSudo(); // `sudo -K` invalidates cached credentials but exits non-zero when no ticket // exists yet. Ignore that failure so fresh runners don't blow up. - await execCommand("sudo", ["-K"], { ignoreFailure: true }); + await execCommand(SUDO_PATH, ["-K"], { ignoreFailure: true }); const execArgs = [...process.execArgv]; const scriptPath = process.argv[1]; // Re-enter this command under sudo so the privilege-dropping work happens in a // single place regardless of the host platform. - await execCommand("sudo", [ + await execCommand(SUDO_PATH, [ "-n", - "node", + process.execPath, ...execArgs, scriptPath, "drop-sudo", @@ -60,7 +61,18 @@ export async function dropSudo(options: DropSudoOptions): Promise { // Invalidate the sudo ticket again; ignore failures for the same reason as // above (some environments return an error when no timestamp exists). - await execCommand("sudo", ["-K"], { ignoreFailure: true }); + await execCommand(SUDO_PATH, ["-K"], { ignoreFailure: true }); +} + +export async function verifySudoUnavailable(): Promise { + const result = await execCommand(SUDO_PATH, ["-n", "true"], { + capture: true, + ignoreFailure: true, + }); + if (result.code === 0) { + throw new Error("Expected sudo to be disabled, but sudo succeeded."); + } + console.log("Confirmed sudo privilege is disabled."); } async function dropSudoWithPrivileges(options: DropSudoOptions): Promise { @@ -162,7 +174,7 @@ async function dropSudoWithPrivileges(options: DropSudoOptions): Promise { async function ensurePasswordlessSudo(): Promise { try { - await execCommand("sudo", ["-n", "true"], { capture: true }); + await execCommand(SUDO_PATH, ["-n", "true"], { capture: true }); } catch (error) { throw new Error("Unexpected: passwordless sudo not available."); } diff --git a/src/linuxDropSudo.ts b/src/linuxDropSudo.ts new file mode 100644 index 0000000..ba39a94 --- /dev/null +++ b/src/linuxDropSudo.ts @@ -0,0 +1,503 @@ +import { randomBytes } from "node:crypto"; +import { spawn } from "node:child_process"; +import { lstat, realpath, stat } from "node:fs/promises"; +import path from "node:path"; +import { discoverNestedGitRepositories } from "./linuxGitRepositories"; +import { + ENV_PATH, + FIND_PATH, + GIT_PATH, + ID_PATH, + NOLOGIN_PATH, + SETFACL_PATH, + SETPRIV_PATH, + SHELL_PATH, + SUDO_PATH, + USERADD_PATH, + USERDEL_PATH, +} from "./linuxSystemPaths"; + +const TRUSTED_EXECUTABLES = [ + SUDO_PATH, + SETPRIV_PATH, + SETFACL_PATH, + FIND_PATH, + ENV_PATH, + ID_PATH, + GIT_PATH, + USERADD_PATH, + USERDEL_PATH, + NOLOGIN_PATH, + SHELL_PATH, +]; + +export interface LinuxCodexIdentity { + user: string; + uid: number; + gid: number; + home: string; + workingDirectory: string; + codexExecutable: string; + gitSafeDirectories: Array; +} + +interface PrepareLinuxCodexIdentityOptions { + runnerUid: number; + workingDirectory: string; + codexHome: string | null; + outputFile: string; + outputSchema: string | null; + codexExecutable: string; +} + +/** + * Creates a per-invocation Linux account and grants it access only to the paths Codex needs. + * The account deliberately differs from the runner identity so Codex cannot signal or ptrace + * runner-owned processes that still carry supplementary groups such as `docker`. + */ +export async function prepareLinuxCodexIdentity({ + runnerUid, + workingDirectory, + codexHome, + outputFile, + outputSchema, + codexExecutable, +}: PrepareLinuxCodexIdentityOptions): Promise { + await Promise.all(TRUSTED_EXECUTABLES.map(verifyTrustedExecutable)); + + const resolvedWorkingDirectory = await resolveDirectory(workingDirectory); + const resolvedCodexExecutable = await resolveCodexExecutable(codexExecutable); + const workspaceAccess = await discoverWorkspaceRoots( + resolvedWorkingDirectory + ); + const workspaceRoots = [...workspaceAccess.roots]; + if (codexHome != null) { + workspaceRoots.push(await resolveDirectory(codexHome)); + } + const accessRoots = removeNestedPaths(workspaceRoots); + const user = createIdentityName(runnerUid); + const home = `/home/${user}`; + let created = false; + let accessGranted = false; + + try { + await runRootCommand(USERADD_PATH, [ + "--system", + "--create-home", + "--user-group", + "--home-dir", + home, + "--shell", + NOLOGIN_PATH, + user, + ]); + created = true; + + const uid = await readNumericIdentity(user, "-u"); + const gid = await readNumericIdentity(user, "-g"); + if (uid === 0 || uid === runnerUid) { + throw new Error( + `Linux drop-sudo created an invalid Codex UID (${uid}); expected a non-root identity distinct from runner UID ${runnerUid}.` + ); + } + const groups = await readIdentityGroups(user); + if (groups.length !== 1 || groups[0] !== gid) { + throw new Error( + `Linux drop-sudo requires the dedicated Codex account to have only primary GID ${gid}; found ${groups.join(", ")}.` + ); + } + + accessGranted = true; + await grantFileAccess(outputFile, uid, "rw-", runnerUid); + if (outputSchema != null) { + await grantFileAccess(outputSchema, uid, "r--", runnerUid); + } + for (const root of accessRoots) { + await grantTreeAccess(root, uid, runnerUid); + } + + console.log( + `Prepared dedicated Linux Codex identity ${user} (uid ${uid}, gid ${gid}).` + ); + return { + user, + uid, + gid, + home, + workingDirectory: resolvedWorkingDirectory, + codexExecutable: resolvedCodexExecutable, + gitSafeDirectories: workspaceAccess.gitSafeDirectories, + }; + } catch (error) { + if (created && !accessGranted) { + await runRootCommand(USERDEL_PATH, ["--remove", user], true); + } else if (created) { + console.warn( + `Linux drop-sudo setup failed after granting ACLs; leaving locked account '${user}' in place to prevent UID reuse.` + ); + } + throw error; + } +} + +async function discoverWorkspaceRoots( + workingDirectory: string +): Promise<{ + roots: Array; + gitSafeDirectories: Array; +}> { + const roots = [workingDirectory]; + const gitSafeDirectories = new Set(); + const githubWorkspace = process.env.GITHUB_WORKSPACE; + if (githubWorkspace != null && githubWorkspace.length > 0) { + try { + const resolvedWorkspace = await resolveDirectory(githubWorkspace); + if (isPathWithin(workingDirectory, resolvedWorkspace)) { + roots.push(resolvedWorkspace); + } + } catch { + // Fall back to the requested working directory when GITHUB_WORKSPACE is stale. + } + } + + const gitRoot = await runCommand( + GIT_PATH, + ["-C", workingDirectory, "rev-parse", "--show-toplevel"], + true + ); + if (gitRoot.code === 0 && gitRoot.stdout.trim().length > 0) { + try { + const resolvedGitRoot = await resolveDirectory(gitRoot.stdout.trim()); + if (isPathWithin(workingDirectory, resolvedGitRoot)) { + roots.push(resolvedGitRoot); + gitSafeDirectories.add(resolvedGitRoot); + } + } catch { + // `workingDirectory` is still sufficient for non-standard Git layouts. + } + } + + const safeDirectoryRoots = removeNestedPaths(roots); + for (const root of safeDirectoryRoots) { + gitSafeDirectories.add(root); + for (const repository of await discoverNestedGitRepositories(root)) { + gitSafeDirectories.add(repository); + } + } + return { + roots, + gitSafeDirectories: [...gitSafeDirectories], + }; +} + +async function grantTreeAccess( + root: string, + uid: number, + runnerUid: number +): Promise { + assertSafeRecursiveRoot(root); + const rootStats = await stat(root); + if (rootStats.uid !== runnerUid) { + throw new Error( + `Linux drop-sudo requires access roots to be owned by runner UID ${runnerUid}; '${root}' is owned by UID ${rootStats.uid}.` + ); + } + await grantTraverseAccess(root, uid, runnerUid); + await runRootCommand(FIND_PATH, [ + "-P", + root, + "-xdev", + "(", + "-type", + "d", + "-o", + "(", + "-type", + "f", + "-links", + "1", + ")", + ")", + "-uid", + String(runnerUid), + "-exec", + SETFACL_PATH, + "-m", + `u:${uid}:rwX,u:${runnerUid}:rwX`, + "--", + "{}", + "+", + ]); + await runRootCommand(FIND_PATH, [ + "-P", + root, + "-xdev", + "-type", + "d", + "-uid", + String(runnerUid), + "-exec", + SETFACL_PATH, + "-m", + `u:${uid}:rwx,u:${runnerUid}:rwx,d:u:${runnerUid}:rwx`, + "--", + "{}", + "+", + ]); +} + +async function grantFileAccess( + file: string, + uid: number, + permissions: "rw-" | "r--", + runnerUid: number +): Promise { + const absoluteFile = path.resolve(file); + const linkStats = await lstat(absoluteFile); + const canonicalFile = await realpath(absoluteFile); + if (linkStats.isSymbolicLink() || canonicalFile !== absoluteFile) { + throw new Error( + `Linux drop-sudo refuses a file path containing symbolic links: '${absoluteFile}'.` + ); + } + const fileStats = await stat(canonicalFile); + if (!fileStats.isFile()) { + throw new Error( + `Linux drop-sudo expected a regular file but found '${absoluteFile}'.` + ); + } + if (fileStats.uid !== runnerUid) { + if ((fileStats.mode & 0o004) === 0) { + throw new Error( + `Linux drop-sudo refuses to transfer group-derived file access for '${absoluteFile}'. The file must be owned by runner UID ${runnerUid} or already be world-readable.` + ); + } + await grantTraverseAccess(absoluteFile, uid, runnerUid); + return; + } + if (fileStats.nlink !== 1) { + throw new Error( + `Linux drop-sudo refuses to grant access to a file with multiple hard links: '${absoluteFile}'.` + ); + } + await grantTraverseAccess(absoluteFile, uid, runnerUid); + await runRootCommand(SETFACL_PATH, [ + "-m", + `u:${uid}:${permissions}`, + "--", + canonicalFile, + ]); +} + +async function resolveCodexExecutable(file: string): Promise { + const absoluteFile = path.resolve(file); + const canonicalFile = await realpath(absoluteFile); + const fileStats = await stat(canonicalFile); + if (!fileStats.isFile() || (fileStats.mode & 0o005) !== 0o005) { + throw new Error( + `Linux drop-sudo requires the Codex executable to resolve to a regular file that is already world-readable and executable: '${absoluteFile}'.` + ); + } + + let current = path.dirname(canonicalFile); + for (;;) { + const directoryStats = await stat(current); + if (!directoryStats.isDirectory() || (directoryStats.mode & 0o001) === 0) { + throw new Error( + `Linux drop-sudo requires every Codex executable parent directory to already be world-searchable: '${current}'.` + ); + } + const parent = path.dirname(current); + if (parent === current) { + break; + } + current = parent; + } + + return canonicalFile; +} + +async function grantTraverseAccess( + target: string, + uid: number, + runnerUid: number +): Promise { + const ancestors: Array = []; + let current = path.dirname(path.resolve(target)); + while (current !== path.parse(current).root) { + const directoryStats = await stat(current); + if (!directoryStats.isDirectory()) { + throw new Error( + `Linux drop-sudo expected a directory while checking '${current}'.` + ); + } + if (directoryStats.uid === runnerUid) { + ancestors.push(current); + } else if ((directoryStats.mode & 0o001) === 0) { + throw new Error( + `Linux drop-sudo refuses to transfer group-derived directory access through '${current}'. It must be owned by runner UID ${runnerUid} or already be world-searchable.` + ); + } + current = path.dirname(current); + } + if (ancestors.length > 0) { + await runRootCommand(SETFACL_PATH, [ + "-m", + `u:${uid}:--x`, + "--", + ...ancestors, + ]); + } +} + +async function readNumericIdentity( + user: string, + flag: "-u" | "-g" +): Promise { + const result = await runCommand(ID_PATH, [flag, user]); + const value = Number(result.stdout.trim()); + if (!Number.isSafeInteger(value) || value < 0) { + throw new Error(`Could not resolve ${flag} for dedicated user '${user}'.`); + } + return value; +} + +async function readIdentityGroups(user: string): Promise> { + const result = await runCommand(ID_PATH, ["-G", user]); + const groups = result.stdout + .trim() + .split(/\s+/) + .filter((value) => value.length > 0) + .map(Number); + if (groups.some((group) => !Number.isSafeInteger(group) || group < 0)) { + throw new Error(`Could not resolve groups for dedicated user '${user}'.`); + } + return [...new Set(groups)]; +} + +async function verifyTrustedExecutable(file: string): Promise { + let canonicalFile: string; + let fileStats; + try { + canonicalFile = await realpath(file); + fileStats = await stat(canonicalFile); + } catch { + throw new Error( + `Linux drop-sudo requires trusted executable '${file}'.` + ); + } + if ( + !fileStats.isFile() || + fileStats.uid !== 0 || + (fileStats.mode & 0o111) === 0 || + (fileStats.mode & 0o022) !== 0 + ) { + throw new Error( + `Linux drop-sudo requires '${file}' to resolve to a root-owned executable that is not group- or world-writable.` + ); + } +} + +async function resolveDirectory(directory: string): Promise { + const absoluteDirectory = path.resolve(directory); + const resolved = await realpath(absoluteDirectory); + if (resolved !== absoluteDirectory) { + throw new Error( + `Linux drop-sudo refuses a directory path containing symbolic links: '${absoluteDirectory}'.` + ); + } + const directoryStats = await stat(resolved); + if (!directoryStats.isDirectory()) { + throw new Error( + `Linux drop-sudo expected a directory but found '${resolved}'.` + ); + } + return resolved; +} + +function removeNestedPaths(paths: Array): Array { + const sorted = [...new Set(paths.map((value) => path.resolve(value)))].sort( + (left, right) => left.length - right.length + ); + return sorted.filter( + (candidate, index) => + !sorted + .slice(0, index) + .some((parent) => isPathWithin(candidate, parent)) + ); +} + +function isPathWithin(candidate: string, parent: string): boolean { + const relative = path.relative(parent, candidate); + return ( + relative === "" || + (!relative.startsWith("..") && !path.isAbsolute(relative)) + ); +} + +function assertSafeRecursiveRoot(root: string): void { + if (root === path.parse(root).root) { + throw new Error( + "Linux drop-sudo refuses to grant recursive access to the filesystem root." + ); + } +} + +function createIdentityName(runnerUid: number): string { + const suffix = randomBytes(4).toString("hex"); + const prefix = `codexaction${runnerUid}`.slice(0, 23); + return `${prefix}x${suffix}`; +} + +async function runRootCommand( + command: string, + args: Array, + ignoreFailure = false +): Promise { + return await runCommand( + SUDO_PATH, + ["-n", "--", command, ...args], + ignoreFailure + ); +} + +interface CommandResult { + code: number; + stdout: string; + stderr: string; +} + +async function runCommand( + command: string, + args: Array, + ignoreFailure = false +): Promise { + return await new Promise((resolve, reject) => { + const child = spawn(command, args, { + stdio: ["ignore", "pipe", "pipe"], + }); + let stdout = ""; + let stderr = ""; + child.stdout.setEncoding("utf8"); + child.stdout.on("data", (chunk) => { + stdout += chunk; + }); + child.stderr.setEncoding("utf8"); + child.stderr.on("data", (chunk) => { + stderr += chunk; + }); + child.once("error", reject); + child.once("close", (code) => { + const exitCode = code ?? 1; + if (exitCode !== 0 && !ignoreFailure) { + reject( + new Error( + `Command failed: ${command} ${args.join(" ")} (exit code ${exitCode}): ${stderr.trim()}` + ) + ); + return; + } + resolve({ code: exitCode, stdout, stderr }); + }); + }); +} diff --git a/src/linuxDropSudoGate.ts b/src/linuxDropSudoGate.ts new file mode 100644 index 0000000..e70403d --- /dev/null +++ b/src/linuxDropSudoGate.ts @@ -0,0 +1,183 @@ +import { randomBytes } from "node:crypto"; +import { type ChildProcess } from "node:child_process"; +import { type LinuxCodexIdentity } from "./linuxDropSudo"; +import { + ENV_PATH, + SETPRIV_PATH, + SHELL_PATH, + SUDO_PATH, +} from "./linuxSystemPaths"; + +const GATE_SCRIPT = [ + `printf '%s\\n' "$1"`, + `IFS= read -r gate || exit 125`, + `[ "$gate" = "$2" ] || exit 125`, + `shift 2`, + `exec "$@"`, +].join("; "); + +export interface GatedCodexCommand { + program: string; + args: Array; + readyToken: string; + goToken: string; +} + +/** Builds a command that stops at a trusted shell gate after the identity transition. */ +export function buildGatedCodexCommand({ + identity, + codexArgs, +}: { + identity: LinuxCodexIdentity; + codexArgs: Array; +}): GatedCodexCommand { + const readyToken = `codex-action-ready-${randomBytes(16).toString("hex")}`; + const goToken = `codex-action-go-${randomBytes(16).toString("hex")}`; + const args = [ + "-n", + "-E", + "--", + SETPRIV_PATH, + `--reuid=${identity.uid}`, + `--regid=${identity.gid}`, + "--clear-groups", + "--no-new-privs", + "--inh-caps=-all", + "--ambient-caps=-all", + "--bounding-set=-all", + "--", + ENV_PATH, + "-u", + "SUDO_COMMAND", + "-u", + "SUDO_USER", + "-u", + "SUDO_UID", + "-u", + "SUDO_GID", + "-u", + "GITHUB_ENV", + "-u", + "GITHUB_PATH", + "-u", + "GITHUB_OUTPUT", + "-u", + "GITHUB_STEP_SUMMARY", + "-u", + "ENV", + "-u", + "BASH_ENV", + "-u", + "SHELLOPTS", + `HOME=${identity.home}`, + `USER=${identity.user}`, + `LOGNAME=${identity.user}`, + `PATH=${process.env.PATH ?? ""}`, + ]; + + identity.gitSafeDirectories.forEach((directory, index) => { + args.push( + `GIT_CONFIG_KEY_${index}=safe.directory`, + `GIT_CONFIG_VALUE_${index}=${directory}` + ); + }); + args.push( + `GIT_CONFIG_COUNT=${identity.gitSafeDirectories.length}`, + SHELL_PATH, + "-c", + GATE_SCRIPT, + "codex-action-gate", + readyToken, + goToken, + identity.codexExecutable, + ...codexArgs + ); + + return { program: SUDO_PATH, args, readyToken, goToken }; +} + +export async function waitForLinuxGate( + child: ChildProcess, + readyToken: string +): Promise { + const stdout = child.stdout; + if (stdout == null) { + throw new Error("Linux drop-sudo gate requires a stdout pipe."); + } + stdout.setEncoding("utf8"); + + await new Promise((resolve, reject) => { + let buffered = ""; + const cleanup = () => { + stdout.off("data", onData); + stdout.off("error", onError); + stdout.off("end", onEnd); + child.off("close", onClose); + }; + const fail = (error: Error) => { + cleanup(); + reject(error); + }; + const onData = (chunk: string) => { + buffered += chunk; + if (buffered.length > 1024) { + fail( + new Error("Linux drop-sudo gate emitted an invalid readiness marker.") + ); + return; + } + const newline = buffered.indexOf("\n"); + if (newline < 0) { + return; + } + const line = buffered.slice(0, newline).replace(/\r$/, ""); + if (line !== readyToken) { + fail( + new Error("Linux drop-sudo gate did not confirm the clean identity.") + ); + return; + } + + const remainder = buffered.slice(newline + 1); + cleanup(); + if (remainder.length > 0) { + process.stdout.write(remainder); + } + stdout.pipe(process.stdout, { end: false }); + resolve(); + }; + const onError = (error: Error) => fail(error); + const onEnd = () => + fail(new Error("Linux drop-sudo gate exited before becoming ready.")); + const onClose = () => + fail(new Error("Linux drop-sudo gate closed before becoming ready.")); + + stdout.on("data", onData); + stdout.once("error", onError); + stdout.once("end", onEnd); + child.once("close", onClose); + }); +} + +export async function endChildInput( + child: ChildProcess, + input: string +): Promise { + const stdin = child.stdin; + if (stdin == null) { + throw new Error("Codex child process does not have a stdin pipe."); + } + await new Promise((resolve, reject) => { + const onError = (error: Error) => { + stdin.off("finish", onFinish); + reject(error); + }; + const onFinish = () => { + stdin.off("error", onError); + resolve(); + }; + stdin.once("error", onError); + stdin.once("finish", onFinish); + stdin.end(input); + }); +} diff --git a/src/linuxGitRepositories.ts b/src/linuxGitRepositories.ts new file mode 100644 index 0000000..adbd317 --- /dev/null +++ b/src/linuxGitRepositories.ts @@ -0,0 +1,92 @@ +import { spawn } from "node:child_process"; +import { realpath } from "node:fs/promises"; +import path from "node:path"; +import { FIND_PATH } from "./linuxSystemPaths"; + +const MAX_GIT_DIRECTORY_OUTPUT_BYTES = 64 * 1024; + +export async function discoverNestedGitRepositories( + root: string +): Promise> { + const output = await new Promise((resolve, reject) => { + const child = spawn(FIND_PATH, [ + "-P", + root, + "-xdev", + "-name", + ".git", + "(", + "-type", + "f", + "-o", + "-type", + "d", + ")", + "-printf", + "%h\\0", + "-prune", + ]); + let stdout = ""; + let stderr = ""; + let exceededLimit = false; + child.stdout.setEncoding("utf8"); + child.stdout.on("data", (chunk: string) => { + stdout += chunk; + if ( + !exceededLimit && + Buffer.byteLength(stdout) > MAX_GIT_DIRECTORY_OUTPUT_BYTES + ) { + exceededLimit = true; + child.kill("SIGKILL"); + } + }); + child.stderr.setEncoding("utf8"); + child.stderr.on("data", (chunk: string) => { + if (stderr.length < 4096) { + stderr += chunk; + } + }); + child.once("error", reject); + child.once("close", (code) => { + if (exceededLimit) { + reject( + new Error( + `Linux drop-sudo found too many nested Git repositories beneath '${root}'.` + ) + ); + } else if (code !== 0) { + reject( + new Error( + `Linux drop-sudo could not discover nested Git repositories beneath '${root}': ${stderr.trim()}` + ) + ); + } else { + resolve(stdout); + } + }); + }); + + const repositories: Array = []; + for (const candidate of output.split("\0")) { + if (candidate.length === 0) { + continue; + } + const absoluteCandidate = path.resolve(candidate); + const resolvedCandidate = await realpath(absoluteCandidate); + if ( + resolvedCandidate === absoluteCandidate && + isPathWithin(resolvedCandidate, root) + ) { + repositories.push(resolvedCandidate); + } + } + return repositories; +} + +function isPathWithin(candidate: string, parent: string): boolean { + const relative = path.relative(parent, candidate); + return ( + relative === "" || + (!relative.startsWith("..") && !path.isAbsolute(relative)) + ); +} diff --git a/src/linuxOutputFile.ts b/src/linuxOutputFile.ts new file mode 100644 index 0000000..ddd14d1 --- /dev/null +++ b/src/linuxOutputFile.ts @@ -0,0 +1,71 @@ +import { constants as fsConstants } from "node:fs"; +import { lstat, open, realpath, type FileHandle } from "node:fs/promises"; +import path from "node:path"; + +export async function prepareLinuxOutputFile(file: string): Promise<{ + file: string; + handle: FileHandle; +}> { + const absoluteFile = path.resolve(file); + const absoluteParent = path.dirname(absoluteFile); + const canonicalParent = await realpath(absoluteParent); + if (canonicalParent !== absoluteParent) { + throw new Error( + `Linux drop-sudo refuses an output path containing symbolic links: '${absoluteFile}'.` + ); + } + try { + const pathStats = await lstat(absoluteFile); + if (pathStats.isSymbolicLink()) { + throw new Error( + `Linux drop-sudo refuses an output path containing symbolic links: '${absoluteFile}'.` + ); + } + if (!pathStats.isFile()) { + throw new Error( + `Linux drop-sudo requires a regular output file; found '${absoluteFile}'.` + ); + } + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== "ENOENT") { + throw error; + } + } + const handle = await open( + absoluteFile, + fsConstants.O_APPEND | + fsConstants.O_CREAT | + fsConstants.O_RDWR | + fsConstants.O_NOFOLLOW, + 0o600 + ); + try { + const fileStats = await handle.stat(); + if (!fileStats.isFile()) { + throw new Error( + `Linux drop-sudo requires a regular output file; found '${absoluteFile}'.` + ); + } + const runnerUid = process.getuid!(); + if (fileStats.uid !== runnerUid) { + throw new Error( + `Linux drop-sudo requires the output file to be owned by runner UID ${runnerUid}; '${absoluteFile}' is owned by UID ${fileStats.uid}.` + ); + } + if (fileStats.nlink !== 1) { + throw new Error( + `Linux drop-sudo refuses an output file with multiple hard links: '${absoluteFile}'.` + ); + } + const canonicalFile = await realpath(absoluteFile); + if (canonicalFile !== absoluteFile) { + throw new Error( + `Linux drop-sudo refuses an output path containing symbolic links: '${absoluteFile}'.` + ); + } + } catch (error) { + await handle.close(); + throw error; + } + return { file: absoluteFile, handle }; +} diff --git a/src/linuxSystemPaths.ts b/src/linuxSystemPaths.ts new file mode 100644 index 0000000..30f92d0 --- /dev/null +++ b/src/linuxSystemPaths.ts @@ -0,0 +1,11 @@ +export const SUDO_PATH = "/usr/bin/sudo"; +export const SETPRIV_PATH = "/usr/bin/setpriv"; +export const SETFACL_PATH = "/usr/bin/setfacl"; +export const FIND_PATH = "/usr/bin/find"; +export const ENV_PATH = "/usr/bin/env"; +export const ID_PATH = "/usr/bin/id"; +export const GIT_PATH = "/usr/bin/git"; +export const USERADD_PATH = "/usr/sbin/useradd"; +export const USERDEL_PATH = "/usr/sbin/userdel"; +export const NOLOGIN_PATH = "/usr/sbin/nologin"; +export const SHELL_PATH = "/bin/sh"; diff --git a/src/runCodexExec.ts b/src/runCodexExec.ts index 92eecb6..b4f106f 100644 --- a/src/runCodexExec.ts +++ b/src/runCodexExec.ts @@ -1,9 +1,30 @@ import { spawn } from "child_process"; -import { chmod, mkdtemp, readFile, rm, writeFile } from "fs/promises"; +import { + chmod, + mkdir, + mkdtemp, + readFile, + realpath, + rm, + writeFile, + type FileHandle, +} from "fs/promises"; import path from "path"; import os from "os"; import { setOutput } from "@actions/core"; import { checkOutput } from "./checkOutput"; +import { dropSudo, verifySudoUnavailable } from "./dropSudo"; +import { + prepareLinuxCodexIdentity, + type LinuxCodexIdentity, +} from "./linuxDropSudo"; +import { + buildGatedCodexCommand, + endChildInput, + waitForLinuxGate, + type GatedCodexCommand, +} from "./linuxDropSudoGate"; +import { prepareLinuxOutputFile } from "./linuxOutputFile"; export type PromptSource = | { @@ -107,10 +128,68 @@ export async function runCodexExec({ extraArgs, }); - const command: Array = []; + const commandPrefix: Array = []; + let linuxDropSudoUser: string | null = null; + let linuxGate: GatedCodexCommand | null = null; + let linuxIdentity: LinuxCodexIdentity | null = null; + let linuxOutputHandle: FileHandle | null = null; + let effectiveCd = cd; let pathToCodex = "codex"; - if (safetyStrategy === "unprivileged-user") { + if (safetyStrategy === "drop-sudo" && process.platform === "linux") { + if ( + typeof process.getuid !== "function" || + typeof process.getgid !== "function" + ) { + throw new Error("Linux drop-sudo requires POSIX user and group APIs."); + } + + const uid = process.getuid(); + if (uid === 0) { + throw new Error( + "Linux drop-sudo cannot run Codex from a runner whose default user is root." + ); + } + + pathToCodex = (await checkOutput(["/usr/bin/which", "codex"])).trim(); + if (!pathToCodex) { + throw new Error("could not find 'codex' in PATH"); + } + + linuxDropSudoUser = os.userInfo().username; + + if (codexHome != null) { + const absoluteCodexHome = path.resolve(codexHome); + await mkdir(absoluteCodexHome, { recursive: true }); + codexHome = await realpath(absoluteCodexHome); + if (codexHome !== absoluteCodexHome) { + throw new Error( + `Linux drop-sudo refuses a Codex home path containing symbolic links: '${absoluteCodexHome}'.` + ); + } + } + const preparedOutput = await prepareLinuxOutputFile(outputFile.file); + outputFile.file = preparedOutput.file; + linuxOutputHandle = preparedOutput.handle; + try { + linuxIdentity = await prepareLinuxCodexIdentity({ + runnerUid: uid, + workingDirectory: cd, + codexHome, + outputFile: outputFile.file, + outputSchema: resolvedOutputSchema?.file ?? null, + codexExecutable: pathToCodex, + }); + } catch (error) { + await linuxOutputHandle.close(); + linuxOutputHandle = null; + await cleanupOutputSchema(resolvedOutputSchema); + await cleanupTempOutput(outputFile, runAsUser); + throw error; + } + pathToCodex = linuxIdentity.codexExecutable; + effectiveCd = linuxIdentity.workingDirectory; + } else if (safetyStrategy === "unprivileged-user") { if (codexUser == null) { throw new Error( "codexUser must be specified when using the 'unprivileged-user' safety strategy." @@ -131,41 +210,40 @@ export async function runCodexExec({ throw new Error("could not find 'codex' in PATH"); } - command.push("sudo", "-u", codexUser, "--"); + commandPrefix.push("sudo", "-u", codexUser, "--"); } - command.push( - pathToCodex, + const codexArgs = [ "exec", "--skip-git-repo-check", "--cd", - cd, + effectiveCd, "--output-last-message", - outputFile.file - ); + outputFile.file, + ]; if (resolvedOutputSchema != null) { - command.push("--output-schema", resolvedOutputSchema.file); + codexArgs.push("--output-schema", resolvedOutputSchema.file); } if (model != null) { - command.push("--model", model); + codexArgs.push("--model", model); } if (effort != null) { // https://github.com/openai/codex/blob/00debb6399eb51c4b9273f0bc012912c42fe6c91/docs/config.md#config // https://github.com/openai/codex/blob/00debb6399eb51c4b9273f0bc012912c42fe6c91/docs/config.md#model_reasoning_effort - command.push("--config", `model_reasoning_effort="${effort}"`); + codexArgs.push("--config", `model_reasoning_effort="${effort}"`); } - command.push(...extraArgs); + codexArgs.push(...extraArgs); switch (permissionSelection.type) { case "sandbox": - command.push("--sandbox", permissionSelection.mode); + codexArgs.push("--sandbox", permissionSelection.mode); break; case "profile": - command.push( + codexArgs.push( "--config", `default_permissions=${JSON.stringify(permissionSelection.name)}` ); @@ -180,52 +258,103 @@ export async function runCodexExec({ if (codexHome != null) { env.CODEX_HOME = codexHome; extraEnv = `CODEX_HOME=${codexHome} `; + } else if (linuxIdentity != null) { + delete env.CODEX_HOME; } - // Split the `program` from the `args` for `spawn()`. - const program = command.shift()!; - console.log( - `Running: ${extraEnv}${program} ${command - .map((a) => JSON.stringify(a)) - .join(" ")}` - ); + let program: string; + let command: Array; + if (linuxIdentity != null) { + linuxGate = buildGatedCodexCommand({ + identity: linuxIdentity, + codexArgs, + }); + program = linuxGate.program; + command = linuxGate.args; + console.log( + `Running with Linux drop-sudo protection: ${extraEnv}${pathToCodex} ${codexArgs + .map((arg) => JSON.stringify(arg)) + .join(" ")}` + ); + } else { + const fullCommand = [...commandPrefix, pathToCodex, ...codexArgs]; + program = fullCommand.shift()!; + command = fullCommand; + console.log( + `Running: ${extraEnv}${program} ${command + .map((arg) => JSON.stringify(arg)) + .join(" ")}` + ); + } try { - await new Promise((resolve, reject) => { - const child = spawn(program, command, { - env, - stdio: ["pipe", "inherit", "inherit"], - }); - child.stdin.write(input); - child.stdin.end(); - - child.on("error", reject); - - child.on("close", async (code) => { - if (code !== 0) { - reject(new Error(`${program} exited with code ${code}`)); - return; - } - - try { - await finalizeExecution(outputFile, runAsUser); - resolve(undefined); - } catch (err) { - reject(err); - } - }); + const child = spawn(program, command, { + env, + stdio: ["pipe", linuxGate == null ? "inherit" : "pipe", "inherit"], + }); + const gateReady = + linuxGate == null + ? Promise.resolve() + : waitForLinuxGate(child, linuxGate.readyToken); + const spawned = new Promise((resolve, reject) => { + child.once("spawn", resolve); + child.once("error", reject); + }); + const completed = new Promise((resolve, reject) => { + child.once("error", reject); + child.once("close", (code) => resolve(code ?? 1)); }); + + try { + await Promise.all([spawned, gateReady]); + if (linuxDropSudoUser != null) { + await dropSudo({ + user: linuxDropSudoUser, + group: "sudo", + rootPhase: false, + }); + await verifySudoUnavailable(); + } + + if (child.exitCode != null) { + throw new Error( + `${program} exited before privilege cleanup completed (code ${child.exitCode})` + ); + } + const gatedInput = + linuxGate == null ? input : `${linuxGate.goToken}\n${input}`; + await endChildInput(child, gatedInput); + } catch (error) { + // Do not release the prompt when privilege cleanup fails. Closing stdin + // causes `codex exec` to exit without attacker-controlled input. + if (child.stdin != null && !child.stdin.destroyed) { + child.stdin.on("error", () => undefined); + child.stdin.end(); + } + await completed.catch(() => undefined); + throw error; + } + + const code = await completed; + if (code !== 0) { + throw new Error(`${program} exited with code ${code}`); + } + await finalizeExecution(outputFile, runAsUser, linuxOutputHandle); } finally { + await linuxOutputHandle?.close().catch(() => undefined); await cleanupOutputSchema(resolvedOutputSchema); } } async function finalizeExecution( outputFile: OutputFile, - runAsUser: string | null + runAsUser: string | null, + linuxOutputHandle: FileHandle | null ): Promise { try { let lastMessage: string; - if (runAsUser == null) { + if (linuxOutputHandle != null) { + lastMessage = await linuxOutputHandle.readFile("utf8"); + } else if (runAsUser == null) { lastMessage = await readFile(outputFile.file, "utf8"); } else { lastMessage = await checkOutput([ diff --git a/test/privileged/dropSudo.test.mjs b/test/privileged/dropSudo.test.mjs new file mode 100644 index 0000000..65f15ad --- /dev/null +++ b/test/privileged/dropSudo.test.mjs @@ -0,0 +1,1108 @@ +import assert from "node:assert/strict"; +import { + chmodSync, + copyFileSync, + existsSync, + linkSync, + lstatSync, + mkdirSync, + mkdtempSync, + readFileSync, + symlinkSync, + writeFileSync, +} from "node:fs"; +import { tmpdir } from "node:os"; +import path from "node:path"; +import { spawn, spawnSync } from "node:child_process"; +import { test } from "node:test"; +import { fileURLToPath } from "node:url"; + +const bundledMainPath = fileURLToPath( + new URL("../../dist/main.js", import.meta.url) +); +const isLinux = process.platform === "linux"; + +function run(command, args, options = {}) { + const result = spawnSync(command, args, { + encoding: "utf8", + timeout: 120_000, + ...options, + }); + assert.equal( + result.status, + 0, + `${command} ${args.join(" ")} failed:\n${result.stderr ?? result.error ?? ""}` + ); + return result; +} + +function runSudo(args, options = {}) { + return run("/usr/bin/sudo", ["-n", ...args], options); +} + +function listUsers(prefix) { + const result = run("/usr/bin/getent", ["passwd"]); + return new Set( + result.stdout + .trim() + .split("\n") + .map((line) => line.split(":", 1)[0]) + .filter((user) => user.startsWith(prefix)) + ); +} + +async function waitForFile(file) { + for (let attempt = 0; attempt < 100; attempt += 1) { + if (existsSync(file)) { + return; + } + await new Promise((resolve) => setTimeout(resolve, 50)); + } + throw new Error(`timed out waiting for ${file}`); +} + +test( + "drop-sudo isolates Codex from the privileged runner identity", + { skip: !isLinux }, + async (t) => { + assert.equal( + spawnSync("/usr/bin/sudo", ["-n", "true"], { + encoding: "utf8", + }).status, + 0, + "the privileged Linux regression test requires passwordless sudo" + ); + + const requiredExecutables = [ + "/usr/bin/find", + "/usr/bin/gpasswd", + "/usr/bin/getfacl", + "/usr/bin/getent", + "/usr/bin/git", + "/usr/bin/id", + "/usr/bin/install", + "/usr/bin/setfacl", + "/usr/bin/setpriv", + "/usr/bin/tee", + "/usr/sbin/groupadd", + "/usr/sbin/groupdel", + "/usr/sbin/nologin", + "/usr/sbin/useradd", + "/usr/sbin/userdel", + "/usr/sbin/visudo", + ]; + for (const executable of requiredExecutables) { + assert.equal( + existsSync(executable), + true, + `privileged Linux regression test requires ${executable}` + ); + } + + const suffix = `${process.pid}${Date.now().toString(36).slice(-4)}`; + const user = `cdx${suffix}`; + const primaryGroup = `cdxp${suffix}`; + const dangerGroup = `cdxd${suffix}`; + const sudoersPath = `/etc/sudoers.d/${user}`; + const tempDir = mkdtempSync(path.join(tmpdir(), "codex-drop-sudo-")); + const canaryDir = mkdtempSync(path.join(tmpdir(), "codex-danger-")); + const githubWorkspace = path.join(tempDir, "workspace"); + const workspace = path.join(githubWorkspace, "nested-repo"); + const nestedGitRepo = path.join(githubWorkspace, "another", "repo"); + const codexHome = path.join(tempDir, "codex-home"); + const binDir = path.join(tempDir, "bin"); + const maliciousBinDir = path.join(tempDir, "malicious-bin"); + const outsideWorkspace = path.join(tempDir, "outside-workspace"); + mkdirSync(workspace, { recursive: true }); + mkdirSync(nestedGitRepo, { recursive: true }); + mkdirSync(codexHome); + mkdirSync(binDir); + mkdirSync(maliciousBinDir); + mkdirSync(outsideWorkspace); + + let dedicatedPrefix = null; + let preexistingDedicatedUsers = new Set(); + let socketServerPid = null; + t.after(() => { + if (socketServerPid != null) { + spawnSync("/usr/bin/sudo", ["-n", "kill", String(socketServerPid)]); + } + if (dedicatedPrefix != null) { + const currentDedicatedUsers = listUsers(dedicatedPrefix); + for (const dedicatedUser of currentDedicatedUsers) { + if (!preexistingDedicatedUsers.has(dedicatedUser)) { + const dedicatedUid = spawnSync( + "/usr/bin/id", + ["-u", dedicatedUser], + { encoding: "utf8" } + ).stdout.trim(); + if (/^\d+$/.test(dedicatedUid)) { + spawnSync("/usr/bin/sudo", [ + "-n", + "--", + "/usr/bin/setfacl", + "-x", + `u:${dedicatedUid}`, + "/tmp", + ]); + } + spawnSync("/usr/bin/sudo", [ + "-n", + "--", + "/usr/sbin/userdel", + "--remove", + dedicatedUser, + ]); + spawnSync("/usr/bin/sudo", [ + "-n", + "--", + "/usr/sbin/groupdel", + dedicatedUser, + ]); + } + } + } + spawnSync("/usr/bin/sudo", ["-n", "rm", "-f", sudoersPath]); + spawnSync("/usr/bin/sudo", [ + "-n", + "--", + "/usr/sbin/userdel", + user, + ]); + spawnSync("/usr/bin/sudo", [ + "-n", + "--", + "/usr/sbin/groupdel", + primaryGroup, + ]); + spawnSync("/usr/bin/sudo", [ + "-n", + "--", + "/usr/sbin/groupdel", + dangerGroup, + ]); + spawnSync("/usr/bin/sudo", ["-n", "rm", "-rf", tempDir, canaryDir]); + }); + + runSudo(["--", "/usr/sbin/groupadd", primaryGroup]); + runSudo(["--", "/usr/sbin/groupadd", dangerGroup]); + runSudo([ + "--", + "/usr/sbin/useradd", + "--no-create-home", + "--gid", + primaryGroup, + "--groups", + `sudo,${dangerGroup}`, + "--shell", + "/bin/bash", + user, + ]); + + const sudoersSource = path.join(tempDir, "sudoers"); + writeFileSync( + sudoersSource, + `${user} ALL=(ALL:ALL) NOPASSWD: ALL\n%${dangerGroup} ALL=(ALL:ALL) NOPASSWD: ALL\n`, + "utf8" + ); + runSudo([ + "--", + "/usr/bin/install", + "-o", + "root", + "-g", + "root", + "-m", + "0440", + sudoersSource, + sudoersPath, + ]); + runSudo(["--", "/usr/sbin/visudo", "-cf", sudoersPath]); + + const runnerUid = Number(run("/usr/bin/id", ["-u", user]).stdout.trim()); + const runnerGid = Number(run("/usr/bin/id", ["-g", user]).stdout.trim()); + const dangerGroupId = Number( + run("/usr/bin/getent", ["group", dangerGroup]) + .stdout.trim() + .split(":")[2] + ); + dedicatedPrefix = `${`codexaction${runnerUid}`.slice(0, 23)}x`; + preexistingDedicatedUsers = listUsers(dedicatedPrefix); + + const canaryPath = path.join(canaryDir, "danger-canary"); + writeFileSync(canaryPath, "root-equivalent group access\n", "utf8"); + runSudo(["chown", "-R", `root:${dangerGroup}`, canaryDir]); + runSudo(["chmod", "0770", canaryDir]); + runSudo(["chmod", "0640", canaryPath]); + + const fakeCodexPath = path.join(binDir, "codex.mjs"); + const launcherPath = path.join(binDir, "codex"); + const capturePath = path.join(workspace, "capture.json"); + const outputPath = path.join(workspace, "output.md"); + const schemaPath = path.join(workspace, "schema.json"); + const testPrompt = "verify clean identity\nwith exact multiline stdin\n"; + const linkedWorkingDirectory = path.join(workspace, "linked-workdir"); + const linkedCodexHome = path.join(workspace, "linked-codex-home"); + const linkedSchemaPath = path.join(workspace, "linked-schema.json"); + const protectedSchemaPath = path.join( + tempDir, + "protected-schema-target.json" + ); + const groupOnlySchemaDirectory = path.join( + tempDir, + "group-only-schema-directory" + ); + const groupOnlySchemaPath = path.join( + groupOnlySchemaDirectory, + "schema.json" + ); + const failedWorkingDirectoryOutput = path.join( + workspace, + "failed-workdir-output.md" + ); + const failedSchemaOutput = path.join(workspace, "failed-schema-output.md"); + const failedGroupOnlySchemaOutput = path.join( + workspace, + "failed-group-only-schema-output.md" + ); + const failedPrivilegeCleanupOutput = path.join( + workspace, + "failed-privilege-cleanup-output.md" + ); + const failedCodexExecutableOutput = path.join( + workspace, + "failed-codex-executable-output.md" + ); + const failedCodexHomeOutput = path.join( + workspace, + "failed-codex-home-output.md" + ); + const failedRootRunnerOutput = path.join( + workspace, + "failed-root-runner-output.md" + ); + const protectedOutputTarget = path.join( + tempDir, + "protected-output-target" + ); + const outputSymlink = path.join(workspace, "output-symlink.md"); + const linkedOutputParent = path.join(workspace, "linked-output-parent"); + const linkedParentOutput = path.join( + linkedOutputParent, + "created-through-link.md" + ); + const foreignOutput = path.join(workspace, "foreign-output.md"); + const outputDirectory = path.join(workspace, "output-directory"); + const hardlinkedOutput = path.join(workspace, "hardlinked-output.md"); + const hardlinkedOutputPeer = path.join( + tempDir, + "hardlinked-output-peer.md" + ); + const workspaceWritePath = path.join(workspace, "created-by-codex.txt"); + const githubOutputPath = path.join(tempDir, "github-output"); + const parentSignalMarker = path.join(tempDir, "parent-signal-marker"); + const runnerSecretPath = path.join(tempDir, "runner-secret"); + const runnerSecretHardlink = path.join( + workspace, + "runner-secret-hardlink" + ); + const foreignWorkspaceFile = path.join( + workspace, + "foreign-workspace-file" + ); + const protectedCodexExecutable = path.join( + tempDir, + "protected-codex-executable" + ); + const maliciousCodexPath = path.join(maliciousBinDir, "codex"); + const socketServerPath = path.join(tempDir, "socket-server.cjs"); + const socketReadyPath = path.join(tempDir, "socket-ready"); + const dangerSocketReadyPath = path.join(tempDir, "danger-socket-ready"); + const lateSocketReadyPath = path.join(tempDir, "late-socket-ready"); + const runnerSocketPath = path.join(workspace, "runner.sock"); + const dangerSocketPath = path.join(canaryDir, "danger.sock"); + const lateRunnerSocketPath = path.join(workspace, "late-runner.sock"); + const copiedMainPath = path.join(tempDir, "main.cjs"); + const harnessPath = path.join(tempDir, "harness.cjs"); + + copyFileSync(bundledMainPath, copiedMainPath); + writeFileSync( + harnessPath, + `const { writeFileSync } = require("node:fs"); +process.env.CODEX_ACTION_PARENT_PID = String(process.pid); +process.on("SIGUSR1", () => { + writeFileSync(process.env.CODEX_PARENT_SIGNAL_MARKER, "signaled\\n"); +}); +require(${JSON.stringify(copiedMainPath)}); +`, + "utf8" + ); + writeFileSync( + socketServerPath, + `const { chmodSync, writeFileSync } = require("node:fs"); +const { execFileSync } = require("node:child_process"); +const { createServer } = require("node:net"); +const [socketPath, readyPath, dangerSocketPath, dangerReadyPath, lateSocketPath, lateReadyPath, watchedDirectory, runnerUid] = + process.argv.slice(2); +const server = createServer((socket) => socket.end()); +const dangerServer = createServer((socket) => socket.end()); +const lateServer = createServer((socket) => socket.end()); +server.listen(socketPath, () => { + chmodSync(socketPath, 0o600); + writeFileSync(readyPath, String(process.pid)); +}); +dangerServer.listen(dangerSocketPath, () => { + chmodSync(dangerSocketPath, 0o660); + writeFileSync(dangerReadyPath, "ready"); +}); +const timer = setInterval(() => { + const acl = execFileSync("/usr/bin/getfacl", ["-n", "-p", watchedDirectory], { + encoding: "utf8", + }); + if (acl.includes("default:user:" + runnerUid + ":rwx")) { + clearInterval(timer); + lateServer.listen(lateSocketPath, () => { + // Keep the ACL mask open so an accidentally inherited Codex-user ACL + // would make this connection succeed and fail the regression test. + chmodSync(lateSocketPath, 0o660); + writeFileSync(lateReadyPath, "ready"); + }); + } +}, 10); +process.on("SIGTERM", () => { + clearInterval(timer); + server.close(); + dangerServer.close(); + if (lateServer.listening) { + lateServer.close(() => process.exit(0)); + } else { + process.exit(0); + } +}); +`, + "utf8" + ); + writeFileSync( + fakeCodexPath, + `import { existsSync, readFileSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs"; +import { spawnSync } from "node:child_process"; +import { createConnection } from "node:net"; + +const startupRunnerGroups = spawnSync( + "/usr/bin/id", + ["-nG", process.env.CODEX_RUNNER_USER], + { encoding: "utf8" } +); +let receivedPrompt = ""; +for await (const chunk of process.stdin) { + receivedPrompt += chunk; +} + +const statusFor = (pid) => readFileSync("/proc/" + pid + "/status", "utf8"); +const statusValue = (status, name) => + status.match(new RegExp("^" + name + ":\\\\s*(.+)$", "m"))?.[1] ?? null; +const selfStatus = statusFor("self"); +const parentPid = Number(process.env.CODEX_ACTION_PARENT_PID); +const parentStatus = statusFor(parentPid); +let canReadParentEnvironment = true; +try { + readFileSync("/proc/" + parentPid + "/environ"); +} catch { + canReadParentEnvironment = false; +} +let cursor = process.pid; +let parentIsAncestor = false; +for (let depth = 0; depth < 16 && cursor > 1; depth += 1) { + if (cursor === parentPid) { + parentIsAncestor = true; + break; + } + const ppid = Number(statusValue(statusFor(cursor), "PPid")); + if (!Number.isSafeInteger(ppid) || ppid === cursor) break; + cursor = ppid; +} + +const signalError = (signal) => { + try { + process.kill(parentPid, signal); + return null; + } catch (error) { + return error.code ?? error.name; + } +}; +let canReadCanary = true; +try { + readFileSync(process.env.CODEX_DANGER_CANARY); +} catch { + canReadCanary = false; +} +let canReadForeignWorkspaceFile = true; +try { + readFileSync(process.env.CODEX_FOREIGN_WORKSPACE_FILE); +} catch { + canReadForeignWorkspaceFile = false; +} +let canReadRunnerSecretHardlink = true; +try { + readFileSync(process.env.CODEX_RUNNER_SECRET_HARDLINK); +} catch { + canReadRunnerSecretHardlink = false; +} + +const args = process.argv.slice(2); +const outputIndex = args.indexOf("--output-last-message"); +const schemaIndex = args.indexOf("--output-schema"); +const cdIndex = args.indexOf("--cd"); +const sudo = spawnSync("/usr/bin/sudo", ["-n", "true"], { encoding: "utf8" }); +const idGroups = spawnSync("/usr/bin/id", ["-G"], { encoding: "utf8" }); +const git = spawnSync("/usr/bin/git", ["-C", args[cdIndex + 1], "status", "--porcelain"], { + encoding: "utf8", +}); +const nestedGit = spawnSync( + "/usr/bin/git", + ["-C", process.env.CODEX_NESTED_GIT_REPO, "status", "--porcelain"], + { encoding: "utf8" } +); +const scrubbedNames = [ + "SUDO_COMMAND", + "SUDO_USER", + "SUDO_UID", + "SUDO_GID", + "GITHUB_ENV", + "GITHUB_PATH", + "GITHUB_OUTPUT", + "GITHUB_STEP_SUMMARY", + "ENV", + "BASH_ENV", + "SHELLOPTS", +]; +const scrubbedEnvironment = Object.fromEntries( + scrubbedNames.map((name) => [name, process.env[name] ?? null]) +); +const socketError = (socketPath) => new Promise((resolve) => { + const socket = createConnection(socketPath); + socket.once("connect", () => { + socket.destroy(); + resolve(null); + }); + socket.once("error", (error) => resolve(error.code ?? error.name)); +}); +for (let attempt = 0; attempt < 100 && !existsSync(process.env.CODEX_LATE_SOCKET_READY); attempt += 1) { + await new Promise((resolve) => setTimeout(resolve, 10)); +} +const existingSocketError = await socketError(process.env.CODEX_RUNNER_SOCKET); +const dangerSocketError = await socketError(process.env.CODEX_DANGER_SOCKET); +const lateSocketError = existsSync(process.env.CODEX_LATE_SOCKET_READY) + ? await socketError(process.env.CODEX_LATE_RUNNER_SOCKET) + : "READY_TIMEOUT"; +try { + writeFileSync(process.env.CODEX_WORKSPACE_WRITE, "workspace write works\\n"); +} catch (error) { + const acl = spawnSync("/usr/bin/getfacl", ["-p", args[cdIndex + 1]], { + encoding: "utf8", + }); + console.error("workspace ACL:\\n" + acl.stdout + acl.stderr); + throw error; +} +writeFileSync(process.env.CODEX_HOME + "/child-state", "Codex home write works\\n"); +writeFileSync( + process.env.CODEX_CAPTURE_PATH, + JSON.stringify({ + uid: process.getuid(), + gid: process.getgid(), + groups: process.getgroups(), + uidStatus: statusValue(selfStatus, "Uid"), + gidStatus: statusValue(selfStatus, "Gid"), + noNewPrivs: statusValue(selfStatus, "NoNewPrivs"), + capEff: statusValue(selfStatus, "CapEff"), + capPrm: statusValue(selfStatus, "CapPrm"), + capBnd: statusValue(selfStatus, "CapBnd"), + capAmb: statusValue(selfStatus, "CapAmb"), + parentUid: statusValue(parentStatus, "Uid"), + parentGroups: statusValue(parentStatus, "Groups"), + parentIsAncestor, + canReadParentEnvironment, + signalZeroError: signalError(0), + signalUsr1Error: signalError("SIGUSR1"), + receivedPrompt, + canReadCanary, + canReadForeignWorkspaceFile, + canReadRunnerSecretHardlink, + sudoStatus: sudo.status, + idGroupsStatus: idGroups.status, + idGroups: idGroups.stdout.trim(), + gitStatus: git.status, + gitStderr: git.stderr, + nestedGitStatus: nestedGit.status, + nestedGitStderr: nestedGit.stderr, + startupRunnerGroupsStatus: startupRunnerGroups.status, + startupRunnerGroups: startupRunnerGroups.stdout.trim(), + existingSocketError, + dangerSocketError, + lateSocketError, + schema: JSON.parse(readFileSync(args[schemaIndex + 1], "utf8")), + user: process.env.USER, + logname: process.env.LOGNAME, + home: process.env.HOME, + path: process.env.PATH, + githubOutput: process.env.GITHUB_OUTPUT ?? null, + scrubbedEnvironment, + }) +); +writeFileSync(args[outputIndex + 1], "clean identity verified\\n"); +unlinkSync(args[outputIndex + 1]); +symlinkSync(process.env.CODEX_RUNNER_SECRET, args[outputIndex + 1]); +`, + "utf8" + ); + writeFileSync( + launcherPath, + `#!/bin/sh\nexec "${process.execPath}" "${fakeCodexPath}" "$@"\n`, + "utf8" + ); + chmodSync(launcherPath, 0o755); + writeFileSync(schemaPath, '{"type":"object"}\n', "utf8"); + writeFileSync(protectedSchemaPath, '{"protected":true}\n', "utf8"); + symlinkSync(outsideWorkspace, linkedWorkingDirectory); + symlinkSync(outsideWorkspace, linkedCodexHome); + symlinkSync(protectedSchemaPath, linkedSchemaPath); + writeFileSync(githubOutputPath, "", "utf8"); + writeFileSync(runnerSecretPath, "runner secret must not be exposed\n", "utf8"); + linkSync(runnerSecretPath, runnerSecretHardlink); + writeFileSync( + foreignWorkspaceFile, + "foreign group-derived file access must not be exposed\n", + "utf8" + ); + writeFileSync(protectedOutputTarget, "protected output target\n", "utf8"); + symlinkSync(protectedOutputTarget, outputSymlink); + symlinkSync(outsideWorkspace, linkedOutputParent); + writeFileSync(foreignOutput, "foreign output\n", "utf8"); + mkdirSync(outputDirectory); + mkdirSync(groupOnlySchemaDirectory); + writeFileSync(groupOnlySchemaPath, '{"groupOnly":true}\n', "utf8"); + writeFileSync(hardlinkedOutput, "hardlinked output\n", "utf8"); + linkSync(hardlinkedOutput, hardlinkedOutputPeer); + writeFileSync( + protectedCodexExecutable, + "#!/bin/sh\necho private executable must not be transferred\n", + "utf8" + ); + symlinkSync(protectedCodexExecutable, maliciousCodexPath); + + runSudo(["chown", "-R", `${user}:${primaryGroup}`, tempDir]); + runSudo([ + "chmod", + "0755", + tempDir, + binDir, + maliciousBinDir, + githubWorkspace, + workspace, + nestedGitRepo, + codexHome, + ]); + runSudo([ + "chmod", + "0644", + copiedMainPath, + harnessPath, + socketServerPath, + fakeCodexPath, + ]); + runSudo(["chmod", "0600", runnerSecretPath]); + runSudo(["chmod", "0600", hardlinkedOutput]); + runSudo(["chmod", "0600", protectedSchemaPath]); + runSudo(["chmod", "0600", protectedOutputTarget]); + runSudo(["chmod", "0700", protectedCodexExecutable]); + runSudo(["chown", `root:${dangerGroup}`, foreignWorkspaceFile]); + runSudo(["chmod", "0640", foreignWorkspaceFile]); + runSudo(["chown", "-R", `root:${dangerGroup}`, groupOnlySchemaDirectory]); + runSudo(["chmod", "0750", groupOnlySchemaDirectory]); + runSudo(["chmod", "0644", groupOnlySchemaPath]); + runSudo(["chown", "root:root", foreignOutput]); + runSudo(["chmod", "0666", foreignOutput]); + runSudo([ + "-u", + user, + "--", + "/usr/bin/git", + "-C", + workspace, + "init", + "-q", + ]); + runSudo([ + "-u", + user, + "--", + "/usr/bin/git", + "-C", + nestedGitRepo, + "init", + "-q", + ]); + + const initialGroups = runSudo(["-u", user, "--", "/usr/bin/id", "-G"]) + .stdout.trim() + .split(/\s+/) + .map(Number); + assert.equal(initialGroups.includes(dangerGroupId), true); + runSudo(["-u", user, "--", "/usr/bin/cat", canaryPath]); + assert.equal( + spawnSync( + "/usr/bin/sudo", + ["-n", "-u", user, "--", "/usr/bin/sudo", "-n", "true"], + { encoding: "utf8" } + ).status, + 0, + "synthetic runner must begin with working sudo" + ); + + const runAction = ({ + workingDirectory = workspace, + outputFile = outputPath, + outputSchemaFile = schemaPath, + pathDirectory = binDir, + codexHomeDirectory = codexHome, + runAsRoot = false, + } = {}) => { + const sudoUserArgs = runAsRoot ? [] : ["-u", user]; + return spawnSync( + "/usr/bin/sudo", + [ + "-n", + ...sudoUserArgs, + "--", + "/usr/bin/env", + `HOME=${tempDir}`, + `PATH=${pathDirectory}:${process.env.PATH ?? ""}`, + `CODEX_CAPTURE_PATH=${capturePath}`, + `CODEX_DANGER_CANARY=${canaryPath}`, + `CODEX_FOREIGN_WORKSPACE_FILE=${foreignWorkspaceFile}`, + `CODEX_RUNNER_SECRET_HARDLINK=${runnerSecretHardlink}`, + `CODEX_WORKSPACE_WRITE=${workspaceWritePath}`, + `CODEX_PARENT_SIGNAL_MARKER=${parentSignalMarker}`, + `CODEX_RUNNER_USER=${user}`, + `CODEX_RUNNER_SECRET=${runnerSecretPath}`, + `CODEX_RUNNER_SOCKET=${runnerSocketPath}`, + `CODEX_DANGER_SOCKET=${dangerSocketPath}`, + `CODEX_LATE_RUNNER_SOCKET=${lateRunnerSocketPath}`, + `CODEX_LATE_SOCKET_READY=${lateSocketReadyPath}`, + `CODEX_NESTED_GIT_REPO=${nestedGitRepo}`, + "SUDO_COMMAND=must-be-scrubbed", + "SUDO_USER=must-be-scrubbed", + "SUDO_UID=1234", + "SUDO_GID=1234", + "GITHUB_ENV=must-be-scrubbed", + "GITHUB_PATH=must-be-scrubbed", + `GITHUB_OUTPUT=${githubOutputPath}`, + "GITHUB_STEP_SUMMARY=must-be-scrubbed", + "ENV=must-be-scrubbed", + "BASH_ENV=must-be-scrubbed", + "SHELLOPTS=must-be-scrubbed", + `GITHUB_WORKSPACE=${githubWorkspace}`, + process.execPath, + harnessPath, + "run-codex-exec", + "--prompt", + testPrompt, + "--prompt-file", + "", + "--codex-home", + codexHomeDirectory, + "--cd", + workingDirectory, + "--extra-args", + "", + "--output-file", + outputFile, + "--output-schema-file", + outputSchemaFile, + "--output-schema", + "", + "--sandbox", + "danger-full-access", + "--permission-profile", + "", + "--model", + "", + "--effort", + "", + "--safety-strategy", + "drop-sudo", + "--codex-user", + "", + ], + { encoding: "utf8", timeout: 120_000 } + ); + }; + + const assertActionRejected = (result, pattern) => { + assert.notEqual(result.status, 0); + assert.match( + `${result.stdout ?? ""}\n${result.stderr ?? ""}`, + pattern + ); + assert.equal(existsSync(capturePath), false); + }; + + assertActionRejected( + runAction({ + outputFile: failedRootRunnerOutput, + runAsRoot: true, + }), + /cannot run Codex from a runner whose default user is root/ + ); + + const linkedCodexHomeAclBefore = run("/usr/bin/getfacl", [ + "-n", + "-p", + outsideWorkspace, + ]).stdout; + assertActionRejected( + runAction({ + codexHomeDirectory: linkedCodexHome, + outputFile: failedCodexHomeOutput, + }), + /refuses a Codex home path containing symbolic links/ + ); + assert.equal( + run("/usr/bin/getfacl", ["-n", "-p", outsideWorkspace]).stdout, + linkedCodexHomeAclBefore, + "a rejected Codex home symlink must not change the target ACL" + ); + + const protectedOutputAclBefore = run("/usr/bin/getfacl", [ + "-n", + "-p", + protectedOutputTarget, + ]).stdout; + const rejectedOutputs = [ + { + file: outputSymlink, + pattern: /refuses an output path containing symbolic links/, + }, + { + file: linkedParentOutput, + pattern: /refuses an output path containing symbolic links/, + }, + { + file: foreignOutput, + pattern: /requires the output file to be owned by runner UID/, + }, + { + file: outputDirectory, + pattern: /requires a regular output file/, + }, + { + file: hardlinkedOutput, + pattern: /refuses an output file with multiple hard links/, + }, + ]; + for (const { file, pattern } of rejectedOutputs) { + assertActionRejected(runAction({ outputFile: file }), pattern); + } + assert.equal(existsSync(linkedParentOutput), false); + assert.equal( + run("/usr/bin/getfacl", ["-n", "-p", protectedOutputTarget]).stdout, + protectedOutputAclBefore, + "a rejected output symlink must not change the target ACL" + ); + + const groupOnlySchemaAclBefore = run("/usr/bin/getfacl", [ + "-n", + "-p", + groupOnlySchemaDirectory, + groupOnlySchemaPath, + ]).stdout; + assertActionRejected( + runAction({ + outputFile: failedGroupOnlySchemaOutput, + outputSchemaFile: groupOnlySchemaPath, + }), + /refuses to transfer group-derived directory access/ + ); + assert.equal( + run("/usr/bin/getfacl", [ + "-n", + "-p", + groupOnlySchemaDirectory, + groupOnlySchemaPath, + ]).stdout, + groupOnlySchemaAclBefore, + "a rejected group-derived schema path must not change foreign ACLs" + ); + + const protectedCodexAclBefore = run("/usr/bin/getfacl", [ + "-n", + "-p", + protectedCodexExecutable, + ]).stdout; + const protectedCodexResult = runAction({ + outputFile: failedCodexExecutableOutput, + pathDirectory: maliciousBinDir, + }); + assert.notEqual(protectedCodexResult.status, 0); + assert.match( + `${protectedCodexResult.stdout ?? ""}\n${protectedCodexResult.stderr ?? ""}`, + /requires the Codex executable to resolve to a regular file that is already world-readable and executable/ + ); + assert.equal(existsSync(capturePath), false); + assert.equal( + run("/usr/bin/getfacl", ["-n", "-p", protectedCodexExecutable]).stdout, + protectedCodexAclBefore, + "a rejected Codex executable must not change the target ACL" + ); + + const privilegeCleanupResult = runAction({ + outputFile: failedPrivilegeCleanupOutput, + }); + assert.notEqual(privilegeCleanupResult.status, 0); + assert.match( + `${privilegeCleanupResult.stdout ?? ""}\n${privilegeCleanupResult.stderr ?? ""}`, + /Expected sudo to be disabled, but sudo succeeded/ + ); + assert.equal( + existsSync(capturePath), + false, + "Codex must not start when runner sudo remains available" + ); + + runSudo(["--", "/usr/bin/gpasswd", "-a", user, "sudo"]); + runSudo(["--", "/usr/bin/tee", sudoersSource], { + input: `${user} ALL=(ALL:ALL) NOPASSWD: ALL\n`, + }); + runSudo([ + "--", + "/usr/bin/install", + "-o", + "root", + "-g", + "root", + "-m", + "0440", + sudoersSource, + sudoersPath, + ]); + runSudo(["--", "/usr/sbin/visudo", "-cf", sudoersPath]); + assert.equal( + spawnSync( + "/usr/bin/sudo", + ["-n", "-u", user, "--", "/usr/bin/sudo", "-n", "true"], + { encoding: "utf8" } + ).status, + 0, + "the synthetic runner must be restored for subsequent cases" + ); + + const linkedWorkingDirectoryResult = runAction({ + workingDirectory: linkedWorkingDirectory, + outputFile: failedWorkingDirectoryOutput, + }); + assert.notEqual(linkedWorkingDirectoryResult.status, 0); + assert.match( + `${linkedWorkingDirectoryResult.stdout ?? ""}\n${linkedWorkingDirectoryResult.stderr ?? ""}`, + /refuses a directory path containing symbolic links/ + ); + assert.equal(existsSync(capturePath), false); + + const protectedSchemaAclBefore = run("/usr/bin/getfacl", [ + "-n", + "-p", + protectedSchemaPath, + ]).stdout; + const linkedSchemaResult = runAction({ + outputFile: failedSchemaOutput, + outputSchemaFile: linkedSchemaPath, + }); + assert.notEqual(linkedSchemaResult.status, 0); + assert.match( + `${linkedSchemaResult.stdout ?? ""}\n${linkedSchemaResult.stderr ?? ""}`, + /refuses a file path containing symbolic links/ + ); + assert.equal(existsSync(capturePath), false); + assert.equal( + run("/usr/bin/getfacl", ["-n", "-p", protectedSchemaPath]).stdout, + protectedSchemaAclBefore, + "a rejected schema symlink must not change the target ACL" + ); + assert.equal( + spawnSync( + "/usr/bin/sudo", + ["-n", "-u", user, "--", "/usr/bin/sudo", "-n", "true"], + { encoding: "utf8" } + ).status, + 0, + "failed setup must not revoke synthetic runner sudo" + ); + + // The failed post-gate case prepared an earlier dedicated identity. Clear + // its directory defaults so the late socket is created only after the + // successful invocation installs the identity under test. + runSudo([ + "--", + "/usr/bin/find", + "-P", + githubWorkspace, + "-type", + "d", + "-exec", + "/usr/bin/setfacl", + "-k", + "--", + "{}", + "+", + ]); + + const socketServer = spawn( + "/usr/bin/sudo", + [ + "-n", + "-u", + user, + "--", + process.execPath, + socketServerPath, + runnerSocketPath, + socketReadyPath, + dangerSocketPath, + dangerSocketReadyPath, + lateRunnerSocketPath, + lateSocketReadyPath, + workspace, + String(runnerUid), + ], + { stdio: ["ignore", "ignore", "pipe"] } + ); + let socketServerStderr = ""; + socketServer.stderr.setEncoding("utf8"); + socketServer.stderr.on("data", (chunk) => { + socketServerStderr += chunk; + }); + try { + await waitForFile(socketReadyPath); + await waitForFile(dangerSocketReadyPath); + } catch (error) { + throw new Error(`${error.message}: ${socketServerStderr}`); + } + runSudo(["chown", `root:${dangerGroup}`, dangerSocketPath]); + runSudo(["chmod", "0660", dangerSocketPath]); + socketServerPid = Number(readFileSync(socketReadyPath, "utf8")); + assert.equal( + Number.isSafeInteger(socketServerPid) && socketServerPid > 1, + true + ); + + const result = runAction(); + + assert.equal( + result.status, + 0, + `${result.stdout ?? ""}\n${result.stderr ?? result.error ?? ""}` + ); + assert.equal( + spawnSync("/usr/bin/sudo", ["-n", "true"], { + encoding: "utf8", + }).status, + 0, + "the real test runner must retain sudo" + ); + assert.equal( + spawnSync("/usr/bin/getent", ["passwd", user], { + encoding: "utf8", + }).status, + 0, + "the synthetic runner account must still exist" + ); + const capture = JSON.parse(readFileSync(capturePath, "utf8")); + assert.notEqual(capture.uid, runnerUid); + assert.notEqual(capture.gid, runnerGid); + assert.equal(capture.uid === 0, false); + assert.deepEqual( + capture.uidStatus.split(/\s+/).map(Number), + [capture.uid, capture.uid, capture.uid, capture.uid] + ); + assert.deepEqual( + capture.gidStatus.split(/\s+/).map(Number), + [capture.gid, capture.gid, capture.gid, capture.gid] + ); + assert.deepEqual(capture.groups, [capture.gid]); + assert.equal(capture.idGroupsStatus, 0); + assert.deepEqual(capture.idGroups.split(/\s+/).map(Number), [capture.gid]); + assert.equal(capture.noNewPrivs, "1"); + assert.equal(capture.capEff, "0000000000000000"); + assert.equal(capture.capPrm, "0000000000000000"); + assert.equal(capture.capBnd, "0000000000000000"); + assert.equal(capture.capAmb, "0000000000000000"); + assert.equal(capture.parentIsAncestor, true); + assert.equal(capture.canReadParentEnvironment, false); + assert.equal(Number(capture.parentUid.split(/\s+/)[0]), runnerUid); + assert.equal( + capture.parentGroups.split(/\s+/).map(Number).includes(dangerGroupId), + true + ); + assert.equal(capture.signalZeroError, "EPERM"); + assert.equal(capture.signalUsr1Error, "EPERM"); + assert.equal(existsSync(parentSignalMarker), false); + assert.equal(capture.receivedPrompt, testPrompt); + assert.equal(capture.canReadCanary, false); + assert.equal(capture.canReadForeignWorkspaceFile, false); + assert.equal(capture.canReadRunnerSecretHardlink, false); + assert.notEqual(capture.sudoStatus, 0); + assert.equal(capture.gitStatus, 0, capture.gitStderr); + assert.equal(capture.nestedGitStatus, 0, capture.nestedGitStderr); + assert.equal(capture.startupRunnerGroupsStatus, 0); + assert.equal( + capture.startupRunnerGroups.split(/\s+/).includes("sudo"), + false, + "Codex startup must not run before runner sudo is revoked" + ); + assert.equal( + ["EACCES", "EPERM"].includes(capture.existingSocketError), + true + ); + assert.equal(["EACCES", "EPERM"].includes(capture.dangerSocketError), true); + assert.equal(["EACCES", "EPERM"].includes(capture.lateSocketError), true); + assert.deepEqual(capture.schema, { type: "object" }); + assert.match(capture.user, /^codexaction\d+x[0-9a-f]{8}$/); + assert.equal(capture.logname, capture.user); + assert.equal(capture.home, `/home/${capture.user}`); + assert.equal(capture.path.startsWith(binDir + ":"), true); + assert.equal(capture.githubOutput, null); + assert.deepEqual(capture.scrubbedEnvironment, { + SUDO_COMMAND: null, + SUDO_USER: null, + SUDO_UID: null, + SUDO_GID: null, + GITHUB_ENV: null, + GITHUB_PATH: null, + GITHUB_OUTPUT: null, + GITHUB_STEP_SUMMARY: null, + ENV: null, + BASH_ENV: null, + SHELLOPTS: null, + }); + assert.equal( + readFileSync(workspaceWritePath, "utf8"), + "workspace write works\n" + ); + assert.equal( + readFileSync(path.join(codexHome, "child-state"), "utf8"), + "Codex home write works\n" + ); + const githubOutput = readFileSync(githubOutputPath, "utf8"); + assert.match(githubOutput, /clean identity verified/); + assert.doesNotMatch(githubOutput, /runner secret must not be exposed/); + assert.equal(lstatSync(outputPath).isSymbolicLink(), true); + assert.notEqual( + spawnSync( + "/usr/bin/sudo", + ["-n", "-u", user, "--", "/usr/bin/sudo", "-n", "true"], + { encoding: "utf8" } + ).status, + 0, + "synthetic runner sudo authorization must be revoked globally" + ); + } +); diff --git a/test/runCodexExec.test.mjs b/test/runCodexExec.test.mjs index 059c624..d13a43e 100644 --- a/test/runCodexExec.test.mjs +++ b/test/runCodexExec.test.mjs @@ -24,7 +24,7 @@ function runCodexExecWithFakeCodex({ sandbox = "", permissionProfile = "", extraArgs = "", - safetyStrategy = "drop-sudo", + safetyStrategy = "unsafe", } = {}) { const tempDir = mkdtempSync(path.join(tmpdir(), "codex-action-permissions-")); const capturePath = path.join(tempDir, "args.json");