cdk-nextjs 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -238,6 +238,9 @@ function stageDeployment(middlewareSource = MIDDLEWARE_STUB, transformManifest =
238
238
  for (const [file, contents] of Object.entries(PUBLIC_FILES)) {
239
239
  write((0, node_path_1.join)(root, manifest.relativeProjectDir, "public", file), contents);
240
240
  }
241
+ // Async on purpose: `loadRuntime` has to await `register()`, not just call it.
242
+ write((0, node_path_1.join)(root, manifest.relativeProjectDir, ".next/server/instrumentation.js"), "exports.register = () => new Promise((resolve) => setTimeout(() => {" +
243
+ " process.env.CDK_NEXTJS_TEST_REGISTERED = 'yes'; resolve(); }, 10));\n");
241
244
  // `.env` rather than `.env.production`: `@next/env` picks the mode from
242
245
  // NODE_ENV, which jest sets to "test".
243
246
  write((0, node_path_1.join)(root, manifest.relativeProjectDir, ".env"), "CDK_NEXTJS_TEST_FROM_ENV_FILE=from-file\nCDK_NEXTJS_TEST_SET_BY_LAMBDA=from-file\n");
@@ -281,6 +284,11 @@ describe("loadRuntime", () => {
281
284
  expect(process.env.CDK_NEXTJS_TEST_FROM_ENV_FILE).toBe("from-file");
282
285
  expect(process.env.CDK_NEXTJS_TEST_SET_BY_LAMBDA).toBe("from-lambda");
283
286
  });
287
+ it("awaits instrumentation register() before any entrypoint or middleware loads, as next start does", () => {
288
+ // Module-scope code in middleware and entrypoints reads what `register()`
289
+ // sets (#279), and nothing is loaded until `loadRuntime` has returned.
290
+ expect(process.env.CDK_NEXTJS_TEST_REGISTERED).toBe("yes");
291
+ });
284
292
  it("explains a deployment package with no manifest", async () => {
285
293
  const empty = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "cdk-nextjs-empty-"));
286
294
  await expect((0, core_1.loadRuntime)(empty)).rejects.toThrow(/Could not read the cdk-nextjs adapter manifest/);
@@ -1675,4 +1683,4 @@ describe("revalidatedPageRoutes", () => {
1675
1683
  ]);
1676
1684
  });
1677
1685
  });
1678
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvY29yZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQVFpQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQTBDO0FBQzFDLDZDQUFpRDtBQUNqRCx5Q0FBNkU7QUFDN0Usa0RBQThDO0FBQzlDLGlDQU9nQjtBQUNoQiw0REFHa0M7QUFDbEMsNENBQXFEO0FBR3JELHlDQU1vQjtBQUNwQixzR0FBd0U7QUFFeEU7Ozs7O0dBS0c7QUFDSCxNQUFNLGVBQWUsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1SHZCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxlQUFlLEdBQUc7Ozs7Ozs7Ozs7Ozs7Q0FhdkIsQ0FBQztBQUVGLE1BQU0sY0FBYztJQUlpQjtJQUg1QixJQUFJLENBQWdCO0lBQ1gsTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUV0QyxZQUFtQyxlQUFlLEtBQUs7UUFBcEIsaUJBQVksR0FBWixZQUFZLENBQVE7SUFBRyxDQUFDO0lBRXBELEtBQUssQ0FBQyxJQUFrQjtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxzQkFBUSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVE7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENB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QUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHtcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICByZWFscGF0aFN5bmMsXG4gIHJtU3luYyxcbiAgc3ltbGlua1N5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IFJlYWRhYmxlLCBXcml0YWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHsgY29uc3RhbnRzIGFzIHpsaWJDb25zdGFudHMsIGd1bnppcFN5bmMsIGd6aXBTeW5jIH0gZnJvbSBcIm5vZGU6emxpYlwiO1xuaW1wb3J0IHsgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQge1xuICBsb2FkUnVudGltZSxcbiAgTmV4dGpzUnVudGltZSxcbiAgcmV2YWxpZGF0ZWRQYWdlUm91dGVzLFxuICBSdW50aW1lUmVxdWVzdCxcbiAgc3BsaXRCb2R5LFxuICB3aXRob3V0SW50ZXJuYWxIZWFkZXJzLFxufSBmcm9tIFwiLi9jb3JlXCI7XG5pbXBvcnQge1xuICBCdWlsZENvbXBsZXRlQ29udGV4dCxcbiAgYnVpbGRBZGFwdGVyTWFuaWZlc3QsXG59IGZyb20gXCIuLi9hZGFwdGVyL2J1aWxkLW91dHB1dHNcIjtcbmltcG9ydCB7IFNoaW1JbmNvbWluZ01lc3NhZ2UgfSBmcm9tIFwiLi9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc3BvbnNlSGVhZCB9IGZyb20gXCIuL2h0dHAvcmVzcG9uc2VcIjtcbmltcG9ydCB7IFJlc3BvbnNlU2luayB9IGZyb20gXCIuL2h0dHAvc2lua1wiO1xuaW1wb3J0IHtcbiAgQWRhcHRlck1hbmlmZXN0LFxuICBkZXBsb3llZE1hbmlmZXN0UGF0aCxcbiAgUFVCTElDX0ZJTEVTX0ZJTEVfTkFNRSxcbiAgUkVWQUxJREFURURfUEFHRV9IT09LLFxuICBSVU5USU1FX0RJUl9OQU1FLFxufSBmcm9tIFwiLi9tYW5pZmVzdFwiO1xuaW1wb3J0IGFwcFBsYXlncm91bmQgZnJvbSBcIi4uL2FkYXB0ZXIvX19maXh0dXJlc19fL2FwcC1wbGF5Z3JvdW5kLmpzb25cIjtcblxuLyoqXG4gKiBFdmVyeSBlbnRyeXBvaW50IGluIHRoZSBzdGFnZWQgdHJlZSBpcyB0aGlzIG1vZHVsZS4gSXQgcmVwb3J0cyBiYWNrIHdoYXQgdGhlXG4gKiBydW50aW1lIGhhbmRlZCBpdCDigJQgdGhlIHJld3JpdHRlbiBgcmVxLnVybGAsIHRoZSBgcmVxdWVzdE1ldGFgIGZpZWxkcyBOZXh0LmpzXG4gKiByZWFkcywgdGhlIGN3ZCDigJQgd2hpY2ggaXMgdGhlIHdob2xlIGNvbnRyYWN0IGJldHdlZW4gdGhlIHJ1bnRpbWUgYW5kIGEgcmVhbFxuICogYnVpbHQgZW50cnlwb2ludCwgYW5kIGl0IGlzIG90aGVyd2lzZSBvbmx5IG9ic2VydmFibGUgYnkgcnVubmluZyBOZXh0LmpzLlxuICovXG5jb25zdCBFTlRSWVBPSU5UX1NUVUIgPSBgXG5jb25zdCB7IHdyaXRlRmlsZVN5bmMgfSA9IHJlcXVpcmUoXCJub2RlOmZzXCIpO1xuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKHJlcSwgcmVzLCBjdHgpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsLCBcImh0dHBzOi8vc3R1Yi50ZXN0XCIpO1xuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJib29tRXZlcnl3aGVyZVwiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInRoZSBlcnJvciBwYWdlIGV4cGxvZGVkIHRvb1wiKTtcbiAgfVxuICAvLyBTYW1lIHJlY3Vyc2lvbiBndWFyZCBhcyBcXGByZW5kZXI0MDRcXGAgYmVsb3c6IHRoZSBlcnJvciBwYWdlIGlzIHJlbmRlcmVkIGZvclxuICAvLyB0aGUgVVJMIHRoYXQgd2FzIGFza2VkIGZvciwgc28gYW4gdW5ndWFyZGVkIHRocm93IHdvdWxkIHJlcGVhdCBmb3JldmVyLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJib29tXCIpICYmICFfX2ZpbGVuYW1lLmluY2x1ZGVzKFwiX2Vycm9yXCIpKSB7XG4gICAgLy8gQSByZW5kZXIgdGhhdCBkZXNjcmliZWQgaXRzIGJvZHkgYmVmb3JlIGl0IHRocmV3LlxuICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLCBcIjEyMzRcIik7XG4gICAgcmVzLnNldEhlYWRlcihcIkVUYWdcIiwgJ1wic3RhbGVcIicpO1xuICAgIC8vIFdoYXQgXFxgZ2V0U2VydmVyU2lkZVByb3BzXFxgIChvciBhIFxcYGhlYWRlcnMoKVxcYCBydWxlKSBjYW4gbGVhdmUgYmVoaW5kLlxuICAgIHJlcy5zZXRIZWFkZXIoXCJDYWNoZS1Db250cm9sXCIsIFwicy1tYXhhZ2U9NjBcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwicm91dGUgZXhwbG9kZWRcIik7XG4gIH1cbiAgLy8gV2hhdCBib3RoIHJvdXRlcnMgZG8gZm9yIFxcYG5vdEZvdW5kKClcXGAgdGhleSBjYW5ub3QgcmVuZGVyIHRoZW1zZWx2ZXMuIE9ubHlcbiAgLy8gdGhlIHJvdXRlIHRoYXQgZ2F2ZSB1cCBkb2VzIGl0OiB0aGUgcnVudGltZSByZW5kZXJzIHRoZSA0MDQgYWdhaW5zdCB0aGVcbiAgLy8gKnNhbWUqIFVSTCwgc28gdGhlIG5vdC1mb3VuZCBtb2R1bGUgcmVhY2hpbmcgaGVyZSBhZ2FpbiB3b3VsZCByZWN1cnNlLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJyZW5kZXI0MDRcIikgJiYgIV9fZmlsZW5hbWUuaW5jbHVkZXMoXCJfbm90LWZvdW5kXCIpKSB7XG4gICAgYXdhaXQgY3R4LnJlcXVlc3RNZXRhLnJlbmRlcjQwNCgpO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBcXGByZXMucmV2YWxpZGF0ZSh0YXJnZXQpXFxgIGZyb20gYSBQYWdlcyBBUEkgcm91dGUsIHNwZWxsZWQgb3V0OiB0aGUgcnVudGltZVxuICAvLyBzdXBwbGllcyBcXGByZXF1ZXN0TWV0YS5yZXZhbGlkYXRlXFxgLCBhbmQgd2hhdCBjb21lcyBiYWNrIGlzIGVpdGhlciBub3RoaW5nIG9yXG4gIC8vIHRoZSBcXGBJbnZhbGlkIHJlc3BvbnNlIDxzdGF0dXM+XFxgIHRoaXMgcmVwb3J0cy5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwicmV2YWxpZGF0ZVwiKSkge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGN0eC5yZXF1ZXN0TWV0YS5yZXZhbGlkYXRlKHtcbiAgICAgICAgdXJsUGF0aDogdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJyZXZhbGlkYXRlXCIpLFxuICAgICAgICBoZWFkZXJzOiB7IFwieC1wcmVyZW5kZXItcmV2YWxpZGF0ZVwiOiBcInByZXZpZXctaWRcIiB9LFxuICAgICAgICBvcHRzOiB7IHVuc3RhYmxlX29ubHlHZW5lcmF0ZWQ6IHVybC5zZWFyY2hQYXJhbXMuaGFzKFwib25seUdlbmVyYXRlZFwiKSB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJvciA9IGVyci5tZXNzYWdlO1xuICAgIH1cbiAgICByZXMuZW5kKEpTT04uc3RyaW5naWZ5KHsgcmV2YWxpZGF0ZWQ6IGVycm9yID09PSBudWxsLCBlcnJvciB9KSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIExldHMgYSB0ZXN0IHNlZSB0aGUgcmVxdWVzdCBhIHJldmFsaWRhdGlvbiByZW5kZXJlZCwgd2hvc2UgcmVzcG9uc2UgdGhlXG4gIC8vIHJ1bnRpbWUgZGlzY2FyZHMuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcInJlY29yZE9yaWdpblwiKSkge1xuICAgIHdyaXRlRmlsZVN5bmMocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiwgY3R4LnJlcXVlc3RNZXRhLmluaXRVUkwpO1xuICB9XG4gIC8vIExldHMgYSByZXZhbGlkYXRpb24gdGFyZ2V0IGFuc3dlciBzb21ldGhpbmcgb3RoZXIgdGhhbiAyMDAuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcInN0YXR1c1wiKSkge1xuICAgIHJlcy5zdGF0dXNDb2RlID0gTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwic3RhdHVzXCIpKTtcbiAgfVxuICAvLyBXaGF0IGEgcHJlcmVuZGVyZWQgXFxgL19ub3QtZm91bmRcXGAgZG9lczogaXQgc2VuZHMgdGhlIENhY2hlLUNvbnRyb2wgb2YgaXRzXG4gIC8vIG93biBjYWNoZSBlbnRyeSwgYSB5ZWFyIGZvciBvbmUgdGhhdCBuZXZlciByZXZhbGlkYXRlcyDigJQgYnV0IG9ubHkgd2hlbiB0aGVcbiAgLy8gcmVzcG9uc2UgaGFzIG5vbmUgeWV0LCBhcyBcXGBzZW5kUmVuZGVyUmVzdWx0XFxgIGFuZCBcXGBwYWdlcy1oYW5kbGVyLmpzXFxgIGRvLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJjYWNoZUNvbnRyb2xcIikgJiYgIXJlcy5nZXRIZWFkZXIoXCJDYWNoZS1Db250cm9sXCIpKSB7XG4gICAgcmVzLnNldEhlYWRlcihcIkNhY2hlLUNvbnRyb2xcIiwgdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJjYWNoZUNvbnRyb2xcIikpO1xuICB9XG4gIC8vIEEgcm91dGUgdGhhdCByZWFkcyBpdHMgcmVxdWVzdCBib2R5LCByZXBvcnRpbmcgd2hhdCBhcnJpdmVkLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJyZWFkQm9keVwiKSkge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVxKSBsZW5ndGggKz0gY2h1bmsubGVuZ3RoO1xuICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoeyBib2R5TGVuZ3RoOiBsZW5ndGggfSkpO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBBIFBhZ2VzIEFQSSByb3V0ZSB0aGF0IHJldHVybnMgYmVmb3JlIGl0IGlzIGRvbmUgd3JpdGluZzogd2hhdFxuICAvLyBcXGBzdHJlYW0ucGlwZShyZXMpXFxgIGFuZCBhIGNhbGxiYWNrLXN0eWxlIFxcYHJlcy5qc29uKClcXGAgYm90aCBsb29rIGxpa2UuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImVuZExhdGVyXCIpKSB7XG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgcmVzLndyaXRlKFwiZmlyc3QsXCIpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzLmVuZChcInNlY29uZFwiKSwgMTApO1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBXaGF0IE5leHQncyBcXGBBZnRlckNvbnRleHRcXGAgZG9lczogd29yayByZWdpc3RlcmVkIHdpdGggXFxgd2FpdFVudGlsXFxgIGFmdGVyXG4gIC8vIHRoZSByZXNwb25zZSwgZnJvbSBpbnNpZGUgd29yayB0aGF0IHdhcyBpdHNlbGYgcmVnaXN0ZXJlZCB3aXRoIGl0LlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJsYXRlV2FpdFVudGlsXCIpKSB7XG4gICAgY3R4LndhaXRVbnRpbChcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjdHgud2FpdFVudGlsKFxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmVMYXRlKSA9PlxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVIsIFwibGF0ZVwiKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlTGF0ZSgpO1xuICAgICAgICAgICAgICB9LCAxMCksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCAxMCksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwid2FpdFVudGlsXCIpKSB7XG4gICAgY3R4LndhaXRVbnRpbChcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB3cml0ZUZpbGVTeW5jKHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9NQVJLRVIsIFwiZG9uZVwiKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIDEwKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICByZXMuZW5kKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGZpbGU6IF9fZmlsZW5hbWUsXG4gICAgICB1cmw6IHJlcS51cmwsXG4gICAgICBpbml0VVJMOiBjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLmluaXRVUkwsXG4gICAgICBob3N0bmFtZTogY3R4LnJlcXVlc3RNZXRhICYmIGN0eC5yZXF1ZXN0TWV0YS5ob3N0bmFtZSxcbiAgICAgIHF1ZXJ5OiBjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLnF1ZXJ5LFxuICAgICAgcGFyYW1zOiAoY3R4LnJlcXVlc3RNZXRhICYmIGN0eC5yZXF1ZXN0TWV0YS5wYXJhbXMpIHx8IG51bGwsXG4gICAgICBoYXNSZW5kZXI0MDQ6IEJvb2xlYW4oY3R4LnJlcXVlc3RNZXRhICYmIGN0eC5yZXF1ZXN0TWV0YS5yZW5kZXI0MDQpLFxuICAgICAgd2FpdFVudGlsOiB0eXBlb2YgY3R4LndhaXRVbnRpbCxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGhlYWRlcjogcmVxLmhlYWRlcnNbXCJ4LWZyb20tbWlkZGxld2FyZVwiXSB8fCBudWxsLFxuICAgICAgbmV4dFJlc3VtZTogcmVxLmhlYWRlcnNbXCJuZXh0LXJlc3VtZVwiXSB8fCBudWxsLFxuICAgICAgbWF0Y2hlZFBhdGg6IHJlcS5oZWFkZXJzW1wieC1tYXRjaGVkLXBhdGhcIl0gfHwgbnVsbCxcbiAgICAgIGNvb2tpZTogcmVxLmhlYWRlcnMuY29va2llIHx8IG51bGwsXG4gICAgfSksXG4gICk7XG59O1xuYDtcblxuLyoqXG4gKiBgTmV4dFJlc3BvbnNlLm5leHQoeyByZXF1ZXN0OiB7IGhlYWRlcnMgfSB9KWAsIHNwZWxsZWQgb3V0IGluIHRoZSB3aXJlIHByb3RvY29sXG4gKiBOZXh0LmpzIHVzZXM6IGB4LW1pZGRsZXdhcmUtb3ZlcnJpZGUtaGVhZGVyc2AgbGlzdHMgKmV2ZXJ5KiByZXF1ZXN0IGhlYWRlciB0aGVcbiAqIHJvdXRlIHNob3VsZCBzZWUg4oCUIGRyb3BwaW5nIG9uZSBoZXJlIGlzIGhvdyBhIHJlYWwgYXBwIGxvc2VzIGBhY2NlcHQtZW5jb2RpbmdgLlxuICovXG5jb25zdCBNSURETEVXQVJFX1NUVUIgPSBgXG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAocmVxdWVzdCkgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyBcIngtbWlkZGxld2FyZS1uZXh0XCI6IFwiMVwiIH0pO1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHtcbiAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIGhlYWRlcnMuc2V0KFwieC1taWRkbGV3YXJlLXJlcXVlc3QtXCIgKyBuYW1lLCB2YWx1ZSk7XG4gIH0pO1xuICBuYW1lcy5wdXNoKFwieC1mcm9tLW1pZGRsZXdhcmVcIik7XG4gIGhlYWRlcnMuc2V0KFwieC1taWRkbGV3YXJlLXJlcXVlc3QteC1mcm9tLW1pZGRsZXdhcmVcIiwgXCJ5ZXNcIik7XG4gIGhlYWRlcnMuc2V0KFwieC1taWRkbGV3YXJlLW92ZXJyaWRlLWhlYWRlcnNcIiwgbmFtZXMuam9pbihcIixcIikpO1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgaGVhZGVycyB9KTtcbn07XG5gO1xuXG5jbGFzcyBDb2xsZWN0aW5nU2luayBpbXBsZW1lbnRzIFJlc3BvbnNlU2luayB7XG4gIHB1YmxpYyBoZWFkPzogUmVzcG9uc2VIZWFkO1xuICBwdWJsaWMgcmVhZG9ubHkgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcGFkRW1wdHlCb2R5ID0gZmFsc2UpIHt9XG5cbiAgcHVibGljIGJlZ2luKGhlYWQ6IFJlc3BvbnNlSGVhZCk6IFdyaXRhYmxlIHtcbiAgICB0aGlzLmhlYWQgPSBoZWFkO1xuICAgIGNvbnN0IGNodW5rcyA9IHRoaXMuY2h1bmtzO1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUoe1xuICAgICAgd3JpdGUoY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oY2h1bmspKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJvZHkoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdCh0aGlzLmNodW5rcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGUocGF0aDogc3RyaW5nLCBjb250ZW50czogc3RyaW5nIHwgQnVmZmVyKTogdm9pZCB7XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBjb250ZW50cyk7XG59XG5cbmNvbnN0IEZBVklDT04gPSBCdWZmZXIuZnJvbShcIjAwMDAwMTAwLWZha2UtaWNvblwiLCBcInV0Zi04XCIpO1xuY29uc3QgTk9UX0ZPVU5EX0hUTUwgPSBcIjxodG1sPjxib2R5PnByZXJlbmRlcmVkIDQwNDwvYm9keT48L2h0bWw+XCI7XG5jb25zdCBFUlJPUl9IVE1MID0gXCI8aHRtbD48Ym9keT5wcmVyZW5kZXJlZCA1MDA8L2JvZHk+PC9odG1sPlwiO1xuLyoqXG4gKiBXaGF0IGEgY29udGFpbmVyIGltYWdlIGNvcGllcyBpbnRvIGBwdWJsaWMvYC4gTmFtZXMgYHNlbmRgIGFuZCB0aGUgZXhhY3RcbiAqIG1hdGNoIGluIGBAbmV4dC9yb3V0aW5nYCBlYWNoIGdvdCB3cm9uZzogYSBgJWAgdGhhdCBpcyBub3QgYW4gZXNjYXBlLCBvbmUgdGhhdFxuICogbG9va3MgbGlrZSBvbmUgbmV4dCB0byB0aGUgZmlsZSBpdCBkZWNvZGVzIHRvLCBhbmQgYW4gYEBgIGEgYnJvd3NlciBsZWF2ZXNcbiAqIGFsb25lLlxuICovXG5jb25zdCBQVUJMSUNfRklMRVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIFwidGVzdC50eHRcIjogXCJoZWxsbyBmcm9tIHB1YmxpY1wiLFxuICBcIjEwMCUucG5nXCI6IFwiYSBsaXRlcmFsIHBlcmNlbnRcIixcbiAgXCJhJTIwYi50eHRcIjogXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgcGVyY2VudFwiLFxuICBcImEgYi50eHRcIjogXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgc3BhY2VcIixcbiAgXCJpbWFnZXMvbG9nb0AyeC5wbmdcIjogXCJhdCBzaWduXCIsXG59O1xuXG4vKipcbiAqIE1hdGVyaWFsaXplcyB0aGUgdHJlZSBhIGRlcGxveW1lbnQgc3RhZ2VzOiB0aGUgbWFuaWZlc3QgdW5kZXJcbiAqIGBjZGstbmV4dGpzLXJ1bnRpbWUvYCwgYSBzdHViIGF0IGV2ZXJ5IGVudHJ5cG9pbnQgYGZpbGVQYXRoYCwgdGhlIHN0YXRpYyBmaWxlc1xuICogdGhlIG1hbmlmZXN0IHBvaW50cyBhdCwgYW5kIHRoZSBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gIGBsb2FkUnVudGltZWBcbiAqIHByb2JlcyBmb3IuXG4gKi9cbmZ1bmN0aW9uIHN0YWdlRGVwbG95bWVudChcbiAgbWlkZGxld2FyZVNvdXJjZSA9IE1JRERMRVdBUkVfU1RVQixcbiAgdHJhbnNmb3JtTWFuaWZlc3Q6IChtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0KSA9PiBBZGFwdGVyTWFuaWZlc3QgPSAoaXQpID0+XG4gICAgaXQsXG4pOiBzdHJpbmcge1xuICAvLyBUaGUgZml4dHVyZSBpcyBhIHJlYWwgY2FwdHVyZWQgY29udGV4dCwgYXMgSlNPTjogdGhlIHN0cnVjdHVyYWwgY2FzdCBpcyB0aGVcbiAgLy8gcG9pbnQgb2YgdGhlIGNhc3QgKHNlZSBgYnVpbGQtb3V0cHV0cy50ZXN0LnRzYCkuXG4gIGNvbnN0IGN0eCA9IHN0cnVjdHVyZWRDbG9uZShhcHBQbGF5Z3JvdW5kKSBhcyB1bmtub3duIGFzIEJ1aWxkQ29tcGxldGVDb250ZXh0O1xuICBjb25zdCBtYW5pZmVzdCA9IHRyYW5zZm9ybU1hbmlmZXN0KFxuICAgIGJ1aWxkQWRhcHRlck1hbmlmZXN0KGN0eCwgeyBidWlsZEN3ZDogY3R4LnByb2plY3REaXIgfSkubWFuaWZlc3QsXG4gICk7XG4gIC8vIFJlYWxwYXRoIGJlY2F1c2UgYGxvYWRSdW50aW1lYCBjaGRpcnMsIGFuZCBtYWNPUydzIC92YXIgaXMgYSBzeW1saW5rIHRvXG4gIC8vIC9wcml2YXRlL3ZhcjogdGhlIGN3ZCB0aGUgZW50cnlwb2ludHMgcmVwb3J0IHdvdWxkIG5vdCBtYXRjaCBvdGhlcndpc2UuXG4gIGNvbnN0IHJvb3QgPSByZWFscGF0aFN5bmMobWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLWNvcmUtXCIpKSk7XG5cbiAgd3JpdGUoZGVwbG95ZWRNYW5pZmVzdFBhdGgocm9vdCksIEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0KSk7XG4gIHdyaXRlKFxuICAgIGpvaW4ocm9vdCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcIi5uZXh0L3JlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpLFxuICAgIEpTT04uc3RyaW5naWZ5KHsgdmVyc2lvbjogMSwgY29uZmlnOiB7fSB9KSxcbiAgKTtcbiAgLy8gQSBkZXBsb3llZCB0cmVlIGNhcnJpZXMgdGhlIGBuZXh0YCBjbG9zdXJlIGBuZXh0IGJ1aWxkYCB0cmFjZWQsIHVuZGVyIHRoZVxuICAvLyAqcHJvamVjdCogZGlyIHJhdGhlciB0aGFuIG5leHQgdG8gdGhlIHJ1bnRpbWUgc2hlbGwg4oCUIHdoaWNoIGlzIHRoZSB3aG9sZVxuICAvLyByZWFzb24gYG5leHQtbW9kdWxlcy50c2AgZXhpc3RzLiBMaW5raW5nIHRoaXMgcmVwbydzIG93biBgbm9kZV9tb2R1bGVzYCBpblxuICAvLyByZXByb2R1Y2VzIHRoYXQsIHNvIGBzZXJ2ZVN0YXRpY2AgaGVyZSByZXNvbHZlcyBieSB0aGUgc2FtZSB3YWxrIGl0IGRvZXMgaW5cbiAgLy8gTGFtYmRhIGluc3RlYWQgb2YgdGhlIHRlc3QgcXVpZXRseSBleGVyY2lzaW5nIGEgZGlmZmVyZW50IGxvb2t1cC5cbiAgc3ltbGlua1N5bmMoXG4gICAgam9pbihfX2Rpcm5hbWUsIFwiLi4vLi4vbm9kZV9tb2R1bGVzXCIpLFxuICAgIGpvaW4ocm9vdCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcIm5vZGVfbW9kdWxlc1wiKSxcbiAgKTtcblxuICBmb3IgKGNvbnN0IGVudHJ5cG9pbnQgb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5lbnRyeXBvaW50cykpIHtcbiAgICB3cml0ZShqb2luKHJvb3QsIGVudHJ5cG9pbnQuZmlsZVBhdGgpLCBFTlRSWVBPSU5UX1NUVUIpO1xuICB9XG4gIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3QubWlkZGxld2FyZSEuZmlsZVBhdGgpLCBtaWRkbGV3YXJlU291cmNlKTtcblxuICB3cml0ZShqb2luKHJvb3QsIG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiL2Zhdmljb24uaWNvXCJdKSwgRkFWSUNPTik7XG4gIC8vIEFic2VudCBpbiB0aGUgZGVwbG95bWVudHMgdGhlIFBhZ2VzIDQwNCBhbmQgZXJyb3ItcGFnZSBsYWRkZXIgdGVzdHMgc3RhZ2UuXG4gIGlmIChtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi80MDRcIl0pIHtcbiAgICB3cml0ZShqb2luKHJvb3QsIG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiLzQwNFwiXSksIE5PVF9GT1VORF9IVE1MKTtcbiAgfVxuICBpZiAobWFuaWZlc3Quc3RhdGljRmlsZXNbXCIvNTAwXCJdKSB7XG4gICAgd3JpdGUoam9pbihyb290LCBtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi81MDBcIl0pLCBFUlJPUl9IVE1MKTtcbiAgfVxuICBmb3IgKGNvbnN0IFtmaWxlLCBjb250ZW50c10gb2YgT2JqZWN0LmVudHJpZXMoUFVCTElDX0ZJTEVTKSkge1xuICAgIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcInB1YmxpY1wiLCBmaWxlKSwgY29udGVudHMpO1xuICB9XG4gIC8vIGAuZW52YCByYXRoZXIgdGhhbiBgLmVudi5wcm9kdWN0aW9uYDogYEBuZXh0L2VudmAgcGlja3MgdGhlIG1vZGUgZnJvbVxuICAvLyBOT0RFX0VOViwgd2hpY2ggamVzdCBzZXRzIHRvIFwidGVzdFwiLlxuICB3cml0ZShcbiAgICBqb2luKHJvb3QsIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpciwgXCIuZW52XCIpLFxuICAgIFwiQ0RLX05FWFRKU19URVNUX0ZST01fRU5WX0ZJTEU9ZnJvbS1maWxlXFxuQ0RLX05FWFRKU19URVNUX1NFVF9CWV9MQU1CREE9ZnJvbS1maWxlXFxuXCIsXG4gICk7XG4gIHJldHVybiByb290O1xufVxuXG5sZXQgcm9vdDogc3RyaW5nO1xubGV0IHJ1bnRpbWU6IE5leHRqc1J1bnRpbWU7XG5jb25zdCBvcmlnaW5hbEN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbmJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gIGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9TRVRfQllfTEFNQkRBID0gXCJmcm9tLWxhbWJkYVwiO1xuICByb290ID0gc3RhZ2VEZXBsb3ltZW50KCk7XG4gIC8vIGBsb2FkUnVudGltZWAgY2hkaXJzLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgaXQuXG4gIHJ1bnRpbWUgPSBhd2FpdCBsb2FkUnVudGltZShyb290KTtcbn0pO1xuXG5hZnRlckFsbCgoKSA9PiB7XG4gIHByb2Nlc3MuY2hkaXIob3JpZ2luYWxDd2QpO1xuICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xufSk7XG5cbi8qKiBPbmUgcmVxdWVzdCB0aHJvdWdoIHRoZSByZWFsIGBoYW5kbGVgLCB3aXRoIHRoZSByZXNwb25zZSBjb2xsZWN0ZWQuICovXG5hc3luYyBmdW5jdGlvbiBzZW5kKFxuICByZXF1ZXN0OiBQYXJ0aWFsPFJ1bnRpbWVSZXF1ZXN0PiAmIHsgdXJsOiBzdHJpbmcgfSxcbiAgcGFkRW1wdHlCb2R5ID0gZmFsc2UsXG4pOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsocGFkRW1wdHlCb2R5KTtcbiAgYXdhaXQgcnVudGltZS5oYW5kbGUoXG4gICAge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgIC4uLnJlcXVlc3QsXG4gICAgfSxcbiAgICBzaW5rLFxuICApO1xuICByZXR1cm4gc2luaztcbn1cblxuLyoqIFRoZSBKU09OIGFuIGVudHJ5cG9pbnQgc3R1YiBhbnN3ZXJzIHdpdGguICovXG5mdW5jdGlvbiBzdHViQm9keShzaW5rOiBDb2xsZWN0aW5nU2luayk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgZW5jb2RpbmcgPSBzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdO1xuICBjb25zdCBib2R5ID0gZW5jb2RpbmcgPT09IFwiZ3ppcFwiID8gZ3VuemlwU3luYyhzaW5rLmJvZHkpIDogc2luay5ib2R5O1xuICByZXR1cm4gSlNPTi5wYXJzZShib2R5LnRvU3RyaW5nKFwidXRmLThcIikpO1xufVxuXG5kZXNjcmliZShcImxvYWRSdW50aW1lXCIsICgpID0+IHtcbiAgaXQoXCJjaGRpcnMgdG8gdGhlIHN0YWdlZCBwcm9qZWN0IGRpciwgYmVjYXVzZSBlbnRyeXBvaW50cyByZXNvbHZlIGFnYWluc3QgY3dkXCIsICgpID0+IHtcbiAgICBleHBlY3QocHJvY2Vzcy5jd2QoKSkudG9CZShqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmRcIikpO1xuICB9KTtcblxuICBpdChcImxvYWRzIHRoZSBzdGFnZWQgZW52IGZpbGVzIHRoZSB3YXkgbmV4dCBzdGFydCBkb2VzLCB3aXRob3V0IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfRlJPTV9FTlZfRklMRSkudG9CZShcImZyb20tZmlsZVwiKTtcbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX1NFVF9CWV9MQU1CREEpLnRvQmUoXCJmcm9tLWxhbWJkYVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJleHBsYWlucyBhIGRlcGxveW1lbnQgcGFja2FnZSB3aXRoIG5vIG1hbmlmZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbXB0eSA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1lbXB0eS1cIikpO1xuICAgIGF3YWl0IGV4cGVjdChsb2FkUnVudGltZShlbXB0eSkpLnJlamVjdHMudG9UaHJvdyhcbiAgICAgIC9Db3VsZCBub3QgcmVhZCB0aGUgY2RrLW5leHRqcyBhZGFwdGVyIG1hbmlmZXN0LyxcbiAgICApO1xuICB9KTtcblxuICBpdChcImV4cGxhaW5zIGEgZGVwbG95bWVudCBwYWNrYWdlIG1pc3NpbmcgdGhlIHN0YWdlZCBwcm9qZWN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXJ0aWFsID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLXBhcnRpYWwtXCIpKTtcbiAgICB3cml0ZShcbiAgICAgIGRlcGxveWVkTWFuaWZlc3RQYXRoKHBhcnRpYWwpLFxuICAgICAgcmVhZEZpbGVTeW5jKGRlcGxveWVkTWFuaWZlc3RQYXRoKHJvb3QpLCBcInV0Zi04XCIpLFxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KGxvYWRSdW50aW1lKHBhcnRpYWwpKS5yZWplY3RzLnRvVGhyb3coXG4gICAgICAvZG9lcyBub3QgY29udGFpbiB0aGUgc3RhZ2VkIE5leHQuanMgcHJvamVjdC8sXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJOZXh0anNSdW50aW1lLmhhbmRsZVwiLCAoKSA9PiB7XG4gIGl0KFwiaW52b2tlcyB0aGUgbWF0Y2hlZCBlbnRyeXBvaW50IHdpdGggdGhlIHJlcXVlc3RNZXRhIE5leHQuanMgcmVhZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQmUoXG4gICAgICBqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmQvLm5leHQvc2VydmVyL2FwcC9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGJvZHkudXJsKS50b0JlKFwiL1wiKTtcbiAgICAvLyBXaXRob3V0IGBpbml0VVJMYCwgYFJvdXRlTW9kdWxlLnByZXBhcmVgIGZhbGxzIGJhY2sgdG8gYGh0dHA6Ly9sb2NhbGhvc3RgLlxuICAgIGV4cGVjdChib2R5LmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L1wiKTtcbiAgICBleHBlY3QoYm9keS5ob3N0bmFtZSkudG9CZShcInNob3AuZXhhbXBsZS50ZXN0XCIpO1xuICAgIGV4cGVjdChib2R5Lmhhc1JlbmRlcjQwNCkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYm9keS53YWl0VW50aWwpLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICBleHBlY3QoYm9keS5jd2QpLnRvQmUoam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kXCIpKTtcbiAgfSk7XG5cbiAgaXQoXCJ0cnVzdHMgeC1mb3J3YXJkZWQtaG9zdCBvdmVyIHRoZSBob3N0IENsb3VkRnJvbnQgcmV3cm90ZSwgd2hlbiB0aGUgc2hlbGwgc2F5cyB0b1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJvcmlnaW4uY2xvdWRmcm9udC5pbnRlcm5hbFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJ3d3cuZXhhbXBsZS50ZXN0XCIsXG4gICAgICB9LFxuICAgICAgdHJ1c3RGb3J3YXJkZWRIb3N0OiB0cnVlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly93d3cuZXhhbXBsZS50ZXN0L1wiKTtcbiAgfSk7XG5cbiAgLy8gT25seSB0aGUgQ2xvdWRGcm9udCBmdW5jdGlvbiBpbiBmcm9udCBvZiAqZnVuY3Rpb24qIGNvbXB1dGUgb3ZlcndyaXRlcyB0aGlzXG4gIC8vIGhlYWRlciwgc28gb24gQ29udGFpbmVycyBhbmQgdGhlIFJlZ2lvbmFsIHR5cGVzIGl0IGFycml2ZXMgZnJvbSB0aGUgY2xpZW50OlxuICAvLyBob25vcmluZyBpdCBsZXQgYFgtRm9yd2FyZGVkLUhvc3Q6IGV2aWwuZXhhbXBsZWAgcG9pbnQgZXZlcnkgYWJzb2x1dGUgVVJMXG4gIC8vIHRoZSBhcHAgYnVpbHQsIGEgcGFzc3dvcmQtcmVzZXQgbGluayBzYXksIGF0IGV2aWwuZXhhbXBsZS5cbiAgaXQoXCJpZ25vcmVzIHgtZm9yd2FyZGVkLWhvc3QgdW5sZXNzIHRoZSBzaGVsbCB0cnVzdHMgaXQsIGxpa2UgbmV4dCBzdGFydFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJldmlsLmV4YW1wbGVcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaG9zdG5hbWUpLnRvQmUoXCJzaG9wLmV4YW1wbGUudGVzdFwiKTtcbiAgfSk7XG5cbiAgLy8gQSB2YWx1ZSB0aGF0IGNhbm5vdCBiZSBhIFVSTCBhdXRob3JpdHkgbWFkZSBgbmV3IFVSTGAgdGhyb3csIGFuZCBvbiB0aGVcbiAgLy8gTGFtYmRhIHNoZWxscyDigJQgd2hvc2UgaGFuZGxlcnMgd3JhcCBub3RoaW5nIOKAlCB0aGF0IGlzIGFuIGludm9jYXRpb24gZXJyb3IgYW5kXG4gIC8vIGEgNTAyIHJhdGhlciB0aGFuIGEgcmVzcG9uc2UuXG4gIGl0LmVhY2goW1xuICAgIFtcImEgc3BhY2VcIiwgXCJleGEgbXBsZS50ZXN0XCJdLFxuICAgIFtcImEgc2NoZW1lXCIsIFwiaHR0cHM6Ly93d3cuZXhhbXBsZS50ZXN0XCJdLFxuICAgIFtcImEgcGF0aFwiLCBcInd3dy5leGFtcGxlLnRlc3QvZXZpbFwiXSxcbiAgICBbXCJjcmVkZW50aWFsc1wiLCBcInVzZXJAd3d3LmV4YW1wbGUudGVzdFwiXSxcbiAgICBbXCJub3RoaW5nXCIsIFwiXCJdLFxuICBdKShcbiAgICBcImlnbm9yZXMgYW4geC1mb3J3YXJkZWQtaG9zdCBjb250YWluaW5nICVzIGFuZCBmYWxscyBiYWNrIHRvIGhvc3RcIixcbiAgICBhc3luYyAoX2xhYmVsLCBmb3J3YXJkZWQpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgICAgdXJsOiBcIi9cIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIixcbiAgICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogZm9yd2FyZGVkLFxuICAgICAgICB9LFxuICAgICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9cIik7XG4gICAgfSxcbiAgKTtcblxuICAvLyBNdWx0aXBsZSBwcm94aWVzIGVhY2ggYXBwZW5kLCBhbmQgb25seSB0aGUgZmlyc3QgdmFsdWUgaXMgdGhpcyBob3Ancy5cbiAgaXQoXCJ0YWtlcyB0aGUgZmlyc3QgdmFsdWUgb2YgYSBjb21tYS1qb2luZWQgeC1mb3J3YXJkZWQtaG9zdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJvcmlnaW4uY2xvdWRmcm9udC5pbnRlcm5hbFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJ3d3cuZXhhbXBsZS50ZXN0LCBpbm5lci5leGFtcGxlLnRlc3RcIixcbiAgICAgIH0sXG4gICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmluaXRVUkwpLnRvQmUoXCJodHRwczovL3d3dy5leGFtcGxlLnRlc3QvXCIpO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgYW4geC1mb3J3YXJkZWQtcHJvdG8gdGhhdCBpcyBub3QgaHR0cCBvciBodHRwc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLXByb3RvXCI6IFwiamF2YXNjcmlwdFwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaW5pdFVSTCkudG9CZShcImh0dHBzOi8vc2hvcC5leGFtcGxlLnRlc3QvXCIpO1xuICB9KTtcblxuICBpdChcImhhbmRzIGEgZHluYW1pYyByb3V0ZSBpdHMgcGFyYW1zIGFzIG54dFAgcXVlcnkgdmFsdWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvaXNyLzQyXCIgfSk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQmUoXG4gICAgICBqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmQvLm5leHQvc2VydmVyL2FwcC9pc3IvW2lkXS9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgLy8gVGhlIGRvY3VtZW50ZWQgZGVwbG95ZWQtcHJveHkgY29udHJhY3Q6IGBwcmVwYXJlKClgIHJlY292ZXJzIGBwYXJhbXNgXG4gICAgLy8gZnJvbSB0aGVzZSwgd2hpY2ggaXMgd2h5IGByZXF1ZXN0TWV0YS5wYXJhbXNgIGlzIGxlZnQgdW5zZXQuXG4gICAgZXhwZWN0KGJvZHkudXJsKS50b0JlKFwiL2lzci80Mj9ueHRQaWQ9NDJcIik7XG4gICAgZXhwZWN0KGJvZHkucXVlcnkpLnRvRXF1YWwoeyBueHRQaWQ6IFwiNDJcIiB9KTtcbiAgICBleHBlY3QoYm9keS5wYXJhbXMpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KFwiaGFuZHMgb3ZlciBhIGNhcHR1cmUgd2l0aCBhbiBlbmNvZGVkIGRlbGltaXRlciBhcyByZXF1ZXN0TWV0YS5wYXJhbXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRoZSBjb250cmFjdCBhYm92ZSwgYmVjYXVzZSB0d28gZGVjb2RlcyBhbmQgYSBzcGxpdFxuICAgIC8vIHdvdWxkIHR1cm4gdGhpcyBpbnRvIHRocmVlIHBhcmFtcyBhbmQgbWFrZSBgbm9ybWFsaXplUGFnZVBhdGhgIHRocm93OyBzZWVcbiAgICAvLyBgb3V0T2ZCYW5kUm91dGVQYXJhbXNgLiBUaGUgYG54dFBgIHZhbHVlIGhhcyB0byAqbGVhdmUqIHRoZSBxdWVyeSDigJQgYW5kXG4gICAgLy8gdGhlcmVmb3JlIHRoZSBVUkwg4oCUIG9yIGBwcmVwYXJlYCBwcmVmZXJzIGl0IGFuZCB0aGUgc3BsaXQgaXMgYmFjay5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvaXNyL2ElMkZiXCIgfSk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LnVybCkudG9CZShcIi9pc3IvYSUyRmJcIik7XG4gICAgZXhwZWN0KGJvZHkucXVlcnkpLnRvRXF1YWwoe30pO1xuICAgIGV4cGVjdChib2R5LnBhcmFtcykudG9FcXVhbCh7IGlkOiBcImEvYlwiIH0pO1xuICB9KTtcblxuICBpdChcInJ1bnMgbWlkZGxld2FyZSBhbmQgYXBwbGllcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGl0IG92ZXJyb2RlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvXCIgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmhlYWRlcikudG9CZShcInllc1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXJ2ZXMgYSBzdGF0aWMgZmlsZSBvdXQgb2YgdGhlIHN0YWdlZCB0cmVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvZmF2aWNvbi5pY29cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keSkudG9FcXVhbChGQVZJQ09OKTtcbiAgICAvLyBUeXBlZCBmcm9tIHRoZSByb3V0ZSdzIGV4dGVuc2lvbiwgbm90IHRoZSBmaWxlJ3M6IGEgc3RhdGljIG1ldGFkYXRhIHJvdXRlXG4gICAgLy8gaXMgc3RhZ2VkIGFzIGBmYXZpY29uLmljby5ib2R5YCwgYW5kIGAuYm9keWAgaXMgbm90IGEgbWVkaWEgdHlwZS4gU2VlXG4gICAgLy8gYHNldEJvZHlGaWxlQ29udGVudFR5cGVgIGluIHN0YXRpYy1maWxlcy50cy5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFwiaW1hZ2UveC1pY29uXCIpO1xuICB9KTtcblxuICBpdChcInNlcnZlcyBwdWJsaWMvIG9mZiBkaXNrLCB1bmRlciB0aGUgbmFtZSB0aGUgZmlsZSBhY3R1YWxseSBoYXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsIH0pO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgICAgcmV0dXJuIHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgIH07XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvdGVzdC50eHRcIikpLnRvQmUoXCJoZWxsbyBmcm9tIHB1YmxpY1wiKTtcbiAgICAvLyBgc2VuZGAgZGVjb2RlcyB0aGUgcGF0aCBpdCBpcyBnaXZlbiwgc28gYSByYXcgZmlsZXN5c3RlbSBwYXRoIGZhaWxlZCB0b1xuICAgIC8vIGRlY29kZSAoYDEwMCUucG5nYCwgYW4gZW1wdHkgNDAwKSBvciBkZWNvZGVkIHRvIGFub3RoZXIgZmlsZS5cbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi8xMDAlMjUucG5nXCIpKS50b0JlKFwiYSBsaXRlcmFsIHBlcmNlbnRcIik7XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvYSUyNTIwYi50eHRcIikpLnRvQmUoXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgcGVyY2VudFwiKTtcbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi9hJTIwYi50eHRcIikpLnRvQmUoXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgc3BhY2VcIik7XG4gICAgLy8gQm90aCB3YXlzIGEgbGluayBjYW4gc3BlbGwgaXQuXG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvaW1hZ2VzL2xvZ29AMngucG5nXCIpKS50b0JlKFwiYXQgc2lnblwiKTtcbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi9pbWFnZXMvbG9nbyU0MDJ4LnBuZ1wiKSkudG9CZShcImF0IHNpZ25cIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyA0MDUgdG8gYSBwdWJsaWMvIGZpbGUgcmVxdWVzdGVkIHdpdGggYSBtZXRob2Qgb3RoZXIgdGhhbiBHRVRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBzZW5kYCBzZXJ2ZXMgYW55IG1ldGhvZDsgYG5leHQgc3RhcnRgIGRvZXMgbm90LlxuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi90ZXN0LnR4dFwiLCBtZXRob2Q6IFwiREVMRVRFXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDUpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMuYWxsb3cpLnRvQmUoXCJHRVQsIEhFQURcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS5ub3QudG9Db250YWluKFwiaGVsbG8gZnJvbSBwdWJsaWNcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhbiB1bmtub3duIHBhdGggdGhyb3VnaCB0aGUgL19ub3QtZm91bmQgZW50cnlwb2ludFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL25vcGU/cT0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5maWxlKS50b0JlKFxuICAgICAgam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kLy5uZXh0L3NlcnZlci9hcHAvX25vdC1mb3VuZC9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgLy8gVGhlIHJlcXVlc3RlZCBwYXRoLCBub3QgYC9fbm90LWZvdW5kYDogdGhlIEFwcCBSb3V0ZXIgcHV0cyB0aGlzIGluIHRoZSBSU0NcbiAgICAvLyBwYXlsb2FkIGFzIHRoZSBjYW5vbmljYWwgVVJMLCBzbyByZW5kZXJpbmcgdGhlIG1vZHVsZSBhZ2FpbnN0IGl0cyBvd25cbiAgICAvLyBwYXRobmFtZSB3b3VsZCBoYW5kIHRoZSBjbGllbnQgdGhlIHdyb25nIGB1c2VQYXRobmFtZSgpYCBhbmQgaGlzdG9yeSBlbnRyeS5cbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiL25vcGU/cT0xXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYW4gdW5rbm93biBwYXRoIG5vLXN0b3JlLCB3aGF0ZXZlciB0aGUgL19ub3QtZm91bmQgZW50cnkgc2VuZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEEgcHJlcmVuZGVyZWQgYC9fbm90LWZvdW5kYCBpcyBhIGNhY2hlIEhJVCB3aXRoIGEgeWVhci1sb25nIGBzLW1heGFnZWAsXG4gICAgLy8gYW5kIHRoZSBDRE4gd291bGQga2VlcCB0aGlzIDQwNCBmb3IgdGhhdCBsb25nIOKAlCBwYXN0IHRoZSBkZXBsb3kgdGhhdCBhZGRzXG4gICAgLy8gdGhlIHJvdXRlLiBgbmV4dCBzdGFydGAgYW5zd2VycyBhbiB1bm1hdGNoZWQgcGF0aCBuby1zdG9yZS5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IGAvbm9wZT9jYWNoZUNvbnRyb2w9JHtlbmNvZGVVUklDb21wb25lbnQoXCJzLW1heGFnZT0zMTUzNjAwMFwiKX1gLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyB0aGUgNDA0IHBhZ2Ugd2hlbiBhIHJvdXRlIGNhbGxzIHJlcXVlc3RNZXRhLnJlbmRlcjQwNCgpXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP3JlbmRlcjQwND0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIC8vIFdoYXRldmVyIHRoZSByb3V0ZSB0aGF0IGdhdmUgdXAgd2FzIHJlbmRlcmluZywgZm9yIHRoZSBzYW1lIHJlYXNvbi5cbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiLz9yZW5kZXI0MDQ9MVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYSByZW5kZXI0MDQoKSA0MDQgdGhlIENhY2hlLUNvbnRyb2wgaXRzIHJvdXRlIGdhdmUgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBub3RGb3VuZCgpYCBmcm9tIGFuIElTUiBwYWdlIGlzIGEgY2FjaGVhYmxlIHJlc3VsdCBvZiB0aGF0IHBhZ2UsIGtlcHQgZm9yXG4gICAgLy8gaXRzIHJldmFsaWRhdGUgcGVyaW9kLCBzbyB0aGUgbm8tc3RvcmUgZm9yIHVubWF0Y2hlZCBwYXRocyBtdXN0IG5vdFxuICAgIC8vIHJlYWNoIGl0LlxuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogYC8/cmVuZGVyNDA0PTEmY2FjaGVDb250cm9sPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFwicy1tYXhhZ2U9NjBcIil9YCxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXCJzLW1heGFnZT02MFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJydW5zIHJlcXVlc3RNZXRhLnJldmFsaWRhdGUoKSBhZ2FpbnN0IGl0c2VsZiwgbm90IG92ZXIgdGhlIG5ldHdvcmtcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkZcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b0VxdWFsKHsgcmV2YWxpZGF0ZWQ6IHRydWUsIGVycm9yOiBudWxsIH0pO1xuICB9KTtcblxuICBpdChcInJlbmRlcnMgYSByZXZhbGlkYXRpb24gZm9yIHRoZSBwdWJsaWMgb3JpZ2luIHRoZSBjYWxsZXIgd2FzIHNlcnZlZCBvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gam9pbihyb290LCBcInJldmFsaWRhdGUtb3JpZ2luLW1hcmtlclwiKTtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSID0gbWFya2VyO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kKHtcbiAgICAgICAgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkYlM0ZyZWNvcmRPcmlnaW4lM0QxXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBob3N0OiBcImFiYzEyMy5sYW1iZGEtdXJsLnVzLWVhc3QtMS5vbi5hd3NcIixcbiAgICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICAgIFwieC1mb3J3YXJkZWQtcHJvdG9cIjogXCJodHRwc1wiLFxuICAgICAgICB9LFxuICAgICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZWFkRmlsZVN5bmMobWFya2VyLCBcInV0Zi04XCIpKS50b0JlKFxuICAgICAgICBcImh0dHBzOi8vc2hvcC5leGFtcGxlLnRlc3QvP3JlY29yZE9yaWdpbj0xXCIsXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUjtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiZmFpbHMgYSByZXZhbGlkYXRpb24gd2hvc2UgdGFyZ2V0IGRpZCBub3QgYW5zd2VyIDIwMFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRiUzRnN0YXR1cyUzRDUwMFwiIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7XG4gICAgICByZXZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBlcnJvcjogXCJJbnZhbGlkIHJlc3BvbnNlIDUwMFwiLFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImludmFsaWRhdGluZyB0aGUgQ0ROIGNvcHkgb2YgYSByZXZhbGlkYXRlZCBwYWdlXCIsICgpID0+IHtcbiAgICBjb25zdCBob29rS2V5ID0gUkVWQUxJREFURURfUEFHRV9IT09LO1xuICAgIGNvbnN0IGdsb2JhbHMgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+O1xuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgZ2xvYmFsc1tob29rS2V5XTtcbiAgICB9KTtcblxuICAgIGl0KFwiaGFuZHMgdGhlIGNhY2hlIGhhbmRsZXIncyBob29rIHRoZSBwYWdlIGFuZCBpdHMgX25leHQvZGF0YSByb3V0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBob29rID0gamVzdC5mbihhc3luYyAoKSA9PiB7fSk7XG4gICAgICBnbG9iYWxzW2hvb2tLZXldID0gaG9vaztcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRmlzciUyRjQyXCIgfSk7XG4gICAgICBleHBlY3QoaG9vaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGhvb2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtcbiAgICAgICAgXCIvaXNyLzQyXCIsXG4gICAgICAgIGAvX25leHQvZGF0YS8ke3J1bnRpbWUubWFuaWZlc3QuYnVpbGRJZH0vaXNyLzQyLmpzb25gLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcIm5hbWVzIHRoZSByb290J3MgZGF0YSByb3V0ZSBpbmRleC5qc29uXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhvb2sgPSBqZXN0LmZuKGFzeW5jICgpID0+IHt9KTtcbiAgICAgIGdsb2JhbHNbaG9va0tleV0gPSBob29rO1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP3JldmFsaWRhdGU9JTJGXCIgfSk7XG4gICAgICBleHBlY3QoaG9vaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoW1xuICAgICAgICBcIi9cIixcbiAgICAgICAgYC9fbmV4dC9kYXRhLyR7cnVudGltZS5tYW5pZmVzdC5idWlsZElkfS9pbmRleC5qc29uYCxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyBub3RoaW5nIHdoZW4gdGhlIHJldmFsaWRhdGlvbiBmYWlsZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaG9vayA9IGplc3QuZm4oYXN5bmMgKCkgPT4ge30pO1xuICAgICAgZ2xvYmFsc1tob29rS2V5XSA9IGhvb2s7XG4gICAgICBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkYlM0ZzdGF0dXMlM0Q1MDBcIiB9KTtcbiAgICAgIGV4cGVjdChob29rKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzdGlsbCByZXBvcnRzIHN1Y2Nlc3Mgd2hlbiB0aGUgaW52YWxpZGF0aW9uIGZhaWxzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgICAgZ2xvYmFsc1tob29rS2V5XSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVG9vTWFueUludmFsaWRhdGlvbnNJblByb2dyZXNzXCIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkZcIiB9KTtcbiAgICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7IHJldmFsaWRhdGVkOiB0cnVlLCBlcnJvcjogbnVsbCB9KTtcbiAgICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGludGVybmFsIGhlYWRlcnMgbmV4dCBzdGFydCBkb2VzIG5vdCBob25vciBmcm9tIGEgY2xpZW50XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IFwiL1wiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsXG4gICAgICAgIFwibmV4dC1yZXN1bWVcIjogXCIxXCIsXG4gICAgICAgIFwieC1tYXRjaGVkLXBhdGhcIjogXCIvYWRtaW5cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5leHRSZXN1bWU6IG51bGwsXG4gICAgICBtYXRjaGVkUGF0aDogbnVsbCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgaW1hZ2VzID0gKCkgPT5cbiAgICAoXG4gICAgICBydW50aW1lIGFzIHVua25vd24gYXMge1xuICAgICAgICBpbWFnZXM6IHtcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBmZXRjaEludGVybmFsOiAoXG4gICAgICAgICAgICAgIGhyZWY6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgICAgICAgICAgICBtYXhpbXVtQm9keTogbnVtYmVyLFxuICAgICAgICAgICAgKSA9PiBQcm9taXNlPHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgICAgICAgICAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgICAgYm9keTogQnVmZmVyO1xuICAgICAgICAgICAgICB0b29MYXJnZT86IGJvb2xlYW47XG4gICAgICAgICAgICB9PjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICkuaW1hZ2VzO1xuXG4gIGl0KFwiZmV0Y2hlcyBhbiBpbWFnZSBzb3VyY2UgZnJvbSBhIHJvdXRlIGhhbmRsZXIsIGluIHByb2Nlc3MgYW5kIHdpdGhvdXQgY29va2llc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgdmlld2VyID0gbmV3IFNoaW1JbmNvbWluZ01lc3NhZ2Uoe1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGYXBpJTJGaGVhbHRoJTNGYXZhdGFyJTNENDImdz02NCZxPTc1XCIsXG4gICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiwgY29va2llOiBcInNlc3Npb249c2VjcmV0XCIgfSxcbiAgICB9KTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGltYWdlcygpLm9wdGlvbnMuZmV0Y2hJbnRlcm5hbChcbiAgICAgIFwiL2FwaS9oZWFsdGg/YXZhdGFyPTQyXCIsXG4gICAgICB2aWV3ZXIsXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2UuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKTtcbiAgICBleHBlY3QoYm9keS5maWxlKS50b0NvbnRhaW4oXCJhcGkvaGVhbHRoXCIpO1xuICAgIGV4cGVjdChib2R5LnVybCkudG9CZShcIi9hcGkvaGVhbHRoP2F2YXRhcj00MlwiKTtcbiAgICBleHBlY3QoYm9keS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9hcGkvaGVhbHRoP2F2YXRhcj00MlwiKTtcbiAgICBleHBlY3QoYm9keS5jb29raWUpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIC8vIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWA6IGEgcm91dGUgc3RyZWFtaW5nIGEgbGFyZ2UgYm9keSBtdXN0IG5vdCBiZVxuICAvLyBidWZmZXJlZCB3aG9sZSwgYXMgYG5leHQgc3RhcnRgJ3MgYGZldGNoSW50ZXJuYWxJbWFnZWAgZG9lcyBub3QuXG4gIGl0KFwic3RvcHMgcmVhZGluZyBhbiBpbWFnZSBzb3VyY2Ugcm91dGUgcGFzdCBtYXhpbXVtUmVzcG9uc2VCb2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGltYWdlcygpLm9wdGlvbnMuZmV0Y2hJbnRlcm5hbChcbiAgICAgICAgXCIvYXBpL2hlYWx0aD9hdmF0YXI9NDJcIixcbiAgICAgICAgbmV3IFNoaW1JbmNvbWluZ01lc3NhZ2Uoe1xuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICB1cmw6IFwiL19uZXh0L2ltYWdlP3VybD0lMkZhcGklMkZoZWFsdGglM0ZhdmF0YXIlM0Q0MiZ3PTY0JnE9NzVcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgICB9KSxcbiAgICAgICAgMTAsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnRvb0xhcmdlKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLmJvZHkubGVuZ3RoKS50b0JlKDApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZWRpcmVjdHMgYSB0cmFpbGluZyBzbGFzaCwgd2l0aCB0aGUgUmVmcmVzaCBmYWxsYmFjayBmb3IgYSAzMDhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9pc3IvNDIvXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgzMDgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMubG9jYXRpb24pLnRvQmUoXCIvaXNyLzQyXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMucmVmcmVzaCkudG9CZShcIjA7dXJsPS9pc3IvNDJcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiL2lzci80MlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJnemlwcyBhIHN0cmVhbWVkIEhUTUwgcmVzcG9uc2UgZm9yIGEgY2xpZW50IHRoYXQgYWNjZXB0cyBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQ29udGFpbihcImluaXRVUkxcIik7XG4gIH0pO1xuXG4gIGl0KFwiYXdhaXRzIHdhaXRVbnRpbCB3b3JrIGJlZm9yZSByZXNvbHZpbmcsIHNpbmNlIExhbWJkYSBmcmVlemVzIG9uIHJldHVyblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gam9pbihyb290LCBcIndhaXR1bnRpbC1tYXJrZXJcIik7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiA9IG1hcmtlcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP3dhaXRVbnRpbD0xXCIgfSk7XG4gICAgICAvLyBXcml0dGVuIGJ5IGEgdGltZXIgdGhlIGVudHJ5cG9pbnQgcmVnaXN0ZXJlZCwgYWZ0ZXIgdGhlIHJlc3BvbnNlIGVuZGVkLlxuICAgICAgZXhwZWN0KHJlYWRGaWxlU3luYyhtYXJrZXIsIFwidXRmLThcIikpLnRvQmUoXCJkb25lXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUjtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwic2VydmVzIHRoZSBwcmVyZW5kZXJlZCA1MDAgd2hlbiBhbiBlbnRyeXBvaW50IHRocm93cyBiZWZvcmUgc2VuZGluZyBhIGhlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9ib29tPTFcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKEVSUk9SX0hUTUwpO1xuICAgIC8vIEEgYENhY2hlLUNvbnRyb2xgIHRoZSByZW5kZXIgdGhhdCB0aHJldyBoYWQgYWxyZWFkeSBzZXQgd291bGQgb3RoZXJ3aXNlXG4gICAgLy8gc3RheSBvbiB0aGUgcmVzcG9uc2UgYW5kIGdldCB0aGUgNTAwIGNhY2hlZCBhdCB0aGUgZWRnZS5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KGVycm9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwiVW5oYW5kbGVkIGVycm9yIHdoaWxlIGhhbmRsaW5nIHRoZSByZXF1ZXN0OlwiLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBtZXNzYWdlOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcImV4cGxvZGVkXCIpIH0pLFxuICAgICk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJlYW1zIG1pZGRsZXdhcmUncyBvd24gUmVzcG9uc2Ugd2hlbiBpdCBhbnN3ZXJzIHRoZSByZXF1ZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBBIHNlY29uZCBkZXBsb3ltZW50LCBiZWNhdXNlIHRoZSBtaWRkbGV3YXJlIG1vZHVsZSBpcyBtZW1vaXplZCBwZXIgcnVudGltZS5cbiAgICBjb25zdCByZXNwb25kaW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKFwiZGVuaWVkXCIsIHtcbiAgICBzdGF0dXM6IDQwMSxcbiAgICBzdGF0dXNUZXh0OiBcIlVuYXV0aG9yaXplZFwiLFxuICAgIGhlYWRlcnM6IFtcbiAgICAgIFtcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvcGxhaW5cIl0sXG4gICAgICBbXCJzZXQtY29va2llXCIsIFwic2lkPTsgUGF0aD0vOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UXCJdLFxuICAgICAgW1wic2V0LWNvb2tpZVwiLCBcImZsYWc9MTsgUGF0aD0vXCJdLFxuICAgIF0sXG4gIH0pO1xuYCksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcmVzcG9uZGluZy5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBcIi9cIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIC8vIGByZXNvbHZlUm91dGVzYCBvbmx5IHJlcG9ydHMgdGhhdCBtaWRkbGV3YXJlIHJlc3BvbmRlZDsgdGhlIGJvZHkgY29tZXNcbiAgICAvLyBiYWNrIGZyb20gdGhlIGludm9rZXIsIG9uIHRoZSBgbWlkZGxld2FyZS1yZXNwb25kZWRgIHJlc3VsdC5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwMSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzTWVzc2FnZSkudG9CZShcIlVuYXV0aG9yaXplZFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5jb29raWVzKS50b0VxdWFsKFtcbiAgICAgIFwic2lkPTsgUGF0aD0vOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UXCIsXG4gICAgICBcImZsYWc9MTsgUGF0aD0vXCIsXG4gICAgXSk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiZGVuaWVkXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYSBtaXNzaW5nIGJ1aWxkIGFzc2V0IG5vLXN0b3JlLCBub3QgdW5kZXIgaXRzIGltbXV0YWJsZSBydWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBJbiB0aGUgbWFuaWZlc3QgYnV0IG5vdCBvbiBkaXNrIOKAlCBgc3RhZ2VEZXBsb3ltZW50YCB3cml0ZXMgbm8gY2h1bmtzLCB0aGVcbiAgICAvLyB3YXkgYSBMYW1iZGEgcGFja2FnZSBzaGlwcyBub25lICh0aGV5IGFyZSBvbiBTMyBiZWhpbmQgQ2xvdWRGcm9udCkuXG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL19uZXh0L3N0YXRpYy9jaHVua3MvMC1xc2Izeno2ZjRjNy5qc1wiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIHRoZXNlIHdpdGhvdXQgcmVuZGVyaW5nIHRoZSA0MDQgcGFnZSAoYHJvdXRlci1zZXJ2ZXIuanNgLFxuICAvLyB0aGUgXCI0MDQgY2FzZVwiKTogbm90aGluZyB3b3VsZCBkaXNwbGF5IGl0LCBhbmQgcmVuZGVyaW5nIGlzIHRoZSBjb3N0LlxuICBpdC5lYWNoKFtcbiAgICBbXCJhIG1pc3NpbmcgYnVpbGQgYXNzZXRcIiwgXCIvX25leHQvc3RhdGljL2NodW5rcy8wLXFzYjN6ejZmNGM3LmpzXCJdLFxuICAgIFtcImEgYnVpbGQgYXNzZXQgbm8gZGVwbG95IHByb2R1Y2VkXCIsIFwiL19uZXh0L3N0YXRpYy9jaHVua3Mvc3RhbGUtMDAwMC5qc1wiXSxcbiAgXSkoXCJhbnN3ZXJzICVzIHdpdGggYSBwbGFpbi10ZXh0IE5vdCBGb3VuZFwiLCBhc3luYyAoX25hbWUsIHVybCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFxuICAgICAgXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiTm90IEZvdW5kXCIpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcImltYWdlXCIsIFwic2NyaXB0XCIsIFwiZm9udFwiLCBcInN0eWxlXCJdKShcbiAgICBcImFuc3dlcnMgYW4gdW5rbm93biBwYXRoIGZldGNoZWQgYXMgYSAlcyBzdWJyZXNvdXJjZSB3aXRoIGEgcGxhaW4tdGV4dCBOb3QgRm91bmRcIixcbiAgICBhc3luYyAoZGVzdCkgPT4ge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgICB1cmw6IFwiL25vcGUucG5nXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcInNlYy1mZXRjaC1kZXN0XCI6IGRlc3QgfSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIk5vdCBGb3VuZFwiKTtcbiAgICB9LFxuICApO1xuXG4gIGl0LmVhY2goW1xuICAgIC8vIEEgbmF2aWdhdGlvbiwgYW5kIGBmZXRjaCgpYCDigJQgd2hpY2ggaXMgaG93IGFuIFJTQyByZXF1ZXN0IGdvZXMuXG4gICAgW1wiYSBkb2N1bWVudFwiLCBcIkdFVFwiLCBcImRvY3VtZW50XCJdLFxuICAgIFtcImEgZmV0Y2hcIiwgXCJHRVRcIiwgXCJlbXB0eVwiXSxcbiAgICAvLyBgbmV4dCBzdGFydGAgb25seSBzaG9ydC1jaXJjdWl0cyBHRVQgYW5kIEhFQUQuXG4gICAgW1wiYW4gaW1hZ2UgUE9TVFwiLCBcIlBPU1RcIiwgXCJpbWFnZVwiXSxcbiAgXSkoXCJzdGlsbCByZW5kZXJzIHRoZSA0MDQgcGFnZSBmb3IgJXNcIiwgYXN5bmMgKF9uYW1lLCBtZXRob2QsIGRlc3QpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IFwiL25vcGVcIixcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcInNlYy1mZXRjaC1kZXN0XCI6IGRlc3QgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcIl9ub3QtZm91bmRcIik7XG4gIH0pO1xuXG4gIGl0KFwic2V0dGxlcyBhbmQgZGVzdHJveXMgdGhlIHJlc3BvbnNlIHdoZW4gdGhlIHNpbmsgY2Fubm90IHRha2UgdGhlIGhlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgLy8gV2hhdCB0aGUgTGFtYmRhIHNpbmsncyBgd3JpdGVIZWFkYCBkb2VzIHdpdGggYSBoZWFkZXIgdmFsdWUgaXQgcmVqZWN0cy5cbiAgICBjb25zdCBoYW5kbGVkID0gcnVudGltZS5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBcIi9cIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAge1xuICAgICAgICBiZWdpbigpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGNvbnRlbnRcIik7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KGhhbmRsZWQpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoZXJyb3IpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgXCJUaGUgcmVzcG9uc2Ugc3RyZWFtIGRpZCBub3QgY29tcGxldGU6XCIsXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IG1lc3NhZ2U6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiaGVhZGVyXCIpIH0pLFxuICAgICk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJlYW1zIGFuIHVwbG9hZCB0aHJvdWdoIG1pZGRsZXdhcmUgdG8gdGhlIHJvdXRlIGludGFjdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2h1bmsgPSBCdWZmZXIuYWxsb2MoNjQgKiAxMDI0LCAxKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IFwiLz9yZWFkQm9keT0xXCIsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgYm9keTogUmVhZGFibGUuZnJvbShBcnJheS5mcm9tKHsgbGVuZ3RoOiAzMiB9LCAoKSA9PiBjaHVuaykpLFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7IGJvZHlMZW5ndGg6IDMyICogY2h1bmsubGVuZ3RoIH0pO1xuICB9KTtcblxuICAvLyBUaGUgTGFtYmRhIHNoZWxsJ3MgYm9keTogYWxyZWFkeSBpbiBtZW1vcnksIGFzIGEgQnVmZmVyLlxuICBpdChcInBhc3NlcyBhIEJ1ZmZlciB1cGxvYWQgdGhyb3VnaCBtaWRkbGV3YXJlIHRvIHRoZSByb3V0ZSBpbnRhY3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2MoMTAyNCAqIDEwMjQsIDEpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmVhZEJvZHk9MVwiLCBtZXRob2Q6IFwiUE9TVFwiLCBib2R5IH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7IGJvZHlMZW5ndGg6IGJvZHkubGVuZ3RoIH0pO1xuICB9KTtcblxuICBpdChcInJlYWRzIG1pZGRsZXdhcmUncyBib2R5IG9ubHkgYXMgZmFzdCBhcyB0aGUgY2xpZW50IHRha2VzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwdWxscyA9IHsgY291bnQ6IDAgfTtcbiAgICAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuX19jZGtOZXh0anNQdWxscyA9IHB1bGxzO1xuICAgIGNvbnN0IHN0cmVhbWluZyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShcbiAgICBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHB1bGxzID0gZ2xvYmFsVGhpcy5fX2Nka05leHRqc1B1bGxzO1xuICAgICAgICBwdWxscy5jb3VudCArPSAxO1xuICAgICAgICBpZiAocHVsbHMuY291bnQgPiAxMDAwKSBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIGVsc2UgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KDE2ICogMTAyNCkpO1xuICAgICAgfSxcbiAgICB9KSxcbiAgKTtcbmApLFxuICAgICk7XG4gICAgLy8gQSBjbGllbnQgdGhhdCB0YWtlcyBub3RoaW5nIHVudGlsIHJlbGVhc2VkLlxuICAgIGxldCByZWxlYXNlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYmxvY2tlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiAocmVsZWFzZSA9IHJlc29sdmUpKTtcbiAgICBjb25zdCBzaW5rOiBSZXNwb25zZVNpbmsgPSB7XG4gICAgICBiZWdpbjogKCkgPT5cbiAgICAgICAgbmV3IFdyaXRhYmxlKHtcbiAgICAgICAgICB3cml0ZShfY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZvaWQgYmxvY2tlZC50aGVuKCgpID0+IGNhbGxiYWNrKCkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIH07XG4gICAgY29uc3QgaGFuZGxlZCA9IHN0cmVhbWluZy5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBcIi9cIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgIC8vIDEwMDAgY2h1bmtzIGFyZSAxNiBNaUI7IGEgZmV3IGhpZ2hXYXRlck1hcmtzJyB3b3J0aCBpcyBhbGwgdGhhdCBtYXkgYmVcbiAgICAvLyBidWZmZXJlZCBmb3IgYSBjbGllbnQgdGhhdCBpcyBub3QgcmVhZGluZy5cbiAgICBleHBlY3QocHVsbHMuY291bnQpLnRvQmVMZXNzVGhhbig1MCk7XG4gICAgcmVsZWFzZSEoKTtcbiAgICBhd2FpdCBoYW5kbGVkO1xuICAgIGV4cGVjdChwdWxscy5jb3VudCkudG9CZSgxMDAxKTtcbiAgfSk7XG5cbiAgaXQoXCJwYWRzIGFuIGVtcHR5IGJvZHkgd2hlbiB0aGUgc2hlbGwgYXNrcywgc28gQVBJIEdhdGV3YXkgZG9lcyBub3QgNTAyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZChcbiAgICAgIHtcbiAgICAgICAgdXJsOiBcIi9cIixcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwiaWYtbm9uZS1tYXRjaFwiOiBcInhcIiB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICAvLyBBIHJlYWwgMzA0IGlzIG5vdCByZWFjaGFibGUgdGhyb3VnaCBhIHN0dWIgZW50cnlwb2ludCwgc28gdGhpcyBvbmx5XG4gICAgLy8gYXNzZXJ0cyB0aGUgcGFkZGluZyBkb2VzIG5vdCBjb3JydXB0IGEgbm9ybWFsIGJvZHkuXG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigxKTtcbiAgfSk7XG5cbiAgaXQoXCJlbWl0cyBlYWNoIGNvb2tpZSBtaWRkbGV3YXJlIHNldCBleGFjdGx5IG9uY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBIZWFkZXJzLmVudHJpZXMoKWAgeWllbGRzIGBzZXQtY29va2llYCBvbmNlIHBlciBjb29raWUsIHNvIGFwcGVuZGluZyB0aGVcbiAgICAvLyB3aG9sZSBgZ2V0U2V0Q29va2llKClgIGFycmF5IHBlciBlbnRyeSBlbWl0dGVkIE7CsiBvZiB0aGVtOiB0d28gY29va2llc1xuICAgIC8vIGFycml2ZWQgYXQgdGhlIGJyb3dzZXIgYXMgYT0xLCBiPTIsIGE9MSwgYj0yLiBBIGR1cGxpY2F0ZWQgYFNldC1Db29raWVgIGlzXG4gICAgLy8gbm90IGhhcm1sZXNzIGVpdGhlciAtIGEgc2Vzc2lvbiBjb29raWUgYW5kIGl0cyBvd24gY29weSByYWNlLlxuICAgIGNvbnN0IGNvbnRpbnVpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChgXG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UobnVsbCwge1xuICAgIGhlYWRlcnM6IFtcbiAgICAgIFtcIngtbWlkZGxld2FyZS1uZXh0XCIsIFwiMVwiXSxcbiAgICAgIFtcInNldC1jb29raWVcIiwgXCJhPTE7IFBhdGg9L1wiXSxcbiAgICAgIFtcInNldC1jb29raWVcIiwgXCJiPTI7IFBhdGg9L1wiXSxcbiAgICBdLFxuICB9KTtcbmApLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IGNvbnRpbnVpbmcuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5jb29raWVzKS50b0VxdWFsKFtcImE9MTsgUGF0aD0vXCIsIFwiYj0yOyBQYXRoPS9cIl0pO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIE5leHQuanMncyBwYWdlIGhhbmRsZXJzIHJlcG9ydCBhbiBlcnJvciBhbmQgdGhlbiByZXRocm93LCBsZWF2aW5nIHRoZSBlcnJvciBwYWdlXG4gKiB0byB3aGF0ZXZlciBob3N0cyB0aGVtLCBzbyB0aGlzIGxhZGRlciBpcyB0aGUgb25seSB0aGluZyB0aGF0IG1ha2VzIGFcbiAqIGBwYWdlcy9fZXJyb3JgIHJlYWNoYWJsZS4gYHRlc3QvZTJlL2FzeW5jLW1vZHVsZXNgIGlzIHRoZSBtZWFzdXJlbWVudDpcbiAqIGAvbWFrZS1lcnJvcmAgdGhyb3dzIGluIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgIGFuZCBleHBlY3RzIFwiaGVsbG8gZXJyb3JcIi5cbiAqL1xuZGVzY3JpYmUoXCJhIFBhZ2VzIEFQSSByb3V0ZVwiLCAoKSA9PiB7XG4gIGl0KFwiaXMgbGVmdCB0byBlbmQgaXRzIG93biByZXNwb25zZSwgYXMgbmV4dCBzdGFydCBsZWF2ZXMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2VzQXBpID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+ICh7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBlbnRyeXBvaW50czoge1xuICAgICAgICAgIC4uLm1hbmlmZXN0LmVudHJ5cG9pbnRzLFxuICAgICAgICAgIFwiL2FwaS9oZWFsdGhcIjoge1xuICAgICAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHNbXCIvYXBpL2hlYWx0aFwiXSxcbiAgICAgICAgICAgIHR5cGU6IFwicGFnZS1hcGlcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSkpLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHBhZ2VzQXBpLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL2FwaS9oZWFsdGg/ZW5kTGF0ZXI9MVwiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJmaXJzdCxzZWNvbmRcIik7XG4gIH0pO1xuXG4gIGl0KFwiaXMgc3RpbGwgZW5kZWQgZm9yIGEgcm91dGUgb2YgYW55IG90aGVyIGtpbmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9hcGkvaGVhbHRoP2VuZExhdGVyPTFcIiB9KTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJmaXJzdCxcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicmVzLnJldmFsaWRhdGUoKSBhY3Jvc3MgZnVuY3Rpb25Hcm91cHNcIiwgKCkgPT4ge1xuICAvLyBUaGUgb3RoZXIgZ3JvdXAncyBwYWdlIHJlbmRlcnMgYXMgYSA0MDQsIHdoaWNoIGB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkYFxuICAvLyBhbG9uZSB3b3VsZCBhY2NlcHQgYXMgXCJub3QgZ2VuZXJhdGVkXCIuXG4gIGl0LmVhY2goW1xuICAgIFtcIlwiLCBcIi8/cmV2YWxpZGF0ZT0lMkZpc3IlMkYxXCJdLFxuICAgIFtcIiB3aXRoIHVuc3RhYmxlX29ubHlHZW5lcmF0ZWRcIiwgXCIvP3JldmFsaWRhdGU9JTJGaXNyJTJGMSZvbmx5R2VuZXJhdGVkPTFcIl0sXG4gIF0pKFwic2F5cyB3aGljaCBncm91cCBvd25zIGEgcGFnZSBpdCBjYW5ub3QgcmVuZGVyJXNcIiwgYXN5bmMgKF8sIHVybCkgPT4ge1xuICAgIGxldCBtaXNzaW5nID0gXCJcIjtcbiAgICBjb25zdCBzdGFnZWQgPSBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgIG1pc3NpbmcgPSBtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9pc3IvW2lkXVwiXS5maWxlUGF0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiBPYmplY3Qua2V5cyhtYW5pZmVzdC5lbnRyeXBvaW50cykuZmlsdGVyKFxuICAgICAgICAgICAgKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZSAhPT0gXCIvaXNyL1tpZF1cIixcbiAgICAgICAgICApLFxuICAgICAgICAgIGJsb2c6IFtcIi9pc3IvW2lkXVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcm1TeW5jKGpvaW4oc3RhZ2VkLCBtaXNzaW5nKSk7XG4gICAgY29uc3QgZ3JvdXBlZCA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlZCk7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUCA9IFwiZGVmYXVsdFwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgICBhd2FpdCBncm91cGVkLmhhbmRsZShcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2luayxcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGVycm9yIH0gPSBKU09OLnBhcnNlKHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKTtcbiAgICAgIGV4cGVjdChlcnJvcikudG9NYXRjaCgvXkludmFsaWQgcmVzcG9uc2UgNDA0OiAvKTtcbiAgICAgIGV4cGVjdChlcnJvcikudG9Db250YWluKCdncm91cCBcImJsb2dcIicpO1xuICAgICAgZXhwZWN0KGVycm9yKS50b0NvbnRhaW4oJyhcImRlZmF1bHRcIiknKTtcbiAgICAgIC8vIFRoZSBlcnJvciBleHBsYWlucyBpdDsgdGhlIG1pc3JvdXRlZC1yZXF1ZXN0IHdhcm5pbmcgd291bGQgbm90LlxuICAgICAgZXhwZWN0KHdhcm4pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3aXRob3V0SW50ZXJuYWxIZWFkZXJzXCIsICgpID0+IHtcbiAgaXQoXCJkcm9wcyBldmVyeSBoZWFkZXIgb24gTmV4dCdzIGludGVybmFsIGxpc3RcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHdpdGhvdXRJbnRlcm5hbEhlYWRlcnMoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0OiBcImEudGVzdFwiLFxuICAgICAgICAgIFwibmV4dC1yZXN1bWVcIjogXCIxXCIsXG4gICAgICAgICAgXCJ4LW1pZGRsZXdhcmUtcmV3cml0ZVwiOiBcIi94XCIsXG4gICAgICAgICAgXCJ4LW5leHRqcy1kYXRhXCI6IFwiMVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi9ibG9nXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICApLFxuICAgICkudG9FcXVhbCh7IGhvc3Q6IFwiYS50ZXN0XCIgfSk7XG4gIH0pO1xuXG4gIGl0KFwibWFya3MgYSBfbmV4dC9kYXRhIHJlcXVlc3QgYXMgb25lLCBhcyBuZXh0IHN0YXJ0J3Mgcm91dGVyIGRvZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHdpdGhvdXRJbnRlcm5hbEhlYWRlcnMoe30sIFwiL2Jhc2UvX25leHQvZGF0YS9hYmMvYmxvZy5qc29uP3g9MVwiLCBcIi9iYXNlXCIpLFxuICAgICkudG9FcXVhbCh7IFwieC1uZXh0anMtZGF0YVwiOiBcIjFcIiB9KTtcbiAgICBleHBlY3Qod2l0aG91dEludGVybmFsSGVhZGVycyh7fSwgXCIvX25leHQvZGF0YS9hYmMvYmxvZ1wiLCBcIlwiKSkudG9FcXVhbCh7fSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwidGhlIGVycm9yIHBhZ2UgbGFkZGVyXCIsICgpID0+IHtcbiAgLyoqXG4gICAqIEFuIGFwcCB3aXRoIGEgY3VzdG9tIGBwYWdlcy9fZXJyb3JgIHRoYXQgY2Fubm90IGJlIHByZXJlbmRlcmVkIOKAlCBvbmUgd2l0aFxuICAgKiBgZ2V0SW5pdGlhbFByb3BzYCwgb3IgYSBgcGFnZXMvX2FwcGAgdGhhdCBoYXMgaXQuIFRoZSBmaXh0dXJlIGlzIEFwcCBSb3V0ZXIsXG4gICAqIHNvIGJvdGggaGFsdmVzIGhhdmUgdG8gYmUgYXJyYW5nZWQ6IGRyb3AgdGhlIHByZXJlbmRlcmVkIGAvNTAwYCBuZXh0IGVtaXRzIGJ5XG4gICAqIGRlZmF1bHQsIGFuZCBhZGQgdGhlIGVudHJ5cG9pbnQuXG4gICAqL1xuICBjb25zdCB3aXRoRXJyb3JQYWdlID0gKG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QpOiBBZGFwdGVyTWFuaWZlc3QgPT4ge1xuICAgIGNvbnN0IHsgXCIvNTAwXCI6IF9wcmVyZW5kZXJlZCwgLi4uc3RhdGljRmlsZXMgfSA9IG1hbmlmZXN0LnN0YXRpY0ZpbGVzO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tYW5pZmVzdCxcbiAgICAgIHN0YXRpY0ZpbGVzLFxuICAgICAgZW50cnlwb2ludHM6IHtcbiAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHMsXG4gICAgICAgIFwiL19lcnJvclwiOiB7XG4gICAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHNbXCIvX25vdC1mb3VuZFwiXSxcbiAgICAgICAgICBpZDogXCIvX2Vycm9yXCIsXG4gICAgICAgICAgZmlsZVBhdGg6IGpvaW4oXG4gICAgICAgICAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgICAgICAgICBcIi5uZXh0L3NlcnZlci9wYWdlcy9fZXJyb3IuanNcIixcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUbyhcbiAgICB3aXRoTGFkZGVyOiBOZXh0anNSdW50aW1lLFxuICAgIHVybDogc3RyaW5nLFxuICApOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHdpdGhMYWRkZXIuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybCwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgaXQoXCJpbnZva2VzIC9fZXJyb3Igd2hlbiB0aGUgYnVpbGQgaGFzIG5vIHByZXJlbmRlcmVkIC81MDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgcmVuZGVyaW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCB3aXRoRXJyb3JQYWdlKSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8ocmVuZGVyaW5nLCBcIi8/Ym9vbT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICAvLyBSZW5kZXJlZCBmb3IgdGhlIFVSTCB0aGF0IHdhcyBhc2tlZCBmb3IsIGFuZCB3aXRoIHRoZSBzdGF0dXMgYWxyZWFkeSBzZXQ6XG4gICAgLy8gYF9lcnJvcmAncyBgZ2V0SW5pdGlhbFByb3BzYCByZWFkcyBgcmVzLnN0YXR1c0NvZGVgIHRvIGdldCBpdHMgb3duIHByb3AuXG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcInBhZ2VzL19lcnJvci5qc1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiLz9ib29tPTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5ldGFnKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgLy8gTm90IHRoZSB0aHJvd2luZyByZW5kZXIncyBgcy1tYXhhZ2U9NjBgOiBhIGNhY2hlZCA1MDAgYXQgQ2xvdWRGcm9udC5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9NYXRjaCgvbm8tc3RvcmUvKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcImRyb3BzIHRoZSBmYWlsZWQgcmVuZGVyJ3MgQ29udGVudC1MZW5ndGggYW5kIEVUYWcgZnJvbSBhIHByZXJlbmRlcmVkIC81MDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9ib29tPTFcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKEVSUk9SX0hUTUwpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMuZXRhZykudG9CZVVuZGVmaW5lZCgpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byBwbGFpbiB0ZXh0IHdoZW4gdGhlIGVycm9yIHBhZ2UgdGhyb3dzIHRvb1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCByZW5kZXJpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIHdpdGhFcnJvclBhZ2UpLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhyZW5kZXJpbmcsIFwiLz9ib29tRXZlcnl3aGVyZT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICApO1xuICAgIGV4cGVjdChlcnJvcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBcIlRoZSBlcnJvciBwYWdlIGl0c2VsZiBmYWlsZWQgdG8gcmVuZGVyOlwiLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBtZXNzYWdlOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcInRvb1wiKSB9KSxcbiAgICApO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBwbGFpbiB0ZXh0IGZvciBhbiBhcHAgd2l0aCBubyBlcnJvciBwYWdlIGF0IGFsbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCBiYXJlID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBcIi81MDBcIjogX3ByZXJlbmRlcmVkLCAuLi5zdGF0aWNGaWxlcyB9ID0gbWFuaWZlc3Quc3RhdGljRmlsZXM7XG4gICAgICAgIHJldHVybiB7IC4uLm1hbmlmZXN0LCBzdGF0aWNGaWxlcyB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKGJhcmUsIFwiLz9ib29tPTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImEgUGFnZXMgUm91dGVyIDQwNFwiLCAoKSA9PiB7XG4gIC8qKiBUaGUgZml4dHVyZSBpcyBBcHAgUm91dGVyOiB3aXRob3V0IGAvX25vdC1mb3VuZGAsIGEgNDA0IGlzIHRoZSBQYWdlcyBvbmUuICovXG4gIGNvbnN0IHdpdGhvdXROb3RGb3VuZCA9IChtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0KTogQWRhcHRlck1hbmlmZXN0ID0+IHtcbiAgICBjb25zdCB7IFwiL19ub3QtZm91bmRcIjogX2FwcFJvdXRlciwgLi4uZW50cnlwb2ludHMgfSA9IG1hbmlmZXN0LmVudHJ5cG9pbnRzO1xuICAgIHJldHVybiB7IC4uLm1hbmlmZXN0LCBlbnRyeXBvaW50cyB9O1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUbyhcbiAgICBwYWdlczogTmV4dGpzUnVudGltZSxcbiAgICB1cmw6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBwYWdlcy5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBpdChcInNlcnZlcyB0aGUgcHJlcmVuZGVyZWQgNDA0Lmh0bWwgZm9yIGFuIHVua25vd24gcGF0aCBhbmQgZm9yIHJlbmRlcjQwNCgpXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYWdlcyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgd2l0aG91dE5vdEZvdW5kKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgdXJsIG9mIFtcIi9ub3BlXCIsIFwiLz9yZW5kZXI0MDQ9MVwiXSkge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhwYWdlcywgdXJsKTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pLnRvQmUoXG4gICAgICAgIFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKE5PVF9GT1VORF9IVE1MKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyBhIHBhZ2VzLzQwNCBlbnRyeXBvaW50IGZvciB0aGUgcGF0aCB0aGF0IHdhcyBhc2tlZCBmb3JcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFdoYXQgYSBgZ2V0SW5pdGlhbFByb3BzYCBpbiBgcGFnZXMvX2FwcGAgbWFrZXMgb2YgYHBhZ2VzLzQwNC5qc2AuXG4gICAgY29uc3QgcGFnZXMgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgICBjb25zdCB3aXRob3V0QXBwID0gd2l0aG91dE5vdEZvdW5kKG1hbmlmZXN0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi53aXRob3V0QXBwLFxuICAgICAgICAgIGVudHJ5cG9pbnRzOiB7XG4gICAgICAgICAgICAuLi53aXRob3V0QXBwLmVudHJ5cG9pbnRzLFxuICAgICAgICAgICAgXCIvNDA0XCI6IHtcbiAgICAgICAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHNbXCIvX25vdC1mb3VuZFwiXSxcbiAgICAgICAgICAgICAgaWQ6IFwiLzQwNFwiLFxuICAgICAgICAgICAgICBmaWxlUGF0aDogam9pbihcbiAgICAgICAgICAgICAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgICAgICAgICAgICAgXCIubmV4dC9zZXJ2ZXIvcGFnZXMvNDA0LmpzXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8ocGFnZXMsIFwiL25vcGU/cT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuZmlsZSkudG9Db250YWluKFwicGFnZXMvNDA0LmpzXCIpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS51cmwpLnRvQmUoXCIvbm9wZT9xPTFcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBwbGFpbiB0ZXh0IHdoZW4gdGhlIGFwcCBoYXMgbm8gNDA0IHBhZ2UgYXQgYWxsXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiYXJlID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBcIi80MDRcIjogX3ByZXJlbmRlcmVkLCAuLi5zdGF0aWNGaWxlcyB9ID0gbWFuaWZlc3Quc3RhdGljRmlsZXM7XG4gICAgICAgIHJldHVybiB7IC4uLndpdGhvdXROb3RGb3VuZChtYW5pZmVzdCksIHN0YXRpY0ZpbGVzIH07XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8oYmFyZSwgXCIvP3JlbmRlcjQwND0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJUaGlzIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kLlwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCIvX25leHQvaW1hZ2Ugd2l0aCBpbWFnZXMgdHVybmVkIG9mZlwiLCAoKSA9PiB7XG4gIGl0KFwiYW5zd2VycyB0aGUgYXBwJ3MgNDA0LCBuby1zdG9yZSwgaW5zdGVhZCBvZiBvcHRpbWl6aW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBgaW1hZ2VzLnVub3B0aW1pemVkYCwgYXMgYG5leHQgc3RhcnRgIHJlYWRzIGl0IGZyb21cbiAgICAvLyBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gLlxuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudCgpO1xuICAgIGNvbnN0IG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgcmVhZEZpbGVTeW5jKGRlcGxveWVkTWFuaWZlc3RQYXRoKHN0YWdlZCksIFwidXRmLThcIiksXG4gICAgKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oXG4gICAgICAgIHN0YWdlZCxcbiAgICAgICAgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLFxuICAgICAgICBcIi5uZXh0L3JlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIsXG4gICAgICApLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBjb25maWc6IHsgZXhwZXJpbWVudGFsOiB7fSwgaW1hZ2VzOiB7IHVub3B0aW1pemVkOiB0cnVlIH0gfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgdW5vcHRpbWl6ZWQgPSBhd2FpdCBsb2FkUnVudGltZShzdGFnZWQpO1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCB1bm9wdGltaXplZC5oYW5kbGUoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGZmF2aWNvbi5pY28mdz02NCZxPTc1XCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcIl9ub3QtZm91bmQvcGFnZS5qc1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFxuICAgICAgXCIvX25leHQvaW1hZ2U/dXJsPSUyRmZhdmljb24uaWNvJnc9NjQmcT03NVwiLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYW4gZXh0ZXJuYWwgcmV3cml0ZVwiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBgTmV4dFJlc3BvbnNlLnJld3JpdGUoXCJodHRwczovL+KAplwiKWA6IGFuIGFic29sdXRlIGRlc3RpbmF0aW9uIG1ha2VzXG4gICAqIGByZXNvbHZlUm91dGVzYCByZXBvcnQgYW4gYGV4dGVybmFsUmV3cml0ZWAsIHdoaWNoIHRoZSBydW50aW1lIHByb3hpZXMgd2l0aFxuICAgKiBgZmV0Y2hgIGluc3RlYWQgb2Ygcm91dGluZyB0byBhbiBlbnRyeXBvaW50LlxuICAgKi9cbiAgY29uc3QgRVhURVJOQUxfUkVXUklURV9NSURETEVXQVJFID0gYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICBoZWFkZXJzOiB7IFwieC1taWRkbGV3YXJlLXJld3JpdGVcIjogXCJodHRwczovL3Vwc3RyZWFtLnRlc3QvZnJvbS1vcmlnaW5cIiB9LFxuICB9KTtcbmA7XG5cbiAgY29uc3QgT1JJR0lOX0JPRFkgPSBcIjxodG1sPmZyb20gdGhlIG9yaWdpbjwvaHRtbD5cIjtcblxuICAvKipcbiAgICogV2hhdCB1bmRpY2kgaGFuZHMgYmFjayBmb3IgYSBnemlwIG9yaWdpbiwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoZXNlXG4gICAqIHRlc3RzOiBgZmV0Y2hgIGRlY29kZXMgdGhlIGJvZHkgYW5kIGxlYXZlcyBib3RoIGBjb250ZW50LWVuY29kaW5nYCBhbmQgdGhlXG4gICAqICplbmNvZGVkKiBgY29udGVudC1sZW5ndGhgIGJlaGluZCwgZGVzY3JpYmluZyBieXRlcyBpdCBhbHJlYWR5IGRpc2NhcmRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGd6aXBMYWJlbGxlZFBsYWludGV4dCgpOiBSZXNwb25zZSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShPUklHSU5fQk9EWSwge1xuICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIFwiY29udGVudC1lbmNvZGluZ1wiOiBcImd6aXBcIixcbiAgICAgICAgXCJjb250ZW50LWxlbmd0aFwiOiBTdHJpbmcoZ3ppcFN5bmMoT1JJR0lOX0JPRFkpLmJ5dGVMZW5ndGgpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBwcm94eWluZzogTmV4dGpzUnVudGltZTtcbiAgbGV0IGZldGNoTW9jazogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIHByb3h5aW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VEZXBsb3ltZW50KEVYVEVSTkFMX1JFV1JJVEVfTUlERExFV0FSRSkpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBmZXRjaE1vY2sgPSBqZXN0XG4gICAgICAuc3B5T24oZ2xvYmFsVGhpcywgXCJmZXRjaFwiKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKGd6aXBMYWJlbGxlZFBsYWludGV4dCgpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmZXRjaE1vY2subW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHJveHkoXG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICAgIHRydXN0Rm9yd2FyZGVkSG9zdCA9IGZhbHNlLFxuICApOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHByb3h5aW5nLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL2FueXRoaW5nXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCAuLi5oZWFkZXJzIH0sXG4gICAgICAgIHRydXN0Rm9yd2FyZGVkSG9zdCxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBjb25zdCBTSUdORUQgPSB7XG4gICAgYXV0aG9yaXphdGlvbjpcbiAgICAgIFwiQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPUFLSUEvMjAyNjA5MjgvdXMtZWFzdC0xL2xhbWJkYS9hd3M0X3JlcXVlc3RcIixcbiAgICBcIngtYW16LWRhdGVcIjogXCIyMDI2MDkyOFQwMDAwMDBaXCIsXG4gICAgXCJ4LWFtei1jb250ZW50LXNoYTI1NlwiOiBcIlVOU0lHTkVELVBBWUxPQURcIixcbiAgICBcIngtYW16LXNlY3VyaXR5LXRva2VuXCI6IFwidG9rZW5cIixcbiAgfTtcblxuICAvLyBGb3J3YXJkZWQsIE9BQydzIHNpZ25hdHVyZSB3b3VsZCBsZXQgdGhlIHVwc3RyZWFtIHJlcGxheSB0aGUgcmVxdWVzdFxuICAvLyBhZ2FpbnN0IHRoZSBGdW5jdGlvbiBVUkwuXG4gIGl0KFwiZG9lcyBub3QgZm9yd2FyZCB0aGUgU2lnVjQgaGVhZGVycyBvZiBhbiBJQU0tdmVyaWZpZWQgcmVxdWVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcHJveHkoU0lHTkVELCB0cnVlKTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSAoZmV0Y2hNb2NrLm1vY2suY2FsbHNbMF1bMV0gYXMgUmVxdWVzdEluaXQpXG4gICAgICAuaGVhZGVycyBhcyBIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhTSUdORUQpKSB7XG4gICAgICBleHBlY3QoaGVhZGVycy5oYXMobmFtZSkpLnRvQmUoZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQW55d2hlcmUgZWxzZSB0aGV5IGFyZSB0aGUgY2xpZW50J3Mgb3duLCB3aGljaCBgbmV4dCBzdGFydGAgZm9yd2FyZHMuXG4gIGl0KFwiZm9yd2FyZHMgdGhlIGNsaWVudCdzIG93biBBdXRob3JpemF0aW9uIGFuZCB4LWFtei0qIGhlYWRlcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KFNJR05FRCk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzFdIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLmhlYWRlcnMgYXMgSGVhZGVycztcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoU0lHTkVEKSkge1xuICAgICAgZXhwZWN0KGhlYWRlcnMuZ2V0KG5hbWUpKS50b0JlKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicHJveGllcyB0aGUgcmVxdWVzdCB0byB0aGUgcmV3cml0dGVuIG9yaWdpblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHByb3h5KCk7XG5cbiAgICBleHBlY3QoU3RyaW5nKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzBdKSkudG9CZShcbiAgICAgIFwiaHR0cHM6Ly91cHN0cmVhbS50ZXN0L2Zyb20tb3JpZ2luXCIsXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkudG9CZShcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgfSk7XG5cbiAgLy8gdW5kaWNpIHRocm93cyBvbiB0aGVzZSAoYGV4cGVjdDogMTAwLWNvbnRpbnVlYCBmcm9tIGN1cmwgZm9yIGEgbGFyZ2UgUE9TVCxcbiAgLy8gYGtlZXAtYWxpdmVgIGZyb20gYW4gSFRUUC8xLjAgY2xpZW50KSwgd2hpY2ggYW5zd2VyZWQgdGhlIHJlcXVlc3Qgd2l0aCBhIDUwMC5cbiAgaXQoXCJkb2VzIG5vdCBmb3J3YXJkIHRoZSBoZWFkZXJzIHRoYXQgZGVzY3JpYmUgdGhlIGNsaWVudCdzIGNvbm5lY3Rpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KHtcbiAgICAgIGV4cGVjdDogXCIxMDAtY29udGludWVcIixcbiAgICAgIFwia2VlcC1hbGl2ZVwiOiBcInRpbWVvdXQ9NVwiLFxuICAgICAgdXBncmFkZTogXCJ3ZWJzb2NrZXRcIixcbiAgICAgIGNvbm5lY3Rpb246IFwia2VlcC1hbGl2ZSwgdXBncmFkZVwiLFxuICAgICAgXCJ4LWtlcHRcIjogXCJ5ZXNcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSAoZmV0Y2hNb2NrLm1vY2suY2FsbHNbMF1bMV0gYXMgUmVxdWVzdEluaXQpXG4gICAgICAuaGVhZGVycyBhcyBIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBbXG4gICAgICBcImhvc3RcIixcbiAgICAgIFwiZXhwZWN0XCIsXG4gICAgICBcImtlZXAtYWxpdmVcIixcbiAgICAgIFwidXBncmFkZVwiLFxuICAgICAgXCJjb25uZWN0aW9uXCIsXG4gICAgXSkge1xuICAgICAgZXhwZWN0KGhlYWRlcnMuaGFzKG5hbWUpKS50b0JlKGZhbHNlKTtcbiAgICB9XG4gICAgZXhwZWN0KGhlYWRlcnMuZ2V0KFwieC1rZXB0XCIpKS50b0JlKFwieWVzXCIpO1xuICB9KTtcblxuICAvLyBUaGUgcmVxdWVzdCBib2R5IGlzIGZvcndhcmRlZCBhcyByZWNlaXZlZCwgc28gaXRzIGVuY29kaW5nIGhhcyB0byBnbyB3aXRoXG4gIC8vIGl0OiBhIGd6aXAgdXBsb2FkIGFycml2aW5nIHVubGFiZWxsZWQgaXMgZ2FyYmFnZSB0byB0aGUgdXBzdHJlYW0uXG4gIGl0KFwiZm9yd2FyZHMgdGhlIHJlcXVlc3QncyBjb250ZW50LWVuY29kaW5nIHdpdGggaXRzIGJvZHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KHsgXCJjb250ZW50LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0pO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IChmZXRjaE1vY2subW9jay5jYWxsc1swXVsxXSBhcyBSZXF1ZXN0SW5pdClcbiAgICAgIC5oZWFkZXJzIGFzIEhlYWRlcnM7XG4gICAgZXhwZWN0KGhlYWRlcnMuZ2V0KFwiY29udGVudC1lbmNvZGluZ1wiKSkudG9CZShcImd6aXBcIik7XG4gIH0pO1xuXG4gIC8vIEZvcndhcmRpbmcgdGhlIG9yaWdpbidzIGBjb250ZW50LWVuY29kaW5nYCBvdmVyIGEgYm9keSBgZmV0Y2hgIGFscmVhZHlcbiAgLy8gZGVjb2RlZCBmYWlscyB0aGUgd2hvbGUgcmVzcG9uc2UgaW4gdGhlIGJyb3dzZXIgd2l0aFxuICAvLyBFUlJfQ09OVEVOVF9ERUNPRElOR19GQUlMRUQsIHVuZGVyIGEgYENvbnRlbnQtTGVuZ3RoYCB0aGF0IGRlc2NyaWJlcyB0aGVcbiAgLy8gY29tcHJlc3NlZCBieXRlcy4gTm90aGluZyBkb3duc3RyZWFtIHJlcGFpcnMgaXQgZWl0aGVyOiBgc2hvdWxkR3ppcGBcbiAgLy8gZGVjbGluZXMgYXMgc29vbiBhcyBgY29udGVudC1lbmNvZGluZ2AgaXMgc2V0LlxuICBpdChcImRyb3BzIHRoZSBjb250ZW50LWVuY29kaW5nIGFuZCBsZW5ndGggZmV0Y2ggYWxyZWFkeSBjb25zdW1lZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHByb3h5KCk7XG5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShPUklHSU5fQk9EWSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBvdGhlciBoYWxmIG9mIGl0OiB3aXRoIHRoZSBzdGFsZSBsYWJlbCBnb25lLCB0aGUgc2luayBpcyBmcmVlIHRvXG4gIC8vIGNvbXByZXNzIHRoZSBwbGFpbnRleHQgaXRzZWxmIOKAlCBhbmQgbm93IHRoZSBlbmNvZGluZyBpdCBhZHZlcnRpc2VzIGlzIHRoZVxuICAvLyBvbmUgdGhlIGJ5dGVzIGFjdHVhbGx5IGNhcnJ5LlxuICBpdChcInJlLWNvbXByZXNzZXMgdGhlIGRlY29kZWQgYm9keSB3aGVuIHRoZSBjbGllbnQgYWNjZXB0cyBnemlwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcHJveHkoeyBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KTtcblxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoT1JJR0lOX0JPRFkpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImEgc3RyZWFtZWQgZXh0ZXJuYWwgcmV3cml0ZVwiLCAoKSA9PiB7XG4gIGNvbnN0IEVYVEVSTkFMX1JFV1JJVEVfTUlERExFV0FSRSA9IGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgaGVhZGVyczogeyBcIngtbWlkZGxld2FyZS1yZXdyaXRlXCI6IFwiaHR0cHM6Ly91cHN0cmVhbS50ZXN0L2V2ZW50c1wiIH0sXG4gIH0pO1xuYDtcblxuICBsZXQgcHJveHlpbmc6IE5leHRqc1J1bnRpbWU7XG5cbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICBwcm94eWluZyA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlRGVwbG95bWVudChFWFRFUk5BTF9SRVdSSVRFX01JRERMRVdBUkUpKTtcbiAgfSk7XG5cbiAgLy8gU2VydmVyLXNlbnQgZXZlbnRzIHRocm91Z2ggYSByZXdyaXRlLCBnemlwcGVkIGJlY2F1c2UgYHRleHQvZXZlbnQtc3RyZWFtYFxuICAvLyBpcyBgdGV4dC8qYDogd2l0aG91dCBhIGZsdXNoIHBlciBjaHVuaywgdGhlIGZpcnN0IGV2ZW50IHNhdCBpbiB6bGliJ3NcbiAgLy8gYnVmZmVyIHVudGlsIHRoZSBvcmlnaW4gY2xvc2VkIHRoZSBzdHJlYW0uXG4gIGl0KFwiZmx1c2hlcyBlYWNoIGNodW5rIHRocm91Z2ggdGhlIGNvbXByZXNzb3IgYXMgaXQgYXJyaXZlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2UhOiAoKSA9PiB2b2lkO1xuICAgIGNvbnN0IGhlbGQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKHJlbGVhc2UgPSByZXNvbHZlKSk7XG4gICAgY29uc3QgZmV0Y2hNb2NrID0gamVzdC5zcHlPbihnbG9iYWxUaGlzLCBcImZldGNoXCIpLm1vY2tSZXNvbHZlZFZhbHVlKFxuICAgICAgbmV3IFJlc3BvbnNlKFxuICAgICAgICBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgICAgICAgIGFzeW5jIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJkYXRhOiBmaXJzdFxcblxcblwiKSk7XG4gICAgICAgICAgICBhd2FpdCBoZWxkO1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcImRhdGE6IHNlY29uZFxcblxcblwiKSk7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvZXZlbnQtc3RyZWFtXCIgfSB9LFxuICAgICAgKSxcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgICBjb25zdCBoYW5kbGVkID0gcHJveHlpbmcuaGFuZGxlKFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIHVybDogXCIvZXZlbnRzXCIsXG4gICAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwiYWNjZXB0LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgLy8gUG9sbCByYXRoZXIgdGhhbiBzbGVlcCBhIGZpeGVkIHRpbWU6IHRoZSBmaXJzdCBldmVudCBoYXMgdG8gcmVhY2ggdGhlXG4gICAgICAvLyBzaW5rIHdoaWxlIHRoZSBvcmlnaW4gaXMgc3RpbGwgaG9sZGluZyB0aGUgc3RyZWFtIG9wZW4uXG4gICAgICBjb25zdCBzb0ZhciA9ICgpOiBzdHJpbmcgPT5cbiAgICAgICAgZ3VuemlwU3luYyhzaW5rLmJvZHksIHtcbiAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYkNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgIH0pLnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwICYmICFzb0ZhcigpOyBpKyspIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKTtcbiAgICAgIH1cbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICAgIGV4cGVjdChzb0ZhcigpKS50b0JlKFwiZGF0YTogZmlyc3RcXG5cXG5cIik7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBhd2FpdCBoYW5kbGVkO1xuICAgICAgZXhwZWN0KGd1bnppcFN5bmMoc2luay5ib2R5KS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFxuICAgICAgICBcImRhdGE6IGZpcnN0XFxuXFxuZGF0YTogc2Vjb25kXFxuXFxuXCIsXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBmZXRjaE1vY2subW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSBSZXNwb25zZSBtaWRkbGV3YXJlIGFuc3dlcnMgd2l0aCBpdHNlbGZcIiwgKCkgPT4ge1xuICBjb25zdCBNSURETEVXQVJFX0JPRFkgPSBcIjxodG1sPmZyb20gbWlkZGxld2FyZTwvaHRtbD5cIjtcblxuICAvKipcbiAgICogYHJldHVybiBmZXRjaCh1cHN0cmVhbSlgIGZyb20gYHByb3h5LnRzYCwgYXMgdGhlIHJ1bnRpbWUgc2VlcyBpdDogbWlkZGxld2FyZVxuICAgKiBydW5zIGluIHByb2Nlc3MsIHNvIGl0cyBgZmV0Y2hgIGlzIHVuZGljaSwgd2hpY2ggZGVjb2RlZCBhIGd6aXAgdXBzdHJlYW1cbiAgICogYW5kIGtlcHQgdGhlIHVwc3RyZWFtJ3MgYGNvbnRlbnQtZW5jb2RpbmdgIGFuZCBlbmNvZGVkIGBjb250ZW50LWxlbmd0aGAuXG4gICAqL1xuICBjb25zdCBGRVRDSEVEX1JFU1BPTlNFX01JRERMRVdBUkUgPSBgXG5jb25zdCB7IGd6aXBTeW5jIH0gPSByZXF1aXJlKFwibm9kZTp6bGliXCIpO1xuY29uc3QgYm9keSA9ICR7SlNPTi5zdHJpbmdpZnkoTUlERExFV0FSRV9CT0RZKX07XG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UoYm9keSwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICBcImNvbnRlbnQtZW5jb2RpbmdcIjogXCJnemlwXCIsXG4gICAgICBcImNvbnRlbnQtbGVuZ3RoXCI6IFN0cmluZyhnemlwU3luYyhib2R5KS5ieXRlTGVuZ3RoKSxcbiAgICAgIFwidHJhbnNmZXItZW5jb2RpbmdcIjogXCJjaHVua2VkXCIsXG4gICAgICBcIngtZnJvbS11cHN0cmVhbVwiOiBcInllc1wiLFxuICAgIH0sXG4gIH0pO1xuYDtcblxuICBsZXQgcmVzcG9uZGluZzogTmV4dGpzUnVudGltZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIHJlc3BvbmRpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChGRVRDSEVEX1JFU1BPTlNFX01JRERMRVdBUkUpLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIFdoYXQgYG5leHQgc3RhcnRgIGRvZXMgdG9vOiB0aGUgc2FuZGJveCBkZWxldGVzIHRoZXNlIHRocmVlXG4gIC8vIChgRk9SQklEREVOX0hFQURFUlNgKSBmcm9tIGV2ZXJ5IG1pZGRsZXdhcmUgcmVzcG9uc2UuXG4gIGl0KFwiZHJvcHMgdGhlIGZyYW1pbmcgaGVhZGVycyB0aGF0IGRlc2NyaWJlZCB0aGUgdXBzdHJlYW0ncyBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHJlc3BvbmRpbmcuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcblxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcInRyYW5zZmVyLWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcIngtZnJvbS11cHN0cmVhbVwiXSkudG9CZShcInllc1wiKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoTUlERExFV0FSRV9CT0RZKTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBMYXN0IGluIHRoZSBmaWxlLCBiZWNhdXNlIGBsb2FkUnVudGltZWAgY2hkaXJzOiB0aGUgdGVzdHMgYWJvdmUgYXNzZXJ0IG9uIHRoZVxuICogY3dkIHRoZSBzaGFyZWQgZGVwbG95bWVudCBzZXQuXG4gKi9cbmRlc2NyaWJlKFwidGhlIHJlc29sdmVkIHF1ZXJ5IGEgcmV3cml0ZSBwcm9kdWNlZFwiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBgdGVzdC9lMmUvbGluay13aXRoLWFwaS1yZXdyaXRlYCdzIHJ1bGUsIGFzIGl0IGxhbmRzIGluIHRoZSBtYW5pZmVzdDogYVxuICAgKiBgYmVmb3JlRmlsZXNgIHJld3JpdGUgd2hvc2UgY29uZGl0aW9uIGlzIGEgcXVlcnkgcGFyYW0gdGhlIGRlc3RpbmF0aW9uIGtlZXBzLlxuICAgKi9cbiAgY29uc3Qgd2l0aFNlbGZNYXRjaGluZ1Jld3JpdGUgPSAoXG4gICAgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCxcbiAgKTogQWRhcHRlck1hbmlmZXN0ID0+XG4gICAgKHtcbiAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgcm91dGluZzoge1xuICAgICAgICAuLi4obWFuaWZlc3Qucm91dGluZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgICAgIGJlZm9yZUZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlOiBcIi86cGF0aCguKilcIixcbiAgICAgICAgICAgIHNvdXJjZVJlZ2V4OiBcIl4oPzpcXFxcLyguKikpKD86XFxcXC8pPyRcIixcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBcIi8/ZnJvbT0lMkYkMVwiLFxuICAgICAgICAgICAgaGFzOiBbeyB0eXBlOiBcInF1ZXJ5XCIsIGtleTogXCJqc29uXCIsIHZhbHVlOiBcInRydWVcIiB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KSBhcyBBZGFwdGVyTWFuaWZlc3Q7XG5cbiAgLyoqXG4gICAqIGBSb3V0ZU1vZHVsZS5wcmVwYXJlYCByZS1ydW5zIHRoZSBjb25maWcncyByZXdyaXRlcyBhZ2FpbnN0IGByZXEudXJsYFxuICAgKiB1bmNvbmRpdGlvbmFsbHksIGFuZCBgcmVxLnVybGAgaXMgdGhlIHRhcmdldCB0aGUgcmV3cml0ZSBhbHJlYWR5IHByb2R1Y2VkIC1cbiAgICogc28gYSBydWxlIHRoYXQgc3RpbGwgbWF0Y2hlcyBpdHMgb3duIG91dHB1dCBnZXRzIGFwcGxpZWQgdHdpY2UuIEhlcmUgdGhhdFxuICAgKiB0dXJuZWQgYGZyb209L3NvbWUvcm91dGUvZm9yYCBpbnRvIGBmcm9tPS9gLCB3aGljaCBpcyB3aGF0IG1hZGVcbiAgICogYHRlc3QvZTJlL2xpbmstd2l0aC1hcGktcmV3cml0ZWAgYW5zd2VyIGB7XCJmcm9tXCI6XCIvYXBpL2pzb25cIn1gIHdoZXJlXG4gICAqIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIGB7XCJmcm9tXCI6XCIvc29tZS9yb3V0ZS9mb3JcIn1gLiBTdGF0aW5nIHRoZSByZXNvbHZlZCBxdWVyeVxuICAgKiBhcyBgcmVxdWVzdE1ldGEucXVlcnlgIGlzIHdoYXQgYHByZXBhcmVgIHByZWZlcnMgb3ZlciBhbnl0aGluZyBpdCByZS1kZXJpdmVzLFxuICAgKiBzbyB0aGUgcm91dGUgc2VlcyB0aGUgZmlyc3QgcGFzcyByYXRoZXIgdGhhbiB0aGUgc2Vjb25kLlxuICAgKi9cbiAgaXQoXCJpcyBoYW5kZWQgb3ZlciBhcyByZXF1ZXN0TWV0YS5xdWVyeSwgbm90IGxlZnQgdG8gYmUgcmUtZGVyaXZlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmV3cml0aW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCB3aXRoU2VsZk1hdGNoaW5nUmV3cml0ZSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcmV3cml0aW5nLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL3NvbWUvcm91dGUvZm9yP2pzb249dHJ1ZVwiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgfSxcbiAgICAgIHNpbmssXG4gICAgKTtcblxuICAgIGNvbnN0IGJvZHkgPSBzdHViQm9keShzaW5rKTtcbiAgICAvLyBJdHMgb3duIHN0YWdlZCB0cmVlLCBzbyBub3QgYHJvb3RgOiB0aGUgcmV3cml0ZSBpcyB0aGUgcG9pbnQuXG4gICAgZXhwZWN0KGJvZHkuZmlsZSkudG9Db250YWluKFwiLm5leHQvc2VydmVyL2FwcC9wYWdlLmpzXCIpO1xuICAgIGV4cGVjdChib2R5LnF1ZXJ5KS50b0VxdWFsKHsganNvbjogXCJ0cnVlXCIsIGZyb206IFwiL3NvbWUvcm91dGUvZm9yXCIgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogYG5leHQgc3RhcnRgIGFuc3dlcnMgYC8vYCB3aXRoIGAzMDggLT4gL2AgYW5kIGAvYXBpLy9qc29uYCB3aXRoXG4gKiBgMzA4IC0+IC9hcGkvanNvbmA7IHRoaXMgcnVudGltZSB1c2VkIHRvIGFuc3dlciA1MDAgYW5kIDQwNC4gVGhlIDUwMCBpcyB0aGVcbiAqIHJlYXNvbiB0aGUgY2hlY2sgcnVucyBiZWZvcmUgYW55dGhpbmcgcGFyc2VzIHRoZSB0YXJnZXQ6IGBuZXcgVVJMKFwiLy9cIiwgYmFzZSlgXG4gKiByZWFkcyBhIGxlYWRpbmcgYC8vYCBhcyBwcm90b2NvbC1yZWxhdGl2ZSBhbmQgdGFrZXMgdGhlIGZpcnN0IHBhdGggc2VnbWVudCBmb3JcbiAqIHRoZSBob3N0LiBGb3VuZCBieSBgdGVzdC9lMmUvaHlkcmF0aW9uYCwgd2hpY2ggcmVxdWVzdHMgZXhhY3RseSBgLy9gLCBhbmQgYnlcbiAqIGB0ZXN0L2UyZS9pMThuLWlnbm9yZS1yZWRpcmVjdC1zb3VyY2UtbG9jYWxlL3JlZGlyZWN0cy13aXRoLWJhc2VwYXRoYCwgd2hvc2VcbiAqIGxvY2FsZSBsaXN0IGluY2x1ZGVzIGAnJ2AgYW5kIHNvIGFza3MgZm9yIGAvYmFzZXBhdGgvL3RvLXN2YC5cbiAqL1xuZGVzY3JpYmUoXCJhIHBhdGggd2l0aCByZXBlYXRlZCBzbGFzaGVzIG9yIGEgYmFja3NsYXNoXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1wiLy9cIiwgXCIvXCJdLFxuICAgIFtcIi8vL1wiLCBcIi9cIl0sXG4gICAgW1wiL2FwaS8vanNvblwiLCBcIi9hcGkvanNvblwiXSxcbiAgICBbXCIvYmFzZXBhdGgvL3RvLXN2XCIsIFwiL2Jhc2VwYXRoL3RvLXN2XCJdLFxuICAgIFtcIi9hXFxcXGJcIiwgXCIvYS9iXCJdLFxuICAgIC8vIFRoZSBxdWVyeSBpcyBjYXJyaWVkIGFjcm9zcyB1bnRvdWNoZWQsIHJlcGVhdGVkIHNsYXNoZXMgYW5kIGFsbC5cbiAgICBbXCIvL3NvbWUvcm91dGU/anNvbj10cnVlJm5leHQ9Ly94XCIsIFwiL3NvbWUvcm91dGU/anNvbj10cnVlJm5leHQ9Ly94XCJdLFxuICBdKShcInJlZGlyZWN0cyAlcyB0byAlcyB3aXRoIGEgMzA4XCIsIGFzeW5jIChmcm9tLCB0bykgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBmcm9tIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKHRvKTtcbiAgICAvLyBOZXh0LmpzIHNlbmRzIHRoZSBkZXN0aW5hdGlvbiBhcyB0aGUgYm9keSB0b28uXG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKHRvKTtcbiAgfSk7XG5cbiAgLyoqIGAlNUNgIGlzIGEgY2hhcmFjdGVyIGluIGEgc2VnbWVudCwgbm90IGEgc2VwYXJhdG9yIC0gYXMgaW4gTmV4dC5qcy4gKi9cbiAgaXQoXCJsZWF2ZXMgYW4gZW5jb2RlZCBiYWNrc2xhc2ggYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9hJTVDYlwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLm5vdC50b0JlKDMwOCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwic3BsaXRCb2R5XCIsICgpID0+IHtcbiAgY29uc3QgQ0hVTksgPSBCdWZmZXIuYWxsb2MoMTYgKiAxMDI0LCA3KTtcbiAgY29uc3QgdXBsb2FkID0gKCkgPT5cbiAgICBSZWFkYWJsZS5mcm9tKFxuICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogOCB9LCAoKSA9PiBDSFVOSyksXG4gICAgICB7IG9iamVjdE1vZGU6IGZhbHNlIH0sXG4gICAgKTtcblxuICBhc3luYyBmdW5jdGlvbiBkcmFpbihzdHJlYW06IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICBsZW5ndGggKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgLy8gQSB0ZWUgYnVmZmVycyBmb3IgdGhlIGJyYW5jaCB0aGF0IGlzIGJlaGluZCwgc28gdGhlIG1pZGRsZXdhcmUgYnJhbmNoIHRoYXRcbiAgLy8gbm90aGluZyByZWFkcyB3b3VsZCBvdGhlcndpc2UgaG9sZCBldmVyeSBieXRlIHRoZSByb3V0ZSBzdHJlYW1zLlxuICBpdChcImNhbmNlbHMgdGhlIG1pZGRsZXdhcmUgY29weSBvbmNlIGRpc3BhdGNoIGlzIGRvbmUgd2l0aCBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHNwbGl0Qm9keSh1cGxvYWQoKSwgdHJ1ZSk7XG4gICAgYm9keS5yZWxlYXNlVW5yZWFkKGZhbHNlKTtcblxuICAgIGNvbnN0IHJlYWRlciA9IGJvZHkuZm9yRGlzcGF0Y2guZ2V0UmVhZGVyKCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWRlci5yZWFkKCkpLnRvRXF1YWwoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xuICAgIGV4cGVjdChhd2FpdCBkcmFpbihib2R5LmZvclJlcXVlc3QgYXMgUmVhZGFibGUpKS50b0JlKDggKiBDSFVOSy5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyB0aGUgbWlkZGxld2FyZSBjb3B5IGFsb25lIHdoZW4gbWlkZGxld2FyZSBpcyByZWFkaW5nIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gc3BsaXRCb2R5KHVwbG9hZCgpLCB0cnVlKTtcbiAgICBjb25zdCByZWFkaW5nID0gZHJhaW4oXG4gICAgICBib2R5LmZvckRpc3BhdGNoIGFzIHVua25vd24gYXMgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PixcbiAgICApO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG5cbiAgICBleHBlY3QoYXdhaXQgcmVhZGluZykudG9CZSg4ICogQ0hVTksubGVuZ3RoKTtcbiAgfSk7XG5cbiAgLy8gTWlkZGxld2FyZSBhbnN3ZXJlZCwgcG9zc2libHkgd2l0aCB0aGUgdXBsb2FkIGFzIGl0cyBvd24gYm9keTsgYHJlcWAgaXNcbiAgLy8gbmV2ZXIgcmVhZCwgc28gaXRzIGNvcHkgaXMgdGhlIG9uZSB0aGF0IHdvdWxkIHBpbGUgdXAuXG4gIGl0KFwicmVsZWFzZXMgdGhlIHJvdXRlJ3MgY29weSB3aGVuIG1pZGRsZXdhcmUgYW5zd2VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkodXBsb2FkKCksIHRydWUpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZCh0cnVlKTtcblxuICAgIGV4cGVjdCgoYm9keS5mb3JSZXF1ZXN0IGFzIFJlYWRhYmxlKS5kZXN0cm95ZWQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZHJhaW4oYm9keS5mb3JEaXNwYXRjaCBhcyB1bmtub3duIGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pLFxuICAgICkudG9CZSg4ICogQ0hVTksubGVuZ3RoKTtcbiAgfSk7XG5cbiAgLy8gRXZlcnkgTGFtYmRhIHJlcXVlc3Qgd2l0aCBhIGJvZHk6IHRoZSBzaGVsbCBoYW5kcyB0aGUgcnVudGltZSBhIEJ1ZmZlci5cbiAgaXQoXCJyZWFkcyBhIEJ1ZmZlciBib2R5IHR3aWNlLCB3aG9sZSBlYWNoIHRpbWVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IEJ1ZmZlci5mcm9tKFwieFwiLnJlcGVhdCgxMDBfMDAwKSk7XG4gICAgY29uc3QgYm9keSA9IHNwbGl0Qm9keShzb3VyY2UsIHRydWUpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG5cbiAgICBleHBlY3QoXG4gICAgICBhd2FpdCBkcmFpbihib2R5LmZvckRpc3BhdGNoIGFzIHVua25vd24gYXMgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiksXG4gICAgKS50b0JlKHNvdXJjZS5sZW5ndGgpO1xuICAgIGV4cGVjdCgoYm9keS5mb3JSZXF1ZXN0IGFzIEJ1ZmZlcikubGVuZ3RoKS50b0JlKHNvdXJjZS5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHNwbGl0IGF0IGFsbCB3aXRob3V0IG1pZGRsZXdhcmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHVwbG9hZCgpO1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkoc291cmNlLCBmYWxzZSk7XG4gICAgZXhwZWN0KGJvZHkuZm9yUmVxdWVzdCkudG9CZShzb3VyY2UpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG4gICAgZXhwZWN0KHNvdXJjZS5kZXN0cm95ZWQpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIndhaXRVbnRpbFwiLCAoKSA9PiB7XG4gIGl0KFwiYXdhaXRzIHdvcmsgcmVnaXN0ZXJlZCBhZnRlciB0aGUgZmlyc3QgYmF0Y2ggc2V0dGxlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gam9pbihyb290LCBcImxhdGUtd2FpdC11bnRpbC1tYXJrZXJcIik7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiA9IG1hcmtlcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP2xhdGVXYWl0VW50aWw9MVwiIH0pO1xuICAgICAgZXhwZWN0KHJlYWRGaWxlU3luYyhtYXJrZXIsIFwidXRmLThcIikpLnRvQmUoXCJsYXRlXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSBwcmVyZW5kZXJlZCBzdGF0dXMgcGFnZSwgcmVxdWVzdGVkIGRpcmVjdGx5XCIsICgpID0+IHtcbiAgaXQoXCJhbnN3ZXJzIC80MDQgd2l0aCBhIDQwNCwgYXMgbmV4dCBzdGFydCBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvNDA0XCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShOT1RfRk9VTkRfSFRNTCk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyAvNTAwIHdpdGggYSA1MDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi81MDBcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKEVSUk9SX0hUTUwpO1xuICB9KTtcblxuICBpdChcInN0aWxsIHNlcnZlcyB0aGVtIHRvIGEgUE9TVCwgd2hpY2ggbmV4dCBzdGFydCBkb2VzIG5vdCA0MDVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi80MDRcIiwgbWV0aG9kOiBcIlBPU1RcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYW4gYXV0by1leHBvcnRlZCBQYWdlcyBSb3V0ZXIgcGFnZVwiLCAoKSA9PiB7XG4gIGNvbnN0IEFCT1VUX0hUTUwgPSBcIjxodG1sPjxib2R5PmFib3V0PC9ib2R5PjwvaHRtbD5cIjtcbiAgbGV0IHBhZ2VzOiBOZXh0anNSdW50aW1lO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgbGV0IGFib3V0RmlsZSA9IFwiXCI7XG4gICAgY29uc3Qgc3RhZ2VkID0gc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICBhYm91dEZpbGUgPSBgJHttYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXJ9Ly5uZXh0L3NlcnZlci9wYWdlcy9hYm91dC5odG1sYDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBzdGF0aWNGaWxlczogeyAuLi5tYW5pZmVzdC5zdGF0aWNGaWxlcywgXCIvYWJvdXRcIjogYWJvdXRGaWxlIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHdyaXRlKGpvaW4oc3RhZ2VkLCBhYm91dEZpbGUpLCBBQk9VVF9IVE1MKTtcbiAgICBwYWdlcyA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlZCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUbyhtZXRob2Q6IHN0cmluZyk6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcGFnZXMuaGFuZGxlKFxuICAgICAgeyBtZXRob2QsIHVybDogXCIvYWJvdXRcIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgaXQoXCJpcyBzZXJ2ZWQgdG8gYSBHRVRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8oXCJHRVRcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShBQk9VVF9IVE1MKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGFueSBvdGhlciBtZXRob2Qgd2l0aCBhIDQwNSwgYXMgbmV4dCBzdGFydCBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKFwiUE9TVFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5hbGxvdykudG9CZShcIkdFVCwgSEVBRFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhIHJvdXRlIHBhY2thZ2VkIGludG8gYW5vdGhlciBmdW5jdGlvbkdyb3VwcyBncm91cFwiLCAoKSA9PiB7XG4gIGxldCBncm91cGVkOiBOZXh0anNSdW50aW1lO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgbGV0IG1pc3NpbmcgPSBcIlwiO1xuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgbWlzc2luZyA9IG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2lzci9baWRdXCJdLmZpbGVQYXRoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKG1hbmlmZXN0LmVudHJ5cG9pbnRzKS5maWx0ZXIoXG4gICAgICAgICAgICAodGVtcGxhdGUpID0+IHRlbXBsYXRlICE9PSBcIi9pc3IvW2lkXVwiLFxuICAgICAgICAgICksXG4gICAgICAgICAgYmxvZzogW1wiL2lzci9baWRdXCJdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBybVN5bmMoam9pbihzdGFnZWQsIG1pc3NpbmcpKTtcbiAgICBncm91cGVkID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VkKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0KHVybDogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgYXdhaXQgZ3JvdXBlZC5oYW5kbGUoXG4gICAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmwsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgICAgc2luayxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc2luaztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGVkZ2UgbWF0Y2hlcyBjYXNlLXNlbnNpdGl2ZWx5IGFuZCBOZXh0LmpzIGRvZXNuJ3Q6IGAvSVNSLzFgIG1pc3NlZCB0aGVcbiAgLy8gYGJsb2dgIGdyb3VwJ3MgYmVoYXZpb3Igb25seSBiZWNhdXNlIG9mIGl0cyBjYXNlLlxuICBpdChcInJlZGlyZWN0cyBhIFVSTCB0aGF0IGRpZmZlcnMgb25seSBpbiBjYXNlIHRvIGl0cyBjYW5vbmljYWwgc3BlbGxpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvSVNSLzE/eD0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKFwiL2lzci8xP3g9MVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0aGUgY2FzZSBvZiBhIGR5bmFtaWMgc2VnbWVudCdzIHZhbHVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgZ2V0KFwiL0lTUi9BYkNcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgzMDgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMubG9jYXRpb24pLnRvQmUoXCIvaXNyL0FiQ1wiKTtcbiAgfSk7XG5cbiAgLy8gYC9fbmV4dC9pbWFnZWAgcnVucyBpbiB0aGUgZGVmYXVsdCBncm91cCBhbmQgcmVuZGVycyBhIHNvdXJjZSB0aGF0IGlzIG5vdFxuICAvLyBhIGZpbGUgaW4gcHJvY2VzczogZm9yIG9uZSBzZXJ2ZWQgYnkgYW5vdGhlciBncm91cCwgdGhhdCByZW5kZXJlZCB0aGUgNDA0XG4gIC8vIHBhZ2UgYW5kIGhhbmRlZCBpdHMgSFRNTCB0byB0aGUgb3B0aW1pemVyIGFzIHRoZSBpbWFnZS5cbiAgaXQoXCJyZXBvcnRzIGFuIGltYWdlIHNvdXJjZSBpbiBhbm90aGVyIGdyb3VwIHJhdGhlciB0aGFuIGZldGNoaW5nIGl0cyA0MDQgcGFnZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUCA9IFwiZGVmYXVsdFwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZXRjaEludGVybmFsID0gKFxuICAgICAgICBncm91cGVkIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIGZldGNoSW50ZXJuYWw6IChcbiAgICAgICAgICAgIGhyZWY6IHN0cmluZyxcbiAgICAgICAgICAgIHJlcTogdW5rbm93bixcbiAgICAgICAgICApID0+IFByb21pc2U8e1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgICAgICAgICAgYm9keTogQnVmZmVyO1xuICAgICAgICAgICAgb3RoZXJHcm91cD86IHN0cmluZztcbiAgICAgICAgICB9PjtcbiAgICAgICAgfVxuICAgICAgKS5mZXRjaEludGVybmFsLmJpbmQoZ3JvdXBlZCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW50ZXJuYWwoXG4gICAgICAgIFwiL2lzci8xXCIsXG4gICAgICAgIG5ldyBTaGltSW5jb21pbmdNZXNzYWdlKHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGaXNyJTJGMSZ3PTY0JnE9NzVcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBleHBlY3QocmVzcG9uc2UpLnRvTWF0Y2hPYmplY3QoeyBvdGhlckdyb3VwOiBcImJsb2dcIiB9KTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5ib2R5Lmxlbmd0aCkudG9CZSgwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcImlzIGEgNDA0LCBub3QgYSA1MDAsIHdoZW4gY2FzZSBpcyBub3QgdGhlIGRpZmZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgYXdhaXQgZ3JvdXBlZC5oYW5kbGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiBcIi9pc3IvMVwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvTWF0Y2goL25vLXN0b3JlLyk7XG4gICAgICBleHBlY3QoU3RyaW5nKHdhcm4ubW9jay5jYWxsc1swXT8uWzBdKSkudG9Db250YWluKCdncm91cCBcImJsb2dcIicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUDtcbiAgICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicHVibGljLyBvbiB0aGUgTGFtYmRhIHR5cGVzXCIsICgpID0+IHtcbiAgbGV0IGxhbWJkYTogTmV4dGpzUnVudGltZTtcbiAgY29uc3Qgc2VuZCQgPSBqZXN0LnNweU9uKFMzQ2xpZW50LnByb3RvdHlwZSwgXCJzZW5kXCIpO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhZ2VkID0gc3RhZ2VEZXBsb3ltZW50KCk7XG4gICAgY29uc3QgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICByZWFkRmlsZVN5bmMoZGVwbG95ZWRNYW5pZmVzdFBhdGgoc3RhZ2VkKSwgXCJ1dGYtOFwiKSxcbiAgICApO1xuICAgIC8vIFdoYXQgYSBMYW1iZGEgemlwIGNhcnJpZXM6IHRoZSBsaXN0LCBub3QgdGhlIGZpbGVzLlxuICAgIHJtU3luYyhqb2luKHN0YWdlZCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcInB1YmxpY1wiKSwge1xuICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdyaXRlKFxuICAgICAgam9pbihzdGFnZWQsIFJVTlRJTUVfRElSX05BTUUsIFBVQkxJQ19GSUxFU19GSUxFX05BTUUpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoW1wiZmVlZC54bWxcIiwgXCJpbWFnZXMvbG9nb0AyeC5wbmdcIl0pLFxuICAgICk7XG4gICAgbGFtYmRhID0gbmV3IE5leHRqc1J1bnRpbWUoe1xuICAgICAgZGVwbG95bWVudFJvb3Q6IHN0YWdlZCxcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgYnVja2V0OiBcImFzc2V0c1wiLFxuICAgICAgYnVja2V0S2V5UHJlZml4OiBcImJhc2VcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHNlbmQkLm1vY2tSZXNldCgpKTtcbiAgYWZ0ZXJBbGwoKCkgPT4gc2VuZCQubW9ja1Jlc3RvcmUoKSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbiAgKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBsYW1iZGEuaGFuZGxlKFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHVybCxcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIC4uLmhlYWRlcnMgfSxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBpdChcInN0cmVhbXMgYSBsaXN0ZWQgZmlsZSBmcm9tIHRoZSBhc3NldHMgYnVja2V0LCB1bmRlciBpdHMga2V5IHByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCI8cnNzLz5cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIixcbiAgICAgIENvbnRlbnRMZW5ndGg6IDYsXG4gICAgICBFVGFnOiAnXCJlMVwiJyxcbiAgICAgIExhc3RNb2RpZmllZDogbmV3IERhdGUoXCIyMDI2LTAxLTAyVDAzOjA0OjA1WlwiKSxcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIjxyc3MvPlwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFwiYXBwbGljYXRpb24vcnNzK3htbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmV0YWcpLnRvQmUoJ1wiZTFcIicpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFwicHVibGljLCBtYXgtYWdlPTBcIik7XG4gICAgY29uc3QgY29tbWFuZCA9IHNlbmQkLm1vY2suY2FsbHNbMF1bMF0gYXMgdW5rbm93biBhcyB7XG4gICAgICBpbnB1dDogeyBCdWNrZXQ6IHN0cmluZzsgS2V5OiBzdHJpbmcgfTtcbiAgICB9O1xuICAgIGV4cGVjdChjb21tYW5kLmlucHV0KS50b01hdGNoT2JqZWN0KHtcbiAgICAgIEJ1Y2tldDogXCJhc3NldHNcIixcbiAgICAgIEtleTogXCJiYXNlL2ZlZWQueG1sXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwidXNlcyB0aGUgZmlsZSdzIHJlYWwgbmFtZSBhcyB0aGUga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+ICh7XG4gICAgICBCb2R5OiBSZWFkYWJsZS5mcm9tKFtCdWZmZXIuZnJvbShcInBuZ1wiKV0pLFxuICAgIH0pKSBhcyBuZXZlcik7XG4gICAgYXdhaXQgZ2V0KFwiL2ltYWdlcy9sb2dvQDJ4LnBuZ1wiKTtcbiAgICBjb25zdCBjb21tYW5kID0gc2VuZCQubW9jay5jYWxsc1swXVswXSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlucHV0OiB7IEtleTogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dC5LZXkpLnRvQmUoXCJiYXNlL2ltYWdlcy9sb2dvQDJ4LnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGEgbWF0Y2hpbmcgSWYtTm9uZS1NYXRjaCB3aXRoIHRoZSAzMDQgUzMgZ2F2ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIk5vdCBNb2RpZmllZFwiKSwge1xuICAgICAgICBuYW1lOiBcIk5vdE1vZGlmaWVkXCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogMzA0IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IFwiaWYtbm9uZS1tYXRjaFwiOiAnXCJlMVwiJyB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDMwNCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgdGhyb3VnaCB0byB0aGUgNDA0IHdoZW4gdGhlIG9iamVjdCBpcyBnb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiTm9TdWNoS2V5XCIpLCB7XG4gICAgICAgIG5hbWU6IFwiTm9TdWNoS2V5XCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogNDA0IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gIH0pO1xuXG4gIGl0KFwiZm9yd2FyZHMgYSBSYW5nZSBhbmQgYW5zd2VycyBTMydzIDIwNlwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCJyc3NcIildKSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDMsXG4gICAgICBDb250ZW50UmFuZ2U6IFwiYnl0ZXMgMS0zLzZcIixcbiAgICAgIEFjY2VwdFJhbmdlczogXCJieXRlc1wiLFxuICAgIH0pKSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IHJhbmdlOiBcImJ5dGVzPTEtM1wiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjA2KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1yYW5nZVwiXSkudG9CZShcImJ5dGVzIDEtMy82XCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJhY2NlcHQtcmFuZ2VzXCJdKS50b0JlKFwiYnl0ZXNcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwicnNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBzZW5kJC5tb2NrLmNhbGxzWzBdWzBdIGFzIHVua25vd24gYXMge1xuICAgICAgaW5wdXQ6IHsgUmFuZ2U/OiBzdHJpbmcgfTtcbiAgICB9O1xuICAgIGV4cGVjdChjb21tYW5kLmlucHV0LlJhbmdlKS50b0JlKFwiYnl0ZXM9MS0zXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYW4gdW5zYXRpc2ZpYWJsZSBSYW5nZSB3aXRoIGEgNDE2XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiSW52YWxpZFJhbmdlXCIpLCB7XG4gICAgICAgIG5hbWU6IFwiSW52YWxpZFJhbmdlXCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogNDE2IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IHJhbmdlOiBcImJ5dGVzPTk5OS1cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQxNik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIC8vIFMzIGNhbid0IGV2YWx1YXRlIElmLVJhbmdlLCBhbmQgaWdub3JpbmcgUmFuZ2UgaXMgYWx3YXlzIGFsbG93ZWQuXG4gIGl0KFwiZHJvcHMgdGhlIFJhbmdlIHdoZW4gSWYtUmFuZ2UgaXMgcHJlc2VudFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCI8cnNzLz5cIildKSxcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIiwge1xuICAgICAgcmFuZ2U6IFwiYnl0ZXM9MS0zXCIsXG4gICAgICBcImlmLXJhbmdlXCI6ICdcImUxXCInLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBjb25zdCBjb21tYW5kID0gc2VuZCQubW9jay5jYWxsc1swXVswXSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlucHV0OiB7IFJhbmdlPzogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dC5SYW5nZSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInVzZXMgdGhlIG9iamVjdCdzIG93biBDYWNoZS1Db250cm9sLCBhcyB0aGUgZWRnZSBzZXJ2ZXMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQkLm1vY2tJbXBsZW1lbnRhdGlvbigoYXN5bmMgKCkgPT4gKHtcbiAgICAgIEJvZHk6IFJlYWRhYmxlLmZyb20oW0J1ZmZlci5mcm9tKFwiPHJzcy8+XCIpXSksXG4gICAgICBDYWNoZUNvbnRyb2w6IFwicHVibGljLCBtYXgtYWdlPTM2MDBcIixcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXCJwdWJsaWMsIG1heC1hZ2U9MzYwMFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYW4gdW5saXN0ZWQgcGF0aCB0byB0aGUgYXBwXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBnZXQoXCIvdGVzdC50eHRcIik7XG4gICAgZXhwZWN0KHNlbmQkKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJldmFsaWRhdGVkUGFnZVJvdXRlc1wiLCAoKSA9PiB7XG4gIGNvbnN0IG1hbmlmZXN0ID0gKGkxOG46IHVua25vd24pID0+XG4gICAgKHsgYnVpbGRJZDogXCJiMVwiLCBjb25maWc6IHsgaTE4biB9IH0pIGFzIHVua25vd24gYXMgQWRhcHRlck1hbmlmZXN0O1xuICBjb25zdCBpMThuID0geyBsb2NhbGVzOiBbXCJlblwiLCBcImZyXCJdLCBkZWZhdWx0TG9jYWxlOiBcImVuXCIgfTtcblxuICBpdChcImlzIHRoZSByb3V0ZSBhbmQgaXRzIGRhdGEgcm91dGUgd2l0aG91dCBpMThuXCIsICgpID0+IHtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL2Jsb2dcIiwgbWFuaWZlc3QobnVsbCkpKS50b0VxdWFsKFtcbiAgICAgIFtcIi9ibG9nXCIsIFwiL19uZXh0L2RhdGEvYjEvYmxvZy5qc29uXCJdLFxuICAgIF0pO1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvXCIsIG1hbmlmZXN0KG51bGwpKSkudG9FcXVhbChbXG4gICAgICBbXCIvXCIsIFwiL19uZXh0L2RhdGEvYjEvaW5kZXguanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgLy8gVGhlIE5leHQgY2xpZW50IHB1dHMgdGhlIGxvY2FsZSBpbiBldmVyeSBkYXRhIGhyZWYsIHRoZSBkZWZhdWx0IGluY2x1ZGVkLlxuICBpdChcInB1dHMgdGhlIGRlZmF1bHQgbG9jYWxlIGluIHRoZSBkYXRhIHJvdXRlLCBhbmQgaW52YWxpZGF0ZXMgYm90aCBIVE1MIHNwZWxsaW5nc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9ibG9nXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2VuL2Jsb2cuanNvblwiXSxcbiAgICAgIFtcIi9lbi9ibG9nXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4vYmxvZy5qc29uXCJdLFxuICAgIF0pO1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvZW4vYmxvZ1wiLCBtYW5pZmVzdChpMThuKSkpLnRvRXF1YWwoW1xuICAgICAgW1wiL2Jsb2dcIiwgXCIvX25leHQvZGF0YS9iMS9lbi9ibG9nLmpzb25cIl0sXG4gICAgICBbXCIvZW4vYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2VuL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJuYW1lcyB0aGUgcm9vdCdzIGRhdGEgcm91dGUgYWZ0ZXIgdGhlIGxvY2FsZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9cIiwgbWFuaWZlc3QoaTE4bikpKS50b0VxdWFsKFtcbiAgICAgIFtcIi9cIiwgXCIvX25leHQvZGF0YS9iMS9lbi5qc29uXCJdLFxuICAgICAgW1wiL2VuXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4uanNvblwiXSxcbiAgICBdKTtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL2ZyXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvZnJcIiwgXCIvX25leHQvZGF0YS9iMS9mci5qc29uXCJdLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIGFub3RoZXIgbG9jYWxlJ3MgcGFnZSB0byBpdHMgb3duIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9mci9ibG9nXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvZnIvYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2ZyL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG59KTtcbiJdfQ==
1686
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvY29yZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQVFpQjtBQUNqQixxQ0FBaUM7QUFDakMseUNBQTBDO0FBQzFDLDZDQUFpRDtBQUNqRCx5Q0FBNkU7QUFDN0Usa0RBQThDO0FBQzlDLGlDQU9nQjtBQUNoQiw0REFHa0M7QUFDbEMsNENBQXFEO0FBR3JELHlDQU1vQjtBQUNwQixzR0FBd0U7QUFFeEU7Ozs7O0dBS0c7QUFDSCxNQUFNLGVBQWUsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1SHZCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxlQUFlLEdBQUc7Ozs7Ozs7Ozs7Ozs7Q0FhdkIsQ0FBQztBQUVGLE1BQU0sY0FBYztJQUlpQjtJQUg1QixJQUFJLENBQWdCO0lBQ1gsTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUV0QyxZQUFtQyxlQUFlLEtBQUs7UUFBcEIsaUJBQVksR0FBWixZQUFZLENBQVE7SUFBRyxDQUFDO0lBRXBELEtBQUssQ0FBQyxJQUFrQjtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxzQkFBUSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVE7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENB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QU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRiwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSxxRUFBcUU7UUFDckUsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEVB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QUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDM0QsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLENBQUM7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELE1BQU0sQ0FBQyxJQUFBLDRCQUFxQixFQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoRSxDQUFDLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQztTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICBzeW1saW5rU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbn0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgUmVhZGFibGUsIFdyaXRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBjb25zdGFudHMgYXMgemxpYkNvbnN0YW50cywgZ3VuemlwU3luYywgZ3ppcFN5bmMgfSBmcm9tIFwibm9kZTp6bGliXCI7XG5pbXBvcnQgeyBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7XG4gIGxvYWRSdW50aW1lLFxuICBOZXh0anNSdW50aW1lLFxuICByZXZhbGlkYXRlZFBhZ2VSb3V0ZXMsXG4gIFJ1bnRpbWVSZXF1ZXN0LFxuICBzcGxpdEJvZHksXG4gIHdpdGhvdXRJbnRlcm5hbEhlYWRlcnMsXG59IGZyb20gXCIuL2NvcmVcIjtcbmltcG9ydCB7XG4gIEJ1aWxkQ29tcGxldGVDb250ZXh0LFxuICBidWlsZEFkYXB0ZXJNYW5pZmVzdCxcbn0gZnJvbSBcIi4uL2FkYXB0ZXIvYnVpbGQtb3V0cHV0c1wiO1xuaW1wb3J0IHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL2h0dHAvcmVxdWVzdFwiO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkIH0gZnJvbSBcIi4vaHR0cC9yZXNwb25zZVwiO1xuaW1wb3J0IHsgUmVzcG9uc2VTaW5rIH0gZnJvbSBcIi4vaHR0cC9zaW5rXCI7XG5pbXBvcnQge1xuICBBZGFwdGVyTWFuaWZlc3QsXG4gIGRlcGxveWVkTWFuaWZlc3RQYXRoLFxuICBQVUJMSUNfRklMRVNfRklMRV9OQU1FLFxuICBSRVZBTElEQVRFRF9QQUdFX0hPT0ssXG4gIFJVTlRJTUVfRElSX05BTUUsXG59IGZyb20gXCIuL21hbmlmZXN0XCI7XG5pbXBvcnQgYXBwUGxheWdyb3VuZCBmcm9tIFwiLi4vYWRhcHRlci9fX2ZpeHR1cmVzX18vYXBwLXBsYXlncm91bmQuanNvblwiO1xuXG4vKipcbiAqIEV2ZXJ5IGVudHJ5cG9pbnQgaW4gdGhlIHN0YWdlZCB0cmVlIGlzIHRoaXMgbW9kdWxlLiBJdCByZXBvcnRzIGJhY2sgd2hhdCB0aGVcbiAqIHJ1bnRpbWUgaGFuZGVkIGl0IOKAlCB0aGUgcmV3cml0dGVuIGByZXEudXJsYCwgdGhlIGByZXF1ZXN0TWV0YWAgZmllbGRzIE5leHQuanNcbiAqIHJlYWRzLCB0aGUgY3dkIOKAlCB3aGljaCBpcyB0aGUgd2hvbGUgY29udHJhY3QgYmV0d2VlbiB0aGUgcnVudGltZSBhbmQgYSByZWFsXG4gKiBidWlsdCBlbnRyeXBvaW50LCBhbmQgaXQgaXMgb3RoZXJ3aXNlIG9ubHkgb2JzZXJ2YWJsZSBieSBydW5uaW5nIE5leHQuanMuXG4gKi9cbmNvbnN0IEVOVFJZUE9JTlRfU1RVQiA9IGBcbmNvbnN0IHsgd3JpdGVGaWxlU3luYyB9ID0gcmVxdWlyZShcIm5vZGU6ZnNcIik7XG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAocmVxLCByZXMsIGN0eCkgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwsIFwiaHR0cHM6Ly9zdHViLnRlc3RcIik7XG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImJvb21FdmVyeXdoZXJlXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidGhlIGVycm9yIHBhZ2UgZXhwbG9kZWQgdG9vXCIpO1xuICB9XG4gIC8vIFNhbWUgcmVjdXJzaW9uIGd1YXJkIGFzIFxcYHJlbmRlcjQwNFxcYCBiZWxvdzogdGhlIGVycm9yIHBhZ2UgaXMgcmVuZGVyZWQgZm9yXG4gIC8vIHRoZSBVUkwgdGhhdCB3YXMgYXNrZWQgZm9yLCBzbyBhbiB1bmd1YXJkZWQgdGhyb3cgd291bGQgcmVwZWF0IGZvcmV2ZXIuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImJvb21cIikgJiYgIV9fZmlsZW5hbWUuaW5jbHVkZXMoXCJfZXJyb3JcIikpIHtcbiAgICAvLyBBIHJlbmRlciB0aGF0IGRlc2NyaWJlZCBpdHMgYm9keSBiZWZvcmUgaXQgdGhyZXcuXG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsIFwiMTIzNFwiKTtcbiAgICByZXMuc2V0SGVhZGVyKFwiRVRhZ1wiLCAnXCJzdGFsZVwiJyk7XG4gICAgLy8gV2hhdCBcXGBnZXRTZXJ2ZXJTaWRlUHJvcHNcXGAgKG9yIGEgXFxgaGVhZGVycygpXFxgIHJ1bGUpIGNhbiBsZWF2ZSBiZWhpbmQuXG4gICAgcmVzLnNldEhlYWRlcihcIkNhY2hlLUNvbnRyb2xcIiwgXCJzLW1heGFnZT02MFwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyb3V0ZSBleHBsb2RlZFwiKTtcbiAgfVxuICAvLyBXaGF0IGJvdGggcm91dGVycyBkbyBmb3IgXFxgbm90Rm91bmQoKVxcYCB0aGV5IGNhbm5vdCByZW5kZXIgdGhlbXNlbHZlcy4gT25seVxuICAvLyB0aGUgcm91dGUgdGhhdCBnYXZlIHVwIGRvZXMgaXQ6IHRoZSBydW50aW1lIHJlbmRlcnMgdGhlIDQwNCBhZ2FpbnN0IHRoZVxuICAvLyAqc2FtZSogVVJMLCBzbyB0aGUgbm90LWZvdW5kIG1vZHVsZSByZWFjaGluZyBoZXJlIGFnYWluIHdvdWxkIHJlY3Vyc2UuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcInJlbmRlcjQwNFwiKSAmJiAhX19maWxlbmFtZS5pbmNsdWRlcyhcIl9ub3QtZm91bmRcIikpIHtcbiAgICBhd2FpdCBjdHgucmVxdWVzdE1ldGEucmVuZGVyNDA0KCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFxcYHJlcy5yZXZhbGlkYXRlKHRhcmdldClcXGAgZnJvbSBhIFBhZ2VzIEFQSSByb3V0ZSwgc3BlbGxlZCBvdXQ6IHRoZSBydW50aW1lXG4gIC8vIHN1cHBsaWVzIFxcYHJlcXVlc3RNZXRhLnJldmFsaWRhdGVcXGAsIGFuZCB3aGF0IGNvbWVzIGJhY2sgaXMgZWl0aGVyIG5vdGhpbmcgb3JcbiAgLy8gdGhlIFxcYEludmFsaWQgcmVzcG9uc2UgPHN0YXR1cz5cXGAgdGhpcyByZXBvcnRzLlxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJyZXZhbGlkYXRlXCIpKSB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY3R4LnJlcXVlc3RNZXRhLnJldmFsaWRhdGUoe1xuICAgICAgICB1cmxQYXRoOiB1cmwuc2VhcmNoUGFyYW1zLmdldChcInJldmFsaWRhdGVcIiksXG4gICAgICAgIGhlYWRlcnM6IHsgXCJ4LXByZXJlbmRlci1yZXZhbGlkYXRlXCI6IFwicHJldmlldy1pZFwiIH0sXG4gICAgICAgIG9wdHM6IHsgdW5zdGFibGVfb25seUdlbmVyYXRlZDogdXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJvbmx5R2VuZXJhdGVkXCIpIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoeyByZXZhbGlkYXRlZDogZXJyb3IgPT09IG51bGwsIGVycm9yIH0pKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gTGV0cyBhIHRlc3Qgc2VlIHRoZSByZXF1ZXN0IGEgcmV2YWxpZGF0aW9uIHJlbmRlcmVkLCB3aG9zZSByZXNwb25zZSB0aGVcbiAgLy8gcnVudGltZSBkaXNjYXJkcy5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwicmVjb3JkT3JpZ2luXCIpKSB7XG4gICAgd3JpdGVGaWxlU3luYyhwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSLCBjdHgucmVxdWVzdE1ldGEuaW5pdFVSTCk7XG4gIH1cbiAgLy8gTGV0cyBhIHJldmFsaWRhdGlvbiB0YXJnZXQgYW5zd2VyIHNvbWV0aGluZyBvdGhlciB0aGFuIDIwMC5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwic3RhdHVzXCIpKSB7XG4gICAgcmVzLnN0YXR1c0NvZGUgPSBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJzdGF0dXNcIikpO1xuICB9XG4gIC8vIFdoYXQgYSBwcmVyZW5kZXJlZCBcXGAvX25vdC1mb3VuZFxcYCBkb2VzOiBpdCBzZW5kcyB0aGUgQ2FjaGUtQ29udHJvbCBvZiBpdHNcbiAgLy8gb3duIGNhY2hlIGVudHJ5LCBhIHllYXIgZm9yIG9uZSB0aGF0IG5ldmVyIHJldmFsaWRhdGVzIOKAlCBidXQgb25seSB3aGVuIHRoZVxuICAvLyByZXNwb25zZSBoYXMgbm9uZSB5ZXQsIGFzIFxcYHNlbmRSZW5kZXJSZXN1bHRcXGAgYW5kIFxcYHBhZ2VzLWhhbmRsZXIuanNcXGAgZG8uXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImNhY2hlQ29udHJvbFwiKSAmJiAhcmVzLmdldEhlYWRlcihcIkNhY2hlLUNvbnRyb2xcIikpIHtcbiAgICByZXMuc2V0SGVhZGVyKFwiQ2FjaGUtQ29udHJvbFwiLCB1cmwuc2VhcmNoUGFyYW1zLmdldChcImNhY2hlQ29udHJvbFwiKSk7XG4gIH1cbiAgLy8gQSByb3V0ZSB0aGF0IHJlYWRzIGl0cyByZXF1ZXN0IGJvZHksIHJlcG9ydGluZyB3aGF0IGFycml2ZWQuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcInJlYWRCb2R5XCIpKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZXEpIGxlbmd0aCArPSBjaHVuay5sZW5ndGg7XG4gICAgcmVzLmVuZChKU09OLnN0cmluZ2lmeSh7IGJvZHlMZW5ndGg6IGxlbmd0aCB9KSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEEgUGFnZXMgQVBJIHJvdXRlIHRoYXQgcmV0dXJucyBiZWZvcmUgaXQgaXMgZG9uZSB3cml0aW5nOiB3aGF0XG4gIC8vIFxcYHN0cmVhbS5waXBlKHJlcylcXGAgYW5kIGEgY2FsbGJhY2stc3R5bGUgXFxgcmVzLmpzb24oKVxcYCBib3RoIGxvb2sgbGlrZS5cbiAgaWYgKHVybC5zZWFyY2hQYXJhbXMuaGFzKFwiZW5kTGF0ZXJcIikpIHtcbiAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiKTtcbiAgICByZXMud3JpdGUoXCJmaXJzdCxcIik7XG4gICAgc2V0VGltZW91dCgoKSA9PiByZXMuZW5kKFwic2Vjb25kXCIpLCAxMCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFdoYXQgTmV4dCdzIFxcYEFmdGVyQ29udGV4dFxcYCBkb2VzOiB3b3JrIHJlZ2lzdGVyZWQgd2l0aCBcXGB3YWl0VW50aWxcXGAgYWZ0ZXJcbiAgLy8gdGhlIHJlc3BvbnNlLCBmcm9tIGluc2lkZSB3b3JrIHRoYXQgd2FzIGl0c2VsZiByZWdpc3RlcmVkIHdpdGggaXQuXG4gIGlmICh1cmwuc2VhcmNoUGFyYW1zLmhhcyhcImxhdGVXYWl0VW50aWxcIikpIHtcbiAgICBjdHgud2FpdFVudGlsKFxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGN0eC53YWl0VW50aWwoXG4gICAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZUxhdGUpID0+XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiwgXCJsYXRlXCIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVMYXRlKCk7XG4gICAgICAgICAgICAgIH0sIDEwKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIDEwKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICBpZiAodXJsLnNlYXJjaFBhcmFtcy5oYXMoXCJ3YWl0VW50aWxcIikpIHtcbiAgICBjdHgud2FpdFVudGlsKFxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiwgXCJkb25lXCIpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgMTApLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gIHJlcy5lbmQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZmlsZTogX19maWxlbmFtZSxcbiAgICAgIHVybDogcmVxLnVybCxcbiAgICAgIGluaXRVUkw6IGN0eC5yZXF1ZXN0TWV0YSAmJiBjdHgucmVxdWVzdE1ldGEuaW5pdFVSTCxcbiAgICAgIGhvc3RuYW1lOiBjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLmhvc3RuYW1lLFxuICAgICAgcXVlcnk6IGN0eC5yZXF1ZXN0TWV0YSAmJiBjdHgucmVxdWVzdE1ldGEucXVlcnksXG4gICAgICBwYXJhbXM6IChjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLnBhcmFtcykgfHwgbnVsbCxcbiAgICAgIGhhc1JlbmRlcjQwNDogQm9vbGVhbihjdHgucmVxdWVzdE1ldGEgJiYgY3R4LnJlcXVlc3RNZXRhLnJlbmRlcjQwNCksXG4gICAgICB3YWl0VW50aWw6IHR5cGVvZiBjdHgud2FpdFVudGlsLFxuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaGVhZGVyOiByZXEuaGVhZGVyc1tcIngtZnJvbS1taWRkbGV3YXJlXCJdIHx8IG51bGwsXG4gICAgICBuZXh0UmVzdW1lOiByZXEuaGVhZGVyc1tcIm5leHQtcmVzdW1lXCJdIHx8IG51bGwsXG4gICAgICBtYXRjaGVkUGF0aDogcmVxLmhlYWRlcnNbXCJ4LW1hdGNoZWQtcGF0aFwiXSB8fCBudWxsLFxuICAgICAgY29va2llOiByZXEuaGVhZGVycy5jb29raWUgfHwgbnVsbCxcbiAgICB9KSxcbiAgKTtcbn07XG5gO1xuXG4vKipcbiAqIGBOZXh0UmVzcG9uc2UubmV4dCh7IHJlcXVlc3Q6IHsgaGVhZGVycyB9IH0pYCwgc3BlbGxlZCBvdXQgaW4gdGhlIHdpcmUgcHJvdG9jb2xcbiAqIE5leHQuanMgdXNlczogYHgtbWlkZGxld2FyZS1vdmVycmlkZS1oZWFkZXJzYCBsaXN0cyAqZXZlcnkqIHJlcXVlc3QgaGVhZGVyIHRoZVxuICogcm91dGUgc2hvdWxkIHNlZSDigJQgZHJvcHBpbmcgb25lIGhlcmUgaXMgaG93IGEgcmVhbCBhcHAgbG9zZXMgYGFjY2VwdC1lbmNvZGluZ2AuXG4gKi9cbmNvbnN0IE1JRERMRVdBUkVfU1RVQiA9IGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7IFwieC1taWRkbGV3YXJlLW5leHRcIjogXCIxXCIgfSk7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgaGVhZGVycy5zZXQoXCJ4LW1pZGRsZXdhcmUtcmVxdWVzdC1cIiArIG5hbWUsIHZhbHVlKTtcbiAgfSk7XG4gIG5hbWVzLnB1c2goXCJ4LWZyb20tbWlkZGxld2FyZVwiKTtcbiAgaGVhZGVycy5zZXQoXCJ4LW1pZGRsZXdhcmUtcmVxdWVzdC14LWZyb20tbWlkZGxld2FyZVwiLCBcInllc1wiKTtcbiAgaGVhZGVycy5zZXQoXCJ4LW1pZGRsZXdhcmUtb3ZlcnJpZGUtaGVhZGVyc1wiLCBuYW1lcy5qb2luKFwiLFwiKSk7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBoZWFkZXJzIH0pO1xufTtcbmA7XG5cbmNsYXNzIENvbGxlY3RpbmdTaW5rIGltcGxlbWVudHMgUmVzcG9uc2VTaW5rIHtcbiAgcHVibGljIGhlYWQ/OiBSZXNwb25zZUhlYWQ7XG4gIHB1YmxpYyByZWFkb25seSBjaHVua3M6IEJ1ZmZlcltdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBwYWRFbXB0eUJvZHkgPSBmYWxzZSkge31cblxuICBwdWJsaWMgYmVnaW4oaGVhZDogUmVzcG9uc2VIZWFkKTogV3JpdGFibGUge1xuICAgIHRoaXMuaGVhZCA9IGhlYWQ7XG4gICAgY29uc3QgY2h1bmtzID0gdGhpcy5jaHVua3M7XG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZSh7XG4gICAgICB3cml0ZShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYm9keSgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KHRoaXMuY2h1bmtzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcgfCBCdWZmZXIpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnRzKTtcbn1cblxuY29uc3QgRkFWSUNPTiA9IEJ1ZmZlci5mcm9tKFwiMDAwMDAxMDAtZmFrZS1pY29uXCIsIFwidXRmLThcIik7XG5jb25zdCBOT1RfRk9VTkRfSFRNTCA9IFwiPGh0bWw+PGJvZHk+cHJlcmVuZGVyZWQgNDA0PC9ib2R5PjwvaHRtbD5cIjtcbmNvbnN0IEVSUk9SX0hUTUwgPSBcIjxodG1sPjxib2R5PnByZXJlbmRlcmVkIDUwMDwvYm9keT48L2h0bWw+XCI7XG4vKipcbiAqIFdoYXQgYSBjb250YWluZXIgaW1hZ2UgY29waWVzIGludG8gYHB1YmxpYy9gLiBOYW1lcyBgc2VuZGAgYW5kIHRoZSBleGFjdFxuICogbWF0Y2ggaW4gYEBuZXh0L3JvdXRpbmdgIGVhY2ggZ290IHdyb25nOiBhIGAlYCB0aGF0IGlzIG5vdCBhbiBlc2NhcGUsIG9uZSB0aGF0XG4gKiBsb29rcyBsaWtlIG9uZSBuZXh0IHRvIHRoZSBmaWxlIGl0IGRlY29kZXMgdG8sIGFuZCBhbiBgQGAgYSBicm93c2VyIGxlYXZlc1xuICogYWxvbmUuXG4gKi9cbmNvbnN0IFBVQkxJQ19GSUxFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJ0ZXN0LnR4dFwiOiBcImhlbGxvIGZyb20gcHVibGljXCIsXG4gIFwiMTAwJS5wbmdcIjogXCJhIGxpdGVyYWwgcGVyY2VudFwiLFxuICBcImElMjBiLnR4dFwiOiBcInRoZSBmaWxlIG5hbWVkIHdpdGggYSBwZXJjZW50XCIsXG4gIFwiYSBiLnR4dFwiOiBcInRoZSBmaWxlIG5hbWVkIHdpdGggYSBzcGFjZVwiLFxuICBcImltYWdlcy9sb2dvQDJ4LnBuZ1wiOiBcImF0IHNpZ25cIixcbn07XG5cbi8qKlxuICogTWF0ZXJpYWxpemVzIHRoZSB0cmVlIGEgZGVwbG95bWVudCBzdGFnZXM6IHRoZSBtYW5pZmVzdCB1bmRlclxuICogYGNkay1uZXh0anMtcnVudGltZS9gLCBhIHN0dWIgYXQgZXZlcnkgZW50cnlwb2ludCBgZmlsZVBhdGhgLCB0aGUgc3RhdGljIGZpbGVzXG4gKiB0aGUgbWFuaWZlc3QgcG9pbnRzIGF0LCBhbmQgdGhlIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAgYGxvYWRSdW50aW1lYFxuICogcHJvYmVzIGZvci5cbiAqL1xuZnVuY3Rpb24gc3RhZ2VEZXBsb3ltZW50KFxuICBtaWRkbGV3YXJlU291cmNlID0gTUlERExFV0FSRV9TVFVCLFxuICB0cmFuc2Zvcm1NYW5pZmVzdDogKG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QpID0+IEFkYXB0ZXJNYW5pZmVzdCA9IChpdCkgPT5cbiAgICBpdCxcbik6IHN0cmluZyB7XG4gIC8vIFRoZSBmaXh0dXJlIGlzIGEgcmVhbCBjYXB0dXJlZCBjb250ZXh0LCBhcyBKU09OOiB0aGUgc3RydWN0dXJhbCBjYXN0IGlzIHRoZVxuICAvLyBwb2ludCBvZiB0aGUgY2FzdCAoc2VlIGBidWlsZC1vdXRwdXRzLnRlc3QudHNgKS5cbiAgY29uc3QgY3R4ID0gc3RydWN0dXJlZENsb25lKGFwcFBsYXlncm91bmQpIGFzIHVua25vd24gYXMgQnVpbGRDb21wbGV0ZUNvbnRleHQ7XG4gIGNvbnN0IG1hbmlmZXN0ID0gdHJhbnNmb3JtTWFuaWZlc3QoXG4gICAgYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7IGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpciB9KS5tYW5pZmVzdCxcbiAgKTtcbiAgLy8gUmVhbHBhdGggYmVjYXVzZSBgbG9hZFJ1bnRpbWVgIGNoZGlycywgYW5kIG1hY09TJ3MgL3ZhciBpcyBhIHN5bWxpbmsgdG9cbiAgLy8gL3ByaXZhdGUvdmFyOiB0aGUgY3dkIHRoZSBlbnRyeXBvaW50cyByZXBvcnQgd291bGQgbm90IG1hdGNoIG90aGVyd2lzZS5cbiAgY29uc3Qgcm9vdCA9IHJlYWxwYXRoU3luYyhta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcImNkay1uZXh0anMtY29yZS1cIikpKTtcblxuICB3cml0ZShkZXBsb3llZE1hbmlmZXN0UGF0aChyb290KSwgSlNPTi5zdHJpbmdpZnkobWFuaWZlc3QpKTtcbiAgd3JpdGUoXG4gICAgam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwiLm5leHQvcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiksXG4gICAgSlNPTi5zdHJpbmdpZnkoeyB2ZXJzaW9uOiAxLCBjb25maWc6IHt9IH0pLFxuICApO1xuICAvLyBBIGRlcGxveWVkIHRyZWUgY2FycmllcyB0aGUgYG5leHRgIGNsb3N1cmUgYG5leHQgYnVpbGRgIHRyYWNlZCwgdW5kZXIgdGhlXG4gIC8vICpwcm9qZWN0KiBkaXIgcmF0aGVyIHRoYW4gbmV4dCB0byB0aGUgcnVudGltZSBzaGVsbCDigJQgd2hpY2ggaXMgdGhlIHdob2xlXG4gIC8vIHJlYXNvbiBgbmV4dC1tb2R1bGVzLnRzYCBleGlzdHMuIExpbmtpbmcgdGhpcyByZXBvJ3Mgb3duIGBub2RlX21vZHVsZXNgIGluXG4gIC8vIHJlcHJvZHVjZXMgdGhhdCwgc28gYHNlcnZlU3RhdGljYCBoZXJlIHJlc29sdmVzIGJ5IHRoZSBzYW1lIHdhbGsgaXQgZG9lcyBpblxuICAvLyBMYW1iZGEgaW5zdGVhZCBvZiB0aGUgdGVzdCBxdWlldGx5IGV4ZXJjaXNpbmcgYSBkaWZmZXJlbnQgbG9va3VwLlxuICBzeW1saW5rU3luYyhcbiAgICBqb2luKF9fZGlybmFtZSwgXCIuLi8uLi9ub2RlX21vZHVsZXNcIiksXG4gICAgam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwibm9kZV9tb2R1bGVzXCIpLFxuICApO1xuXG4gIGZvciAoY29uc3QgZW50cnlwb2ludCBvZiBPYmplY3QudmFsdWVzKG1hbmlmZXN0LmVudHJ5cG9pbnRzKSkge1xuICAgIHdyaXRlKGpvaW4ocm9vdCwgZW50cnlwb2ludC5maWxlUGF0aCksIEVOVFJZUE9JTlRfU1RVQik7XG4gIH1cbiAgd3JpdGUoam9pbihyb290LCBtYW5pZmVzdC5taWRkbGV3YXJlIS5maWxlUGF0aCksIG1pZGRsZXdhcmVTb3VyY2UpO1xuXG4gIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3Quc3RhdGljRmlsZXNbXCIvZmF2aWNvbi5pY29cIl0pLCBGQVZJQ09OKTtcbiAgLy8gQWJzZW50IGluIHRoZSBkZXBsb3ltZW50cyB0aGUgUGFnZXMgNDA0IGFuZCBlcnJvci1wYWdlIGxhZGRlciB0ZXN0cyBzdGFnZS5cbiAgaWYgKG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiLzQwNFwiXSkge1xuICAgIHdyaXRlKGpvaW4ocm9vdCwgbWFuaWZlc3Quc3RhdGljRmlsZXNbXCIvNDA0XCJdKSwgTk9UX0ZPVU5EX0hUTUwpO1xuICB9XG4gIGlmIChtYW5pZmVzdC5zdGF0aWNGaWxlc1tcIi81MDBcIl0pIHtcbiAgICB3cml0ZShqb2luKHJvb3QsIG1hbmlmZXN0LnN0YXRpY0ZpbGVzW1wiLzUwMFwiXSksIEVSUk9SX0hUTUwpO1xuICB9XG4gIGZvciAoY29uc3QgW2ZpbGUsIGNvbnRlbnRzXSBvZiBPYmplY3QuZW50cmllcyhQVUJMSUNfRklMRVMpKSB7XG4gICAgd3JpdGUoam9pbihyb290LCBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsIFwicHVibGljXCIsIGZpbGUpLCBjb250ZW50cyk7XG4gIH1cbiAgLy8gQXN5bmMgb24gcHVycG9zZTogYGxvYWRSdW50aW1lYCBoYXMgdG8gYXdhaXQgYHJlZ2lzdGVyKClgLCBub3QganVzdCBjYWxsIGl0LlxuICB3cml0ZShcbiAgICBqb2luKHJvb3QsIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpciwgXCIubmV4dC9zZXJ2ZXIvaW5zdHJ1bWVudGF0aW9uLmpzXCIpLFxuICAgIFwiZXhwb3J0cy5yZWdpc3RlciA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcIiArXG4gICAgICBcIiBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfUkVHSVNURVJFRCA9ICd5ZXMnOyByZXNvbHZlKCk7IH0sIDEwKSk7XFxuXCIsXG4gICk7XG4gIC8vIGAuZW52YCByYXRoZXIgdGhhbiBgLmVudi5wcm9kdWN0aW9uYDogYEBuZXh0L2VudmAgcGlja3MgdGhlIG1vZGUgZnJvbVxuICAvLyBOT0RFX0VOViwgd2hpY2ggamVzdCBzZXRzIHRvIFwidGVzdFwiLlxuICB3cml0ZShcbiAgICBqb2luKHJvb3QsIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpciwgXCIuZW52XCIpLFxuICAgIFwiQ0RLX05FWFRKU19URVNUX0ZST01fRU5WX0ZJTEU9ZnJvbS1maWxlXFxuQ0RLX05FWFRKU19URVNUX1NFVF9CWV9MQU1CREE9ZnJvbS1maWxlXFxuXCIsXG4gICk7XG4gIHJldHVybiByb290O1xufVxuXG5sZXQgcm9vdDogc3RyaW5nO1xubGV0IHJ1bnRpbWU6IE5leHRqc1J1bnRpbWU7XG5jb25zdCBvcmlnaW5hbEN3ZCA9IHByb2Nlc3MuY3dkKCk7XG5cbmJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gIGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gIHByb2Nlc3MuZW52LkNES19ORVhUSlNfVEVTVF9TRVRfQllfTEFNQkRBID0gXCJmcm9tLWxhbWJkYVwiO1xuICByb290ID0gc3RhZ2VEZXBsb3ltZW50KCk7XG4gIC8vIGBsb2FkUnVudGltZWAgY2hkaXJzLCB3aGljaCBpcyB0aGUgcG9pbnQgb2YgaXQuXG4gIHJ1bnRpbWUgPSBhd2FpdCBsb2FkUnVudGltZShyb290KTtcbn0pO1xuXG5hZnRlckFsbCgoKSA9PiB7XG4gIHByb2Nlc3MuY2hkaXIob3JpZ2luYWxDd2QpO1xuICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xufSk7XG5cbi8qKiBPbmUgcmVxdWVzdCB0aHJvdWdoIHRoZSByZWFsIGBoYW5kbGVgLCB3aXRoIHRoZSByZXNwb25zZSBjb2xsZWN0ZWQuICovXG5hc3luYyBmdW5jdGlvbiBzZW5kKFxuICByZXF1ZXN0OiBQYXJ0aWFsPFJ1bnRpbWVSZXF1ZXN0PiAmIHsgdXJsOiBzdHJpbmcgfSxcbiAgcGFkRW1wdHlCb2R5ID0gZmFsc2UsXG4pOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsocGFkRW1wdHlCb2R5KTtcbiAgYXdhaXQgcnVudGltZS5oYW5kbGUoXG4gICAge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgIC4uLnJlcXVlc3QsXG4gICAgfSxcbiAgICBzaW5rLFxuICApO1xuICByZXR1cm4gc2luaztcbn1cblxuLyoqIFRoZSBKU09OIGFuIGVudHJ5cG9pbnQgc3R1YiBhbnN3ZXJzIHdpdGguICovXG5mdW5jdGlvbiBzdHViQm9keShzaW5rOiBDb2xsZWN0aW5nU2luayk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgZW5jb2RpbmcgPSBzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdO1xuICBjb25zdCBib2R5ID0gZW5jb2RpbmcgPT09IFwiZ3ppcFwiID8gZ3VuemlwU3luYyhzaW5rLmJvZHkpIDogc2luay5ib2R5O1xuICByZXR1cm4gSlNPTi5wYXJzZShib2R5LnRvU3RyaW5nKFwidXRmLThcIikpO1xufVxuXG5kZXNjcmliZShcImxvYWRSdW50aW1lXCIsICgpID0+IHtcbiAgaXQoXCJjaGRpcnMgdG8gdGhlIHN0YWdlZCBwcm9qZWN0IGRpciwgYmVjYXVzZSBlbnRyeXBvaW50cyByZXNvbHZlIGFnYWluc3QgY3dkXCIsICgpID0+IHtcbiAgICBleHBlY3QocHJvY2Vzcy5jd2QoKSkudG9CZShqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmRcIikpO1xuICB9KTtcblxuICBpdChcImxvYWRzIHRoZSBzdGFnZWQgZW52IGZpbGVzIHRoZSB3YXkgbmV4dCBzdGFydCBkb2VzLCB3aXRob3V0IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uJ3MgZW52aXJvbm1lbnRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfRlJPTV9FTlZfRklMRSkudG9CZShcImZyb20tZmlsZVwiKTtcbiAgICBleHBlY3QocHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX1NFVF9CWV9MQU1CREEpLnRvQmUoXCJmcm9tLWxhbWJkYVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhd2FpdHMgaW5zdHJ1bWVudGF0aW9uIHJlZ2lzdGVyKCkgYmVmb3JlIGFueSBlbnRyeXBvaW50IG9yIG1pZGRsZXdhcmUgbG9hZHMsIGFzIG5leHQgc3RhcnQgZG9lc1wiLCAoKSA9PiB7XG4gICAgLy8gTW9kdWxlLXNjb3BlIGNvZGUgaW4gbWlkZGxld2FyZSBhbmQgZW50cnlwb2ludHMgcmVhZHMgd2hhdCBgcmVnaXN0ZXIoKWBcbiAgICAvLyBzZXRzICgjMjc5KSwgYW5kIG5vdGhpbmcgaXMgbG9hZGVkIHVudGlsIGBsb2FkUnVudGltZWAgaGFzIHJldHVybmVkLlxuICAgIGV4cGVjdChwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfUkVHSVNURVJFRCkudG9CZShcInllc1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJleHBsYWlucyBhIGRlcGxveW1lbnQgcGFja2FnZSB3aXRoIG5vIG1hbmlmZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbXB0eSA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwiY2RrLW5leHRqcy1lbXB0eS1cIikpO1xuICAgIGF3YWl0IGV4cGVjdChsb2FkUnVudGltZShlbXB0eSkpLnJlamVjdHMudG9UaHJvdyhcbiAgICAgIC9Db3VsZCBub3QgcmVhZCB0aGUgY2RrLW5leHRqcyBhZGFwdGVyIG1hbmlmZXN0LyxcbiAgICApO1xuICB9KTtcblxuICBpdChcImV4cGxhaW5zIGEgZGVwbG95bWVudCBwYWNrYWdlIG1pc3NpbmcgdGhlIHN0YWdlZCBwcm9qZWN0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYXJ0aWFsID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLXBhcnRpYWwtXCIpKTtcbiAgICB3cml0ZShcbiAgICAgIGRlcGxveWVkTWFuaWZlc3RQYXRoKHBhcnRpYWwpLFxuICAgICAgcmVhZEZpbGVTeW5jKGRlcGxveWVkTWFuaWZlc3RQYXRoKHJvb3QpLCBcInV0Zi04XCIpLFxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KGxvYWRSdW50aW1lKHBhcnRpYWwpKS5yZWplY3RzLnRvVGhyb3coXG4gICAgICAvZG9lcyBub3QgY29udGFpbiB0aGUgc3RhZ2VkIE5leHQuanMgcHJvamVjdC8sXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJOZXh0anNSdW50aW1lLmhhbmRsZVwiLCAoKSA9PiB7XG4gIGl0KFwiaW52b2tlcyB0aGUgbWF0Y2hlZCBlbnRyeXBvaW50IHdpdGggdGhlIHJlcXVlc3RNZXRhIE5leHQuanMgcmVhZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQmUoXG4gICAgICBqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmQvLm5leHQvc2VydmVyL2FwcC9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGJvZHkudXJsKS50b0JlKFwiL1wiKTtcbiAgICAvLyBXaXRob3V0IGBpbml0VVJMYCwgYFJvdXRlTW9kdWxlLnByZXBhcmVgIGZhbGxzIGJhY2sgdG8gYGh0dHA6Ly9sb2NhbGhvc3RgLlxuICAgIGV4cGVjdChib2R5LmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L1wiKTtcbiAgICBleHBlY3QoYm9keS5ob3N0bmFtZSkudG9CZShcInNob3AuZXhhbXBsZS50ZXN0XCIpO1xuICAgIGV4cGVjdChib2R5Lmhhc1JlbmRlcjQwNCkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QoYm9keS53YWl0VW50aWwpLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICBleHBlY3QoYm9keS5jd2QpLnRvQmUoam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kXCIpKTtcbiAgfSk7XG5cbiAgaXQoXCJ0cnVzdHMgeC1mb3J3YXJkZWQtaG9zdCBvdmVyIHRoZSBob3N0IENsb3VkRnJvbnQgcmV3cm90ZSwgd2hlbiB0aGUgc2hlbGwgc2F5cyB0b1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJvcmlnaW4uY2xvdWRmcm9udC5pbnRlcm5hbFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJ3d3cuZXhhbXBsZS50ZXN0XCIsXG4gICAgICB9LFxuICAgICAgdHJ1c3RGb3J3YXJkZWRIb3N0OiB0cnVlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly93d3cuZXhhbXBsZS50ZXN0L1wiKTtcbiAgfSk7XG5cbiAgLy8gT25seSB0aGUgQ2xvdWRGcm9udCBmdW5jdGlvbiBpbiBmcm9udCBvZiAqZnVuY3Rpb24qIGNvbXB1dGUgb3ZlcndyaXRlcyB0aGlzXG4gIC8vIGhlYWRlciwgc28gb24gQ29udGFpbmVycyBhbmQgdGhlIFJlZ2lvbmFsIHR5cGVzIGl0IGFycml2ZXMgZnJvbSB0aGUgY2xpZW50OlxuICAvLyBob25vcmluZyBpdCBsZXQgYFgtRm9yd2FyZGVkLUhvc3Q6IGV2aWwuZXhhbXBsZWAgcG9pbnQgZXZlcnkgYWJzb2x1dGUgVVJMXG4gIC8vIHRoZSBhcHAgYnVpbHQsIGEgcGFzc3dvcmQtcmVzZXQgbGluayBzYXksIGF0IGV2aWwuZXhhbXBsZS5cbiAgaXQoXCJpZ25vcmVzIHgtZm9yd2FyZGVkLWhvc3QgdW5sZXNzIHRoZSBzaGVsbCB0cnVzdHMgaXQsIGxpa2UgbmV4dCBzdGFydFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJldmlsLmV4YW1wbGVcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmluaXRVUkwpLnRvQmUoXCJodHRwczovL3Nob3AuZXhhbXBsZS50ZXN0L1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaG9zdG5hbWUpLnRvQmUoXCJzaG9wLmV4YW1wbGUudGVzdFwiKTtcbiAgfSk7XG5cbiAgLy8gQSB2YWx1ZSB0aGF0IGNhbm5vdCBiZSBhIFVSTCBhdXRob3JpdHkgbWFkZSBgbmV3IFVSTGAgdGhyb3csIGFuZCBvbiB0aGVcbiAgLy8gTGFtYmRhIHNoZWxscyDigJQgd2hvc2UgaGFuZGxlcnMgd3JhcCBub3RoaW5nIOKAlCB0aGF0IGlzIGFuIGludm9jYXRpb24gZXJyb3IgYW5kXG4gIC8vIGEgNTAyIHJhdGhlciB0aGFuIGEgcmVzcG9uc2UuXG4gIGl0LmVhY2goW1xuICAgIFtcImEgc3BhY2VcIiwgXCJleGEgbXBsZS50ZXN0XCJdLFxuICAgIFtcImEgc2NoZW1lXCIsIFwiaHR0cHM6Ly93d3cuZXhhbXBsZS50ZXN0XCJdLFxuICAgIFtcImEgcGF0aFwiLCBcInd3dy5leGFtcGxlLnRlc3QvZXZpbFwiXSxcbiAgICBbXCJjcmVkZW50aWFsc1wiLCBcInVzZXJAd3d3LmV4YW1wbGUudGVzdFwiXSxcbiAgICBbXCJub3RoaW5nXCIsIFwiXCJdLFxuICBdKShcbiAgICBcImlnbm9yZXMgYW4geC1mb3J3YXJkZWQtaG9zdCBjb250YWluaW5nICVzIGFuZCBmYWxscyBiYWNrIHRvIGhvc3RcIixcbiAgICBhc3luYyAoX2xhYmVsLCBmb3J3YXJkZWQpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgICAgdXJsOiBcIi9cIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIixcbiAgICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogZm9yd2FyZGVkLFxuICAgICAgICB9LFxuICAgICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9cIik7XG4gICAgfSxcbiAgKTtcblxuICAvLyBNdWx0aXBsZSBwcm94aWVzIGVhY2ggYXBwZW5kLCBhbmQgb25seSB0aGUgZmlyc3QgdmFsdWUgaXMgdGhpcyBob3Ancy5cbiAgaXQoXCJ0YWtlcyB0aGUgZmlyc3QgdmFsdWUgb2YgYSBjb21tYS1qb2luZWQgeC1mb3J3YXJkZWQtaG9zdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJvcmlnaW4uY2xvdWRmcm9udC5pbnRlcm5hbFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJ3d3cuZXhhbXBsZS50ZXN0LCBpbm5lci5leGFtcGxlLnRlc3RcIixcbiAgICAgIH0sXG4gICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmluaXRVUkwpLnRvQmUoXCJodHRwczovL3d3dy5leGFtcGxlLnRlc3QvXCIpO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgYW4geC1mb3J3YXJkZWQtcHJvdG8gdGhhdCBpcyBub3QgaHR0cCBvciBodHRwc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICBcIngtZm9yd2FyZGVkLXByb3RvXCI6IFwiamF2YXNjcmlwdFwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuaW5pdFVSTCkudG9CZShcImh0dHBzOi8vc2hvcC5leGFtcGxlLnRlc3QvXCIpO1xuICB9KTtcblxuICBpdChcImhhbmRzIGEgZHluYW1pYyByb3V0ZSBpdHMgcGFyYW1zIGFzIG54dFAgcXVlcnkgdmFsdWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvaXNyLzQyXCIgfSk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LmZpbGUpLnRvQmUoXG4gICAgICBqb2luKHJvb3QsIFwiYXBwLXBsYXlncm91bmQvLm5leHQvc2VydmVyL2FwcC9pc3IvW2lkXS9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgLy8gVGhlIGRvY3VtZW50ZWQgZGVwbG95ZWQtcHJveHkgY29udHJhY3Q6IGBwcmVwYXJlKClgIHJlY292ZXJzIGBwYXJhbXNgXG4gICAgLy8gZnJvbSB0aGVzZSwgd2hpY2ggaXMgd2h5IGByZXF1ZXN0TWV0YS5wYXJhbXNgIGlzIGxlZnQgdW5zZXQuXG4gICAgZXhwZWN0KGJvZHkudXJsKS50b0JlKFwiL2lzci80Mj9ueHRQaWQ9NDJcIik7XG4gICAgZXhwZWN0KGJvZHkucXVlcnkpLnRvRXF1YWwoeyBueHRQaWQ6IFwiNDJcIiB9KTtcbiAgICBleHBlY3QoYm9keS5wYXJhbXMpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIGl0KFwiaGFuZHMgb3ZlciBhIGNhcHR1cmUgd2l0aCBhbiBlbmNvZGVkIGRlbGltaXRlciBhcyByZXF1ZXN0TWV0YS5wYXJhbXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRoZSBjb250cmFjdCBhYm92ZSwgYmVjYXVzZSB0d28gZGVjb2RlcyBhbmQgYSBzcGxpdFxuICAgIC8vIHdvdWxkIHR1cm4gdGhpcyBpbnRvIHRocmVlIHBhcmFtcyBhbmQgbWFrZSBgbm9ybWFsaXplUGFnZVBhdGhgIHRocm93OyBzZWVcbiAgICAvLyBgb3V0T2ZCYW5kUm91dGVQYXJhbXNgLiBUaGUgYG54dFBgIHZhbHVlIGhhcyB0byAqbGVhdmUqIHRoZSBxdWVyeSDigJQgYW5kXG4gICAgLy8gdGhlcmVmb3JlIHRoZSBVUkwg4oCUIG9yIGBwcmVwYXJlYCBwcmVmZXJzIGl0IGFuZCB0aGUgc3BsaXQgaXMgYmFjay5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvaXNyL2ElMkZiXCIgfSk7XG4gICAgY29uc3QgYm9keSA9IHN0dWJCb2R5KHNpbmspO1xuICAgIGV4cGVjdChib2R5LnVybCkudG9CZShcIi9pc3IvYSUyRmJcIik7XG4gICAgZXhwZWN0KGJvZHkucXVlcnkpLnRvRXF1YWwoe30pO1xuICAgIGV4cGVjdChib2R5LnBhcmFtcykudG9FcXVhbCh7IGlkOiBcImEvYlwiIH0pO1xuICB9KTtcblxuICBpdChcInJ1bnMgbWlkZGxld2FyZSBhbmQgYXBwbGllcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGl0IG92ZXJyb2RlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvXCIgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmhlYWRlcikudG9CZShcInllc1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJzZXJ2ZXMgYSBzdGF0aWMgZmlsZSBvdXQgb2YgdGhlIHN0YWdlZCB0cmVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvZmF2aWNvbi5pY29cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keSkudG9FcXVhbChGQVZJQ09OKTtcbiAgICAvLyBUeXBlZCBmcm9tIHRoZSByb3V0ZSdzIGV4dGVuc2lvbiwgbm90IHRoZSBmaWxlJ3M6IGEgc3RhdGljIG1ldGFkYXRhIHJvdXRlXG4gICAgLy8gaXMgc3RhZ2VkIGFzIGBmYXZpY29uLmljby5ib2R5YCwgYW5kIGAuYm9keWAgaXMgbm90IGEgbWVkaWEgdHlwZS4gU2VlXG4gICAgLy8gYHNldEJvZHlGaWxlQ29udGVudFR5cGVgIGluIHN0YXRpYy1maWxlcy50cy5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFwiaW1hZ2UveC1pY29uXCIpO1xuICB9KTtcblxuICBpdChcInNlcnZlcyBwdWJsaWMvIG9mZiBkaXNrLCB1bmRlciB0aGUgbmFtZSB0aGUgZmlsZSBhY3R1YWxseSBoYXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsIH0pO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgICAgcmV0dXJuIHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgIH07XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvdGVzdC50eHRcIikpLnRvQmUoXCJoZWxsbyBmcm9tIHB1YmxpY1wiKTtcbiAgICAvLyBgc2VuZGAgZGVjb2RlcyB0aGUgcGF0aCBpdCBpcyBnaXZlbiwgc28gYSByYXcgZmlsZXN5c3RlbSBwYXRoIGZhaWxlZCB0b1xuICAgIC8vIGRlY29kZSAoYDEwMCUucG5nYCwgYW4gZW1wdHkgNDAwKSBvciBkZWNvZGVkIHRvIGFub3RoZXIgZmlsZS5cbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi8xMDAlMjUucG5nXCIpKS50b0JlKFwiYSBsaXRlcmFsIHBlcmNlbnRcIik7XG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvYSUyNTIwYi50eHRcIikpLnRvQmUoXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgcGVyY2VudFwiKTtcbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi9hJTIwYi50eHRcIikpLnRvQmUoXCJ0aGUgZmlsZSBuYW1lZCB3aXRoIGEgc3BhY2VcIik7XG4gICAgLy8gQm90aCB3YXlzIGEgbGluayBjYW4gc3BlbGwgaXQuXG4gICAgZXhwZWN0KGF3YWl0IGJvZHkoXCIvaW1hZ2VzL2xvZ29AMngucG5nXCIpKS50b0JlKFwiYXQgc2lnblwiKTtcbiAgICBleHBlY3QoYXdhaXQgYm9keShcIi9pbWFnZXMvbG9nbyU0MDJ4LnBuZ1wiKSkudG9CZShcImF0IHNpZ25cIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyA0MDUgdG8gYSBwdWJsaWMvIGZpbGUgcmVxdWVzdGVkIHdpdGggYSBtZXRob2Qgb3RoZXIgdGhhbiBHRVRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBzZW5kYCBzZXJ2ZXMgYW55IG1ldGhvZDsgYG5leHQgc3RhcnRgIGRvZXMgbm90LlxuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi90ZXN0LnR4dFwiLCBtZXRob2Q6IFwiREVMRVRFXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDUpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMuYWxsb3cpLnRvQmUoXCJHRVQsIEhFQURcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS5ub3QudG9Db250YWluKFwiaGVsbG8gZnJvbSBwdWJsaWNcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhbiB1bmtub3duIHBhdGggdGhyb3VnaCB0aGUgL19ub3QtZm91bmQgZW50cnlwb2ludFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL25vcGU/cT0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS5maWxlKS50b0JlKFxuICAgICAgam9pbihyb290LCBcImFwcC1wbGF5Z3JvdW5kLy5uZXh0L3NlcnZlci9hcHAvX25vdC1mb3VuZC9wYWdlLmpzXCIpLFxuICAgICk7XG4gICAgLy8gVGhlIHJlcXVlc3RlZCBwYXRoLCBub3QgYC9fbm90LWZvdW5kYDogdGhlIEFwcCBSb3V0ZXIgcHV0cyB0aGlzIGluIHRoZSBSU0NcbiAgICAvLyBwYXlsb2FkIGFzIHRoZSBjYW5vbmljYWwgVVJMLCBzbyByZW5kZXJpbmcgdGhlIG1vZHVsZSBhZ2FpbnN0IGl0cyBvd25cbiAgICAvLyBwYXRobmFtZSB3b3VsZCBoYW5kIHRoZSBjbGllbnQgdGhlIHdyb25nIGB1c2VQYXRobmFtZSgpYCBhbmQgaGlzdG9yeSBlbnRyeS5cbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiL25vcGU/cT0xXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYW4gdW5rbm93biBwYXRoIG5vLXN0b3JlLCB3aGF0ZXZlciB0aGUgL19ub3QtZm91bmQgZW50cnkgc2VuZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEEgcHJlcmVuZGVyZWQgYC9fbm90LWZvdW5kYCBpcyBhIGNhY2hlIEhJVCB3aXRoIGEgeWVhci1sb25nIGBzLW1heGFnZWAsXG4gICAgLy8gYW5kIHRoZSBDRE4gd291bGQga2VlcCB0aGlzIDQwNCBmb3IgdGhhdCBsb25nIOKAlCBwYXN0IHRoZSBkZXBsb3kgdGhhdCBhZGRzXG4gICAgLy8gdGhlIHJvdXRlLiBgbmV4dCBzdGFydGAgYW5zd2VycyBhbiB1bm1hdGNoZWQgcGF0aCBuby1zdG9yZS5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IGAvbm9wZT9jYWNoZUNvbnRyb2w9JHtlbmNvZGVVUklDb21wb25lbnQoXCJzLW1heGFnZT0zMTUzNjAwMFwiKX1gLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyB0aGUgNDA0IHBhZ2Ugd2hlbiBhIHJvdXRlIGNhbGxzIHJlcXVlc3RNZXRhLnJlbmRlcjQwNCgpXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvP3JlbmRlcjQwND0xXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIC8vIFdoYXRldmVyIHRoZSByb3V0ZSB0aGF0IGdhdmUgdXAgd2FzIHJlbmRlcmluZywgZm9yIHRoZSBzYW1lIHJlYXNvbi5cbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiLz9yZW5kZXI0MDQ9MVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYSByZW5kZXI0MDQoKSA0MDQgdGhlIENhY2hlLUNvbnRyb2wgaXRzIHJvdXRlIGdhdmUgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBub3RGb3VuZCgpYCBmcm9tIGFuIElTUiBwYWdlIGlzIGEgY2FjaGVhYmxlIHJlc3VsdCBvZiB0aGF0IHBhZ2UsIGtlcHQgZm9yXG4gICAgLy8gaXRzIHJldmFsaWRhdGUgcGVyaW9kLCBzbyB0aGUgbm8tc3RvcmUgZm9yIHVubWF0Y2hlZCBwYXRocyBtdXN0IG5vdFxuICAgIC8vIHJlYWNoIGl0LlxuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHtcbiAgICAgIHVybDogYC8/cmVuZGVyNDA0PTEmY2FjaGVDb250cm9sPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFwicy1tYXhhZ2U9NjBcIil9YCxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXCJzLW1heGFnZT02MFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJydW5zIHJlcXVlc3RNZXRhLnJldmFsaWRhdGUoKSBhZ2FpbnN0IGl0c2VsZiwgbm90IG92ZXIgdGhlIG5ldHdvcmtcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkZcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b0VxdWFsKHsgcmV2YWxpZGF0ZWQ6IHRydWUsIGVycm9yOiBudWxsIH0pO1xuICB9KTtcblxuICBpdChcInJlbmRlcnMgYSByZXZhbGlkYXRpb24gZm9yIHRoZSBwdWJsaWMgb3JpZ2luIHRoZSBjYWxsZXIgd2FzIHNlcnZlZCBvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gam9pbihyb290LCBcInJldmFsaWRhdGUtb3JpZ2luLW1hcmtlclwiKTtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1RFU1RfTUFSS0VSID0gbWFya2VyO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kKHtcbiAgICAgICAgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkYlM0ZyZWNvcmRPcmlnaW4lM0QxXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBob3N0OiBcImFiYzEyMy5sYW1iZGEtdXJsLnVzLWVhc3QtMS5vbi5hd3NcIixcbiAgICAgICAgICBcIngtZm9yd2FyZGVkLWhvc3RcIjogXCJzaG9wLmV4YW1wbGUudGVzdFwiLFxuICAgICAgICAgIFwieC1mb3J3YXJkZWQtcHJvdG9cIjogXCJodHRwc1wiLFxuICAgICAgICB9LFxuICAgICAgICB0cnVzdEZvcndhcmRlZEhvc3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZWFkRmlsZVN5bmMobWFya2VyLCBcInV0Zi04XCIpKS50b0JlKFxuICAgICAgICBcImh0dHBzOi8vc2hvcC5leGFtcGxlLnRlc3QvP3JlY29yZE9yaWdpbj0xXCIsXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUjtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiZmFpbHMgYSByZXZhbGlkYXRpb24gd2hvc2UgdGFyZ2V0IGRpZCBub3QgYW5zd2VyIDIwMFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRiUzRnN0YXR1cyUzRDUwMFwiIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7XG4gICAgICByZXZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBlcnJvcjogXCJJbnZhbGlkIHJlc3BvbnNlIDUwMFwiLFxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImludmFsaWRhdGluZyB0aGUgQ0ROIGNvcHkgb2YgYSByZXZhbGlkYXRlZCBwYWdlXCIsICgpID0+IHtcbiAgICBjb25zdCBob29rS2V5ID0gUkVWQUxJREFURURfUEFHRV9IT09LO1xuICAgIGNvbnN0IGdsb2JhbHMgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+O1xuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgZ2xvYmFsc1tob29rS2V5XTtcbiAgICB9KTtcblxuICAgIGl0KFwiaGFuZHMgdGhlIGNhY2hlIGhhbmRsZXIncyBob29rIHRoZSBwYWdlIGFuZCBpdHMgX25leHQvZGF0YSByb3V0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBob29rID0gamVzdC5mbihhc3luYyAoKSA9PiB7fSk7XG4gICAgICBnbG9iYWxzW2hvb2tLZXldID0gaG9vaztcbiAgICAgIGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9yZXZhbGlkYXRlPSUyRmlzciUyRjQyXCIgfSk7XG4gICAgICBleHBlY3QoaG9vaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGhvb2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFtcbiAgICAgICAgXCIvaXNyLzQyXCIsXG4gICAgICAgIGAvX25leHQvZGF0YS8ke3J1bnRpbWUubWFuaWZlc3QuYnVpbGRJZH0vaXNyLzQyLmpzb25gLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcIm5hbWVzIHRoZSByb290J3MgZGF0YSByb3V0ZSBpbmRleC5qc29uXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGhvb2sgPSBqZXN0LmZuKGFzeW5jICgpID0+IHt9KTtcbiAgICAgIGdsb2JhbHNbaG9va0tleV0gPSBob29rO1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP3JldmFsaWRhdGU9JTJGXCIgfSk7XG4gICAgICBleHBlY3QoaG9vaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoW1xuICAgICAgICBcIi9cIixcbiAgICAgICAgYC9fbmV4dC9kYXRhLyR7cnVudGltZS5tYW5pZmVzdC5idWlsZElkfS9pbmRleC5qc29uYCxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyBub3RoaW5nIHdoZW4gdGhlIHJldmFsaWRhdGlvbiBmYWlsZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaG9vayA9IGplc3QuZm4oYXN5bmMgKCkgPT4ge30pO1xuICAgICAgZ2xvYmFsc1tob29rS2V5XSA9IGhvb2s7XG4gICAgICBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkYlM0ZzdGF0dXMlM0Q1MDBcIiB9KTtcbiAgICAgIGV4cGVjdChob29rKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzdGlsbCByZXBvcnRzIHN1Y2Nlc3Mgd2hlbiB0aGUgaW52YWxpZGF0aW9uIGZhaWxzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgICAgZ2xvYmFsc1tob29rS2V5XSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVG9vTWFueUludmFsaWRhdGlvbnNJblByb2dyZXNzXCIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmV2YWxpZGF0ZT0lMkZcIiB9KTtcbiAgICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7IHJldmFsaWRhdGVkOiB0cnVlLCBlcnJvcjogbnVsbCB9KTtcbiAgICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGludGVybmFsIGhlYWRlcnMgbmV4dCBzdGFydCBkb2VzIG5vdCBob25vciBmcm9tIGEgY2xpZW50XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IFwiL1wiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsXG4gICAgICAgIFwibmV4dC1yZXN1bWVcIjogXCIxXCIsXG4gICAgICAgIFwieC1tYXRjaGVkLXBhdGhcIjogXCIvYWRtaW5cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIG5leHRSZXN1bWU6IG51bGwsXG4gICAgICBtYXRjaGVkUGF0aDogbnVsbCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgaW1hZ2VzID0gKCkgPT5cbiAgICAoXG4gICAgICBydW50aW1lIGFzIHVua25vd24gYXMge1xuICAgICAgICBpbWFnZXM6IHtcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBmZXRjaEludGVybmFsOiAoXG4gICAgICAgICAgICAgIGhyZWY6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgICAgICAgICAgICBtYXhpbXVtQm9keTogbnVtYmVyLFxuICAgICAgICAgICAgKSA9PiBQcm9taXNlPHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgICAgICAgICAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgICAgYm9keTogQnVmZmVyO1xuICAgICAgICAgICAgICB0b29MYXJnZT86IGJvb2xlYW47XG4gICAgICAgICAgICB9PjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICkuaW1hZ2VzO1xuXG4gIGl0KFwiZmV0Y2hlcyBhbiBpbWFnZSBzb3VyY2UgZnJvbSBhIHJvdXRlIGhhbmRsZXIsIGluIHByb2Nlc3MgYW5kIHdpdGhvdXQgY29va2llc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgdmlld2VyID0gbmV3IFNoaW1JbmNvbWluZ01lc3NhZ2Uoe1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGYXBpJTJGaGVhbHRoJTNGYXZhdGFyJTNENDImdz02NCZxPTc1XCIsXG4gICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiwgY29va2llOiBcInNlc3Npb249c2VjcmV0XCIgfSxcbiAgICB9KTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGltYWdlcygpLm9wdGlvbnMuZmV0Y2hJbnRlcm5hbChcbiAgICAgIFwiL2FwaS9oZWFsdGg/YXZhdGFyPTQyXCIsXG4gICAgICB2aWV3ZXIsXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuICAgIGV4cGVjdChyZXNwb25zZS5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2UuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKTtcbiAgICBleHBlY3QoYm9keS5maWxlKS50b0NvbnRhaW4oXCJhcGkvaGVhbHRoXCIpO1xuICAgIGV4cGVjdChib2R5LnVybCkudG9CZShcIi9hcGkvaGVhbHRoP2F2YXRhcj00MlwiKTtcbiAgICBleHBlY3QoYm9keS5pbml0VVJMKS50b0JlKFwiaHR0cHM6Ly9zaG9wLmV4YW1wbGUudGVzdC9hcGkvaGVhbHRoP2F2YXRhcj00MlwiKTtcbiAgICBleHBlY3QoYm9keS5jb29raWUpLnRvQmVOdWxsKCk7XG4gIH0pO1xuXG4gIC8vIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWA6IGEgcm91dGUgc3RyZWFtaW5nIGEgbGFyZ2UgYm9keSBtdXN0IG5vdCBiZVxuICAvLyBidWZmZXJlZCB3aG9sZSwgYXMgYG5leHQgc3RhcnRgJ3MgYGZldGNoSW50ZXJuYWxJbWFnZWAgZG9lcyBub3QuXG4gIGl0KFwic3RvcHMgcmVhZGluZyBhbiBpbWFnZSBzb3VyY2Ugcm91dGUgcGFzdCBtYXhpbXVtUmVzcG9uc2VCb2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGltYWdlcygpLm9wdGlvbnMuZmV0Y2hJbnRlcm5hbChcbiAgICAgICAgXCIvYXBpL2hlYWx0aD9hdmF0YXI9NDJcIixcbiAgICAgICAgbmV3IFNoaW1JbmNvbWluZ01lc3NhZ2Uoe1xuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICB1cmw6IFwiL19uZXh0L2ltYWdlP3VybD0lMkZhcGklMkZoZWFsdGglM0ZhdmF0YXIlM0Q0MiZ3PTY0JnE9NzVcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgICB9KSxcbiAgICAgICAgMTAsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLnRvb0xhcmdlKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLmJvZHkubGVuZ3RoKS50b0JlKDApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZWRpcmVjdHMgYSB0cmFpbGluZyBzbGFzaCwgd2l0aCB0aGUgUmVmcmVzaCBmYWxsYmFjayBmb3IgYSAzMDhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9pc3IvNDIvXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgzMDgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMubG9jYXRpb24pLnRvQmUoXCIvaXNyLzQyXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMucmVmcmVzaCkudG9CZShcIjA7dXJsPS9pc3IvNDJcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiL2lzci80MlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJnemlwcyBhIHN0cmVhbWVkIEhUTUwgcmVzcG9uc2UgZm9yIGEgY2xpZW50IHRoYXQgYWNjZXB0cyBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgdXJsOiBcIi9cIixcbiAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQ29udGFpbihcImluaXRVUkxcIik7XG4gIH0pO1xuXG4gIGl0KFwiYXdhaXRzIHdhaXRVbnRpbCB3b3JrIGJlZm9yZSByZXNvbHZpbmcsIHNpbmNlIExhbWJkYSBmcmVlemVzIG9uIHJldHVyblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gam9pbihyb290LCBcIndhaXR1bnRpbC1tYXJrZXJcIik7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiA9IG1hcmtlcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP3dhaXRVbnRpbD0xXCIgfSk7XG4gICAgICAvLyBXcml0dGVuIGJ5IGEgdGltZXIgdGhlIGVudHJ5cG9pbnQgcmVnaXN0ZXJlZCwgYWZ0ZXIgdGhlIHJlc3BvbnNlIGVuZGVkLlxuICAgICAgZXhwZWN0KHJlYWRGaWxlU3luYyhtYXJrZXIsIFwidXRmLThcIikpLnRvQmUoXCJkb25lXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUjtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwic2VydmVzIHRoZSBwcmVyZW5kZXJlZCA1MDAgd2hlbiBhbiBlbnRyeXBvaW50IHRocm93cyBiZWZvcmUgc2VuZGluZyBhIGhlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9ib29tPTFcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKEVSUk9SX0hUTUwpO1xuICAgIC8vIEEgYENhY2hlLUNvbnRyb2xgIHRoZSByZW5kZXIgdGhhdCB0aHJldyBoYWQgYWxyZWFkeSBzZXQgd291bGQgb3RoZXJ3aXNlXG4gICAgLy8gc3RheSBvbiB0aGUgcmVzcG9uc2UgYW5kIGdldCB0aGUgNTAwIGNhY2hlZCBhdCB0aGUgZWRnZS5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KGVycm9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwiVW5oYW5kbGVkIGVycm9yIHdoaWxlIGhhbmRsaW5nIHRoZSByZXF1ZXN0OlwiLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBtZXNzYWdlOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcImV4cGxvZGVkXCIpIH0pLFxuICAgICk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJlYW1zIG1pZGRsZXdhcmUncyBvd24gUmVzcG9uc2Ugd2hlbiBpdCBhbnN3ZXJzIHRoZSByZXF1ZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBBIHNlY29uZCBkZXBsb3ltZW50LCBiZWNhdXNlIHRoZSBtaWRkbGV3YXJlIG1vZHVsZSBpcyBtZW1vaXplZCBwZXIgcnVudGltZS5cbiAgICBjb25zdCByZXNwb25kaW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKFwiZGVuaWVkXCIsIHtcbiAgICBzdGF0dXM6IDQwMSxcbiAgICBzdGF0dXNUZXh0OiBcIlVuYXV0aG9yaXplZFwiLFxuICAgIGhlYWRlcnM6IFtcbiAgICAgIFtcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvcGxhaW5cIl0sXG4gICAgICBbXCJzZXQtY29va2llXCIsIFwic2lkPTsgUGF0aD0vOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UXCJdLFxuICAgICAgW1wic2V0LWNvb2tpZVwiLCBcImZsYWc9MTsgUGF0aD0vXCJdLFxuICAgIF0sXG4gIH0pO1xuYCksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcmVzcG9uZGluZy5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBcIi9cIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIC8vIGByZXNvbHZlUm91dGVzYCBvbmx5IHJlcG9ydHMgdGhhdCBtaWRkbGV3YXJlIHJlc3BvbmRlZDsgdGhlIGJvZHkgY29tZXNcbiAgICAvLyBiYWNrIGZyb20gdGhlIGludm9rZXIsIG9uIHRoZSBgbWlkZGxld2FyZS1yZXNwb25kZWRgIHJlc3VsdC5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwMSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzTWVzc2FnZSkudG9CZShcIlVuYXV0aG9yaXplZFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5jb29raWVzKS50b0VxdWFsKFtcbiAgICAgIFwic2lkPTsgUGF0aD0vOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UXCIsXG4gICAgICBcImZsYWc9MTsgUGF0aD0vXCIsXG4gICAgXSk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiZGVuaWVkXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYSBtaXNzaW5nIGJ1aWxkIGFzc2V0IG5vLXN0b3JlLCBub3QgdW5kZXIgaXRzIGltbXV0YWJsZSBydWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBJbiB0aGUgbWFuaWZlc3QgYnV0IG5vdCBvbiBkaXNrIOKAlCBgc3RhZ2VEZXBsb3ltZW50YCB3cml0ZXMgbm8gY2h1bmtzLCB0aGVcbiAgICAvLyB3YXkgYSBMYW1iZGEgcGFja2FnZSBzaGlwcyBub25lICh0aGV5IGFyZSBvbiBTMyBiZWhpbmQgQ2xvdWRGcm9udCkuXG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiL19uZXh0L3N0YXRpYy9jaHVua3MvMC1xc2Izeno2ZjRjNy5qc1wiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIHRoZXNlIHdpdGhvdXQgcmVuZGVyaW5nIHRoZSA0MDQgcGFnZSAoYHJvdXRlci1zZXJ2ZXIuanNgLFxuICAvLyB0aGUgXCI0MDQgY2FzZVwiKTogbm90aGluZyB3b3VsZCBkaXNwbGF5IGl0LCBhbmQgcmVuZGVyaW5nIGlzIHRoZSBjb3N0LlxuICBpdC5lYWNoKFtcbiAgICBbXCJhIG1pc3NpbmcgYnVpbGQgYXNzZXRcIiwgXCIvX25leHQvc3RhdGljL2NodW5rcy8wLXFzYjN6ejZmNGM3LmpzXCJdLFxuICAgIFtcImEgYnVpbGQgYXNzZXQgbm8gZGVwbG95IHByb2R1Y2VkXCIsIFwiL19uZXh0L3N0YXRpYy9jaHVua3Mvc3RhbGUtMDAwMC5qc1wiXSxcbiAgXSkoXCJhbnN3ZXJzICVzIHdpdGggYSBwbGFpbi10ZXh0IE5vdCBGb3VuZFwiLCBhc3luYyAoX25hbWUsIHVybCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFxuICAgICAgXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiTm90IEZvdW5kXCIpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcImltYWdlXCIsIFwic2NyaXB0XCIsIFwiZm9udFwiLCBcInN0eWxlXCJdKShcbiAgICBcImFuc3dlcnMgYW4gdW5rbm93biBwYXRoIGZldGNoZWQgYXMgYSAlcyBzdWJyZXNvdXJjZSB3aXRoIGEgcGxhaW4tdGV4dCBOb3QgRm91bmRcIixcbiAgICBhc3luYyAoZGVzdCkgPT4ge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoe1xuICAgICAgICB1cmw6IFwiL25vcGUucG5nXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcInNlYy1mZXRjaC1kZXN0XCI6IGRlc3QgfSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIk5vdCBGb3VuZFwiKTtcbiAgICB9LFxuICApO1xuXG4gIGl0LmVhY2goW1xuICAgIC8vIEEgbmF2aWdhdGlvbiwgYW5kIGBmZXRjaCgpYCDigJQgd2hpY2ggaXMgaG93IGFuIFJTQyByZXF1ZXN0IGdvZXMuXG4gICAgW1wiYSBkb2N1bWVudFwiLCBcIkdFVFwiLCBcImRvY3VtZW50XCJdLFxuICAgIFtcImEgZmV0Y2hcIiwgXCJHRVRcIiwgXCJlbXB0eVwiXSxcbiAgICAvLyBgbmV4dCBzdGFydGAgb25seSBzaG9ydC1jaXJjdWl0cyBHRVQgYW5kIEhFQUQuXG4gICAgW1wiYW4gaW1hZ2UgUE9TVFwiLCBcIlBPU1RcIiwgXCJpbWFnZVwiXSxcbiAgXSkoXCJzdGlsbCByZW5kZXJzIHRoZSA0MDQgcGFnZSBmb3IgJXNcIiwgYXN5bmMgKF9uYW1lLCBtZXRob2QsIGRlc3QpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IFwiL25vcGVcIixcbiAgICAgIG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCBcInNlYy1mZXRjaC1kZXN0XCI6IGRlc3QgfSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcIl9ub3QtZm91bmRcIik7XG4gIH0pO1xuXG4gIGl0KFwic2V0dGxlcyBhbmQgZGVzdHJveXMgdGhlIHJlc3BvbnNlIHdoZW4gdGhlIHNpbmsgY2Fubm90IHRha2UgdGhlIGhlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgLy8gV2hhdCB0aGUgTGFtYmRhIHNpbmsncyBgd3JpdGVIZWFkYCBkb2VzIHdpdGggYSBoZWFkZXIgdmFsdWUgaXQgcmVqZWN0cy5cbiAgICBjb25zdCBoYW5kbGVkID0gcnVudGltZS5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBcIi9cIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAge1xuICAgICAgICBiZWdpbigpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGNvbnRlbnRcIik7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgYXdhaXQgZXhwZWN0KGhhbmRsZWQpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoZXJyb3IpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgXCJUaGUgcmVzcG9uc2Ugc3RyZWFtIGRpZCBub3QgY29tcGxldGU6XCIsXG4gICAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7IG1lc3NhZ2U6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiaGVhZGVyXCIpIH0pLFxuICAgICk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJlYW1zIGFuIHVwbG9hZCB0aHJvdWdoIG1pZGRsZXdhcmUgdG8gdGhlIHJvdXRlIGludGFjdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2h1bmsgPSBCdWZmZXIuYWxsb2MoNjQgKiAxMDI0LCAxKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7XG4gICAgICB1cmw6IFwiLz9yZWFkQm9keT0xXCIsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgYm9keTogUmVhZGFibGUuZnJvbShBcnJheS5mcm9tKHsgbGVuZ3RoOiAzMiB9LCAoKSA9PiBjaHVuaykpLFxuICAgIH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7IGJvZHlMZW5ndGg6IDMyICogY2h1bmsubGVuZ3RoIH0pO1xuICB9KTtcblxuICAvLyBUaGUgTGFtYmRhIHNoZWxsJ3MgYm9keTogYWxyZWFkeSBpbiBtZW1vcnksIGFzIGEgQnVmZmVyLlxuICBpdChcInBhc3NlcyBhIEJ1ZmZlciB1cGxvYWQgdGhyb3VnaCBtaWRkbGV3YXJlIHRvIHRoZSByb3V0ZSBpbnRhY3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2MoMTAyNCAqIDEwMjQsIDEpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi8/cmVhZEJvZHk9MVwiLCBtZXRob2Q6IFwiUE9TVFwiLCBib2R5IH0pO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKSkudG9FcXVhbCh7IGJvZHlMZW5ndGg6IGJvZHkubGVuZ3RoIH0pO1xuICB9KTtcblxuICBpdChcInJlYWRzIG1pZGRsZXdhcmUncyBib2R5IG9ubHkgYXMgZmFzdCBhcyB0aGUgY2xpZW50IHRha2VzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwdWxscyA9IHsgY291bnQ6IDAgfTtcbiAgICAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuX19jZGtOZXh0anNQdWxscyA9IHB1bGxzO1xuICAgIGNvbnN0IHN0cmVhbWluZyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShcbiAgICBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHB1bGxzID0gZ2xvYmFsVGhpcy5fX2Nka05leHRqc1B1bGxzO1xuICAgICAgICBwdWxscy5jb3VudCArPSAxO1xuICAgICAgICBpZiAocHVsbHMuY291bnQgPiAxMDAwKSBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIGVsc2UgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KDE2ICogMTAyNCkpO1xuICAgICAgfSxcbiAgICB9KSxcbiAgKTtcbmApLFxuICAgICk7XG4gICAgLy8gQSBjbGllbnQgdGhhdCB0YWtlcyBub3RoaW5nIHVudGlsIHJlbGVhc2VkLlxuICAgIGxldCByZWxlYXNlOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYmxvY2tlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiAocmVsZWFzZSA9IHJlc29sdmUpKTtcbiAgICBjb25zdCBzaW5rOiBSZXNwb25zZVNpbmsgPSB7XG4gICAgICBiZWdpbjogKCkgPT5cbiAgICAgICAgbmV3IFdyaXRhYmxlKHtcbiAgICAgICAgICB3cml0ZShfY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZvaWQgYmxvY2tlZC50aGVuKCgpID0+IGNhbGxiYWNrKCkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgIH07XG4gICAgY29uc3QgaGFuZGxlZCA9IHN0cmVhbWluZy5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsOiBcIi9cIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgIC8vIDEwMDAgY2h1bmtzIGFyZSAxNiBNaUI7IGEgZmV3IGhpZ2hXYXRlck1hcmtzJyB3b3J0aCBpcyBhbGwgdGhhdCBtYXkgYmVcbiAgICAvLyBidWZmZXJlZCBmb3IgYSBjbGllbnQgdGhhdCBpcyBub3QgcmVhZGluZy5cbiAgICBleHBlY3QocHVsbHMuY291bnQpLnRvQmVMZXNzVGhhbig1MCk7XG4gICAgcmVsZWFzZSEoKTtcbiAgICBhd2FpdCBoYW5kbGVkO1xuICAgIGV4cGVjdChwdWxscy5jb3VudCkudG9CZSgxMDAxKTtcbiAgfSk7XG5cbiAgaXQoXCJwYWRzIGFuIGVtcHR5IGJvZHkgd2hlbiB0aGUgc2hlbGwgYXNrcywgc28gQVBJIEdhdGV3YXkgZG9lcyBub3QgNTAyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZChcbiAgICAgIHtcbiAgICAgICAgdXJsOiBcIi9cIixcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwiaWYtbm9uZS1tYXRjaFwiOiBcInhcIiB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICAvLyBBIHJlYWwgMzA0IGlzIG5vdCByZWFjaGFibGUgdGhyb3VnaCBhIHN0dWIgZW50cnlwb2ludCwgc28gdGhpcyBvbmx5XG4gICAgLy8gYXNzZXJ0cyB0aGUgcGFkZGluZyBkb2VzIG5vdCBjb3JydXB0IGEgbm9ybWFsIGJvZHkuXG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigxKTtcbiAgfSk7XG5cbiAgaXQoXCJlbWl0cyBlYWNoIGNvb2tpZSBtaWRkbGV3YXJlIHNldCBleGFjdGx5IG9uY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGBIZWFkZXJzLmVudHJpZXMoKWAgeWllbGRzIGBzZXQtY29va2llYCBvbmNlIHBlciBjb29raWUsIHNvIGFwcGVuZGluZyB0aGVcbiAgICAvLyB3aG9sZSBgZ2V0U2V0Q29va2llKClgIGFycmF5IHBlciBlbnRyeSBlbWl0dGVkIE7CsiBvZiB0aGVtOiB0d28gY29va2llc1xuICAgIC8vIGFycml2ZWQgYXQgdGhlIGJyb3dzZXIgYXMgYT0xLCBiPTIsIGE9MSwgYj0yLiBBIGR1cGxpY2F0ZWQgYFNldC1Db29raWVgIGlzXG4gICAgLy8gbm90IGhhcm1sZXNzIGVpdGhlciAtIGEgc2Vzc2lvbiBjb29raWUgYW5kIGl0cyBvd24gY29weSByYWNlLlxuICAgIGNvbnN0IGNvbnRpbnVpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChgXG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UobnVsbCwge1xuICAgIGhlYWRlcnM6IFtcbiAgICAgIFtcIngtbWlkZGxld2FyZS1uZXh0XCIsIFwiMVwiXSxcbiAgICAgIFtcInNldC1jb29raWVcIiwgXCJhPTE7IFBhdGg9L1wiXSxcbiAgICAgIFtcInNldC1jb29raWVcIiwgXCJiPTI7IFBhdGg9L1wiXSxcbiAgICBdLFxuICB9KTtcbmApLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IGNvbnRpbnVpbmcuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5jb29raWVzKS50b0VxdWFsKFtcImE9MTsgUGF0aD0vXCIsIFwiYj0yOyBQYXRoPS9cIl0pO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIE5leHQuanMncyBwYWdlIGhhbmRsZXJzIHJlcG9ydCBhbiBlcnJvciBhbmQgdGhlbiByZXRocm93LCBsZWF2aW5nIHRoZSBlcnJvciBwYWdlXG4gKiB0byB3aGF0ZXZlciBob3N0cyB0aGVtLCBzbyB0aGlzIGxhZGRlciBpcyB0aGUgb25seSB0aGluZyB0aGF0IG1ha2VzIGFcbiAqIGBwYWdlcy9fZXJyb3JgIHJlYWNoYWJsZS4gYHRlc3QvZTJlL2FzeW5jLW1vZHVsZXNgIGlzIHRoZSBtZWFzdXJlbWVudDpcbiAqIGAvbWFrZS1lcnJvcmAgdGhyb3dzIGluIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgIGFuZCBleHBlY3RzIFwiaGVsbG8gZXJyb3JcIi5cbiAqL1xuZGVzY3JpYmUoXCJhIFBhZ2VzIEFQSSByb3V0ZVwiLCAoKSA9PiB7XG4gIGl0KFwiaXMgbGVmdCB0byBlbmQgaXRzIG93biByZXNwb25zZSwgYXMgbmV4dCBzdGFydCBsZWF2ZXMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2VzQXBpID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+ICh7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBlbnRyeXBvaW50czoge1xuICAgICAgICAgIC4uLm1hbmlmZXN0LmVudHJ5cG9pbnRzLFxuICAgICAgICAgIFwiL2FwaS9oZWFsdGhcIjoge1xuICAgICAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHNbXCIvYXBpL2hlYWx0aFwiXSxcbiAgICAgICAgICAgIHR5cGU6IFwicGFnZS1hcGlcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSkpLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHBhZ2VzQXBpLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL2FwaS9oZWFsdGg/ZW5kTGF0ZXI9MVwiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgfSxcbiAgICAgIHNpbmssXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJmaXJzdCxzZWNvbmRcIik7XG4gIH0pO1xuXG4gIGl0KFwiaXMgc3RpbGwgZW5kZWQgZm9yIGEgcm91dGUgb2YgYW55IG90aGVyIGtpbmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9hcGkvaGVhbHRoP2VuZExhdGVyPTFcIiB9KTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJmaXJzdCxcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicmVzLnJldmFsaWRhdGUoKSBhY3Jvc3MgZnVuY3Rpb25Hcm91cHNcIiwgKCkgPT4ge1xuICAvLyBUaGUgb3RoZXIgZ3JvdXAncyBwYWdlIHJlbmRlcnMgYXMgYSA0MDQsIHdoaWNoIGB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkYFxuICAvLyBhbG9uZSB3b3VsZCBhY2NlcHQgYXMgXCJub3QgZ2VuZXJhdGVkXCIuXG4gIGl0LmVhY2goW1xuICAgIFtcIlwiLCBcIi8/cmV2YWxpZGF0ZT0lMkZpc3IlMkYxXCJdLFxuICAgIFtcIiB3aXRoIHVuc3RhYmxlX29ubHlHZW5lcmF0ZWRcIiwgXCIvP3JldmFsaWRhdGU9JTJGaXNyJTJGMSZvbmx5R2VuZXJhdGVkPTFcIl0sXG4gIF0pKFwic2F5cyB3aGljaCBncm91cCBvd25zIGEgcGFnZSBpdCBjYW5ub3QgcmVuZGVyJXNcIiwgYXN5bmMgKF8sIHVybCkgPT4ge1xuICAgIGxldCBtaXNzaW5nID0gXCJcIjtcbiAgICBjb25zdCBzdGFnZWQgPSBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgIG1pc3NpbmcgPSBtYW5pZmVzdC5lbnRyeXBvaW50c1tcIi9pc3IvW2lkXVwiXS5maWxlUGF0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiBPYmplY3Qua2V5cyhtYW5pZmVzdC5lbnRyeXBvaW50cykuZmlsdGVyKFxuICAgICAgICAgICAgKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZSAhPT0gXCIvaXNyL1tpZF1cIixcbiAgICAgICAgICApLFxuICAgICAgICAgIGJsb2c6IFtcIi9pc3IvW2lkXVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcm1TeW5jKGpvaW4oc3RhZ2VkLCBtaXNzaW5nKSk7XG4gICAgY29uc3QgZ3JvdXBlZCA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlZCk7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUCA9IFwiZGVmYXVsdFwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgICBhd2FpdCBncm91cGVkLmhhbmRsZShcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2luayxcbiAgICAgICk7XG4gICAgICBjb25zdCB7IGVycm9yIH0gPSBKU09OLnBhcnNlKHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKTtcbiAgICAgIGV4cGVjdChlcnJvcikudG9NYXRjaCgvXkludmFsaWQgcmVzcG9uc2UgNDA0OiAvKTtcbiAgICAgIGV4cGVjdChlcnJvcikudG9Db250YWluKCdncm91cCBcImJsb2dcIicpO1xuICAgICAgZXhwZWN0KGVycm9yKS50b0NvbnRhaW4oJyhcImRlZmF1bHRcIiknKTtcbiAgICAgIC8vIFRoZSBlcnJvciBleHBsYWlucyBpdDsgdGhlIG1pc3JvdXRlZC1yZXF1ZXN0IHdhcm5pbmcgd291bGQgbm90LlxuICAgICAgZXhwZWN0KHdhcm4pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0ZVTkNUSU9OX0dST1VQO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3aXRob3V0SW50ZXJuYWxIZWFkZXJzXCIsICgpID0+IHtcbiAgaXQoXCJkcm9wcyBldmVyeSBoZWFkZXIgb24gTmV4dCdzIGludGVybmFsIGxpc3RcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHdpdGhvdXRJbnRlcm5hbEhlYWRlcnMoXG4gICAgICAgIHtcbiAgICAgICAgICBob3N0OiBcImEudGVzdFwiLFxuICAgICAgICAgIFwibmV4dC1yZXN1bWVcIjogXCIxXCIsXG4gICAgICAgICAgXCJ4LW1pZGRsZXdhcmUtcmV3cml0ZVwiOiBcIi94XCIsXG4gICAgICAgICAgXCJ4LW5leHRqcy1kYXRhXCI6IFwiMVwiLFxuICAgICAgICB9LFxuICAgICAgICBcIi9ibG9nXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICApLFxuICAgICkudG9FcXVhbCh7IGhvc3Q6IFwiYS50ZXN0XCIgfSk7XG4gIH0pO1xuXG4gIGl0KFwibWFya3MgYSBfbmV4dC9kYXRhIHJlcXVlc3QgYXMgb25lLCBhcyBuZXh0IHN0YXJ0J3Mgcm91dGVyIGRvZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHdpdGhvdXRJbnRlcm5hbEhlYWRlcnMoe30sIFwiL2Jhc2UvX25leHQvZGF0YS9hYmMvYmxvZy5qc29uP3g9MVwiLCBcIi9iYXNlXCIpLFxuICAgICkudG9FcXVhbCh7IFwieC1uZXh0anMtZGF0YVwiOiBcIjFcIiB9KTtcbiAgICBleHBlY3Qod2l0aG91dEludGVybmFsSGVhZGVycyh7fSwgXCIvX25leHQvZGF0YS9hYmMvYmxvZ1wiLCBcIlwiKSkudG9FcXVhbCh7fSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwidGhlIGVycm9yIHBhZ2UgbGFkZGVyXCIsICgpID0+IHtcbiAgLyoqXG4gICAqIEFuIGFwcCB3aXRoIGEgY3VzdG9tIGBwYWdlcy9fZXJyb3JgIHRoYXQgY2Fubm90IGJlIHByZXJlbmRlcmVkIOKAlCBvbmUgd2l0aFxuICAgKiBgZ2V0SW5pdGlhbFByb3BzYCwgb3IgYSBgcGFnZXMvX2FwcGAgdGhhdCBoYXMgaXQuIFRoZSBmaXh0dXJlIGlzIEFwcCBSb3V0ZXIsXG4gICAqIHNvIGJvdGggaGFsdmVzIGhhdmUgdG8gYmUgYXJyYW5nZWQ6IGRyb3AgdGhlIHByZXJlbmRlcmVkIGAvNTAwYCBuZXh0IGVtaXRzIGJ5XG4gICAqIGRlZmF1bHQsIGFuZCBhZGQgdGhlIGVudHJ5cG9pbnQuXG4gICAqL1xuICBjb25zdCB3aXRoRXJyb3JQYWdlID0gKG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QpOiBBZGFwdGVyTWFuaWZlc3QgPT4ge1xuICAgIGNvbnN0IHsgXCIvNTAwXCI6IF9wcmVyZW5kZXJlZCwgLi4uc3RhdGljRmlsZXMgfSA9IG1hbmlmZXN0LnN0YXRpY0ZpbGVzO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tYW5pZmVzdCxcbiAgICAgIHN0YXRpY0ZpbGVzLFxuICAgICAgZW50cnlwb2ludHM6IHtcbiAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHMsXG4gICAgICAgIFwiL19lcnJvclwiOiB7XG4gICAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHNbXCIvX25vdC1mb3VuZFwiXSxcbiAgICAgICAgICBpZDogXCIvX2Vycm9yXCIsXG4gICAgICAgICAgZmlsZVBhdGg6IGpvaW4oXG4gICAgICAgICAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgICAgICAgICBcIi5uZXh0L3NlcnZlci9wYWdlcy9fZXJyb3IuanNcIixcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUbyhcbiAgICB3aXRoTGFkZGVyOiBOZXh0anNSdW50aW1lLFxuICAgIHVybDogc3RyaW5nLFxuICApOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHdpdGhMYWRkZXIuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybCwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgaXQoXCJpbnZva2VzIC9fZXJyb3Igd2hlbiB0aGUgYnVpbGQgaGFzIG5vIHByZXJlbmRlcmVkIC81MDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgcmVuZGVyaW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCB3aXRoRXJyb3JQYWdlKSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8ocmVuZGVyaW5nLCBcIi8/Ym9vbT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICAvLyBSZW5kZXJlZCBmb3IgdGhlIFVSTCB0aGF0IHdhcyBhc2tlZCBmb3IsIGFuZCB3aXRoIHRoZSBzdGF0dXMgYWxyZWFkeSBzZXQ6XG4gICAgLy8gYF9lcnJvcmAncyBgZ2V0SW5pdGlhbFByb3BzYCByZWFkcyBgcmVzLnN0YXR1c0NvZGVgIHRvIGdldCBpdHMgb3duIHByb3AuXG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcInBhZ2VzL19lcnJvci5qc1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFwiLz9ib29tPTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5ldGFnKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgLy8gTm90IHRoZSB0aHJvd2luZyByZW5kZXIncyBgcy1tYXhhZ2U9NjBgOiBhIGNhY2hlZCA1MDAgYXQgQ2xvdWRGcm9udC5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9NYXRjaCgvbm8tc3RvcmUvKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcImRyb3BzIHRoZSBmYWlsZWQgcmVuZGVyJ3MgQ29udGVudC1MZW5ndGggYW5kIEVUYWcgZnJvbSBhIHByZXJlbmRlcmVkIC81MDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmQoeyB1cmw6IFwiLz9ib29tPTFcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKEVSUk9SX0hUTUwpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMuZXRhZykudG9CZVVuZGVmaW5lZCgpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byBwbGFpbiB0ZXh0IHdoZW4gdGhlIGVycm9yIHBhZ2UgdGhyb3dzIHRvb1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCByZW5kZXJpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIHdpdGhFcnJvclBhZ2UpLFxuICAgICk7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhyZW5kZXJpbmcsIFwiLz9ib29tRXZlcnl3aGVyZT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNTAwKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXG4gICAgICBcInByaXZhdGUsIG5vLWNhY2hlLCBuby1zdG9yZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGVcIixcbiAgICApO1xuICAgIGV4cGVjdChlcnJvcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBcIlRoZSBlcnJvciBwYWdlIGl0c2VsZiBmYWlsZWQgdG8gcmVuZGVyOlwiLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBtZXNzYWdlOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcInRvb1wiKSB9KSxcbiAgICApO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBwbGFpbiB0ZXh0IGZvciBhbiBhcHAgd2l0aCBubyBlcnJvciBwYWdlIGF0IGFsbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBjb25zdCBiYXJlID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBcIi81MDBcIjogX3ByZXJlbmRlcmVkLCAuLi5zdGF0aWNGaWxlcyB9ID0gbWFuaWZlc3Quc3RhdGljRmlsZXM7XG4gICAgICAgIHJldHVybiB7IC4uLm1hbmlmZXN0LCBzdGF0aWNGaWxlcyB9O1xuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKGJhcmUsIFwiLz9ib29tPTFcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg1MDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImEgUGFnZXMgUm91dGVyIDQwNFwiLCAoKSA9PiB7XG4gIC8qKiBUaGUgZml4dHVyZSBpcyBBcHAgUm91dGVyOiB3aXRob3V0IGAvX25vdC1mb3VuZGAsIGEgNDA0IGlzIHRoZSBQYWdlcyBvbmUuICovXG4gIGNvbnN0IHdpdGhvdXROb3RGb3VuZCA9IChtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0KTogQWRhcHRlck1hbmlmZXN0ID0+IHtcbiAgICBjb25zdCB7IFwiL19ub3QtZm91bmRcIjogX2FwcFJvdXRlciwgLi4uZW50cnlwb2ludHMgfSA9IG1hbmlmZXN0LmVudHJ5cG9pbnRzO1xuICAgIHJldHVybiB7IC4uLm1hbmlmZXN0LCBlbnRyeXBvaW50cyB9O1xuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUbyhcbiAgICBwYWdlczogTmV4dGpzUnVudGltZSxcbiAgICB1cmw6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBwYWdlcy5oYW5kbGUoXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiwgdXJsLCBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9IH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBpdChcInNlcnZlcyB0aGUgcHJlcmVuZGVyZWQgNDA0Lmh0bWwgZm9yIGFuIHVua25vd24gcGF0aCBhbmQgZm9yIHJlbmRlcjQwNCgpXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwYWdlcyA9IGF3YWl0IGxvYWRSdW50aW1lKFxuICAgICAgc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgd2l0aG91dE5vdEZvdW5kKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgdXJsIG9mIFtcIi9ub3BlXCIsIFwiLz9yZW5kZXI0MDQ9MVwiXSkge1xuICAgICAgY29uc3Qgc2luayA9IGF3YWl0IHNlbmRUbyhwYWdlcywgdXJsKTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pLnRvQmUoXG4gICAgICAgIFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKE5PVF9GT1VORF9IVE1MKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmVuZGVycyBhIHBhZ2VzLzQwNCBlbnRyeXBvaW50IGZvciB0aGUgcGF0aCB0aGF0IHdhcyBhc2tlZCBmb3JcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFdoYXQgYSBgZ2V0SW5pdGlhbFByb3BzYCBpbiBgcGFnZXMvX2FwcGAgbWFrZXMgb2YgYHBhZ2VzLzQwNC5qc2AuXG4gICAgY29uc3QgcGFnZXMgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgICBjb25zdCB3aXRob3V0QXBwID0gd2l0aG91dE5vdEZvdW5kKG1hbmlmZXN0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi53aXRob3V0QXBwLFxuICAgICAgICAgIGVudHJ5cG9pbnRzOiB7XG4gICAgICAgICAgICAuLi53aXRob3V0QXBwLmVudHJ5cG9pbnRzLFxuICAgICAgICAgICAgXCIvNDA0XCI6IHtcbiAgICAgICAgICAgICAgLi4ubWFuaWZlc3QuZW50cnlwb2ludHNbXCIvX25vdC1mb3VuZFwiXSxcbiAgICAgICAgICAgICAgaWQ6IFwiLzQwNFwiLFxuICAgICAgICAgICAgICBmaWxlUGF0aDogam9pbihcbiAgICAgICAgICAgICAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgICAgICAgICAgICAgXCIubmV4dC9zZXJ2ZXIvcGFnZXMvNDA0LmpzXCIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8ocGFnZXMsIFwiL25vcGU/cT0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykuZmlsZSkudG9Db250YWluKFwicGFnZXMvNDA0LmpzXCIpO1xuICAgIGV4cGVjdChzdHViQm9keShzaW5rKS51cmwpLnRvQmUoXCIvbm9wZT9xPTFcIik7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBwbGFpbiB0ZXh0IHdoZW4gdGhlIGFwcCBoYXMgbm8gNDA0IHBhZ2UgYXQgYWxsXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiYXJlID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCAobWFuaWZlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBcIi80MDRcIjogX3ByZXJlbmRlcmVkLCAuLi5zdGF0aWNGaWxlcyB9ID0gbWFuaWZlc3Quc3RhdGljRmlsZXM7XG4gICAgICAgIHJldHVybiB7IC4uLndpdGhvdXROb3RGb3VuZChtYW5pZmVzdCksIHN0YXRpY0ZpbGVzIH07XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8oYmFyZSwgXCIvP3JlbmRlcjQwND0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJUaGlzIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kLlwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCIvX25leHQvaW1hZ2Ugd2l0aCBpbWFnZXMgdHVybmVkIG9mZlwiLCAoKSA9PiB7XG4gIGl0KFwiYW5zd2VycyB0aGUgYXBwJ3MgNDA0LCBuby1zdG9yZSwgaW5zdGVhZCBvZiBvcHRpbWl6aW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBgaW1hZ2VzLnVub3B0aW1pemVkYCwgYXMgYG5leHQgc3RhcnRgIHJlYWRzIGl0IGZyb21cbiAgICAvLyBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gLlxuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudCgpO1xuICAgIGNvbnN0IG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgcmVhZEZpbGVTeW5jKGRlcGxveWVkTWFuaWZlc3RQYXRoKHN0YWdlZCksIFwidXRmLThcIiksXG4gICAgKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oXG4gICAgICAgIHN0YWdlZCxcbiAgICAgICAgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLFxuICAgICAgICBcIi5uZXh0L3JlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIsXG4gICAgICApLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBjb25maWc6IHsgZXhwZXJpbWVudGFsOiB7fSwgaW1hZ2VzOiB7IHVub3B0aW1pemVkOiB0cnVlIH0gfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgdW5vcHRpbWl6ZWQgPSBhd2FpdCBsb2FkUnVudGltZShzdGFnZWQpO1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCB1bm9wdGltaXplZC5oYW5kbGUoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGZmF2aWNvbi5pY28mdz02NCZxPTc1XCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoNDA0KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkudG9CZShcbiAgICAgIFwicHJpdmF0ZSwgbm8tY2FjaGUsIG5vLXN0b3JlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZVwiLFxuICAgICk7XG4gICAgZXhwZWN0KHN0dWJCb2R5KHNpbmspLmZpbGUpLnRvQ29udGFpbihcIl9ub3QtZm91bmQvcGFnZS5qc1wiKTtcbiAgICBleHBlY3Qoc3R1YkJvZHkoc2luaykudXJsKS50b0JlKFxuICAgICAgXCIvX25leHQvaW1hZ2U/dXJsPSUyRmZhdmljb24uaWNvJnc9NjQmcT03NVwiLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYW4gZXh0ZXJuYWwgcmV3cml0ZVwiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBgTmV4dFJlc3BvbnNlLnJld3JpdGUoXCJodHRwczovL+KAplwiKWA6IGFuIGFic29sdXRlIGRlc3RpbmF0aW9uIG1ha2VzXG4gICAqIGByZXNvbHZlUm91dGVzYCByZXBvcnQgYW4gYGV4dGVybmFsUmV3cml0ZWAsIHdoaWNoIHRoZSBydW50aW1lIHByb3hpZXMgd2l0aFxuICAgKiBgZmV0Y2hgIGluc3RlYWQgb2Ygcm91dGluZyB0byBhbiBlbnRyeXBvaW50LlxuICAgKi9cbiAgY29uc3QgRVhURVJOQUxfUkVXUklURV9NSURETEVXQVJFID0gYFxuZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT5cbiAgbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICBoZWFkZXJzOiB7IFwieC1taWRkbGV3YXJlLXJld3JpdGVcIjogXCJodHRwczovL3Vwc3RyZWFtLnRlc3QvZnJvbS1vcmlnaW5cIiB9LFxuICB9KTtcbmA7XG5cbiAgY29uc3QgT1JJR0lOX0JPRFkgPSBcIjxodG1sPmZyb20gdGhlIG9yaWdpbjwvaHRtbD5cIjtcblxuICAvKipcbiAgICogV2hhdCB1bmRpY2kgaGFuZHMgYmFjayBmb3IgYSBnemlwIG9yaWdpbiwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoZXNlXG4gICAqIHRlc3RzOiBgZmV0Y2hgIGRlY29kZXMgdGhlIGJvZHkgYW5kIGxlYXZlcyBib3RoIGBjb250ZW50LWVuY29kaW5nYCBhbmQgdGhlXG4gICAqICplbmNvZGVkKiBgY29udGVudC1sZW5ndGhgIGJlaGluZCwgZGVzY3JpYmluZyBieXRlcyBpdCBhbHJlYWR5IGRpc2NhcmRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIGd6aXBMYWJlbGxlZFBsYWludGV4dCgpOiBSZXNwb25zZSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShPUklHSU5fQk9EWSwge1xuICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIFwiY29udGVudC1lbmNvZGluZ1wiOiBcImd6aXBcIixcbiAgICAgICAgXCJjb250ZW50LWxlbmd0aFwiOiBTdHJpbmcoZ3ppcFN5bmMoT1JJR0lOX0JPRFkpLmJ5dGVMZW5ndGgpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGxldCBwcm94eWluZzogTmV4dGpzUnVudGltZTtcbiAgbGV0IGZldGNoTW9jazogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIHByb3h5aW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VEZXBsb3ltZW50KEVYVEVSTkFMX1JFV1JJVEVfTUlERExFV0FSRSkpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBmZXRjaE1vY2sgPSBqZXN0XG4gICAgICAuc3B5T24oZ2xvYmFsVGhpcywgXCJmZXRjaFwiKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKGd6aXBMYWJlbGxlZFBsYWludGV4dCgpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmZXRjaE1vY2subW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHJveHkoXG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuICAgIHRydXN0Rm9yd2FyZGVkSG9zdCA9IGZhbHNlLFxuICApOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHByb3h5aW5nLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL2FueXRoaW5nXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiLCAuLi5oZWFkZXJzIH0sXG4gICAgICAgIHRydXN0Rm9yd2FyZGVkSG9zdCxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBjb25zdCBTSUdORUQgPSB7XG4gICAgYXV0aG9yaXphdGlvbjpcbiAgICAgIFwiQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPUFLSUEvMjAyNjA5MjgvdXMtZWFzdC0xL2xhbWJkYS9hd3M0X3JlcXVlc3RcIixcbiAgICBcIngtYW16LWRhdGVcIjogXCIyMDI2MDkyOFQwMDAwMDBaXCIsXG4gICAgXCJ4LWFtei1jb250ZW50LXNoYTI1NlwiOiBcIlVOU0lHTkVELVBBWUxPQURcIixcbiAgICBcIngtYW16LXNlY3VyaXR5LXRva2VuXCI6IFwidG9rZW5cIixcbiAgfTtcblxuICAvLyBGb3J3YXJkZWQsIE9BQydzIHNpZ25hdHVyZSB3b3VsZCBsZXQgdGhlIHVwc3RyZWFtIHJlcGxheSB0aGUgcmVxdWVzdFxuICAvLyBhZ2FpbnN0IHRoZSBGdW5jdGlvbiBVUkwuXG4gIGl0KFwiZG9lcyBub3QgZm9yd2FyZCB0aGUgU2lnVjQgaGVhZGVycyBvZiBhbiBJQU0tdmVyaWZpZWQgcmVxdWVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcHJveHkoU0lHTkVELCB0cnVlKTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSAoZmV0Y2hNb2NrLm1vY2suY2FsbHNbMF1bMV0gYXMgUmVxdWVzdEluaXQpXG4gICAgICAuaGVhZGVycyBhcyBIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhTSUdORUQpKSB7XG4gICAgICBleHBlY3QoaGVhZGVycy5oYXMobmFtZSkpLnRvQmUoZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQW55d2hlcmUgZWxzZSB0aGV5IGFyZSB0aGUgY2xpZW50J3Mgb3duLCB3aGljaCBgbmV4dCBzdGFydGAgZm9yd2FyZHMuXG4gIGl0KFwiZm9yd2FyZHMgdGhlIGNsaWVudCdzIG93biBBdXRob3JpemF0aW9uIGFuZCB4LWFtei0qIGhlYWRlcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KFNJR05FRCk7XG5cbiAgICBjb25zdCBoZWFkZXJzID0gKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzFdIGFzIFJlcXVlc3RJbml0KVxuICAgICAgLmhlYWRlcnMgYXMgSGVhZGVycztcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoU0lHTkVEKSkge1xuICAgICAgZXhwZWN0KGhlYWRlcnMuZ2V0KG5hbWUpKS50b0JlKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicHJveGllcyB0aGUgcmVxdWVzdCB0byB0aGUgcmV3cml0dGVuIG9yaWdpblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHByb3h5KCk7XG5cbiAgICBleHBlY3QoU3RyaW5nKGZldGNoTW9jay5tb2NrLmNhbGxzWzBdWzBdKSkudG9CZShcbiAgICAgIFwiaHR0cHM6Ly91cHN0cmVhbS50ZXN0L2Zyb20tb3JpZ2luXCIsXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkudG9CZShcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgfSk7XG5cbiAgLy8gdW5kaWNpIHRocm93cyBvbiB0aGVzZSAoYGV4cGVjdDogMTAwLWNvbnRpbnVlYCBmcm9tIGN1cmwgZm9yIGEgbGFyZ2UgUE9TVCxcbiAgLy8gYGtlZXAtYWxpdmVgIGZyb20gYW4gSFRUUC8xLjAgY2xpZW50KSwgd2hpY2ggYW5zd2VyZWQgdGhlIHJlcXVlc3Qgd2l0aCBhIDUwMC5cbiAgaXQoXCJkb2VzIG5vdCBmb3J3YXJkIHRoZSBoZWFkZXJzIHRoYXQgZGVzY3JpYmUgdGhlIGNsaWVudCdzIGNvbm5lY3Rpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KHtcbiAgICAgIGV4cGVjdDogXCIxMDAtY29udGludWVcIixcbiAgICAgIFwia2VlcC1hbGl2ZVwiOiBcInRpbWVvdXQ9NVwiLFxuICAgICAgdXBncmFkZTogXCJ3ZWJzb2NrZXRcIixcbiAgICAgIGNvbm5lY3Rpb246IFwia2VlcC1hbGl2ZSwgdXBncmFkZVwiLFxuICAgICAgXCJ4LWtlcHRcIjogXCJ5ZXNcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSAoZmV0Y2hNb2NrLm1vY2suY2FsbHNbMF1bMV0gYXMgUmVxdWVzdEluaXQpXG4gICAgICAuaGVhZGVycyBhcyBIZWFkZXJzO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBbXG4gICAgICBcImhvc3RcIixcbiAgICAgIFwiZXhwZWN0XCIsXG4gICAgICBcImtlZXAtYWxpdmVcIixcbiAgICAgIFwidXBncmFkZVwiLFxuICAgICAgXCJjb25uZWN0aW9uXCIsXG4gICAgXSkge1xuICAgICAgZXhwZWN0KGhlYWRlcnMuaGFzKG5hbWUpKS50b0JlKGZhbHNlKTtcbiAgICB9XG4gICAgZXhwZWN0KGhlYWRlcnMuZ2V0KFwieC1rZXB0XCIpKS50b0JlKFwieWVzXCIpO1xuICB9KTtcblxuICAvLyBUaGUgcmVxdWVzdCBib2R5IGlzIGZvcndhcmRlZCBhcyByZWNlaXZlZCwgc28gaXRzIGVuY29kaW5nIGhhcyB0byBnbyB3aXRoXG4gIC8vIGl0OiBhIGd6aXAgdXBsb2FkIGFycml2aW5nIHVubGFiZWxsZWQgaXMgZ2FyYmFnZSB0byB0aGUgdXBzdHJlYW0uXG4gIGl0KFwiZm9yd2FyZHMgdGhlIHJlcXVlc3QncyBjb250ZW50LWVuY29kaW5nIHdpdGggaXRzIGJvZHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHByb3h5KHsgXCJjb250ZW50LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0pO1xuXG4gICAgY29uc3QgaGVhZGVycyA9IChmZXRjaE1vY2subW9jay5jYWxsc1swXVsxXSBhcyBSZXF1ZXN0SW5pdClcbiAgICAgIC5oZWFkZXJzIGFzIEhlYWRlcnM7XG4gICAgZXhwZWN0KGhlYWRlcnMuZ2V0KFwiY29udGVudC1lbmNvZGluZ1wiKSkudG9CZShcImd6aXBcIik7XG4gIH0pO1xuXG4gIC8vIEZvcndhcmRpbmcgdGhlIG9yaWdpbidzIGBjb250ZW50LWVuY29kaW5nYCBvdmVyIGEgYm9keSBgZmV0Y2hgIGFscmVhZHlcbiAgLy8gZGVjb2RlZCBmYWlscyB0aGUgd2hvbGUgcmVzcG9uc2UgaW4gdGhlIGJyb3dzZXIgd2l0aFxuICAvLyBFUlJfQ09OVEVOVF9ERUNPRElOR19GQUlMRUQsIHVuZGVyIGEgYENvbnRlbnQtTGVuZ3RoYCB0aGF0IGRlc2NyaWJlcyB0aGVcbiAgLy8gY29tcHJlc3NlZCBieXRlcy4gTm90aGluZyBkb3duc3RyZWFtIHJlcGFpcnMgaXQgZWl0aGVyOiBgc2hvdWxkR3ppcGBcbiAgLy8gZGVjbGluZXMgYXMgc29vbiBhcyBgY29udGVudC1lbmNvZGluZ2AgaXMgc2V0LlxuICBpdChcImRyb3BzIHRoZSBjb250ZW50LWVuY29kaW5nIGFuZCBsZW5ndGggZmV0Y2ggYWxyZWFkeSBjb25zdW1lZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHByb3h5KCk7XG5cbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShPUklHSU5fQk9EWSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBvdGhlciBoYWxmIG9mIGl0OiB3aXRoIHRoZSBzdGFsZSBsYWJlbCBnb25lLCB0aGUgc2luayBpcyBmcmVlIHRvXG4gIC8vIGNvbXByZXNzIHRoZSBwbGFpbnRleHQgaXRzZWxmIOKAlCBhbmQgbm93IHRoZSBlbmNvZGluZyBpdCBhZHZlcnRpc2VzIGlzIHRoZVxuICAvLyBvbmUgdGhlIGJ5dGVzIGFjdHVhbGx5IGNhcnJ5LlxuICBpdChcInJlLWNvbXByZXNzZXMgdGhlIGRlY29kZWQgYm9keSB3aGVuIHRoZSBjbGllbnQgYWNjZXB0cyBnemlwXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcHJveHkoeyBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KTtcblxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoT1JJR0lOX0JPRFkpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImEgc3RyZWFtZWQgZXh0ZXJuYWwgcmV3cml0ZVwiLCAoKSA9PiB7XG4gIGNvbnN0IEVYVEVSTkFMX1JFV1JJVEVfTUlERExFV0FSRSA9IGBcbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+XG4gIG5ldyBSZXNwb25zZShudWxsLCB7XG4gICAgaGVhZGVyczogeyBcIngtbWlkZGxld2FyZS1yZXdyaXRlXCI6IFwiaHR0cHM6Ly91cHN0cmVhbS50ZXN0L2V2ZW50c1wiIH0sXG4gIH0pO1xuYDtcblxuICBsZXQgcHJveHlpbmc6IE5leHRqc1J1bnRpbWU7XG5cbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICBwcm94eWluZyA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlRGVwbG95bWVudChFWFRFUk5BTF9SRVdSSVRFX01JRERMRVdBUkUpKTtcbiAgfSk7XG5cbiAgLy8gU2VydmVyLXNlbnQgZXZlbnRzIHRocm91Z2ggYSByZXdyaXRlLCBnemlwcGVkIGJlY2F1c2UgYHRleHQvZXZlbnQtc3RyZWFtYFxuICAvLyBpcyBgdGV4dC8qYDogd2l0aG91dCBhIGZsdXNoIHBlciBjaHVuaywgdGhlIGZpcnN0IGV2ZW50IHNhdCBpbiB6bGliJ3NcbiAgLy8gYnVmZmVyIHVudGlsIHRoZSBvcmlnaW4gY2xvc2VkIHRoZSBzdHJlYW0uXG4gIGl0KFwiZmx1c2hlcyBlYWNoIGNodW5rIHRocm91Z2ggdGhlIGNvbXByZXNzb3IgYXMgaXQgYXJyaXZlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2UhOiAoKSA9PiB2b2lkO1xuICAgIGNvbnN0IGhlbGQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gKHJlbGVhc2UgPSByZXNvbHZlKSk7XG4gICAgY29uc3QgZmV0Y2hNb2NrID0gamVzdC5zcHlPbihnbG9iYWxUaGlzLCBcImZldGNoXCIpLm1vY2tSZXNvbHZlZFZhbHVlKFxuICAgICAgbmV3IFJlc3BvbnNlKFxuICAgICAgICBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgICAgICAgIGFzeW5jIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJkYXRhOiBmaXJzdFxcblxcblwiKSk7XG4gICAgICAgICAgICBhd2FpdCBoZWxkO1xuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcImRhdGE6IHNlY29uZFxcblxcblwiKSk7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHsgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvZXZlbnQtc3RyZWFtXCIgfSB9LFxuICAgICAgKSxcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgICBjb25zdCBoYW5kbGVkID0gcHJveHlpbmcuaGFuZGxlKFxuICAgICAgICB7XG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIHVybDogXCIvZXZlbnRzXCIsXG4gICAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIFwiYWNjZXB0LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgLy8gUG9sbCByYXRoZXIgdGhhbiBzbGVlcCBhIGZpeGVkIHRpbWU6IHRoZSBmaXJzdCBldmVudCBoYXMgdG8gcmVhY2ggdGhlXG4gICAgICAvLyBzaW5rIHdoaWxlIHRoZSBvcmlnaW4gaXMgc3RpbGwgaG9sZGluZyB0aGUgc3RyZWFtIG9wZW4uXG4gICAgICBjb25zdCBzb0ZhciA9ICgpOiBzdHJpbmcgPT5cbiAgICAgICAgZ3VuemlwU3luYyhzaW5rLmJvZHksIHtcbiAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYkNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgIH0pLnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwICYmICFzb0ZhcigpOyBpKyspIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKTtcbiAgICAgIH1cbiAgICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlKFwiZ3ppcFwiKTtcbiAgICAgIGV4cGVjdChzb0ZhcigpKS50b0JlKFwiZGF0YTogZmlyc3RcXG5cXG5cIik7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBhd2FpdCBoYW5kbGVkO1xuICAgICAgZXhwZWN0KGd1bnppcFN5bmMoc2luay5ib2R5KS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFxuICAgICAgICBcImRhdGE6IGZpcnN0XFxuXFxuZGF0YTogc2Vjb25kXFxuXFxuXCIsXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBmZXRjaE1vY2subW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSBSZXNwb25zZSBtaWRkbGV3YXJlIGFuc3dlcnMgd2l0aCBpdHNlbGZcIiwgKCkgPT4ge1xuICBjb25zdCBNSURETEVXQVJFX0JPRFkgPSBcIjxodG1sPmZyb20gbWlkZGxld2FyZTwvaHRtbD5cIjtcblxuICAvKipcbiAgICogYHJldHVybiBmZXRjaCh1cHN0cmVhbSlgIGZyb20gYHByb3h5LnRzYCwgYXMgdGhlIHJ1bnRpbWUgc2VlcyBpdDogbWlkZGxld2FyZVxuICAgKiBydW5zIGluIHByb2Nlc3MsIHNvIGl0cyBgZmV0Y2hgIGlzIHVuZGljaSwgd2hpY2ggZGVjb2RlZCBhIGd6aXAgdXBzdHJlYW1cbiAgICogYW5kIGtlcHQgdGhlIHVwc3RyZWFtJ3MgYGNvbnRlbnQtZW5jb2RpbmdgIGFuZCBlbmNvZGVkIGBjb250ZW50LWxlbmd0aGAuXG4gICAqL1xuICBjb25zdCBGRVRDSEVEX1JFU1BPTlNFX01JRERMRVdBUkUgPSBgXG5jb25zdCB7IGd6aXBTeW5jIH0gPSByZXF1aXJlKFwibm9kZTp6bGliXCIpO1xuY29uc3QgYm9keSA9ICR7SlNPTi5zdHJpbmdpZnkoTUlERExFV0FSRV9CT0RZKX07XG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoKSA9PlxuICBuZXcgUmVzcG9uc2UoYm9keSwge1xuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICBcImNvbnRlbnQtZW5jb2RpbmdcIjogXCJnemlwXCIsXG4gICAgICBcImNvbnRlbnQtbGVuZ3RoXCI6IFN0cmluZyhnemlwU3luYyhib2R5KS5ieXRlTGVuZ3RoKSxcbiAgICAgIFwidHJhbnNmZXItZW5jb2RpbmdcIjogXCJjaHVua2VkXCIsXG4gICAgICBcIngtZnJvbS11cHN0cmVhbVwiOiBcInllc1wiLFxuICAgIH0sXG4gIH0pO1xuYDtcblxuICBsZXQgcmVzcG9uZGluZzogTmV4dGpzUnVudGltZTtcblxuICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgIHJlc3BvbmRpbmcgPSBhd2FpdCBsb2FkUnVudGltZShcbiAgICAgIHN0YWdlRGVwbG95bWVudChGRVRDSEVEX1JFU1BPTlNFX01JRERMRVdBUkUpLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIFdoYXQgYG5leHQgc3RhcnRgIGRvZXMgdG9vOiB0aGUgc2FuZGJveCBkZWxldGVzIHRoZXNlIHRocmVlXG4gIC8vIChgRk9SQklEREVOX0hFQURFUlNgKSBmcm9tIGV2ZXJ5IG1pZGRsZXdhcmUgcmVzcG9uc2UuXG4gIGl0KFwiZHJvcHMgdGhlIGZyYW1pbmcgaGVhZGVycyB0aGF0IGRlc2NyaWJlZCB0aGUgdXBzdHJlYW0ncyBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgIGF3YWl0IHJlc3BvbmRpbmcuaGFuZGxlKFxuICAgICAgeyBtZXRob2Q6IFwiR0VUXCIsIHVybDogXCIvXCIsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgIHNpbmssXG4gICAgKTtcblxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcInRyYW5zZmVyLWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcIngtZnJvbS11cHN0cmVhbVwiXSkudG9CZShcInllc1wiKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoTUlERExFV0FSRV9CT0RZKTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBMYXN0IGluIHRoZSBmaWxlLCBiZWNhdXNlIGBsb2FkUnVudGltZWAgY2hkaXJzOiB0aGUgdGVzdHMgYWJvdmUgYXNzZXJ0IG9uIHRoZVxuICogY3dkIHRoZSBzaGFyZWQgZGVwbG95bWVudCBzZXQuXG4gKi9cbmRlc2NyaWJlKFwidGhlIHJlc29sdmVkIHF1ZXJ5IGEgcmV3cml0ZSBwcm9kdWNlZFwiLCAoKSA9PiB7XG4gIC8qKlxuICAgKiBgdGVzdC9lMmUvbGluay13aXRoLWFwaS1yZXdyaXRlYCdzIHJ1bGUsIGFzIGl0IGxhbmRzIGluIHRoZSBtYW5pZmVzdDogYVxuICAgKiBgYmVmb3JlRmlsZXNgIHJld3JpdGUgd2hvc2UgY29uZGl0aW9uIGlzIGEgcXVlcnkgcGFyYW0gdGhlIGRlc3RpbmF0aW9uIGtlZXBzLlxuICAgKi9cbiAgY29uc3Qgd2l0aFNlbGZNYXRjaGluZ1Jld3JpdGUgPSAoXG4gICAgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCxcbiAgKTogQWRhcHRlck1hbmlmZXN0ID0+XG4gICAgKHtcbiAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgcm91dGluZzoge1xuICAgICAgICAuLi4obWFuaWZlc3Qucm91dGluZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiksXG4gICAgICAgIGJlZm9yZUZpbGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlOiBcIi86cGF0aCguKilcIixcbiAgICAgICAgICAgIHNvdXJjZVJlZ2V4OiBcIl4oPzpcXFxcLyguKikpKD86XFxcXC8pPyRcIixcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBcIi8/ZnJvbT0lMkYkMVwiLFxuICAgICAgICAgICAgaGFzOiBbeyB0eXBlOiBcInF1ZXJ5XCIsIGtleTogXCJqc29uXCIsIHZhbHVlOiBcInRydWVcIiB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KSBhcyBBZGFwdGVyTWFuaWZlc3Q7XG5cbiAgLyoqXG4gICAqIGBSb3V0ZU1vZHVsZS5wcmVwYXJlYCByZS1ydW5zIHRoZSBjb25maWcncyByZXdyaXRlcyBhZ2FpbnN0IGByZXEudXJsYFxuICAgKiB1bmNvbmRpdGlvbmFsbHksIGFuZCBgcmVxLnVybGAgaXMgdGhlIHRhcmdldCB0aGUgcmV3cml0ZSBhbHJlYWR5IHByb2R1Y2VkIC1cbiAgICogc28gYSBydWxlIHRoYXQgc3RpbGwgbWF0Y2hlcyBpdHMgb3duIG91dHB1dCBnZXRzIGFwcGxpZWQgdHdpY2UuIEhlcmUgdGhhdFxuICAgKiB0dXJuZWQgYGZyb209L3NvbWUvcm91dGUvZm9yYCBpbnRvIGBmcm9tPS9gLCB3aGljaCBpcyB3aGF0IG1hZGVcbiAgICogYHRlc3QvZTJlL2xpbmstd2l0aC1hcGktcmV3cml0ZWAgYW5zd2VyIGB7XCJmcm9tXCI6XCIvYXBpL2pzb25cIn1gIHdoZXJlXG4gICAqIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIGB7XCJmcm9tXCI6XCIvc29tZS9yb3V0ZS9mb3JcIn1gLiBTdGF0aW5nIHRoZSByZXNvbHZlZCBxdWVyeVxuICAgKiBhcyBgcmVxdWVzdE1ldGEucXVlcnlgIGlzIHdoYXQgYHByZXBhcmVgIHByZWZlcnMgb3ZlciBhbnl0aGluZyBpdCByZS1kZXJpdmVzLFxuICAgKiBzbyB0aGUgcm91dGUgc2VlcyB0aGUgZmlyc3QgcGFzcyByYXRoZXIgdGhhbiB0aGUgc2Vjb25kLlxuICAgKi9cbiAgaXQoXCJpcyBoYW5kZWQgb3ZlciBhcyByZXF1ZXN0TWV0YS5xdWVyeSwgbm90IGxlZnQgdG8gYmUgcmUtZGVyaXZlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmV3cml0aW5nID0gYXdhaXQgbG9hZFJ1bnRpbWUoXG4gICAgICBzdGFnZURlcGxveW1lbnQoTUlERExFV0FSRV9TVFVCLCB3aXRoU2VsZk1hdGNoaW5nUmV3cml0ZSksXG4gICAgKTtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcmV3cml0aW5nLmhhbmRsZShcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICB1cmw6IFwiL3NvbWUvcm91dGUvZm9yP2pzb249dHJ1ZVwiLFxuICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgfSxcbiAgICAgIHNpbmssXG4gICAgKTtcblxuICAgIGNvbnN0IGJvZHkgPSBzdHViQm9keShzaW5rKTtcbiAgICAvLyBJdHMgb3duIHN0YWdlZCB0cmVlLCBzbyBub3QgYHJvb3RgOiB0aGUgcmV3cml0ZSBpcyB0aGUgcG9pbnQuXG4gICAgZXhwZWN0KGJvZHkuZmlsZSkudG9Db250YWluKFwiLm5leHQvc2VydmVyL2FwcC9wYWdlLmpzXCIpO1xuICAgIGV4cGVjdChib2R5LnF1ZXJ5KS50b0VxdWFsKHsganNvbjogXCJ0cnVlXCIsIGZyb206IFwiL3NvbWUvcm91dGUvZm9yXCIgfSk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogYG5leHQgc3RhcnRgIGFuc3dlcnMgYC8vYCB3aXRoIGAzMDggLT4gL2AgYW5kIGAvYXBpLy9qc29uYCB3aXRoXG4gKiBgMzA4IC0+IC9hcGkvanNvbmA7IHRoaXMgcnVudGltZSB1c2VkIHRvIGFuc3dlciA1MDAgYW5kIDQwNC4gVGhlIDUwMCBpcyB0aGVcbiAqIHJlYXNvbiB0aGUgY2hlY2sgcnVucyBiZWZvcmUgYW55dGhpbmcgcGFyc2VzIHRoZSB0YXJnZXQ6IGBuZXcgVVJMKFwiLy9cIiwgYmFzZSlgXG4gKiByZWFkcyBhIGxlYWRpbmcgYC8vYCBhcyBwcm90b2NvbC1yZWxhdGl2ZSBhbmQgdGFrZXMgdGhlIGZpcnN0IHBhdGggc2VnbWVudCBmb3JcbiAqIHRoZSBob3N0LiBGb3VuZCBieSBgdGVzdC9lMmUvaHlkcmF0aW9uYCwgd2hpY2ggcmVxdWVzdHMgZXhhY3RseSBgLy9gLCBhbmQgYnlcbiAqIGB0ZXN0L2UyZS9pMThuLWlnbm9yZS1yZWRpcmVjdC1zb3VyY2UtbG9jYWxlL3JlZGlyZWN0cy13aXRoLWJhc2VwYXRoYCwgd2hvc2VcbiAqIGxvY2FsZSBsaXN0IGluY2x1ZGVzIGAnJ2AgYW5kIHNvIGFza3MgZm9yIGAvYmFzZXBhdGgvL3RvLXN2YC5cbiAqL1xuZGVzY3JpYmUoXCJhIHBhdGggd2l0aCByZXBlYXRlZCBzbGFzaGVzIG9yIGEgYmFja3NsYXNoXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1wiLy9cIiwgXCIvXCJdLFxuICAgIFtcIi8vL1wiLCBcIi9cIl0sXG4gICAgW1wiL2FwaS8vanNvblwiLCBcIi9hcGkvanNvblwiXSxcbiAgICBbXCIvYmFzZXBhdGgvL3RvLXN2XCIsIFwiL2Jhc2VwYXRoL3RvLXN2XCJdLFxuICAgIFtcIi9hXFxcXGJcIiwgXCIvYS9iXCJdLFxuICAgIC8vIFRoZSBxdWVyeSBpcyBjYXJyaWVkIGFjcm9zcyB1bnRvdWNoZWQsIHJlcGVhdGVkIHNsYXNoZXMgYW5kIGFsbC5cbiAgICBbXCIvL3NvbWUvcm91dGU/anNvbj10cnVlJm5leHQ9Ly94XCIsIFwiL3NvbWUvcm91dGU/anNvbj10cnVlJm5leHQ9Ly94XCJdLFxuICBdKShcInJlZGlyZWN0cyAlcyB0byAlcyB3aXRoIGEgMzA4XCIsIGFzeW5jIChmcm9tLCB0bykgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBmcm9tIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKHRvKTtcbiAgICAvLyBOZXh0LmpzIHNlbmRzIHRoZSBkZXN0aW5hdGlvbiBhcyB0aGUgYm9keSB0b28uXG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKHRvKTtcbiAgfSk7XG5cbiAgLyoqIGAlNUNgIGlzIGEgY2hhcmFjdGVyIGluIGEgc2VnbWVudCwgbm90IGEgc2VwYXJhdG9yIC0gYXMgaW4gTmV4dC5qcy4gKi9cbiAgaXQoXCJsZWF2ZXMgYW4gZW5jb2RlZCBiYWNrc2xhc2ggYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi9hJTVDYlwiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLm5vdC50b0JlKDMwOCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwic3BsaXRCb2R5XCIsICgpID0+IHtcbiAgY29uc3QgQ0hVTksgPSBCdWZmZXIuYWxsb2MoMTYgKiAxMDI0LCA3KTtcbiAgY29uc3QgdXBsb2FkID0gKCkgPT5cbiAgICBSZWFkYWJsZS5mcm9tKFxuICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogOCB9LCAoKSA9PiBDSFVOSyksXG4gICAgICB7IG9iamVjdE1vZGU6IGZhbHNlIH0sXG4gICAgKTtcblxuICBhc3luYyBmdW5jdGlvbiBkcmFpbihzdHJlYW06IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgICBsZW5ndGggKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgLy8gQSB0ZWUgYnVmZmVycyBmb3IgdGhlIGJyYW5jaCB0aGF0IGlzIGJlaGluZCwgc28gdGhlIG1pZGRsZXdhcmUgYnJhbmNoIHRoYXRcbiAgLy8gbm90aGluZyByZWFkcyB3b3VsZCBvdGhlcndpc2UgaG9sZCBldmVyeSBieXRlIHRoZSByb3V0ZSBzdHJlYW1zLlxuICBpdChcImNhbmNlbHMgdGhlIG1pZGRsZXdhcmUgY29weSBvbmNlIGRpc3BhdGNoIGlzIGRvbmUgd2l0aCBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IHNwbGl0Qm9keSh1cGxvYWQoKSwgdHJ1ZSk7XG4gICAgYm9keS5yZWxlYXNlVW5yZWFkKGZhbHNlKTtcblxuICAgIGNvbnN0IHJlYWRlciA9IGJvZHkuZm9yRGlzcGF0Y2guZ2V0UmVhZGVyKCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWRlci5yZWFkKCkpLnRvRXF1YWwoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xuICAgIGV4cGVjdChhd2FpdCBkcmFpbihib2R5LmZvclJlcXVlc3QgYXMgUmVhZGFibGUpKS50b0JlKDggKiBDSFVOSy5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyB0aGUgbWlkZGxld2FyZSBjb3B5IGFsb25lIHdoZW4gbWlkZGxld2FyZSBpcyByZWFkaW5nIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gc3BsaXRCb2R5KHVwbG9hZCgpLCB0cnVlKTtcbiAgICBjb25zdCByZWFkaW5nID0gZHJhaW4oXG4gICAgICBib2R5LmZvckRpc3BhdGNoIGFzIHVua25vd24gYXMgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PixcbiAgICApO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG5cbiAgICBleHBlY3QoYXdhaXQgcmVhZGluZykudG9CZSg4ICogQ0hVTksubGVuZ3RoKTtcbiAgfSk7XG5cbiAgLy8gTWlkZGxld2FyZSBhbnN3ZXJlZCwgcG9zc2libHkgd2l0aCB0aGUgdXBsb2FkIGFzIGl0cyBvd24gYm9keTsgYHJlcWAgaXNcbiAgLy8gbmV2ZXIgcmVhZCwgc28gaXRzIGNvcHkgaXMgdGhlIG9uZSB0aGF0IHdvdWxkIHBpbGUgdXAuXG4gIGl0KFwicmVsZWFzZXMgdGhlIHJvdXRlJ3MgY29weSB3aGVuIG1pZGRsZXdhcmUgYW5zd2VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkodXBsb2FkKCksIHRydWUpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZCh0cnVlKTtcblxuICAgIGV4cGVjdCgoYm9keS5mb3JSZXF1ZXN0IGFzIFJlYWRhYmxlKS5kZXN0cm95ZWQpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KFxuICAgICAgYXdhaXQgZHJhaW4oYm9keS5mb3JEaXNwYXRjaCBhcyB1bmtub3duIGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pLFxuICAgICkudG9CZSg4ICogQ0hVTksubGVuZ3RoKTtcbiAgfSk7XG5cbiAgLy8gRXZlcnkgTGFtYmRhIHJlcXVlc3Qgd2l0aCBhIGJvZHk6IHRoZSBzaGVsbCBoYW5kcyB0aGUgcnVudGltZSBhIEJ1ZmZlci5cbiAgaXQoXCJyZWFkcyBhIEJ1ZmZlciBib2R5IHR3aWNlLCB3aG9sZSBlYWNoIHRpbWVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IEJ1ZmZlci5mcm9tKFwieFwiLnJlcGVhdCgxMDBfMDAwKSk7XG4gICAgY29uc3QgYm9keSA9IHNwbGl0Qm9keShzb3VyY2UsIHRydWUpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG5cbiAgICBleHBlY3QoXG4gICAgICBhd2FpdCBkcmFpbihib2R5LmZvckRpc3BhdGNoIGFzIHVua25vd24gYXMgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiksXG4gICAgKS50b0JlKHNvdXJjZS5sZW5ndGgpO1xuICAgIGV4cGVjdCgoYm9keS5mb3JSZXF1ZXN0IGFzIEJ1ZmZlcikubGVuZ3RoKS50b0JlKHNvdXJjZS5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHNwbGl0IGF0IGFsbCB3aXRob3V0IG1pZGRsZXdhcmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHVwbG9hZCgpO1xuICAgIGNvbnN0IGJvZHkgPSBzcGxpdEJvZHkoc291cmNlLCBmYWxzZSk7XG4gICAgZXhwZWN0KGJvZHkuZm9yUmVxdWVzdCkudG9CZShzb3VyY2UpO1xuICAgIGJvZHkucmVsZWFzZVVucmVhZChmYWxzZSk7XG4gICAgZXhwZWN0KHNvdXJjZS5kZXN0cm95ZWQpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIndhaXRVbnRpbFwiLCAoKSA9PiB7XG4gIGl0KFwiYXdhaXRzIHdvcmsgcmVnaXN0ZXJlZCBhZnRlciB0aGUgZmlyc3QgYmF0Y2ggc2V0dGxlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gam9pbihyb290LCBcImxhdGUtd2FpdC11bnRpbC1tYXJrZXJcIik7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUiA9IG1hcmtlcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZCh7IHVybDogXCIvP2xhdGVXYWl0VW50aWw9MVwiIH0pO1xuICAgICAgZXhwZWN0KHJlYWRGaWxlU3luYyhtYXJrZXIsIFwidXRmLThcIikpLnRvQmUoXCJsYXRlXCIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19URVNUX01BUktFUjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYSBwcmVyZW5kZXJlZCBzdGF0dXMgcGFnZSwgcmVxdWVzdGVkIGRpcmVjdGx5XCIsICgpID0+IHtcbiAgaXQoXCJhbnN3ZXJzIC80MDQgd2l0aCBhIDQwNCwgYXMgbmV4dCBzdGFydCBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZCh7IHVybDogXCIvNDA0XCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShOT1RfRk9VTkRfSFRNTCk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyAvNTAwIHdpdGggYSA1MDBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi81MDBcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKEVSUk9SX0hUTUwpO1xuICB9KTtcblxuICBpdChcInN0aWxsIHNlcnZlcyB0aGVtIHRvIGEgUE9TVCwgd2hpY2ggbmV4dCBzdGFydCBkb2VzIG5vdCA0MDVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kKHsgdXJsOiBcIi80MDRcIiwgbWV0aG9kOiBcIlBPU1RcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiYW4gYXV0by1leHBvcnRlZCBQYWdlcyBSb3V0ZXIgcGFnZVwiLCAoKSA9PiB7XG4gIGNvbnN0IEFCT1VUX0hUTUwgPSBcIjxodG1sPjxib2R5PmFib3V0PC9ib2R5PjwvaHRtbD5cIjtcbiAgbGV0IHBhZ2VzOiBOZXh0anNSdW50aW1lO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgbGV0IGFib3V0RmlsZSA9IFwiXCI7XG4gICAgY29uc3Qgc3RhZ2VkID0gc3RhZ2VEZXBsb3ltZW50KE1JRERMRVdBUkVfU1RVQiwgKG1hbmlmZXN0KSA9PiB7XG4gICAgICBhYm91dEZpbGUgPSBgJHttYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXJ9Ly5uZXh0L3NlcnZlci9wYWdlcy9hYm91dC5odG1sYDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICBzdGF0aWNGaWxlczogeyAuLi5tYW5pZmVzdC5zdGF0aWNGaWxlcywgXCIvYWJvdXRcIjogYWJvdXRGaWxlIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHdyaXRlKGpvaW4oc3RhZ2VkLCBhYm91dEZpbGUpLCBBQk9VVF9IVE1MKTtcbiAgICBwYWdlcyA9IGF3YWl0IGxvYWRSdW50aW1lKHN0YWdlZCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUbyhtZXRob2Q6IHN0cmluZyk6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKCk7XG4gICAgYXdhaXQgcGFnZXMuaGFuZGxlKFxuICAgICAgeyBtZXRob2QsIHVybDogXCIvYWJvdXRcIiwgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIgfSB9LFxuICAgICAgc2luayxcbiAgICApO1xuICAgIHJldHVybiBzaW5rO1xuICB9XG5cbiAgaXQoXCJpcyBzZXJ2ZWQgdG8gYSBHRVRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBzZW5kVG8oXCJHRVRcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShBQk9VVF9IVE1MKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGFueSBvdGhlciBtZXRob2Qgd2l0aCBhIDQwNSwgYXMgbmV4dCBzdGFydCBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgc2VuZFRvKFwiUE9TVFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy5hbGxvdykudG9CZShcIkdFVCwgSEVBRFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhIHJvdXRlIHBhY2thZ2VkIGludG8gYW5vdGhlciBmdW5jdGlvbkdyb3VwcyBncm91cFwiLCAoKSA9PiB7XG4gIGxldCBncm91cGVkOiBOZXh0anNSdW50aW1lO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgbGV0IG1pc3NpbmcgPSBcIlwiO1xuICAgIGNvbnN0IHN0YWdlZCA9IHN0YWdlRGVwbG95bWVudChNSURETEVXQVJFX1NUVUIsIChtYW5pZmVzdCkgPT4ge1xuICAgICAgbWlzc2luZyA9IG1hbmlmZXN0LmVudHJ5cG9pbnRzW1wiL2lzci9baWRdXCJdLmZpbGVQYXRoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKG1hbmlmZXN0LmVudHJ5cG9pbnRzKS5maWx0ZXIoXG4gICAgICAgICAgICAodGVtcGxhdGUpID0+IHRlbXBsYXRlICE9PSBcIi9pc3IvW2lkXVwiLFxuICAgICAgICAgICksXG4gICAgICAgICAgYmxvZzogW1wiL2lzci9baWRdXCJdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBybVN5bmMoam9pbihzdGFnZWQsIG1pc3NpbmcpKTtcbiAgICBncm91cGVkID0gYXdhaXQgbG9hZFJ1bnRpbWUoc3RhZ2VkKTtcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0KHVybDogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgYXdhaXQgZ3JvdXBlZC5oYW5kbGUoXG4gICAgICAgIHsgbWV0aG9kOiBcIkdFVFwiLCB1cmwsIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0gfSxcbiAgICAgICAgc2luayxcbiAgICAgICk7XG4gICAgICByZXR1cm4gc2luaztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGVkZ2UgbWF0Y2hlcyBjYXNlLXNlbnNpdGl2ZWx5IGFuZCBOZXh0LmpzIGRvZXNuJ3Q6IGAvSVNSLzFgIG1pc3NlZCB0aGVcbiAgLy8gYGJsb2dgIGdyb3VwJ3MgYmVoYXZpb3Igb25seSBiZWNhdXNlIG9mIGl0cyBjYXNlLlxuICBpdChcInJlZGlyZWN0cyBhIFVSTCB0aGF0IGRpZmZlcnMgb25seSBpbiBjYXNlIHRvIGl0cyBjYW5vbmljYWwgc3BlbGxpbmdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvSVNSLzE/eD0xXCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMzA4KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKFwiL2lzci8xP3g9MVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0aGUgY2FzZSBvZiBhIGR5bmFtaWMgc2VnbWVudCdzIHZhbHVlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgZ2V0KFwiL0lTUi9BYkNcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgzMDgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMubG9jYXRpb24pLnRvQmUoXCIvaXNyL0FiQ1wiKTtcbiAgfSk7XG5cbiAgLy8gYC9fbmV4dC9pbWFnZWAgcnVucyBpbiB0aGUgZGVmYXVsdCBncm91cCBhbmQgcmVuZGVycyBhIHNvdXJjZSB0aGF0IGlzIG5vdFxuICAvLyBhIGZpbGUgaW4gcHJvY2VzczogZm9yIG9uZSBzZXJ2ZWQgYnkgYW5vdGhlciBncm91cCwgdGhhdCByZW5kZXJlZCB0aGUgNDA0XG4gIC8vIHBhZ2UgYW5kIGhhbmRlZCBpdHMgSFRNTCB0byB0aGUgb3B0aW1pemVyIGFzIHRoZSBpbWFnZS5cbiAgaXQoXCJyZXBvcnRzIGFuIGltYWdlIHNvdXJjZSBpbiBhbm90aGVyIGdyb3VwIHJhdGhlciB0aGFuIGZldGNoaW5nIGl0cyA0MDQgcGFnZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUCA9IFwiZGVmYXVsdFwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZXRjaEludGVybmFsID0gKFxuICAgICAgICBncm91cGVkIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIGZldGNoSW50ZXJuYWw6IChcbiAgICAgICAgICAgIGhyZWY6IHN0cmluZyxcbiAgICAgICAgICAgIHJlcTogdW5rbm93bixcbiAgICAgICAgICApID0+IFByb21pc2U8e1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgICAgICAgICAgYm9keTogQnVmZmVyO1xuICAgICAgICAgICAgb3RoZXJHcm91cD86IHN0cmluZztcbiAgICAgICAgICB9PjtcbiAgICAgICAgfVxuICAgICAgKS5mZXRjaEludGVybmFsLmJpbmQoZ3JvdXBlZCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW50ZXJuYWwoXG4gICAgICAgIFwiL2lzci8xXCIsXG4gICAgICAgIG5ldyBTaGltSW5jb21pbmdNZXNzYWdlKHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiBcIi9fbmV4dC9pbWFnZT91cmw9JTJGaXNyJTJGMSZ3PTY0JnE9NzVcIixcbiAgICAgICAgICBoZWFkZXJzOiB7IGhvc3Q6IFwic2hvcC5leGFtcGxlLnRlc3RcIiB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBleHBlY3QocmVzcG9uc2UpLnRvTWF0Y2hPYmplY3QoeyBvdGhlckdyb3VwOiBcImJsb2dcIiB9KTtcbiAgICAgIGV4cGVjdChyZXNwb25zZS5ib2R5Lmxlbmd0aCkudG9CZSgwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVA7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcImlzIGEgNDA0LCBub3QgYSA1MDAsIHdoZW4gY2FzZSBpcyBub3QgdGhlIGRpZmZlcmVuY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRlVOQ1RJT05fR1JPVVAgPSBcImRlZmF1bHRcIjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luaygpO1xuICAgICAgYXdhaXQgZ3JvdXBlZC5oYW5kbGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgdXJsOiBcIi9pc3IvMVwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgaG9zdDogXCJzaG9wLmV4YW1wbGUudGVzdFwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmssXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSg0MDQpO1xuICAgICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvTWF0Y2goL25vLXN0b3JlLyk7XG4gICAgICBleHBlY3QoU3RyaW5nKHdhcm4ubW9jay5jYWxsc1swXT8uWzBdKSkudG9Db250YWluKCdncm91cCBcImJsb2dcIicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19GVU5DVElPTl9HUk9VUDtcbiAgICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicHVibGljLyBvbiB0aGUgTGFtYmRhIHR5cGVzXCIsICgpID0+IHtcbiAgbGV0IGxhbWJkYTogTmV4dGpzUnVudGltZTtcbiAgY29uc3Qgc2VuZCQgPSBqZXN0LnNweU9uKFMzQ2xpZW50LnByb3RvdHlwZSwgXCJzZW5kXCIpO1xuXG4gIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhZ2VkID0gc3RhZ2VEZXBsb3ltZW50KCk7XG4gICAgY29uc3QgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICByZWFkRmlsZVN5bmMoZGVwbG95ZWRNYW5pZmVzdFBhdGgoc3RhZ2VkKSwgXCJ1dGYtOFwiKSxcbiAgICApO1xuICAgIC8vIFdoYXQgYSBMYW1iZGEgemlwIGNhcnJpZXM6IHRoZSBsaXN0LCBub3QgdGhlIGZpbGVzLlxuICAgIHJtU3luYyhqb2luKHN0YWdlZCwgbWFuaWZlc3QucmVsYXRpdmVQcm9qZWN0RGlyLCBcInB1YmxpY1wiKSwge1xuICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHdyaXRlKFxuICAgICAgam9pbihzdGFnZWQsIFJVTlRJTUVfRElSX05BTUUsIFBVQkxJQ19GSUxFU19GSUxFX05BTUUpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoW1wiZmVlZC54bWxcIiwgXCJpbWFnZXMvbG9nb0AyeC5wbmdcIl0pLFxuICAgICk7XG4gICAgbGFtYmRhID0gbmV3IE5leHRqc1J1bnRpbWUoe1xuICAgICAgZGVwbG95bWVudFJvb3Q6IHN0YWdlZCxcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgYnVja2V0OiBcImFzc2V0c1wiLFxuICAgICAgYnVja2V0S2V5UHJlZml4OiBcImJhc2VcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHNlbmQkLm1vY2tSZXNldCgpKTtcbiAgYWZ0ZXJBbGwoKCkgPT4gc2VuZCQubW9ja1Jlc3RvcmUoKSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbiAgKTogUHJvbWlzZTxDb2xsZWN0aW5nU2luaz4ge1xuICAgIGNvbnN0IHNpbmsgPSBuZXcgQ29sbGVjdGluZ1NpbmsoKTtcbiAgICBhd2FpdCBsYW1iZGEuaGFuZGxlKFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHVybCxcbiAgICAgICAgaGVhZGVyczogeyBob3N0OiBcInNob3AuZXhhbXBsZS50ZXN0XCIsIC4uLmhlYWRlcnMgfSxcbiAgICAgIH0sXG4gICAgICBzaW5rLFxuICAgICk7XG4gICAgcmV0dXJuIHNpbms7XG4gIH1cblxuICBpdChcInN0cmVhbXMgYSBsaXN0ZWQgZmlsZSBmcm9tIHRoZSBhc3NldHMgYnVja2V0LCB1bmRlciBpdHMga2V5IHByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCI8cnNzLz5cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIixcbiAgICAgIENvbnRlbnRMZW5ndGg6IDYsXG4gICAgICBFVGFnOiAnXCJlMVwiJyxcbiAgICAgIExhc3RNb2RpZmllZDogbmV3IERhdGUoXCIyMDI2LTAxLTAyVDAzOjA0OjA1WlwiKSxcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIjxyc3MvPlwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdKS50b0JlKFwiYXBwbGljYXRpb24vcnNzK3htbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLmV0YWcpLnRvQmUoJ1wiZTFcIicpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjYWNoZS1jb250cm9sXCJdKS50b0JlKFwicHVibGljLCBtYXgtYWdlPTBcIik7XG4gICAgY29uc3QgY29tbWFuZCA9IHNlbmQkLm1vY2suY2FsbHNbMF1bMF0gYXMgdW5rbm93biBhcyB7XG4gICAgICBpbnB1dDogeyBCdWNrZXQ6IHN0cmluZzsgS2V5OiBzdHJpbmcgfTtcbiAgICB9O1xuICAgIGV4cGVjdChjb21tYW5kLmlucHV0KS50b01hdGNoT2JqZWN0KHtcbiAgICAgIEJ1Y2tldDogXCJhc3NldHNcIixcbiAgICAgIEtleTogXCJiYXNlL2ZlZWQueG1sXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwidXNlcyB0aGUgZmlsZSdzIHJlYWwgbmFtZSBhcyB0aGUga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+ICh7XG4gICAgICBCb2R5OiBSZWFkYWJsZS5mcm9tKFtCdWZmZXIuZnJvbShcInBuZ1wiKV0pLFxuICAgIH0pKSBhcyBuZXZlcik7XG4gICAgYXdhaXQgZ2V0KFwiL2ltYWdlcy9sb2dvQDJ4LnBuZ1wiKTtcbiAgICBjb25zdCBjb21tYW5kID0gc2VuZCQubW9jay5jYWxsc1swXVswXSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlucHV0OiB7IEtleTogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dC5LZXkpLnRvQmUoXCJiYXNlL2ltYWdlcy9sb2dvQDJ4LnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJhbnN3ZXJzIGEgbWF0Y2hpbmcgSWYtTm9uZS1NYXRjaCB3aXRoIHRoZSAzMDQgUzMgZ2F2ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIk5vdCBNb2RpZmllZFwiKSwge1xuICAgICAgICBuYW1lOiBcIk5vdE1vZGlmaWVkXCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogMzA0IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IFwiaWYtbm9uZS1tYXRjaFwiOiAnXCJlMVwiJyB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDMwNCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgdGhyb3VnaCB0byB0aGUgNDA0IHdoZW4gdGhlIG9iamVjdCBpcyBnb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiTm9TdWNoS2V5XCIpLCB7XG4gICAgICAgIG5hbWU6IFwiTm9TdWNoS2V5XCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogNDA0IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQwNCk7XG4gIH0pO1xuXG4gIGl0KFwiZm9yd2FyZHMgYSBSYW5nZSBhbmQgYW5zd2VycyBTMydzIDIwNlwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCJyc3NcIildKSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDMsXG4gICAgICBDb250ZW50UmFuZ2U6IFwiYnl0ZXMgMS0zLzZcIixcbiAgICAgIEFjY2VwdFJhbmdlczogXCJieXRlc1wiLFxuICAgIH0pKSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IHJhbmdlOiBcImJ5dGVzPTEtM1wiIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjA2KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1yYW5nZVwiXSkudG9CZShcImJ5dGVzIDEtMy82XCIpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJhY2NlcHQtcmFuZ2VzXCJdKS50b0JlKFwiYnl0ZXNcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwicnNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmQgPSBzZW5kJC5tb2NrLmNhbGxzWzBdWzBdIGFzIHVua25vd24gYXMge1xuICAgICAgaW5wdXQ6IHsgUmFuZ2U/OiBzdHJpbmcgfTtcbiAgICB9O1xuICAgIGV4cGVjdChjb21tYW5kLmlucHV0LlJhbmdlKS50b0JlKFwiYnl0ZXM9MS0zXCIpO1xuICB9KTtcblxuICBpdChcImFuc3dlcnMgYW4gdW5zYXRpc2ZpYWJsZSBSYW5nZSB3aXRoIGEgNDE2XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kJC5tb2NrSW1wbGVtZW50YXRpb24oKGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiSW52YWxpZFJhbmdlXCIpLCB7XG4gICAgICAgIG5hbWU6IFwiSW52YWxpZFJhbmdlXCIsXG4gICAgICAgICRtZXRhZGF0YTogeyBodHRwU3RhdHVzQ29kZTogNDE2IH0sXG4gICAgICB9KTtcbiAgICB9KSBhcyBuZXZlcik7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IGdldChcIi9mZWVkLnhtbFwiLCB7IHJhbmdlOiBcImJ5dGVzPTk5OS1cIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5zdGF0dXNDb2RlKS50b0JlKDQxNik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS5sZW5ndGgpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIC8vIFMzIGNhbid0IGV2YWx1YXRlIElmLVJhbmdlLCBhbmQgaWdub3JpbmcgUmFuZ2UgaXMgYWx3YXlzIGFsbG93ZWQuXG4gIGl0KFwiZHJvcHMgdGhlIFJhbmdlIHdoZW4gSWYtUmFuZ2UgaXMgcHJlc2VudFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZCQubW9ja0ltcGxlbWVudGF0aW9uKChhc3luYyAoKSA9PiAoe1xuICAgICAgQm9keTogUmVhZGFibGUuZnJvbShbQnVmZmVyLmZyb20oXCI8cnNzLz5cIildKSxcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIiwge1xuICAgICAgcmFuZ2U6IFwiYnl0ZXM9MS0zXCIsXG4gICAgICBcImlmLXJhbmdlXCI6ICdcImUxXCInLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICBjb25zdCBjb21tYW5kID0gc2VuZCQubW9jay5jYWxsc1swXVswXSBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlucHV0OiB7IFJhbmdlPzogc3RyaW5nIH07XG4gICAgfTtcbiAgICBleHBlY3QoY29tbWFuZC5pbnB1dC5SYW5nZSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInVzZXMgdGhlIG9iamVjdCdzIG93biBDYWNoZS1Db250cm9sLCBhcyB0aGUgZWRnZSBzZXJ2ZXMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQkLm1vY2tJbXBsZW1lbnRhdGlvbigoYXN5bmMgKCkgPT4gKHtcbiAgICAgIEJvZHk6IFJlYWRhYmxlLmZyb20oW0J1ZmZlci5mcm9tKFwiPHJzcy8+XCIpXSksXG4gICAgICBDYWNoZUNvbnRyb2w6IFwicHVibGljLCBtYXgtYWdlPTM2MDBcIixcbiAgICB9KSkgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBnZXQoXCIvZmVlZC54bWxcIik7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pLnRvQmUoXCJwdWJsaWMsIG1heC1hZ2U9MzYwMFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYW4gdW5saXN0ZWQgcGF0aCB0byB0aGUgYXBwXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBnZXQoXCIvdGVzdC50eHRcIik7XG4gICAgZXhwZWN0KHNlbmQkKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJldmFsaWRhdGVkUGFnZVJvdXRlc1wiLCAoKSA9PiB7XG4gIGNvbnN0IG1hbmlmZXN0ID0gKGkxOG46IHVua25vd24pID0+XG4gICAgKHsgYnVpbGRJZDogXCJiMVwiLCBjb25maWc6IHsgaTE4biB9IH0pIGFzIHVua25vd24gYXMgQWRhcHRlck1hbmlmZXN0O1xuICBjb25zdCBpMThuID0geyBsb2NhbGVzOiBbXCJlblwiLCBcImZyXCJdLCBkZWZhdWx0TG9jYWxlOiBcImVuXCIgfTtcblxuICBpdChcImlzIHRoZSByb3V0ZSBhbmQgaXRzIGRhdGEgcm91dGUgd2l0aG91dCBpMThuXCIsICgpID0+IHtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL2Jsb2dcIiwgbWFuaWZlc3QobnVsbCkpKS50b0VxdWFsKFtcbiAgICAgIFtcIi9ibG9nXCIsIFwiL19uZXh0L2RhdGEvYjEvYmxvZy5qc29uXCJdLFxuICAgIF0pO1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvXCIsIG1hbmlmZXN0KG51bGwpKSkudG9FcXVhbChbXG4gICAgICBbXCIvXCIsIFwiL19uZXh0L2RhdGEvYjEvaW5kZXguanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgLy8gVGhlIE5leHQgY2xpZW50IHB1dHMgdGhlIGxvY2FsZSBpbiBldmVyeSBkYXRhIGhyZWYsIHRoZSBkZWZhdWx0IGluY2x1ZGVkLlxuICBpdChcInB1dHMgdGhlIGRlZmF1bHQgbG9jYWxlIGluIHRoZSBkYXRhIHJvdXRlLCBhbmQgaW52YWxpZGF0ZXMgYm90aCBIVE1MIHNwZWxsaW5nc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9ibG9nXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2VuL2Jsb2cuanNvblwiXSxcbiAgICAgIFtcIi9lbi9ibG9nXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4vYmxvZy5qc29uXCJdLFxuICAgIF0pO1xuICAgIGV4cGVjdChyZXZhbGlkYXRlZFBhZ2VSb3V0ZXMoXCIvZW4vYmxvZ1wiLCBtYW5pZmVzdChpMThuKSkpLnRvRXF1YWwoW1xuICAgICAgW1wiL2Jsb2dcIiwgXCIvX25leHQvZGF0YS9iMS9lbi9ibG9nLmpzb25cIl0sXG4gICAgICBbXCIvZW4vYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2VuL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJuYW1lcyB0aGUgcm9vdCdzIGRhdGEgcm91dGUgYWZ0ZXIgdGhlIGxvY2FsZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9cIiwgbWFuaWZlc3QoaTE4bikpKS50b0VxdWFsKFtcbiAgICAgIFtcIi9cIiwgXCIvX25leHQvZGF0YS9iMS9lbi5qc29uXCJdLFxuICAgICAgW1wiL2VuXCIsIFwiL19uZXh0L2RhdGEvYjEvZW4uanNvblwiXSxcbiAgICBdKTtcbiAgICBleHBlY3QocmV2YWxpZGF0ZWRQYWdlUm91dGVzKFwiL2ZyXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvZnJcIiwgXCIvX25leHQvZGF0YS9iMS9mci5qc29uXCJdLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIGFub3RoZXIgbG9jYWxlJ3MgcGFnZSB0byBpdHMgb3duIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJldmFsaWRhdGVkUGFnZVJvdXRlcyhcIi9mci9ibG9nXCIsIG1hbmlmZXN0KGkxOG4pKSkudG9FcXVhbChbXG4gICAgICBbXCIvZnIvYmxvZ1wiLCBcIi9fbmV4dC9kYXRhL2IxL2ZyL2Jsb2cuanNvblwiXSxcbiAgICBdKTtcbiAgfSk7XG59KTtcbiJdfQ==