cdk-nextjs 0.7.0 → 0.7.2

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.
@@ -272,6 +272,55 @@ describe("listTree", () => {
272
272
  ]);
273
273
  });
274
274
  });
275
+ /** A `.node` file carrying just enough header to be read as `platform`. */
276
+ function writeAddon(path, platform) {
277
+ const header = Buffer.alloc(20);
278
+ if (platform === "darwin") {
279
+ header.writeUInt32BE(0xcffaedfe, 0);
280
+ }
281
+ else {
282
+ header.writeUInt32BE(0x7f454c46, 0);
283
+ header[5] = 1;
284
+ header.writeUInt16LE(platform === "linux-arm64" ? 183 : 62, 18);
285
+ }
286
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)(path, ".."), { recursive: true });
287
+ (0, node_fs_1.writeFileSync)(path, header);
288
+ }
289
+ describe("nativeBinaryPlatform", () => {
290
+ it.each(["linux-arm64", "linux-x64", "darwin"])("reads %s from the header", (platform) => {
291
+ writeAddon((0, node_path_1.join)(dir, "a.node"), platform);
292
+ expect((0, nextjs_build_1.nativeBinaryPlatform)((0, node_path_1.join)(dir, "a.node"))).toBe(platform);
293
+ });
294
+ it("returns undefined for a file that isn't a binary", () => {
295
+ write((0, node_path_1.join)(dir, "a.node"), "not a binary");
296
+ expect((0, nextjs_build_1.nativeBinaryPlatform)((0, node_path_1.join)(dir, "a.node"))).toBeUndefined();
297
+ });
298
+ });
299
+ describe("findForeignNativePackages", () => {
300
+ const pkg = (path) => write((0, node_path_1.join)(dir, path, "package.json"), "{}");
301
+ it("names a package with only another platform's addon", () => {
302
+ const glide = "node_modules/@valkey/valkey-glide-darwin-arm64";
303
+ pkg(glide);
304
+ writeAddon((0, node_path_1.join)(dir, glide, "build/glide.node"), "darwin");
305
+ expect((0, nextjs_build_1.findForeignNativePackages)(dir, "linux-arm64")).toEqual([glide]);
306
+ });
307
+ it("passes a package with the target's addon, even beside others", () => {
308
+ pkg("node_modules/ok");
309
+ writeAddon((0, node_path_1.join)(dir, "node_modules/ok/a.node"), "linux-arm64");
310
+ pkg("node_modules/prebuilt");
311
+ writeAddon((0, node_path_1.join)(dir, "node_modules/prebuilt/prebuilds/darwin-arm64/a.node"), "darwin");
312
+ writeAddon((0, node_path_1.join)(dir, "node_modules/prebuilt/prebuilds/linux-arm64/a.node"), "linux-arm64");
313
+ write((0, node_path_1.join)(dir, "node_modules/ok/notes.node"), "text");
314
+ expect((0, nextjs_build_1.findForeignNativePackages)(dir, "linux-arm64")).toEqual([]);
315
+ });
316
+ it("tells architectures apart", () => {
317
+ pkg("node_modules/x64");
318
+ writeAddon((0, node_path_1.join)(dir, "node_modules/x64/a.node"), "linux-x64");
319
+ expect((0, nextjs_build_1.findForeignNativePackages)(dir, "linux-arm64")).toEqual([
320
+ "node_modules/x64",
321
+ ]);
322
+ });
323
+ });
275
324
  describe("storedSize", () => {
276
325
  it("counts a link as its target path, as the zip stores it", () => {
277
326
  write((0, node_path_1.join)(dir, "store/pkg/file"), "x".repeat(100));
@@ -409,4 +458,4 @@ describe("deploymentArchitecture", () => {
409
458
  expect((0, nextjs_build_1.deploymentArchitecture)(props).name).toBe(host);
410
459
  });
411
460
  });
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJ1aWxkLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELDJEQUFrRDtBQUNsRCxxQ0FVaUI7QUFDakIscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBeUM7QUFDekMsdURBQXNEO0FBQ3RELGlEQVl3QjtBQUN4Qiw0Q0FBMEM7QUFFMUMsSUFBSSxHQUFXLENBQUM7QUFFaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLEdBQUcsR0FBRyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsS0FBSyxDQUFDLElBQVksRUFBRSxPQUFlO0lBQzFDLElBQUEsbUJBQVMsRUFBQyxJQUFBLGdCQUFJLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsSUFBQSx1QkFBYSxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjLENBQUMsSUFBWTtJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFJLEVBQ2hCLElBQUksRUFDSixvREFBb0QsQ0FDckQsQ0FBQztJQUNGLEtBQUssQ0FDSCxJQUFBLGdCQUFJLEVBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxFQUMzQixJ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QyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IGV4ZWNGaWxlU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICBzeW1saW5rU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbn0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIGRlcGxveW1lbnRBcmNoaXRlY3R1cmUsXG4gIGRlcGxveW1lbnRCdWlsZElkLFxuICBpc1NoYXJwQmluYXJ5UGFja2FnZSxcbiAgbGlzdFRyZWUsXG4gIE5leHRqc0J1aWxkLFxuICBwYXRjaENsaWVudENodW5rLFxuICBwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlLFxuICByZXNvbHZlTmV4dFNoYXJwLFxuICBzaGFycEJpbmFyeURpcixcbiAgc3RvcmVkU2l6ZSxcbiAgd3JpdGVQdWJsaWNGaWxlTGlzdCxcbn0gZnJvbSBcIi4vbmV4dGpzLWJ1aWxkXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5sZXQgZGlyOiBzdHJpbmc7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBkaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcIm5leHRqcy1idWlsZC10ZXN0LVwiKSk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgcm1TeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xufSk7XG5cbmZ1bmN0aW9uIHdyaXRlKHBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4gIG1rZGlyU3luYyhqb2luKHBhdGgsIFwiLi5cIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnQpO1xufVxuXG4vKipcbiAqIFRoZSBsYXlvdXQgcG5wbSBzdGFnZXM6IGBzaGFycGAncyBmaWxlcyBpbiB0aGUgdmlydHVhbCBzdG9yZSwgcmVhY2hlZCB0aHJvdWdoXG4gKiBsaW5rcyBmcm9tIHRoZSBhcHAgYW5kIGZyb20gYG5leHRgLlxuICovXG5mdW5jdGlvbiBzdGFnZVBucG1TaGFycChyb290OiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RvcmUgPSBqb2luKFxuICAgIHJvb3QsXG4gICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICApO1xuICB3cml0ZShcbiAgICBqb2luKHN0b3JlLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IFwic2hhcnBcIiwgbWFpbjogXCJpbmRleC5qc1wiIH0pLFxuICApO1xuICB3cml0ZShcbiAgICBqb2luKHN0b3JlLCBcImluZGV4LmpzXCIpLFxuICAgICdtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAaW1nL3NoYXJwLWxpbnV4LXg2NFwiKTsnLFxuICApO1xuICBta2RpclN5bmMoam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2L25vZGVfbW9kdWxlc1wiKSwge1xuICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgfSk7XG4gIHN5bWxpbmtTeW5jKFxuICAgIFwiLi4vLi4vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgIGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi9ub2RlX21vZHVsZXMvc2hhcnBcIiksXG4gICk7XG4gIG1rZGlyU3luYyhqb2luKHJvb3QsIFwiYXBwcy93ZWIvbm9kZV9tb2R1bGVzXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgc3ltbGlua1N5bmMoXG4gICAgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYi9ub2RlX21vZHVsZXMvc2hhcnBcIiksXG4gICk7XG59XG5cbmRlc2NyaWJlKFwic2hhcnBCaW5hcnlEaXJcIiwgKCkgPT4ge1xuICBpdChcImlzIHJlYWNoYWJsZSBmcm9tIGV2ZXJ5IGNvcHkgb2Ygc2hhcnAsIGxpbmtzIGtlcHQgb3IgZGVyZWZlcmVuY2VkXCIsICgpID0+IHtcbiAgICAvLyBUaGUgemlwIGFuZCB0aGUgaW1hZ2Uga2VlcCBsaW5rcywgc28gdGhlIHN0b3JlIGNvcHkgbG9hZHM7IGEgZGVyZWZlcmVuY2VkXG4gICAgLy8gY29weSByZXNvbHZlcyBgQGltZy8uLi5gIGZyb20gd2hlcmUgaXQgc2l0cywgbmV2ZXIgZnJvbSB0aGUgc3RvcmUuXG4gICAgY29uc3Qgc3RhZ2VkID0gam9pbihkaXIsIFwic3RhZ2VkXCIpO1xuICAgIHN0YWdlUG5wbVNoYXJwKHN0YWdlZCk7XG4gICAgY29uc3QgYmluYXJ5ID0gam9pbihzaGFycEJpbmFyeURpcihzdGFnZWQpLCBcInNoYXJwLWxpbnV4LXg2NFwiKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oYmluYXJ5LCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJAaW1nL3NoYXJwLWxpbnV4LXg2NFwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgKTtcbiAgICB3cml0ZShqb2luKGJpbmFyeSwgXCJpbmRleC5qc1wiKSwgJ21vZHVsZS5leHBvcnRzID0gXCJsb2FkZWRcIjsnKTtcblxuICAgIGNvbnN0IHppcHBlZCA9IGpvaW4oZGlyLCBcInppcHBlZFwiKTtcbiAgICAvLyBgY3AgLVJMYCwgbm90IGBjcFN5bmNgJ3MgYGRlcmVmZXJlbmNlYCwgd2hpY2ggb25seSByZXNvbHZlcyB0aGUgdG9wLWxldmVsXG4gICAgLy8gc291cmNlIGFuZCByZS1saW5rcyBldmVyeXRoaW5nIHVuZGVyIGl0IHRvIHRoZSBvcmlnaW5hbC5cbiAgICBleGVjRmlsZVN5bmMoXCJjcFwiLCBbXCItUkxcIiwgc3RhZ2VkLCB6aXBwZWRdKTtcblxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBbc3RhZ2VkLCB6aXBwZWRdKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvcHkgb2YgW1xuICAgICAgICBcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL3NoYXJwXCIsXG4gICAgICBdKSB7XG4gICAgICAgIC8vIEEgcmVhbCBgbm9kZWAsIG5vdCBqZXN0J3MgYHJlcXVpcmVgLCB3aG9zZSByZXNvbHZlciBkaWZmZXJzIGZyb21cbiAgICAgICAgLy8gTm9kZSdzIGluIGhvdyBpdCB3YWxrcyB1cCBmcm9tIGEgbW9kdWxlLlxuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgZXhlY0ZpbGVTeW5jKFxuICAgICAgICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgICAgIFtcIi1wXCIsIGByZXF1aXJlKCR7SlNPTi5zdHJpbmdpZnkoam9pbihyb290LCBjb3B5KSl9KWBdLFxuICAgICAgICAgICAgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0sXG4gICAgICAgICAgKS50cmltKCksXG4gICAgICAgICkudG9CZShcImxvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiaXNTaGFycEJpbmFyeVBhY2thZ2VcIiwgKCkgPT4ge1xuICBpdC5lYWNoKFtcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpbnV4LXg2NFwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpbnV4bXVzbC1hcm02NFwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpYnZpcHMtZGFyd2luLWFybTY0XCIsIHRydWVdLFxuICAgIFtcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9AaW1nXCIsIFwic2hhcnAtZGFyd2luLWFybTY0XCIsIHRydWVdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy8ucG5wbVwiLCBcIkBpbWcrc2hhcnAtZGFyd2luLWFybTY0QDAuMzQuNVwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvLnBucG1cIiwgXCJAaW1nK3NoYXJwLWxpYnZpcHMtZGFyd2luLWFybTY0QDEuMi40XCIsIHRydWVdLFxuICAgIFtcbiAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvQGltZ1wiLFxuICAgICAgXCJzaGFycC1saW51eC14NjRcIixcbiAgICAgIHRydWUsXG4gICAgXSxcbiAgICAvLyBBIHJvdXRlIHNlZ21lbnQsIG5vdCBhIHBhY2thZ2UuXG4gICAgW1wiLm5leHQvc2VydmVyL2FwcFwiLCBcInNoYXJwLWVkZ2VzXCIsIGZhbHNlXSxcbiAgICAvLyBVbnJlbGF0ZWQgYHNoYXJwLWAgZGVwZW5kZW5jaWVzLlxuICAgIFtcIm5vZGVfbW9kdWxlc1wiLCBcInNoYXJwLWljb1wiLCBmYWxzZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzLy5wbnBtXCIsIFwic2hhcnAtcGhhc2hAMi4wLjBcIiwgZmFsc2VdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy8ucG5wbVwiLCBcInNoYXJwQDAuMzQuNVwiLCBmYWxzZV0sXG4gICAgLy8gYHNoYXJwYCBpdHNlbGYsIHRoZSBKUyB3cmFwcGVyIHRoYXQgbG9hZHMgdGhlIGJpbmFyeS5cbiAgICBbXCJub2RlX21vZHVsZXNcIiwgXCJzaGFycFwiLCBmYWxzZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzL0BpbWdcIiwgXCJjb2xvdXJcIiwgZmFsc2VdLFxuICAgIC8vIEFwcCBkaXJlY3RvcmllcyB0aGF0IGhhcHBlbiB0byBzaGFyZSB0aGUgbmFtZXMsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2AuXG4gICAgW1wiYXBwcy93ZWIvQGltZ1wiLCBcInNoYXJwLWxpbnV4LXg2NFwiLCBmYWxzZV0sXG4gICAgW1wiYXBwcy93ZWIvLnBucG1cIiwgXCJAaW1nK3NoYXJwLWxpbnV4LXg2NEAwLjM0LjVcIiwgZmFsc2VdLFxuICBdKShcIiVzLyVzIGlzICVzXCIsIChwYXJlbnQsIG5hbWUsIGV4cGVjdGVkKSA9PiB7XG4gICAgZXhwZWN0KGlzU2hhcnBCaW5hcnlQYWNrYWdlKGpvaW4oZGlyLCBwYXJlbnQpLCBuYW1lKSkudG9CZShleHBlY3RlZCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGlja1N0YWdlZFNoYXJwUGFja2FnZVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgdHJlZSBoYXMgbm8gc2hhcnBcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtdKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInByZWZlcnMgdGhlIHNob3J0ZXN0IHBhdGgsIHRoZSBjbG9zZXN0IHRvIGEgaG9pc3RlZCBpbnN0YWxsXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtcbiAgICAgICAgXCIvci9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIi9yL2FwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIi9yL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgXSksXG4gICAgKS50b0JlKFwiL3Ivbm9kZV9tb2R1bGVzL3NoYXJwXCIpO1xuICB9KTtcblxuICBpdChcImJyZWFrcyBhIGxlbmd0aCB0aWUgYnkgbmFtZSwgd2hhdGV2ZXIgb3JkZXIgdGhlIHdhbGsgZm91bmQgdGhlbSBpblwiLCAoKSA9PiB7XG4gICAgY29uc3QgYSA9IFwiL3Ivbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNC9ub2RlX21vZHVsZXMvc2hhcnBcIjtcbiAgICBjb25zdCBiID0gXCIvci9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiO1xuICAgIGV4cGVjdChwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtiLCBhXSkpLnRvQmUoYSk7XG4gICAgZXhwZWN0KHBpY2tTdGFnZWRTaGFycFBhY2thZ2UoW2EsIGJdKSkudG9CZShhKTtcbiAgfSk7XG5cbiAgLy8gbnBtIG5lc3RzIG5leHQncyBvd24gYHNoYXJwYCB3aGVuIHRoZSBhcHAncyBob2lzdGVkIG9uZSBpcyBhbm90aGVyIHZlcnNpb247XG4gIC8vIHRoZSBiaW5hcmllcyBoYXZlIHRvIG1hdGNoIHRoZSBjb3B5IHRoZSBpbWFnZSBvcHRpbWl6ZXIgbG9hZHMuXG4gIGl0KFwicGlja3MgdGhlIGNvcHkgdGhlIHN0YWdlZCBuZXh0IHJlc29sdmVzLCBvdmVyIGEgc2hvcnRlciBvbmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgY29uc3QgaG9pc3RlZCA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvc2hhcnBcIik7XG4gICAgY29uc3QgbmVzdGVkID0gam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9zaGFycFwiKTtcbiAgICBmb3IgKGNvbnN0IHNoYXJwIG9mIFtob2lzdGVkLCBuZXN0ZWRdKSB7XG4gICAgICB3cml0ZShcbiAgICAgICAgam9pbihzaGFycCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJzaGFycFwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgICApO1xuICAgICAgd3JpdGUoam9pbihzaGFycCwgXCJpbmRleC5qc1wiKSwgXCJcIik7XG4gICAgfVxuICAgIHdyaXRlKFxuICAgICAgam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy9uZXh0L3BhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJuZXh0XCIgfSksXG4gICAgKTtcbiAgICBjb25zdCBuZXh0U2hhcnAgPSByZXNvbHZlTmV4dFNoYXJwKGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSk7XG4gICAgZXhwZWN0KG5leHRTaGFycCkudG9CZShqb2luKHJlYWxwYXRoU3luYyhuZXN0ZWQpLCBcImluZGV4LmpzXCIpKTtcbiAgICBleHBlY3QocGlja1N0YWdlZFNoYXJwUGFja2FnZShbaG9pc3RlZCwgbmVzdGVkXSwgbmV4dFNoYXJwKSkudG9CZShuZXN0ZWQpO1xuICB9KTtcblxuICBpdChcInJlc29sdmVzIG5vdGhpbmcgd2hlbiB0aGUgc3RhZ2VkIHRyZWUgaGFzIG5vIG5leHRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlTmV4dFNoYXJwKGpvaW4oZGlyLCBcImFwcHMvd2ViXCIpKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlNoYXJwIHN0YWdpbmcgZm9yIHRoZSBkZXBsb3ltZW50IHRhcmdldFwiLCAoKSA9PiB7XG4gIC8vIEEgdmVyc2lvbiBubyByZWFsIGBzaGFycGAgcGlucywgc28gdGhlIHRhcmJhbGxzIHNlZWRlZCBpbnRvIHRoZSBzaGFyZWRcbiAgLy8gZG93bmxvYWQgY2FjaGUgYmVsb3cgYXJlIG5ldmVyIG1pc3Rha2VuIGZvciAob3IgY2xvYmJlcikgcmVhbCBvbmVzLlxuICBjb25zdCBWRVJTSU9OID0gXCIwLjAuMC1jZGstbmV4dGpzLXRlc3RcIjtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKHRtcGRpcigpLCBcImNkay1uZXh0anMtc2hhcnAtY2FjaGVcIik7XG4gIGNvbnN0IHNlZWRlZDogc3RyaW5nW10gPSBbXTtcblxuICBhZnRlckFsbCgoKSA9PiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHNlZWRlZCkgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKiBTZWVkIHRoZSBkb3dubG9hZCBjYWNoZSBzbyB0aGUgaW5zdGFsbCBydW5zIHdpdGhvdXQgdGhlIHJlZ2lzdHJ5LiAqL1xuICBmdW5jdGlvbiBzZWVkQ2FjaGUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGtnID0gam9pbihkaXIsIFwidGd6XCIsIG5hbWUsIFwicGFja2FnZVwiKTtcbiAgICB3cml0ZShqb2luKHBrZywgXCJwYWNrYWdlLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogYEBpbWcvJHtuYW1lfWAgfSkpO1xuICAgIG1rZGlyU3luYyhjYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3QgdGd6ID0gam9pbihjYWNoZURpciwgYCR7bmFtZX0tJHtWRVJTSU9OfS50Z3pgKTtcbiAgICBleGVjRmlsZVN5bmMoXCJ0YXJcIiwgW1wiLWN6ZlwiLCB0Z3osIFwiLUNcIiwgam9pbihwa2csIFwiLi5cIiksIFwicGFja2FnZVwiXSk7XG4gICAgc2VlZGVkLnB1c2godGd6KTtcbiAgfVxuXG4gIC8vIFByaXZhdGU6IHRoZSBtZXRob2RzIGBOZXh0anNCdWlsZGAgcnVucyBwZXIgZGVwbG95bWVudCByb290LCB3aGljaCBvbmx5XG4gIC8vIHRvdWNoIHRoZSBmaWxlc3lzdGVtLCBzbyB0aGV5IHJ1biBoZXJlIHdpdGhvdXQgYSBjb25zdHJ1Y3QuXG4gIGNvbnN0IGJ1aWxkID0gTmV4dGpzQnVpbGQucHJvdG90eXBlIGFzIHVua25vd24gYXMge1xuICAgIHJlbW92ZUV4aXN0aW5nU2hhcnBCaW5hcmllcyhcbiAgICAgIHJvb3Q6IHN0cmluZyxcbiAgICAgIHByb2plY3REaXI6IHN0cmluZyxcbiAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgIHJvb3Q6IHsgbmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfSxcbiAgICAgIHByb2plY3REaXI6IHN0cmluZyxcbiAgICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgKTogdm9pZDtcbiAgfTtcblxuICAvKiogQSBzdGFnZWQgcG5wbSBgc2hhcnBgIHRoYXQgcGlucyB0ZXN0LXZlcnNpb24gYmluYXJpZXMgZm9yIGBwbGF0Zm9ybWAuICovXG4gIGZ1bmN0aW9uIHN0YWdlUGlubmVkU2hhcnAocm9vdDogc3RyaW5nLCBwbGF0Zm9ybTogc3RyaW5nKSB7XG4gICAgc3RhZ2VQbnBtU2hhcnAocm9vdCk7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKFxuICAgICAgICByb290LFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL3NoYXJwL3BhY2thZ2UuanNvblwiLFxuICAgICAgKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogXCJzaGFycFwiLFxuICAgICAgICB2ZXJzaW9uOiBcIjAuMzQuNVwiLFxuICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczoge1xuICAgICAgICAgIFtgQGltZy9zaGFycC0ke3BsYXRmb3JtfWBdOiBWRVJTSU9OLFxuICAgICAgICAgIFtgQGltZy9zaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF06IFZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBbYHNoYXJwLSR7cGxhdGZvcm19YCwgYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gXSkge1xuICAgICAgc2VlZENhY2hlKG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGl0LmVhY2goW1xuICAgIFtcImxpbnV4LXg2NFwiLCBcImRhcndpbi1hcm02NFwiXSxcbiAgICBbXCJsaW51eC1hcm02NFwiLCBcImxpbnV4LXg2NFwiXSxcbiAgICBbXCJsaW51eG11c2wtYXJtNjRcIiwgXCJsaW51eC14NjRcIl0sXG4gIF0pKFxuICAgIFwicmVwbGFjZXMgdGhlIGhvc3QncyBiaW5hcmllcyB3aXRoICVzIG9uZXMsIGxlYXZpbmcgbG9vay1hbGlrZXNcIixcbiAgICAocGxhdGZvcm0sIGhvc3QpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgICBzdGFnZVBucG1TaGFycChyb290KTtcbiAgICAgIGNvbnN0IHN0b3JlID0gam9pbihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgKTtcbiAgICAgIHdyaXRlKFxuICAgICAgICBqb2luKHN0b3JlLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG5hbWU6IFwic2hhcnBcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcIjAuMzQuNVwiLFxuICAgICAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgICBbYEBpbWcvc2hhcnAtJHtwbGF0Zm9ybX1gXTogVkVSU0lPTixcbiAgICAgICAgICAgIFtgQGltZy9zaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF06IFZFUlNJT04sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgLy8gVGhlIGhvc3QncyBiaW5hcmllcyBhcyBwbnBtIHN0YWdlcyB0aGVtOiBpbiB0aGUgc3RvcmUsIGxpbmtlZCBmcm9tXG4gICAgICAvLyBuZXh0IHRvIGBzaGFycGAsIGFuZCAoaG9pc3RlZCkgYXQgdGhlIHJvb3QuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW2BzaGFycC0ke2hvc3R9YCwgYHNoYXJwLWxpYnZpcHMtJHtob3N0fWBdKSB7XG4gICAgICAgIHdyaXRlKFxuICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgYG5vZGVfbW9kdWxlcy8ucG5wbS9AaW1nKyR7bmFtZX1AMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX0vcGFja2FnZS5qc29uYCxcbiAgICAgICAgICApLFxuICAgICAgICAgIFwie31cIixcbiAgICAgICAgKTtcbiAgICAgICAgbWtkaXJTeW5jKFxuICAgICAgICAgIGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nXCIpLFxuICAgICAgICAgIHsgcmVjdXJzaXZlOiB0cnVlIH0sXG4gICAgICAgICk7XG4gICAgICAgIHN5bWxpbmtTeW5jKFxuICAgICAgICAgIGAuLi8uLi8uLi9AaW1nKyR7bmFtZX1AMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX1gLFxuICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgYG5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL0BpbWcvJHtuYW1lfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgd3JpdGUoam9pbihyb290LCBgbm9kZV9tb2R1bGVzL0BpbWcvJHtuYW1lfS9wYWNrYWdlLmpzb25gKSwgXCJ7fVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvb2thbGlrZXMgPSBbXG4gICAgICAgIFwiYXBwcy93ZWIvLm5leHQvc2VydmVyL2FwcC9zaGFycC1lZGdlcy9wYWdlLmpzXCIsXG4gICAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwLWljb0AwLjEuNS9ub2RlX21vZHVsZXMvc2hhcnAtaWNvL3BhY2thZ2UuanNvblwiLFxuICAgICAgICBcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycC1pY28vcGFja2FnZS5qc29uXCIsXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGxvb2thbGlrZXMpIHdyaXRlKGpvaW4ocm9vdCwgZmlsZSksIFwiXCIpO1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFtgc2hhcnAtJHtwbGF0Zm9ybX1gLCBgc2hhcnAtbGlidmlwcy0ke3BsYXRmb3JtfWBdKSB7XG4gICAgICAgIHNlZWRDYWNoZShuYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlID0gYnVpbGQucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKFxuICAgICAgICByb290LFxuICAgICAgICBqb2luKHJvb3QsIFwiYXBwcy93ZWJcIiksXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNvdXJjZSkudG9CZShzdG9yZSk7XG4gICAgICBidWlsZC5zdGFnZVNoYXJwRm9yVGFyZ2V0KFxuICAgICAgICB7IG5hbWU6IFwiZGVmYXVsdFwiLCBwYXRoOiByb290IH0sXG4gICAgICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVhZGRpclN5bmMoc2hhcnBCaW5hcnlEaXIocm9vdCkpLnNvcnQoKSkudG9FcXVhbChcbiAgICAgICAgW2BzaGFycC0ke3BsYXRmb3JtfWAsIGBzaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF0uc29ydCgpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgSlNPTi5wYXJzZShcbiAgICAgICAgICByZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICBqb2luKHNoYXJwQmluYXJ5RGlyKHJvb3QpLCBgc2hhcnAtJHtwbGF0Zm9ybX0vcGFja2FnZS5qc29uYCksXG4gICAgICAgICAgICBcInV0Zi04XCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKS5uYW1lLFxuICAgICAgKS50b0JlKGBAaW1nL3NoYXJwLSR7cGxhdGZvcm19YCk7XG4gICAgICAvLyBObyBob3N0IGJpbmFyeSBzdXJ2aXZlcywgZGFuZ2xpbmcgbGluayBvciBvdGhlcndpc2UuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGxpc3RUcmVlKHJvb3QpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUuaW5jbHVkZXMoaG9zdCkpLFxuICAgICAgKS50b0VxdWFsKFtdKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBsb29rYWxpa2VzKSB7XG4gICAgICAgIGV4cGVjdChleGlzdHNTeW5jKGpvaW4ocm9vdCwgZmlsZSkpKS50b0JlKHRydWUpO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJ3YXJucyBhbmQgaW5zdGFsbHMgbm90aGluZyB3aGVuIHRoZSBidWlsZCBzdGFnZWQgbm8gc2hhcnBcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgd3JpdGUoam9pbihyb290LCBcImFwcHMvd2ViL3NlcnZlci5qc1wiKSwgXCJcIik7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3Qgc291cmNlID0gYnVpbGQucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKFxuICAgICAgcm9vdCxcbiAgICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSxcbiAgICApO1xuICAgIGV4cGVjdChzb3VyY2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBidWlsZC5zdGFnZVNoYXJwRm9yVGFyZ2V0KFxuICAgICAgeyBuYW1lOiBcImRlZmF1bHRcIiwgcGF0aDogcm9vdCB9LFxuICAgICAgam9pbihyb290LCBcImFwcHMvd2ViXCIpLFxuICAgICAgXCJsaW51eC1hcm02NFwiLFxuICAgICk7XG4gICAgZXhwZWN0KGV4aXN0c1N5bmMoc2hhcnBCaW5hcnlEaXIocm9vdCkpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnXCJzaGFycFwiIG5vdCBmb3VuZCcpLFxuICAgICk7XG4gICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZShcInBlciBmdW5jdGlvbiBncm91cFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBcImxpbnV4LWFybTY0XCI7XG4gICAgY29uc3Qgc3RhZ2UgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgYnVpbGQuc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgICAgeyBuYW1lLCBwYXRoOiBqb2luKGRpciwgXCJzdGFnZWRcIikgfSxcbiAgICAgICAgam9pbihkaXIsIFwic3RhZ2VkL2FwcHMvd2ViXCIpLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICk7XG5cbiAgICAvLyBPbmx5IGBkZWZhdWx0YCBzZXJ2ZXMgYC9fbmV4dC9pbWFnZWAsIHNvIGEgZ3JvdXAgd2l0aG91dCBzaGFycCBpcyBub3JtYWwuXG4gICAgaXQoXCJpbnN0YWxscyBub3RoaW5nIGFuZCBzdGF5cyBxdWlldCBmb3IgYSBncm91cCB3aXRob3V0IHNoYXJwXCIsICgpID0+IHtcbiAgICAgIHdyaXRlKGpvaW4oZGlyLCBcInN0YWdlZC9hcHBzL3dlYi9zZXJ2ZXIuanNcIiksIFwiXCIpO1xuICAgICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgICBzdGFnZShcImFwaVwiKTtcbiAgICAgIGV4cGVjdChleGlzdHNTeW5jKHNoYXJwQmluYXJ5RGlyKGpvaW4oZGlyLCBcInN0YWdlZFwiKSkpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdCh3YXJuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJ3YXJucyBmb3IgZGVmYXVsdCB3aXRob3V0IHNoYXJwLCB3aGljaCBjYW4ndCBvcHRpbWl6ZSBpbWFnZXNcIiwgKCkgPT4ge1xuICAgICAgd3JpdGUoam9pbihkaXIsIFwic3RhZ2VkL2FwcHMvd2ViL3NlcnZlci5qc1wiKSwgXCJcIik7XG4gICAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICAgIHN0YWdlKFwiZGVmYXVsdFwiKTtcbiAgICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1wic2hhcnBcIiBub3QgZm91bmQnKSxcbiAgICAgICk7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImluc3RhbGxzIHRoZSB0YXJnZXQncyBiaW5hcmllcyBmb3IgYSBncm91cCB3aG9zZSBvd24gcm91dGVzIHVzZSBzaGFycFwiLCAoKSA9PiB7XG4gICAgICBzdGFnZVBpbm5lZFNoYXJwKGpvaW4oZGlyLCBcInN0YWdlZFwiKSwgcGxhdGZvcm0pO1xuICAgICAgc3RhZ2UoXCJhcGlcIik7XG4gICAgICBleHBlY3QocmVhZGRpclN5bmMoc2hhcnBCaW5hcnlEaXIoam9pbihkaXIsIFwic3RhZ2VkXCIpKSkuc29ydCgpKS50b0VxdWFsKFxuICAgICAgICBbYHNoYXJwLSR7cGxhdGZvcm19YCwgYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gXS5zb3J0KCksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImRlcGxveW1lbnRCdWlsZElkXCIsICgpID0+IHtcbiAgaXQoXCJpcyBOZXh0LmpzJ3MgYnVpbGQgSUQgd2hlbiB0aGUgYXBwIHNldHMgbm8gZGVwbG95bWVudElkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBkZXBsb3ltZW50QnVpbGRJZCh7IGJ1aWxkSWQ6IFwiYjFcIiwgY29uZmlnOiB7IGRlcGxveW1lbnRJZDogXCJcIiB9IH0pLFxuICAgICkudG9CZShcImIxXCIpO1xuICB9KTtcblxuICAvLyBXaXRoIGBORVhUX0RFUExPWU1FTlRfSURgLCBOZXh0J3MgQlVJTERfSUQgaXMgYSBjb25zdGFudCwgc28gd2l0aG91dCB0aGVcbiAgLy8gc3VmZml4IGV2ZXJ5IGRlcGxveW1lbnQgd291bGQgc2hhcmUgb25lIGNhY2hlIHBhcnRpdGlvbi5cbiAgaXQoXCJpcyBzdWZmaXhlZCB3aXRoIHRoZSBkZXBsb3ltZW50SWQgd2hlbiB0aGUgYXBwIHNldHMgb25lXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBkZXBsb3ltZW50QnVpbGRJZCh7IGJ1aWxkSWQ6IFwiYjFcIiwgY29uZmlnOiB7IGRlcGxveW1lbnRJZDogXCJkN1wiIH0gfSksXG4gICAgKS50b0JlKFwiYjEtZDdcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwibGlzdFRyZWVcIiwgKCkgPT4ge1xuICBpdChcImxpc3RzIGxpbmtzIHdpdGhvdXQgZGVzY2VuZGluZyBpbnRvIHRoZW0sIHNvIGEgY3ljbGUgZW5kc1wiLCAoKSA9PiB7XG4gICAgd3JpdGUoam9pbihkaXIsIFwicGFja2FnZXMvYS9pbmRleC5qc1wiKSwgXCJcIik7XG4gICAgd3JpdGUoam9pbihkaXIsIFwicGFja2FnZXMvYi9pbmRleC5qc1wiKSwgXCJcIik7XG4gICAgbWtkaXJTeW5jKGpvaW4oZGlyLCBcInBhY2thZ2VzL2Evbm9kZV9tb2R1bGVzL0BvcmdcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIG1rZGlyU3luYyhqb2luKGRpciwgXCJwYWNrYWdlcy9iL25vZGVfbW9kdWxlcy9Ab3JnXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBzeW1saW5rU3luYyhcIi4uLy4uLy4uL2JcIiwgam9pbihkaXIsIFwicGFja2FnZXMvYS9ub2RlX21vZHVsZXMvQG9yZy9iXCIpKTtcbiAgICBzeW1saW5rU3luYyhcIi4uLy4uLy4uL2FcIiwgam9pbihkaXIsIFwicGFja2FnZXMvYi9ub2RlX21vZHVsZXMvQG9yZy9hXCIpKTtcblxuICAgIGNvbnN0IGZpbGVzID0gbGlzdFRyZWUoZGlyKVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IFwiaW5kZXguanNcIilcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5wYXJlbnRQYXRoKTtcbiAgICBleHBlY3QoZmlsZXMuc29ydCgpKS50b0VxdWFsKFtcbiAgICAgIGpvaW4oZGlyLCBcInBhY2thZ2VzL2FcIiksXG4gICAgICBqb2luKGRpciwgXCJwYWNrYWdlcy9iXCIpLFxuICAgIF0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInN0b3JlZFNpemVcIiwgKCkgPT4ge1xuICBpdChcImNvdW50cyBhIGxpbmsgYXMgaXRzIHRhcmdldCBwYXRoLCBhcyB0aGUgemlwIHN0b3JlcyBpdFwiLCAoKSA9PiB7XG4gICAgd3JpdGUoam9pbihkaXIsIFwic3RvcmUvcGtnL2ZpbGVcIiksIFwieFwiLnJlcGVhdCgxMDApKTtcbiAgICBta2RpclN5bmMoam9pbihkaXIsIFwiYVwiKSk7XG4gICAgc3ltbGlua1N5bmMoXCIuLi9zdG9yZS9wa2dcIiwgam9pbihkaXIsIFwiYS9wa2dcIikpO1xuXG4gICAgZXhwZWN0KHN0b3JlZFNpemUoZGlyKSkudG9CZSgxMDAgKyBcIi4uL3N0b3JlL3BrZ1wiLmxlbmd0aCk7XG4gIH0pO1xuXG4gIGl0KFwidGVybWluYXRlcyBvbiBhIGN5Y2xlIGFuZCBjb3VudHMgYSBkYW5nbGluZyBsaW5rXCIsICgpID0+IHtcbiAgICB3cml0ZShqb2luKGRpciwgXCJhL2ZpbGVcIiksIFwieFwiLnJlcGVhdCgxMCkpO1xuICAgIHN5bWxpbmtTeW5jKFwiLi5cIiwgam9pbihkaXIsIFwiYS91cFwiKSk7XG4gICAgc3ltbGlua1N5bmMoXCJtaXNzaW5nXCIsIGpvaW4oZGlyLCBcImEvZGFuZ2xpbmdcIikpO1xuXG4gICAgZXhwZWN0KHN0b3JlZFNpemUoZGlyKSkudG9CZSgxMCArIFwiLi5cIi5sZW5ndGggKyBcIm1pc3NpbmdcIi5sZW5ndGgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInBhdGNoQ2xpZW50Q2h1bmtcIiwgKCkgPT4ge1xuICBjb25zdCBjaHVuayA9IFwiY29uc29sZS5sb2coJ2FwcCcpO1wiO1xuXG4gIGl0KFwicHJlcGVuZHMgdGhlIHBhdGNoIG9uY2VcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBhdGNoZWQgPSBwYXRjaENsaWVudENodW5rKGNodW5rLCBcIlBBVENIX1YxXCIsIFwiY2h1bmsuanNcIikhO1xuICAgIGV4cGVjdChwYXRjaGVkKS50b01hdGNoKC9eXFwvXFwqIGNkay1uZXh0anM6cGF0Y2gtZmV0Y2ggWzAtOWEtZl17MTZ9IFxcKlxcL1xcbi8pO1xuICAgIGV4cGVjdChwYXRjaGVkKS50b0NvbnRhaW4oXCJQQVRDSF9WMVwiKTtcbiAgICBleHBlY3QocGF0Y2hlZC5lbmRzV2l0aChgXFxuJHtjaHVua31gKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QocGF0Y2hDbGllbnRDaHVuayhwYXRjaGVkLCBcIlBBVENIX1YxXCIsIFwiY2h1bmsuanNcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBsYWNlcyBhIHBhdGNoIGZyb20gYW5vdGhlciBjZGstbmV4dGpzIHZlcnNpb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9sZCA9IHBhdGNoQ2xpZW50Q2h1bmsoY2h1bmssIFwiUEFUQ0hfVjFcIiwgXCJjaHVuay5qc1wiKSE7XG4gICAgY29uc3QgdXBkYXRlZCA9IHBhdGNoQ2xpZW50Q2h1bmsob2xkLCBcIlBBVENIX1YyXCIsIFwiY2h1bmsuanNcIikhO1xuXG4gICAgZXhwZWN0KHVwZGF0ZWQpLnRvQ29udGFpbihcIlBBVENIX1YyXCIpO1xuICAgIGV4cGVjdCh1cGRhdGVkKS5ub3QudG9Db250YWluKFwiUEFUQ0hfVjFcIik7XG4gICAgZXhwZWN0KHVwZGF0ZWQuZW5kc1dpdGgoYFxcbiR7Y2h1bmt9YCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHVwZGF0ZWQpLnRvQmUocGF0Y2hDbGllbnRDaHVuayhjaHVuaywgXCJQQVRDSF9WMlwiLCBcImNodW5rLmpzXCIpKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWZ1c2VzIGEgcGF0Y2ggd2l0aG91dCBhbiBlbmQgbWFya2VyIHJhdGhlciB0aGFuIHN0YWNraW5nIG9uIGl0XCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHBhdGNoQ2xpZW50Q2h1bmsoXG4gICAgICAgIGAvKiBjZGstbmV4dGpzOnBhdGNoLWZldGNoICovXFxuT0xEXFxuJHtjaHVua31gLFxuICAgICAgICBcIlBBVENIX1YyXCIsXG4gICAgICAgIFwiY2h1bmsuanNcIixcbiAgICAgICksXG4gICAgKS50b1Rocm93KC9SZS1ydW4gYG5leHQgYnVpbGRgLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwid3JpdGVQdWJsaWNGaWxlTGlzdFwiLCAoKSA9PiB7XG4gIGl0KFwibGlzdHMgcHVibGljLyB0aGUgd2F5IHRoZSBydW50aW1lIGxpc3RzIGl0IG9mZiBkaXNrXCIsICgpID0+IHtcbiAgICAvLyBXcml0dGVuIGF0IHN5bnRoLCBhZnRlciB0aGUgYnVpbGQgY29tbWFuZCwgc28gYSBgcG9zdGJ1aWxkYCBmaWxlIChoZXJlXG4gICAgLy8gYHNpdGVtYXAueG1sYCkgaXMgbGlzdGVkOyBhIGxpbmtlZCBkaXJlY3RvcnkgaXMgZm9sbG93ZWQuXG4gICAgY29uc3QgcHVibGljRGlyID0gam9pbihkaXIsIFwicHVibGljXCIpO1xuICAgIHdyaXRlKGpvaW4ocHVibGljRGlyLCBcInNpdGVtYXAueG1sXCIpLCBcIjx1cmxzZXQvPlwiKTtcbiAgICB3cml0ZShqb2luKHB1YmxpY0RpciwgXCJpbWFnZXNcIiwgXCJsb2dvQDJ4LnBuZ1wiKSwgXCJwbmdcIik7XG4gICAgd3JpdGUoam9pbihkaXIsIFwic2hhcmVkXCIsIFwiaGVsbG8gZTJlLnR4dFwiKSwgXCJoaVwiKTtcbiAgICBzeW1saW5rU3luYyhqb2luKGRpciwgXCJzaGFyZWRcIiksIGpvaW4ocHVibGljRGlyLCBcInN0YXRpY1wiKSk7XG4gICAgY29uc3QgcnVudGltZURpciA9IGpvaW4oZGlyLCBcImNkay1uZXh0anMtcnVudGltZVwiKTtcbiAgICBta2RpclN5bmMocnVudGltZURpcik7XG4gICAgd3JpdGVQdWJsaWNGaWxlTGlzdChydW50aW1lRGlyLCBwdWJsaWNEaXIpO1xuICAgIGV4cGVjdChcbiAgICAgIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGpvaW4ocnVudGltZURpciwgXCJwdWJsaWMtZmlsZXMuanNvblwiKSwgXCJ1dGYtOFwiKSksXG4gICAgKS50b0VxdWFsKFtcImltYWdlcy9sb2dvQDJ4LnBuZ1wiLCBcInNpdGVtYXAueG1sXCIsIFwic3RhdGljL2hlbGxvIGUyZS50eHRcIl0pO1xuICB9KTtcblxuICBpdChcIndyaXRlcyBhbiBlbXB0eSBsaXN0IGZvciBhbiBhcHAgd2l0aG91dCBwdWJsaWMvXCIsICgpID0+IHtcbiAgICB3cml0ZVB1YmxpY0ZpbGVMaXN0KGRpciwgam9pbihkaXIsIFwicHVibGljXCIpKTtcbiAgICBleHBlY3QoXG4gICAgICBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKGRpciwgXCJwdWJsaWMtZmlsZXMuanNvblwiKSwgXCJ1dGYtOFwiKSksXG4gICAgKS50b0VxdWFsKFtdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJOZXh0anNCdWlsZCB3aXRoIHNraXBCdWlsZCBhbmQgbm8gYnVpbGQgb3V0cHV0XCIsICgpID0+IHtcbiAgaXQoXCJyZXBvcnRzIHRoZSBtaXNzaW5nIGFkYXB0ZXIgbWFuaWZlc3QsIG5vdCBhIGJhcmUgRU5PRU5UXCIsICgpID0+IHtcbiAgICAvLyBgR0xPQkFMX0ZVTkNUSU9OU2AgcGF0Y2hlcyBgLm5leHQvc3RhdGljL2NodW5rc2AsIHdoaWNoIHVzZWQgdG8gYmUgcmVhZFxuICAgIC8vIGZpcnN0IGFuZCBmYWlsIG9uIHRoZSBtaXNzaW5nIGRpcmVjdG9yeS5cbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzQnVpbGQobmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKSwgXCJCdWlsZFwiLCB7XG4gICAgICAgICAgYnVpbGRDb21tYW5kOiBcInRydWVcIixcbiAgICAgICAgICBidWlsZERpcmVjdG9yeTogZGlyLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyxcbiAgICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvY2RrLW5leHRqcyBhZGFwdGVyIG1hbmlmZXN0IG5vdCBmb3VuZC8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIk5leHRqc0J1aWxkIHdpdGggYSBidWlsZCBzcGxpdCBieSBvdGhlciBmdW5jdGlvbkdyb3Vwc1wiLCAoKSA9PiB7XG4gIGl0KFwicmVqZWN0cyBhIGJ1aWxkIHdob3NlIGdyb3VwcyBrZXB0IHRoZWlyIG5hbWVzIGJ1dCBub3QgdGhlaXIgcm91dGVzXCIsICgpID0+IHtcbiAgICAvLyBNb3ZpbmcgYC9yZXBvcnRzLyoqYCBpbnRvIGBhcGlgIGtlZXBzIHRoZSBncm91cCBuYW1lcywgYW5kIGEgbmFtZXMtb25seVxuICAgIC8vIGNoZWNrIGxldCBDbG91ZEZyb250IHNlbmQgYHJlcG9ydHMvKmAgdG8gYSB6aXAgd2l0aG91dCB0aG9zZSByb3V0ZXMuXG4gICAgd3JpdGUoam9pbihkaXIsIFwiLm5leHRcIiwgXCJCVUlMRF9JRFwiKSwgXCJiMVwiKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiY2RrLW5leHRqcy1hZGFwdGVyXCIsIFwibWFuaWZlc3QuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgYnVpbGRJZDogXCJiMVwiLFxuICAgICAgICByZWxhdGl2ZVByb2plY3REaXI6IFwiXCIsXG4gICAgICAgIGNvbmZpZzogeyBiYXNlUGF0aDogXCJcIiwgYXNzZXRQcmVmaXg6IFwiXCIsIHRyYWlsaW5nU2xhc2g6IGZhbHNlIH0sXG4gICAgICAgIGVudHJ5cG9pbnRzOiB7fSxcbiAgICAgICAgZ3JvdXBzOiB7IGRlZmF1bHQ6IFtdLCBhcGk6IFtdIH0sXG4gICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBbeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfV0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNCdWlsZChuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlN0YWNrXCIpLCBcIkJ1aWxkXCIsIHtcbiAgICAgICAgICBidWlsZENvbW1hbmQ6IFwidHJ1ZVwiLFxuICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBkaXIsXG4gICAgICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsXG4gICAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBbeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIiwgXCIvcmVwb3J0cy8qKlwiXSB9XSxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KC9idWlsZCBvdXRwdXQgaXNcXHMrc3RhbGUvKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIGEgYnVpbGQgd2hvc2UgZ3JvdXBzIGFuZCByb3V0ZXMgd2VyZSBvbmx5IGxpc3RlZCBpbiBhbm90aGVyIG9yZGVyXCIsICgpID0+IHtcbiAgICAvLyBPbmx5IHRoZSBzdGFsZSBjaGVjayBpcyB1bmRlciB0ZXN0OiBwYXN0IGl0LCB0aGUgdW5zdGFnZWQgcm9vdHMgdGhyb3cuXG4gICAgd3JpdGUoam9pbihkaXIsIFwiLm5leHRcIiwgXCJCVUlMRF9JRFwiKSwgXCJiMVwiKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiY2RrLW5leHRqcy1hZGFwdGVyXCIsIFwibWFuaWZlc3QuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgYnVpbGRJZDogXCJiMVwiLFxuICAgICAgICByZWxhdGl2ZVByb2plY3REaXI6IFwiXCIsXG4gICAgICAgIGNvbmZpZzogeyBiYXNlUGF0aDogXCJcIiwgYXNzZXRQcmVmaXg6IFwiXCIsIHRyYWlsaW5nU2xhc2g6IGZhbHNlIH0sXG4gICAgICAgIGVudHJ5cG9pbnRzOiB7fSxcbiAgICAgICAgZ3JvdXBzOiB7IGRlZmF1bHQ6IFtdLCBhcGk6IFtdLCBkb2NzOiBbXSB9LFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogW1xuICAgICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCIsIFwiL3JlcG9ydHMvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNCdWlsZChuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlN0YWNrXCIpLCBcIkJ1aWxkXCIsIHtcbiAgICAgICAgICBidWlsZENvbW1hbmQ6IFwidHJ1ZVwiLFxuICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBkaXIsXG4gICAgICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsXG4gICAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiYXBpXCIsIHJvdXRlczogW1wiL3JlcG9ydHMvKipcIiwgXCIvYXBpLyoqXCJdIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgKS5ub3QudG9UaHJvdygvc3RhbGUvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkZXBsb3ltZW50QXJjaGl0ZWN0dXJlXCIsICgpID0+IHtcbiAgY29uc3QgYmFzZSA9IHsgYnVpbGRDb21tYW5kOiBcIlwiLCBidWlsZERpcmVjdG9yeTogXCJcIiB9O1xuICBjb25zdCBmdW5jdGlvbnMgPSB7IC4uLmJhc2UsIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyB9O1xuXG4gIGNvbnN0IGhvc3QgPSBwcm9jZXNzLmFyY2guc3RhcnRzV2l0aChcImFybVwiKSA/IFwiYXJtNjRcIiA6IFwieDg2XzY0XCI7XG5cbiAgaXQoXCJzdGFnZXMgdGhlIEZ1bmN0aW9ucyB0eXBlcyBmb3IgdGhlIHN5bnRoIG1hY2hpbmUgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlXCIsICgpID0+IHtcbiAgICBleHBlY3QoZGVwbG95bWVudEFyY2hpdGVjdHVyZShmdW5jdGlvbnMpLm5hbWUpLnRvQmUoaG9zdCk7XG4gIH0pO1xuXG4gIC8vIFRoZSBwb2ludCBvZiBob25vcmluZyB0aGUgcHJvcDogYHNoYXJwYCBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUgaXMgb25seVxuICAvLyBhIGRvd25sb2FkLCBzbyB0aGUgYnVpbGQgbm8gbG9uZ2VyIGhhcyB0byBydW4gd2hlcmUgdGhlIGZ1bmN0aW9uIHdpbGwuXG4gIGl0KFwic3RhZ2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlIGFza2VkIGZvciwgbm90IHRoZSBzeW50aCBtYWNoaW5lJ3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG90aGVyID0gaG9zdCA9PT0gXCJhcm02NFwiID8gQXJjaGl0ZWN0dXJlLlg4Nl82NCA6IEFyY2hpdGVjdHVyZS5BUk1fNjQ7XG4gICAgZXhwZWN0KGRlcGxveW1lbnRBcmNoaXRlY3R1cmUoeyAuLi5mdW5jdGlvbnMsIGFyY2hpdGVjdHVyZTogb3RoZXIgfSkpLnRvQmUoXG4gICAgICBvdGhlcixcbiAgICApO1xuICB9KTtcblxuICBpdChcImZvbGxvd3MgdGhlIHN5bnRoIG1hY2hpbmUgZm9yIHRoZSBDb250YWluZXJzIHR5cGVzXCIsICgpID0+IHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlMsXG4gICAgICBhcmNoaXRlY3R1cmU6XG4gICAgICAgIGhvc3QgPT09IFwiYXJtNjRcIiA/IEFyY2hpdGVjdHVyZS5YODZfNjQgOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgIH07XG4gICAgZXhwZWN0KGRlcGxveW1lbnRBcmNoaXRlY3R1cmUocHJvcHMpLm5hbWUpLnRvQmUoaG9zdCk7XG4gIH0pO1xufSk7XG4iXX0=
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJ1aWxkLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELDJEQUFrRDtBQUNsRCxxQ0FVaUI7QUFDakIscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBeUM7QUFDekMsdURBQXNEO0FBQ3RELGlEQWN3QjtBQUN4Qiw0Q0FBMEM7QUFFMUMsSUFBSSxHQUFXLENBQUM7QUFFaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLEdBQUcsR0FBRyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixJQUFBLGdCQUFNLEVBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsS0FBSyxDQUFDLElBQVksRUFBRSxPQUFlO0lBQzFDLElBQUEsbUJBQVMsRUFBQyxJQUFBLGdCQUFJLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsSUFBQSx1QkFBYSxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxjQUFjLENBQUMsSUFBWTtJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFJLEVBQ2hCLElBQUksRUFDSixvREFBb0QsQ0FDckQsQ0FBQztJQUNGLEtBQUssQ0FDSCxJQUFBLGdCQUFJLEVBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxFQUMzQixJ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QUFDLENBQUM7SUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFFSCwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUU7UUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMseUJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlCQUFZLENBQUMsTUFBTSxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxJQUFBLHFDQUFzQixFQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3hFLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1FBQzVELE1BQU0sS0FBSyxHQUFHO1lBQ1osR0FBRyxJQUFJO1lBQ1AsVUFBVSxFQUFFLHNCQUFVLENBQUMsbUJBQW1CO1lBQzFDLFlBQVksRUFDVixJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyx5QkFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMseUJBQVksQ0FBQyxNQUFNO1NBQy9ELENBQUM7UUFDRixNQUFNLENBQUMsSUFBQSxxQ0FBc0IsRUFBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgZXhlY0ZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICBta2R0ZW1wU3luYyxcbiAgcmVhZGRpclN5bmMsXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhbHBhdGhTeW5jLFxuICBybVN5bmMsXG4gIHN5bWxpbmtTeW5jLFxuICB3cml0ZUZpbGVTeW5jLFxufSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBBcHAsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHtcbiAgZGVwbG95bWVudEFyY2hpdGVjdHVyZSxcbiAgZGVwbG95bWVudEJ1aWxkSWQsXG4gIGZpbmRGb3JlaWduTmF0aXZlUGFja2FnZXMsXG4gIGlzU2hhcnBCaW5hcnlQYWNrYWdlLFxuICBsaXN0VHJlZSxcbiAgbmF0aXZlQmluYXJ5UGxhdGZvcm0sXG4gIE5leHRqc0J1aWxkLFxuICBwYXRjaENsaWVudENodW5rLFxuICBwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlLFxuICByZXNvbHZlTmV4dFNoYXJwLFxuICBzaGFycEJpbmFyeURpcixcbiAgc3RvcmVkU2l6ZSxcbiAgd3JpdGVQdWJsaWNGaWxlTGlzdCxcbn0gZnJvbSBcIi4vbmV4dGpzLWJ1aWxkXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5sZXQgZGlyOiBzdHJpbmc7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBkaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcIm5leHRqcy1idWlsZC10ZXN0LVwiKSk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgcm1TeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xufSk7XG5cbmZ1bmN0aW9uIHdyaXRlKHBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4gIG1rZGlyU3luYyhqb2luKHBhdGgsIFwiLi5cIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnQpO1xufVxuXG4vKipcbiAqIFRoZSBsYXlvdXQgcG5wbSBzdGFnZXM6IGBzaGFycGAncyBmaWxlcyBpbiB0aGUgdmlydHVhbCBzdG9yZSwgcmVhY2hlZCB0aHJvdWdoXG4gKiBsaW5rcyBmcm9tIHRoZSBhcHAgYW5kIGZyb20gYG5leHRgLlxuICovXG5mdW5jdGlvbiBzdGFnZVBucG1TaGFycChyb290OiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RvcmUgPSBqb2luKFxuICAgIHJvb3QsXG4gICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICApO1xuICB3cml0ZShcbiAgICBqb2luKHN0b3JlLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IFwic2hhcnBcIiwgbWFpbjogXCJpbmRleC5qc1wiIH0pLFxuICApO1xuICB3cml0ZShcbiAgICBqb2luKHN0b3JlLCBcImluZGV4LmpzXCIpLFxuICAgICdtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAaW1nL3NoYXJwLWxpbnV4LXg2NFwiKTsnLFxuICApO1xuICBta2RpclN5bmMoam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2L25vZGVfbW9kdWxlc1wiKSwge1xuICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgfSk7XG4gIHN5bWxpbmtTeW5jKFxuICAgIFwiLi4vLi4vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgIGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi9ub2RlX21vZHVsZXMvc2hhcnBcIiksXG4gICk7XG4gIG1rZGlyU3luYyhqb2luKHJvb3QsIFwiYXBwcy93ZWIvbm9kZV9tb2R1bGVzXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgc3ltbGlua1N5bmMoXG4gICAgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYi9ub2RlX21vZHVsZXMvc2hhcnBcIiksXG4gICk7XG59XG5cbmRlc2NyaWJlKFwic2hhcnBCaW5hcnlEaXJcIiwgKCkgPT4ge1xuICBpdChcImlzIHJlYWNoYWJsZSBmcm9tIGV2ZXJ5IGNvcHkgb2Ygc2hhcnAsIGxpbmtzIGtlcHQgb3IgZGVyZWZlcmVuY2VkXCIsICgpID0+IHtcbiAgICAvLyBUaGUgemlwIGFuZCB0aGUgaW1hZ2Uga2VlcCBsaW5rcywgc28gdGhlIHN0b3JlIGNvcHkgbG9hZHM7IGEgZGVyZWZlcmVuY2VkXG4gICAgLy8gY29weSByZXNvbHZlcyBgQGltZy8uLi5gIGZyb20gd2hlcmUgaXQgc2l0cywgbmV2ZXIgZnJvbSB0aGUgc3RvcmUuXG4gICAgY29uc3Qgc3RhZ2VkID0gam9pbihkaXIsIFwic3RhZ2VkXCIpO1xuICAgIHN0YWdlUG5wbVNoYXJwKHN0YWdlZCk7XG4gICAgY29uc3QgYmluYXJ5ID0gam9pbihzaGFycEJpbmFyeURpcihzdGFnZWQpLCBcInNoYXJwLWxpbnV4LXg2NFwiKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oYmluYXJ5LCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJAaW1nL3NoYXJwLWxpbnV4LXg2NFwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgKTtcbiAgICB3cml0ZShqb2luKGJpbmFyeSwgXCJpbmRleC5qc1wiKSwgJ21vZHVsZS5leHBvcnRzID0gXCJsb2FkZWRcIjsnKTtcblxuICAgIGNvbnN0IHppcHBlZCA9IGpvaW4oZGlyLCBcInppcHBlZFwiKTtcbiAgICAvLyBgY3AgLVJMYCwgbm90IGBjcFN5bmNgJ3MgYGRlcmVmZXJlbmNlYCwgd2hpY2ggb25seSByZXNvbHZlcyB0aGUgdG9wLWxldmVsXG4gICAgLy8gc291cmNlIGFuZCByZS1saW5rcyBldmVyeXRoaW5nIHVuZGVyIGl0IHRvIHRoZSBvcmlnaW5hbC5cbiAgICBleGVjRmlsZVN5bmMoXCJjcFwiLCBbXCItUkxcIiwgc3RhZ2VkLCB6aXBwZWRdKTtcblxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBbc3RhZ2VkLCB6aXBwZWRdKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvcHkgb2YgW1xuICAgICAgICBcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL3NoYXJwXCIsXG4gICAgICBdKSB7XG4gICAgICAgIC8vIEEgcmVhbCBgbm9kZWAsIG5vdCBqZXN0J3MgYHJlcXVpcmVgLCB3aG9zZSByZXNvbHZlciBkaWZmZXJzIGZyb21cbiAgICAgICAgLy8gTm9kZSdzIGluIGhvdyBpdCB3YWxrcyB1cCBmcm9tIGEgbW9kdWxlLlxuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgZXhlY0ZpbGVTeW5jKFxuICAgICAgICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgICAgIFtcIi1wXCIsIGByZXF1aXJlKCR7SlNPTi5zdHJpbmdpZnkoam9pbihyb290LCBjb3B5KSl9KWBdLFxuICAgICAgICAgICAgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0sXG4gICAgICAgICAgKS50cmltKCksXG4gICAgICAgICkudG9CZShcImxvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiaXNTaGFycEJpbmFyeVBhY2thZ2VcIiwgKCkgPT4ge1xuICBpdC5lYWNoKFtcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpbnV4LXg2NFwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpbnV4bXVzbC1hcm02NFwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpYnZpcHMtZGFyd2luLWFybTY0XCIsIHRydWVdLFxuICAgIFtcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9AaW1nXCIsIFwic2hhcnAtZGFyd2luLWFybTY0XCIsIHRydWVdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy8ucG5wbVwiLCBcIkBpbWcrc2hhcnAtZGFyd2luLWFybTY0QDAuMzQuNVwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvLnBucG1cIiwgXCJAaW1nK3NoYXJwLWxpYnZpcHMtZGFyd2luLWFybTY0QDEuMi40XCIsIHRydWVdLFxuICAgIFtcbiAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvQGltZ1wiLFxuICAgICAgXCJzaGFycC1saW51eC14NjRcIixcbiAgICAgIHRydWUsXG4gICAgXSxcbiAgICAvLyBBIHJvdXRlIHNlZ21lbnQsIG5vdCBhIHBhY2thZ2UuXG4gICAgW1wiLm5leHQvc2VydmVyL2FwcFwiLCBcInNoYXJwLWVkZ2VzXCIsIGZhbHNlXSxcbiAgICAvLyBVbnJlbGF0ZWQgYHNoYXJwLWAgZGVwZW5kZW5jaWVzLlxuICAgIFtcIm5vZGVfbW9kdWxlc1wiLCBcInNoYXJwLWljb1wiLCBmYWxzZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzLy5wbnBtXCIsIFwic2hhcnAtcGhhc2hAMi4wLjBcIiwgZmFsc2VdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy8ucG5wbVwiLCBcInNoYXJwQDAuMzQuNVwiLCBmYWxzZV0sXG4gICAgLy8gYHNoYXJwYCBpdHNlbGYsIHRoZSBKUyB3cmFwcGVyIHRoYXQgbG9hZHMgdGhlIGJpbmFyeS5cbiAgICBbXCJub2RlX21vZHVsZXNcIiwgXCJzaGFycFwiLCBmYWxzZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzL0BpbWdcIiwgXCJjb2xvdXJcIiwgZmFsc2VdLFxuICAgIC8vIEFwcCBkaXJlY3RvcmllcyB0aGF0IGhhcHBlbiB0byBzaGFyZSB0aGUgbmFtZXMsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2AuXG4gICAgW1wiYXBwcy93ZWIvQGltZ1wiLCBcInNoYXJwLWxpbnV4LXg2NFwiLCBmYWxzZV0sXG4gICAgW1wiYXBwcy93ZWIvLnBucG1cIiwgXCJAaW1nK3NoYXJwLWxpbnV4LXg2NEAwLjM0LjVcIiwgZmFsc2VdLFxuICBdKShcIiVzLyVzIGlzICVzXCIsIChwYXJlbnQsIG5hbWUsIGV4cGVjdGVkKSA9PiB7XG4gICAgZXhwZWN0KGlzU2hhcnBCaW5hcnlQYWNrYWdlKGpvaW4oZGlyLCBwYXJlbnQpLCBuYW1lKSkudG9CZShleHBlY3RlZCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGlja1N0YWdlZFNoYXJwUGFja2FnZVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgdHJlZSBoYXMgbm8gc2hhcnBcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtdKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInByZWZlcnMgdGhlIHNob3J0ZXN0IHBhdGgsIHRoZSBjbG9zZXN0IHRvIGEgaG9pc3RlZCBpbnN0YWxsXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtcbiAgICAgICAgXCIvci9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIi9yL2FwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIi9yL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgXSksXG4gICAgKS50b0JlKFwiL3Ivbm9kZV9tb2R1bGVzL3NoYXJwXCIpO1xuICB9KTtcblxuICBpdChcImJyZWFrcyBhIGxlbmd0aCB0aWUgYnkgbmFtZSwgd2hhdGV2ZXIgb3JkZXIgdGhlIHdhbGsgZm91bmQgdGhlbSBpblwiLCAoKSA9PiB7XG4gICAgY29uc3QgYSA9IFwiL3Ivbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNC9ub2RlX21vZHVsZXMvc2hhcnBcIjtcbiAgICBjb25zdCBiID0gXCIvci9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiO1xuICAgIGV4cGVjdChwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtiLCBhXSkpLnRvQmUoYSk7XG4gICAgZXhwZWN0KHBpY2tTdGFnZWRTaGFycFBhY2thZ2UoW2EsIGJdKSkudG9CZShhKTtcbiAgfSk7XG5cbiAgLy8gbnBtIG5lc3RzIG5leHQncyBvd24gYHNoYXJwYCB3aGVuIHRoZSBhcHAncyBob2lzdGVkIG9uZSBpcyBhbm90aGVyIHZlcnNpb247XG4gIC8vIHRoZSBiaW5hcmllcyBoYXZlIHRvIG1hdGNoIHRoZSBjb3B5IHRoZSBpbWFnZSBvcHRpbWl6ZXIgbG9hZHMuXG4gIGl0KFwicGlja3MgdGhlIGNvcHkgdGhlIHN0YWdlZCBuZXh0IHJlc29sdmVzLCBvdmVyIGEgc2hvcnRlciBvbmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgY29uc3QgaG9pc3RlZCA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvc2hhcnBcIik7XG4gICAgY29uc3QgbmVzdGVkID0gam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9zaGFycFwiKTtcbiAgICBmb3IgKGNvbnN0IHNoYXJwIG9mIFtob2lzdGVkLCBuZXN0ZWRdKSB7XG4gICAgICB3cml0ZShcbiAgICAgICAgam9pbihzaGFycCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJzaGFycFwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgICApO1xuICAgICAgd3JpdGUoam9pbihzaGFycCwgXCJpbmRleC5qc1wiKSwgXCJcIik7XG4gICAgfVxuICAgIHdyaXRlKFxuICAgICAgam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy9uZXh0L3BhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJuZXh0XCIgfSksXG4gICAgKTtcbiAgICBjb25zdCBuZXh0U2hhcnAgPSByZXNvbHZlTmV4dFNoYXJwKGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSk7XG4gICAgZXhwZWN0KG5leHRTaGFycCkudG9CZShqb2luKHJlYWxwYXRoU3luYyhuZXN0ZWQpLCBcImluZGV4LmpzXCIpKTtcbiAgICBleHBlY3QocGlja1N0YWdlZFNoYXJwUGFja2FnZShbaG9pc3RlZCwgbmVzdGVkXSwgbmV4dFNoYXJwKSkudG9CZShuZXN0ZWQpO1xuICB9KTtcblxuICBpdChcInJlc29sdmVzIG5vdGhpbmcgd2hlbiB0aGUgc3RhZ2VkIHRyZWUgaGFzIG5vIG5leHRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlTmV4dFNoYXJwKGpvaW4oZGlyLCBcImFwcHMvd2ViXCIpKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlNoYXJwIHN0YWdpbmcgZm9yIHRoZSBkZXBsb3ltZW50IHRhcmdldFwiLCAoKSA9PiB7XG4gIC8vIEEgdmVyc2lvbiBubyByZWFsIGBzaGFycGAgcGlucywgc28gdGhlIHRhcmJhbGxzIHNlZWRlZCBpbnRvIHRoZSBzaGFyZWRcbiAgLy8gZG93bmxvYWQgY2FjaGUgYmVsb3cgYXJlIG5ldmVyIG1pc3Rha2VuIGZvciAob3IgY2xvYmJlcikgcmVhbCBvbmVzLlxuICBjb25zdCBWRVJTSU9OID0gXCIwLjAuMC1jZGstbmV4dGpzLXRlc3RcIjtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKHRtcGRpcigpLCBcImNkay1uZXh0anMtc2hhcnAtY2FjaGVcIik7XG4gIGNvbnN0IHNlZWRlZDogc3RyaW5nW10gPSBbXTtcblxuICBhZnRlckFsbCgoKSA9PiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHNlZWRlZCkgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKiBTZWVkIHRoZSBkb3dubG9hZCBjYWNoZSBzbyB0aGUgaW5zdGFsbCBydW5zIHdpdGhvdXQgdGhlIHJlZ2lzdHJ5LiAqL1xuICBmdW5jdGlvbiBzZWVkQ2FjaGUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGtnID0gam9pbihkaXIsIFwidGd6XCIsIG5hbWUsIFwicGFja2FnZVwiKTtcbiAgICB3cml0ZShqb2luKHBrZywgXCJwYWNrYWdlLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogYEBpbWcvJHtuYW1lfWAgfSkpO1xuICAgIG1rZGlyU3luYyhjYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3QgdGd6ID0gam9pbihjYWNoZURpciwgYCR7bmFtZX0tJHtWRVJTSU9OfS50Z3pgKTtcbiAgICBleGVjRmlsZVN5bmMoXCJ0YXJcIiwgW1wiLWN6ZlwiLCB0Z3osIFwiLUNcIiwgam9pbihwa2csIFwiLi5cIiksIFwicGFja2FnZVwiXSk7XG4gICAgc2VlZGVkLnB1c2godGd6KTtcbiAgfVxuXG4gIC8vIFByaXZhdGU6IHRoZSBtZXRob2RzIGBOZXh0anNCdWlsZGAgcnVucyBwZXIgZGVwbG95bWVudCByb290LCB3aGljaCBvbmx5XG4gIC8vIHRvdWNoIHRoZSBmaWxlc3lzdGVtLCBzbyB0aGV5IHJ1biBoZXJlIHdpdGhvdXQgYSBjb25zdHJ1Y3QuXG4gIGNvbnN0IGJ1aWxkID0gTmV4dGpzQnVpbGQucHJvdG90eXBlIGFzIHVua25vd24gYXMge1xuICAgIHJlbW92ZUV4aXN0aW5nU2hhcnBCaW5hcmllcyhcbiAgICAgIHJvb3Q6IHN0cmluZyxcbiAgICAgIHByb2plY3REaXI6IHN0cmluZyxcbiAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgIHJvb3Q6IHsgbmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfSxcbiAgICAgIHByb2plY3REaXI6IHN0cmluZyxcbiAgICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgKTogdm9pZDtcbiAgfTtcblxuICAvKiogQSBzdGFnZWQgcG5wbSBgc2hhcnBgIHRoYXQgcGlucyB0ZXN0LXZlcnNpb24gYmluYXJpZXMgZm9yIGBwbGF0Zm9ybWAuICovXG4gIGZ1bmN0aW9uIHN0YWdlUGlubmVkU2hhcnAocm9vdDogc3RyaW5nLCBwbGF0Zm9ybTogc3RyaW5nKSB7XG4gICAgc3RhZ2VQbnBtU2hhcnAocm9vdCk7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKFxuICAgICAgICByb290LFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL3NoYXJwL3BhY2thZ2UuanNvblwiLFxuICAgICAgKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogXCJzaGFycFwiLFxuICAgICAgICB2ZXJzaW9uOiBcIjAuMzQuNVwiLFxuICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczoge1xuICAgICAgICAgIFtgQGltZy9zaGFycC0ke3BsYXRmb3JtfWBdOiBWRVJTSU9OLFxuICAgICAgICAgIFtgQGltZy9zaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF06IFZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBbYHNoYXJwLSR7cGxhdGZvcm19YCwgYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gXSkge1xuICAgICAgc2VlZENhY2hlKG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGl0LmVhY2goW1xuICAgIFtcImxpbnV4LXg2NFwiLCBcImRhcndpbi1hcm02NFwiXSxcbiAgICBbXCJsaW51eC1hcm02NFwiLCBcImxpbnV4LXg2NFwiXSxcbiAgICBbXCJsaW51eG11c2wtYXJtNjRcIiwgXCJsaW51eC14NjRcIl0sXG4gIF0pKFxuICAgIFwicmVwbGFjZXMgdGhlIGhvc3QncyBiaW5hcmllcyB3aXRoICVzIG9uZXMsIGxlYXZpbmcgbG9vay1hbGlrZXNcIixcbiAgICAocGxhdGZvcm0sIGhvc3QpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgICBzdGFnZVBucG1TaGFycChyb290KTtcbiAgICAgIGNvbnN0IHN0b3JlID0gam9pbihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgKTtcbiAgICAgIHdyaXRlKFxuICAgICAgICBqb2luKHN0b3JlLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG5hbWU6IFwic2hhcnBcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcIjAuMzQuNVwiLFxuICAgICAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgICBbYEBpbWcvc2hhcnAtJHtwbGF0Zm9ybX1gXTogVkVSU0lPTixcbiAgICAgICAgICAgIFtgQGltZy9zaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF06IFZFUlNJT04sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgLy8gVGhlIGhvc3QncyBiaW5hcmllcyBhcyBwbnBtIHN0YWdlcyB0aGVtOiBpbiB0aGUgc3RvcmUsIGxpbmtlZCBmcm9tXG4gICAgICAvLyBuZXh0IHRvIGBzaGFycGAsIGFuZCAoaG9pc3RlZCkgYXQgdGhlIHJvb3QuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW2BzaGFycC0ke2hvc3R9YCwgYHNoYXJwLWxpYnZpcHMtJHtob3N0fWBdKSB7XG4gICAgICAgIHdyaXRlKFxuICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgYG5vZGVfbW9kdWxlcy8ucG5wbS9AaW1nKyR7bmFtZX1AMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX0vcGFja2FnZS5qc29uYCxcbiAgICAgICAgICApLFxuICAgICAgICAgIFwie31cIixcbiAgICAgICAgKTtcbiAgICAgICAgbWtkaXJTeW5jKFxuICAgICAgICAgIGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nXCIpLFxuICAgICAgICAgIHsgcmVjdXJzaXZlOiB0cnVlIH0sXG4gICAgICAgICk7XG4gICAgICAgIHN5bWxpbmtTeW5jKFxuICAgICAgICAgIGAuLi8uLi8uLi9AaW1nKyR7bmFtZX1AMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX1gLFxuICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgYG5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL0BpbWcvJHtuYW1lfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgd3JpdGUoam9pbihyb290LCBgbm9kZV9tb2R1bGVzL0BpbWcvJHtuYW1lfS9wYWNrYWdlLmpzb25gKSwgXCJ7fVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvb2thbGlrZXMgPSBbXG4gICAgICAgIFwiYXBwcy93ZWIvLm5leHQvc2VydmVyL2FwcC9zaGFycC1lZGdlcy9wYWdlLmpzXCIsXG4gICAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwLWljb0AwLjEuNS9ub2RlX21vZHVsZXMvc2hhcnAtaWNvL3BhY2thZ2UuanNvblwiLFxuICAgICAgICBcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycC1pY28vcGFja2FnZS5qc29uXCIsXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGxvb2thbGlrZXMpIHdyaXRlKGpvaW4ocm9vdCwgZmlsZSksIFwiXCIpO1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFtgc2hhcnAtJHtwbGF0Zm9ybX1gLCBgc2hhcnAtbGlidmlwcy0ke3BsYXRmb3JtfWBdKSB7XG4gICAgICAgIHNlZWRDYWNoZShuYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlID0gYnVpbGQucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKFxuICAgICAgICByb290LFxuICAgICAgICBqb2luKHJvb3QsIFwiYXBwcy93ZWJcIiksXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNvdXJjZSkudG9CZShzdG9yZSk7XG4gICAgICBidWlsZC5zdGFnZVNoYXJwRm9yVGFyZ2V0KFxuICAgICAgICB7IG5hbWU6IFwiZGVmYXVsdFwiLCBwYXRoOiByb290IH0sXG4gICAgICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVhZGRpclN5bmMoc2hhcnBCaW5hcnlEaXIocm9vdCkpLnNvcnQoKSkudG9FcXVhbChcbiAgICAgICAgW2BzaGFycC0ke3BsYXRmb3JtfWAsIGBzaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF0uc29ydCgpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgSlNPTi5wYXJzZShcbiAgICAgICAgICByZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICBqb2luKHNoYXJwQmluYXJ5RGlyKHJvb3QpLCBgc2hhcnAtJHtwbGF0Zm9ybX0vcGFja2FnZS5qc29uYCksXG4gICAgICAgICAgICBcInV0Zi04XCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKS5uYW1lLFxuICAgICAgKS50b0JlKGBAaW1nL3NoYXJwLSR7cGxhdGZvcm19YCk7XG4gICAgICAvLyBObyBob3N0IGJpbmFyeSBzdXJ2aXZlcywgZGFuZ2xpbmcgbGluayBvciBvdGhlcndpc2UuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGxpc3RUcmVlKHJvb3QpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUuaW5jbHVkZXMoaG9zdCkpLFxuICAgICAgKS50b0VxdWFsKFtdKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBsb29rYWxpa2VzKSB7XG4gICAgICAgIGV4cGVjdChleGlzdHNTeW5jKGpvaW4ocm9vdCwgZmlsZSkpKS50b0JlKHRydWUpO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJ3YXJucyBhbmQgaW5zdGFsbHMgbm90aGluZyB3aGVuIHRoZSBidWlsZCBzdGFnZWQgbm8gc2hhcnBcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgd3JpdGUoam9pbihyb290LCBcImFwcHMvd2ViL3NlcnZlci5qc1wiKSwgXCJcIik7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3Qgc291cmNlID0gYnVpbGQucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKFxuICAgICAgcm9vdCxcbiAgICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSxcbiAgICApO1xuICAgIGV4cGVjdChzb3VyY2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBidWlsZC5zdGFnZVNoYXJwRm9yVGFyZ2V0KFxuICAgICAgeyBuYW1lOiBcImRlZmF1bHRcIiwgcGF0aDogcm9vdCB9LFxuICAgICAgam9pbihyb290LCBcImFwcHMvd2ViXCIpLFxuICAgICAgXCJsaW51eC1hcm02NFwiLFxuICAgICk7XG4gICAgZXhwZWN0KGV4aXN0c1N5bmMoc2hhcnBCaW5hcnlEaXIocm9vdCkpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnXCJzaGFycFwiIG5vdCBmb3VuZCcpLFxuICAgICk7XG4gICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZShcInBlciBmdW5jdGlvbiBncm91cFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBcImxpbnV4LWFybTY0XCI7XG4gICAgY29uc3Qgc3RhZ2UgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgYnVpbGQuc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgICAgeyBuYW1lLCBwYXRoOiBqb2luKGRpciwgXCJzdGFnZWRcIikgfSxcbiAgICAgICAgam9pbihkaXIsIFwic3RhZ2VkL2FwcHMvd2ViXCIpLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICk7XG5cbiAgICAvLyBPbmx5IGBkZWZhdWx0YCBzZXJ2ZXMgYC9fbmV4dC9pbWFnZWAsIHNvIGEgZ3JvdXAgd2l0aG91dCBzaGFycCBpcyBub3JtYWwuXG4gICAgaXQoXCJpbnN0YWxscyBub3RoaW5nIGFuZCBzdGF5cyBxdWlldCBmb3IgYSBncm91cCB3aXRob3V0IHNoYXJwXCIsICgpID0+IHtcbiAgICAgIHdyaXRlKGpvaW4oZGlyLCBcInN0YWdlZC9hcHBzL3dlYi9zZXJ2ZXIuanNcIiksIFwiXCIpO1xuICAgICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgICBzdGFnZShcImFwaVwiKTtcbiAgICAgIGV4cGVjdChleGlzdHNTeW5jKHNoYXJwQmluYXJ5RGlyKGpvaW4oZGlyLCBcInN0YWdlZFwiKSkpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdCh3YXJuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJ3YXJucyBmb3IgZGVmYXVsdCB3aXRob3V0IHNoYXJwLCB3aGljaCBjYW4ndCBvcHRpbWl6ZSBpbWFnZXNcIiwgKCkgPT4ge1xuICAgICAgd3JpdGUoam9pbihkaXIsIFwic3RhZ2VkL2FwcHMvd2ViL3NlcnZlci5qc1wiKSwgXCJcIik7XG4gICAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICAgIHN0YWdlKFwiZGVmYXVsdFwiKTtcbiAgICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1wic2hhcnBcIiBub3QgZm91bmQnKSxcbiAgICAgICk7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImluc3RhbGxzIHRoZSB0YXJnZXQncyBiaW5hcmllcyBmb3IgYSBncm91cCB3aG9zZSBvd24gcm91dGVzIHVzZSBzaGFycFwiLCAoKSA9PiB7XG4gICAgICBzdGFnZVBpbm5lZFNoYXJwKGpvaW4oZGlyLCBcInN0YWdlZFwiKSwgcGxhdGZvcm0pO1xuICAgICAgc3RhZ2UoXCJhcGlcIik7XG4gICAgICBleHBlY3QocmVhZGRpclN5bmMoc2hhcnBCaW5hcnlEaXIoam9pbihkaXIsIFwic3RhZ2VkXCIpKSkuc29ydCgpKS50b0VxdWFsKFxuICAgICAgICBbYHNoYXJwLSR7cGxhdGZvcm19YCwgYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gXS5zb3J0KCksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImRlcGxveW1lbnRCdWlsZElkXCIsICgpID0+IHtcbiAgaXQoXCJpcyBOZXh0LmpzJ3MgYnVpbGQgSUQgd2hlbiB0aGUgYXBwIHNldHMgbm8gZGVwbG95bWVudElkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBkZXBsb3ltZW50QnVpbGRJZCh7IGJ1aWxkSWQ6IFwiYjFcIiwgY29uZmlnOiB7IGRlcGxveW1lbnRJZDogXCJcIiB9IH0pLFxuICAgICkudG9CZShcImIxXCIpO1xuICB9KTtcblxuICAvLyBXaXRoIGBORVhUX0RFUExPWU1FTlRfSURgLCBOZXh0J3MgQlVJTERfSUQgaXMgYSBjb25zdGFudCwgc28gd2l0aG91dCB0aGVcbiAgLy8gc3VmZml4IGV2ZXJ5IGRlcGxveW1lbnQgd291bGQgc2hhcmUgb25lIGNhY2hlIHBhcnRpdGlvbi5cbiAgaXQoXCJpcyBzdWZmaXhlZCB3aXRoIHRoZSBkZXBsb3ltZW50SWQgd2hlbiB0aGUgYXBwIHNldHMgb25lXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBkZXBsb3ltZW50QnVpbGRJZCh7IGJ1aWxkSWQ6IFwiYjFcIiwgY29uZmlnOiB7IGRlcGxveW1lbnRJZDogXCJkN1wiIH0gfSksXG4gICAgKS50b0JlKFwiYjEtZDdcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwibGlzdFRyZWVcIiwgKCkgPT4ge1xuICBpdChcImxpc3RzIGxpbmtzIHdpdGhvdXQgZGVzY2VuZGluZyBpbnRvIHRoZW0sIHNvIGEgY3ljbGUgZW5kc1wiLCAoKSA9PiB7XG4gICAgd3JpdGUoam9pbihkaXIsIFwicGFja2FnZXMvYS9pbmRleC5qc1wiKSwgXCJcIik7XG4gICAgd3JpdGUoam9pbihkaXIsIFwicGFja2FnZXMvYi9pbmRleC5qc1wiKSwgXCJcIik7XG4gICAgbWtkaXJTeW5jKGpvaW4oZGlyLCBcInBhY2thZ2VzL2Evbm9kZV9tb2R1bGVzL0BvcmdcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIG1rZGlyU3luYyhqb2luKGRpciwgXCJwYWNrYWdlcy9iL25vZGVfbW9kdWxlcy9Ab3JnXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBzeW1saW5rU3luYyhcIi4uLy4uLy4uL2JcIiwgam9pbihkaXIsIFwicGFja2FnZXMvYS9ub2RlX21vZHVsZXMvQG9yZy9iXCIpKTtcbiAgICBzeW1saW5rU3luYyhcIi4uLy4uLy4uL2FcIiwgam9pbihkaXIsIFwicGFja2FnZXMvYi9ub2RlX21vZHVsZXMvQG9yZy9hXCIpKTtcblxuICAgIGNvbnN0IGZpbGVzID0gbGlzdFRyZWUoZGlyKVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IFwiaW5kZXguanNcIilcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5wYXJlbnRQYXRoKTtcbiAgICBleHBlY3QoZmlsZXMuc29ydCgpKS50b0VxdWFsKFtcbiAgICAgIGpvaW4oZGlyLCBcInBhY2thZ2VzL2FcIiksXG4gICAgICBqb2luKGRpciwgXCJwYWNrYWdlcy9iXCIpLFxuICAgIF0pO1xuICB9KTtcbn0pO1xuXG4vKiogQSBgLm5vZGVgIGZpbGUgY2FycnlpbmcganVzdCBlbm91Z2ggaGVhZGVyIHRvIGJlIHJlYWQgYXMgYHBsYXRmb3JtYC4gKi9cbmZ1bmN0aW9uIHdyaXRlQWRkb24oXG4gIHBhdGg6IHN0cmluZyxcbiAgcGxhdGZvcm06IFwibGludXgtYXJtNjRcIiB8IFwibGludXgteDY0XCIgfCBcImRhcndpblwiLFxuKSB7XG4gIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYygyMCk7XG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIikge1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkJFKDB4Y2ZmYWVkZmUsIDApO1xuICB9IGVsc2Uge1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkJFKDB4N2Y0NTRjNDYsIDApO1xuICAgIGhlYWRlcls1XSA9IDE7XG4gICAgaGVhZGVyLndyaXRlVUludDE2TEUocGxhdGZvcm0gPT09IFwibGludXgtYXJtNjRcIiA/IDE4MyA6IDYyLCAxOCk7XG4gIH1cbiAgbWtkaXJTeW5jKGpvaW4ocGF0aCwgXCIuLlwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMocGF0aCwgaGVhZGVyKTtcbn1cblxuZGVzY3JpYmUoXCJuYXRpdmVCaW5hcnlQbGF0Zm9ybVwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1wibGludXgtYXJtNjRcIiwgXCJsaW51eC14NjRcIiwgXCJkYXJ3aW5cIl0gYXMgY29uc3QpKFxuICAgIFwicmVhZHMgJXMgZnJvbSB0aGUgaGVhZGVyXCIsXG4gICAgKHBsYXRmb3JtKSA9PiB7XG4gICAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBcImEubm9kZVwiKSwgcGxhdGZvcm0pO1xuICAgICAgZXhwZWN0KG5hdGl2ZUJpbmFyeVBsYXRmb3JtKGpvaW4oZGlyLCBcImEubm9kZVwiKSkpLnRvQmUocGxhdGZvcm0pO1xuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJyZXR1cm5zIHVuZGVmaW5lZCBmb3IgYSBmaWxlIHRoYXQgaXNuJ3QgYSBiaW5hcnlcIiwgKCkgPT4ge1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcImEubm9kZVwiKSwgXCJub3QgYSBiaW5hcnlcIik7XG4gICAgZXhwZWN0KG5hdGl2ZUJpbmFyeVBsYXRmb3JtKGpvaW4oZGlyLCBcImEubm9kZVwiKSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzXCIsICgpID0+IHtcbiAgY29uc3QgcGtnID0gKHBhdGg6IHN0cmluZykgPT4gd3JpdGUoam9pbihkaXIsIHBhdGgsIFwicGFja2FnZS5qc29uXCIpLCBcInt9XCIpO1xuXG4gIGl0KFwibmFtZXMgYSBwYWNrYWdlIHdpdGggb25seSBhbm90aGVyIHBsYXRmb3JtJ3MgYWRkb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGdsaWRlID0gXCJub2RlX21vZHVsZXMvQHZhbGtleS92YWxrZXktZ2xpZGUtZGFyd2luLWFybTY0XCI7XG4gICAgcGtnKGdsaWRlKTtcbiAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBnbGlkZSwgXCJidWlsZC9nbGlkZS5ub2RlXCIpLCBcImRhcndpblwiKTtcblxuICAgIGV4cGVjdChmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzKGRpciwgXCJsaW51eC1hcm02NFwiKSkudG9FcXVhbChbZ2xpZGVdKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXNzZXMgYSBwYWNrYWdlIHdpdGggdGhlIHRhcmdldCdzIGFkZG9uLCBldmVuIGJlc2lkZSBvdGhlcnNcIiwgKCkgPT4ge1xuICAgIHBrZyhcIm5vZGVfbW9kdWxlcy9va1wiKTtcbiAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBcIm5vZGVfbW9kdWxlcy9vay9hLm5vZGVcIiksIFwibGludXgtYXJtNjRcIik7XG4gICAgcGtnKFwibm9kZV9tb2R1bGVzL3ByZWJ1aWx0XCIpO1xuICAgIHdyaXRlQWRkb24oXG4gICAgICBqb2luKGRpciwgXCJub2RlX21vZHVsZXMvcHJlYnVpbHQvcHJlYnVpbGRzL2Rhcndpbi1hcm02NC9hLm5vZGVcIiksXG4gICAgICBcImRhcndpblwiLFxuICAgICk7XG4gICAgd3JpdGVBZGRvbihcbiAgICAgIGpvaW4oZGlyLCBcIm5vZGVfbW9kdWxlcy9wcmVidWlsdC9wcmVidWlsZHMvbGludXgtYXJtNjQvYS5ub2RlXCIpLFxuICAgICAgXCJsaW51eC1hcm02NFwiLFxuICAgICk7XG4gICAgd3JpdGUoam9pbihkaXIsIFwibm9kZV9tb2R1bGVzL29rL25vdGVzLm5vZGVcIiksIFwidGV4dFwiKTtcblxuICAgIGV4cGVjdChmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzKGRpciwgXCJsaW51eC1hcm02NFwiKSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwidGVsbHMgYXJjaGl0ZWN0dXJlcyBhcGFydFwiLCAoKSA9PiB7XG4gICAgcGtnKFwibm9kZV9tb2R1bGVzL3g2NFwiKTtcbiAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBcIm5vZGVfbW9kdWxlcy94NjQvYS5ub2RlXCIpLCBcImxpbnV4LXg2NFwiKTtcblxuICAgIGV4cGVjdChmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzKGRpciwgXCJsaW51eC1hcm02NFwiKSkudG9FcXVhbChbXG4gICAgICBcIm5vZGVfbW9kdWxlcy94NjRcIixcbiAgICBdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJzdG9yZWRTaXplXCIsICgpID0+IHtcbiAgaXQoXCJjb3VudHMgYSBsaW5rIGFzIGl0cyB0YXJnZXQgcGF0aCwgYXMgdGhlIHppcCBzdG9yZXMgaXRcIiwgKCkgPT4ge1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcInN0b3JlL3BrZy9maWxlXCIpLCBcInhcIi5yZXBlYXQoMTAwKSk7XG4gICAgbWtkaXJTeW5jKGpvaW4oZGlyLCBcImFcIikpO1xuICAgIHN5bWxpbmtTeW5jKFwiLi4vc3RvcmUvcGtnXCIsIGpvaW4oZGlyLCBcImEvcGtnXCIpKTtcblxuICAgIGV4cGVjdChzdG9yZWRTaXplKGRpcikpLnRvQmUoMTAwICsgXCIuLi9zdG9yZS9wa2dcIi5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcInRlcm1pbmF0ZXMgb24gYSBjeWNsZSBhbmQgY291bnRzIGEgZGFuZ2xpbmcgbGlua1wiLCAoKSA9PiB7XG4gICAgd3JpdGUoam9pbihkaXIsIFwiYS9maWxlXCIpLCBcInhcIi5yZXBlYXQoMTApKTtcbiAgICBzeW1saW5rU3luYyhcIi4uXCIsIGpvaW4oZGlyLCBcImEvdXBcIikpO1xuICAgIHN5bWxpbmtTeW5jKFwibWlzc2luZ1wiLCBqb2luKGRpciwgXCJhL2RhbmdsaW5nXCIpKTtcblxuICAgIGV4cGVjdChzdG9yZWRTaXplKGRpcikpLnRvQmUoMTAgKyBcIi4uXCIubGVuZ3RoICsgXCJtaXNzaW5nXCIubGVuZ3RoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwYXRjaENsaWVudENodW5rXCIsICgpID0+IHtcbiAgY29uc3QgY2h1bmsgPSBcImNvbnNvbGUubG9nKCdhcHAnKTtcIjtcblxuICBpdChcInByZXBlbmRzIHRoZSBwYXRjaCBvbmNlXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXRjaGVkID0gcGF0Y2hDbGllbnRDaHVuayhjaHVuaywgXCJQQVRDSF9WMVwiLCBcImNodW5rLmpzXCIpITtcbiAgICBleHBlY3QocGF0Y2hlZCkudG9NYXRjaCgvXlxcL1xcKiBjZGstbmV4dGpzOnBhdGNoLWZldGNoIFswLTlhLWZdezE2fSBcXCpcXC9cXG4vKTtcbiAgICBleHBlY3QocGF0Y2hlZCkudG9Db250YWluKFwiUEFUQ0hfVjFcIik7XG4gICAgZXhwZWN0KHBhdGNoZWQuZW5kc1dpdGgoYFxcbiR7Y2h1bmt9YCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHBhdGNoQ2xpZW50Q2h1bmsocGF0Y2hlZCwgXCJQQVRDSF9WMVwiLCBcImNodW5rLmpzXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwicmVwbGFjZXMgYSBwYXRjaCBmcm9tIGFub3RoZXIgY2RrLW5leHRqcyB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBvbGQgPSBwYXRjaENsaWVudENodW5rKGNodW5rLCBcIlBBVENIX1YxXCIsIFwiY2h1bmsuanNcIikhO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBwYXRjaENsaWVudENodW5rKG9sZCwgXCJQQVRDSF9WMlwiLCBcImNodW5rLmpzXCIpITtcblxuICAgIGV4cGVjdCh1cGRhdGVkKS50b0NvbnRhaW4oXCJQQVRDSF9WMlwiKTtcbiAgICBleHBlY3QodXBkYXRlZCkubm90LnRvQ29udGFpbihcIlBBVENIX1YxXCIpO1xuICAgIGV4cGVjdCh1cGRhdGVkLmVuZHNXaXRoKGBcXG4ke2NodW5rfWApKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdCh1cGRhdGVkKS50b0JlKHBhdGNoQ2xpZW50Q2h1bmsoY2h1bmssIFwiUEFUQ0hfVjJcIiwgXCJjaHVuay5qc1wiKSk7XG4gIH0pO1xuXG4gIGl0KFwicmVmdXNlcyBhIHBhdGNoIHdpdGhvdXQgYW4gZW5kIG1hcmtlciByYXRoZXIgdGhhbiBzdGFja2luZyBvbiBpdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBwYXRjaENsaWVudENodW5rKFxuICAgICAgICBgLyogY2RrLW5leHRqczpwYXRjaC1mZXRjaCAqL1xcbk9MRFxcbiR7Y2h1bmt9YCxcbiAgICAgICAgXCJQQVRDSF9WMlwiLFxuICAgICAgICBcImNodW5rLmpzXCIsXG4gICAgICApLFxuICAgICkudG9UaHJvdygvUmUtcnVuIGBuZXh0IGJ1aWxkYC8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIndyaXRlUHVibGljRmlsZUxpc3RcIiwgKCkgPT4ge1xuICBpdChcImxpc3RzIHB1YmxpYy8gdGhlIHdheSB0aGUgcnVudGltZSBsaXN0cyBpdCBvZmYgZGlza1wiLCAoKSA9PiB7XG4gICAgLy8gV3JpdHRlbiBhdCBzeW50aCwgYWZ0ZXIgdGhlIGJ1aWxkIGNvbW1hbmQsIHNvIGEgYHBvc3RidWlsZGAgZmlsZSAoaGVyZVxuICAgIC8vIGBzaXRlbWFwLnhtbGApIGlzIGxpc3RlZDsgYSBsaW5rZWQgZGlyZWN0b3J5IGlzIGZvbGxvd2VkLlxuICAgIGNvbnN0IHB1YmxpY0RpciA9IGpvaW4oZGlyLCBcInB1YmxpY1wiKTtcbiAgICB3cml0ZShqb2luKHB1YmxpY0RpciwgXCJzaXRlbWFwLnhtbFwiKSwgXCI8dXJsc2V0Lz5cIik7XG4gICAgd3JpdGUoam9pbihwdWJsaWNEaXIsIFwiaW1hZ2VzXCIsIFwibG9nb0AyeC5wbmdcIiksIFwicG5nXCIpO1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcInNoYXJlZFwiLCBcImhlbGxvIGUyZS50eHRcIiksIFwiaGlcIik7XG4gICAgc3ltbGlua1N5bmMoam9pbihkaXIsIFwic2hhcmVkXCIpLCBqb2luKHB1YmxpY0RpciwgXCJzdGF0aWNcIikpO1xuICAgIGNvbnN0IHJ1bnRpbWVEaXIgPSBqb2luKGRpciwgXCJjZGstbmV4dGpzLXJ1bnRpbWVcIik7XG4gICAgbWtkaXJTeW5jKHJ1bnRpbWVEaXIpO1xuICAgIHdyaXRlUHVibGljRmlsZUxpc3QocnVudGltZURpciwgcHVibGljRGlyKTtcbiAgICBleHBlY3QoXG4gICAgICBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKHJ1bnRpbWVEaXIsIFwicHVibGljLWZpbGVzLmpzb25cIiksIFwidXRmLThcIikpLFxuICAgICkudG9FcXVhbChbXCJpbWFnZXMvbG9nb0AyeC5wbmdcIiwgXCJzaXRlbWFwLnhtbFwiLCBcInN0YXRpYy9oZWxsbyBlMmUudHh0XCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJ3cml0ZXMgYW4gZW1wdHkgbGlzdCBmb3IgYW4gYXBwIHdpdGhvdXQgcHVibGljL1wiLCAoKSA9PiB7XG4gICAgd3JpdGVQdWJsaWNGaWxlTGlzdChkaXIsIGpvaW4oZGlyLCBcInB1YmxpY1wiKSk7XG4gICAgZXhwZWN0KFxuICAgICAgSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihkaXIsIFwicHVibGljLWZpbGVzLmpzb25cIiksIFwidXRmLThcIikpLFxuICAgICkudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTmV4dGpzQnVpbGQgd2l0aCBza2lwQnVpbGQgYW5kIG5vIGJ1aWxkIG91dHB1dFwiLCAoKSA9PiB7XG4gIGl0KFwicmVwb3J0cyB0aGUgbWlzc2luZyBhZGFwdGVyIG1hbmlmZXN0LCBub3QgYSBiYXJlIEVOT0VOVFwiLCAoKSA9PiB7XG4gICAgLy8gYEdMT0JBTF9GVU5DVElPTlNgIHBhdGNoZXMgYC5uZXh0L3N0YXRpYy9jaHVua3NgLCB3aGljaCB1c2VkIHRvIGJlIHJlYWRcbiAgICAvLyBmaXJzdCBhbmQgZmFpbCBvbiB0aGUgbWlzc2luZyBkaXJlY3RvcnkuXG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0J1aWxkKG5ldyBTdGFjayhuZXcgQXBwKCksIFwiU3RhY2tcIiksIFwiQnVpbGRcIiwge1xuICAgICAgICAgIGJ1aWxkQ29tbWFuZDogXCJ0cnVlXCIsXG4gICAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGRpcixcbiAgICAgICAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMsXG4gICAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coL2Nkay1uZXh0anMgYWRhcHRlciBtYW5pZmVzdCBub3QgZm91bmQvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJOZXh0anNCdWlsZCB3aXRoIGEgYnVpbGQgc3BsaXQgYnkgb3RoZXIgZnVuY3Rpb25Hcm91cHNcIiwgKCkgPT4ge1xuICBpdChcInJlamVjdHMgYSBidWlsZCB3aG9zZSBncm91cHMga2VwdCB0aGVpciBuYW1lcyBidXQgbm90IHRoZWlyIHJvdXRlc1wiLCAoKSA9PiB7XG4gICAgLy8gTW92aW5nIGAvcmVwb3J0cy8qKmAgaW50byBgYXBpYCBrZWVwcyB0aGUgZ3JvdXAgbmFtZXMsIGFuZCBhIG5hbWVzLW9ubHlcbiAgICAvLyBjaGVjayBsZXQgQ2xvdWRGcm9udCBzZW5kIGByZXBvcnRzLypgIHRvIGEgemlwIHdpdGhvdXQgdGhvc2Ugcm91dGVzLlxuICAgIHdyaXRlKGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiQlVJTERfSURcIiksIFwiYjFcIik7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKGRpciwgXCIubmV4dFwiLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcIm1hbmlmZXN0Lmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGJ1aWxkSWQ6IFwiYjFcIixcbiAgICAgICAgcmVsYXRpdmVQcm9qZWN0RGlyOiBcIlwiLFxuICAgICAgICBjb25maWc6IHsgYmFzZVBhdGg6IFwiXCIsIGFzc2V0UHJlZml4OiBcIlwiLCB0cmFpbGluZ1NsYXNoOiBmYWxzZSB9LFxuICAgICAgICBlbnRyeXBvaW50czoge30sXG4gICAgICAgIGdyb3VwczogeyBkZWZhdWx0OiBbXSwgYXBpOiBbXSB9LFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH1dLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzQnVpbGQobmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKSwgXCJCdWlsZFwiLCB7XG4gICAgICAgICAgYnVpbGRDb21tYW5kOiBcInRydWVcIixcbiAgICAgICAgICBidWlsZERpcmVjdG9yeTogZGlyLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwczogW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCIsIFwiL3JlcG9ydHMvKipcIl0gfV0sXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvYnVpbGQgb3V0cHV0IGlzXFxzK3N0YWxlLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyBhIGJ1aWxkIHdob3NlIGdyb3VwcyBhbmQgcm91dGVzIHdlcmUgb25seSBsaXN0ZWQgaW4gYW5vdGhlciBvcmRlclwiLCAoKSA9PiB7XG4gICAgLy8gT25seSB0aGUgc3RhbGUgY2hlY2sgaXMgdW5kZXIgdGVzdDogcGFzdCBpdCwgdGhlIHVuc3RhZ2VkIHJvb3RzIHRocm93LlxuICAgIHdyaXRlKGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiQlVJTERfSURcIiksIFwiYjFcIik7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKGRpciwgXCIubmV4dFwiLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcIm1hbmlmZXN0Lmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGJ1aWxkSWQ6IFwiYjFcIixcbiAgICAgICAgcmVsYXRpdmVQcm9qZWN0RGlyOiBcIlwiLFxuICAgICAgICBjb25maWc6IHsgYmFzZVBhdGg6IFwiXCIsIGFzc2V0UHJlZml4OiBcIlwiLCB0cmFpbGluZ1NsYXNoOiBmYWxzZSB9LFxuICAgICAgICBlbnRyeXBvaW50czoge30sXG4gICAgICAgIGdyb3VwczogeyBkZWZhdWx0OiBbXSwgYXBpOiBbXSwgZG9jczogW10gfSxcbiAgICAgICAgZnVuY3Rpb25Hcm91cHM6IFtcbiAgICAgICAgICB7IG5hbWU6IFwiYXBpXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiLCBcIi9yZXBvcnRzLyoqXCJdIH0sXG4gICAgICAgICAgeyBuYW1lOiBcImRvY3NcIiwgcm91dGVzOiBbXCIvZG9jcy8qKlwiXSB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzQnVpbGQobmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKSwgXCJCdWlsZFwiLCB7XG4gICAgICAgICAgYnVpbGRDb21tYW5kOiBcInRydWVcIixcbiAgICAgICAgICBidWlsZERpcmVjdG9yeTogZGlyLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImRvY3NcIiwgcm91dGVzOiBbXCIvZG9jcy8qKlwiXSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9yZXBvcnRzLyoqXCIsIFwiL2FwaS8qKlwiXSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICkubm90LnRvVGhyb3coL3N0YWxlLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZGVwbG95bWVudEFyY2hpdGVjdHVyZVwiLCAoKSA9PiB7XG4gIGNvbnN0IGJhc2UgPSB7IGJ1aWxkQ29tbWFuZDogXCJcIiwgYnVpbGREaXJlY3Rvcnk6IFwiXCIgfTtcbiAgY29uc3QgZnVuY3Rpb25zID0geyAuLi5iYXNlLCBuZXh0anNUeXBlOiBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMgfTtcblxuICBjb25zdCBob3N0ID0gcHJvY2Vzcy5hcmNoLnN0YXJ0c1dpdGgoXCJhcm1cIikgPyBcImFybTY0XCIgOiBcIng4Nl82NFwiO1xuXG4gIGl0KFwic3RhZ2VzIHRoZSBGdW5jdGlvbnMgdHlwZXMgZm9yIHRoZSBzeW50aCBtYWNoaW5lIHVubGVzcyB0b2xkIG90aGVyd2lzZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGRlcGxveW1lbnRBcmNoaXRlY3R1cmUoZnVuY3Rpb25zKS5uYW1lKS50b0JlKGhvc3QpO1xuICB9KTtcblxuICAvLyBUaGUgcG9pbnQgb2YgaG9ub3JpbmcgdGhlIHByb3A6IGBzaGFycGAgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlIGlzIG9ubHlcbiAgLy8gYSBkb3dubG9hZCwgc28gdGhlIGJ1aWxkIG5vIGxvbmdlciBoYXMgdG8gcnVuIHdoZXJlIHRoZSBmdW5jdGlvbiB3aWxsLlxuICBpdChcInN0YWdlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZSBhc2tlZCBmb3IsIG5vdCB0aGUgc3ludGggbWFjaGluZSdzXCIsICgpID0+IHtcbiAgICBjb25zdCBvdGhlciA9IGhvc3QgPT09IFwiYXJtNjRcIiA/IEFyY2hpdGVjdHVyZS5YODZfNjQgOiBBcmNoaXRlY3R1cmUuQVJNXzY0O1xuICAgIGV4cGVjdChkZXBsb3ltZW50QXJjaGl0ZWN0dXJlKHsgLi4uZnVuY3Rpb25zLCBhcmNoaXRlY3R1cmU6IG90aGVyIH0pKS50b0JlKFxuICAgICAgb3RoZXIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJmb2xsb3dzIHRoZSBzeW50aCBtYWNoaW5lIGZvciB0aGUgQ29udGFpbmVycyB0eXBlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTLFxuICAgICAgYXJjaGl0ZWN0dXJlOlxuICAgICAgICBob3N0ID09PSBcImFybTY0XCIgPyBBcmNoaXRlY3R1cmUuWDg2XzY0IDogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICB9O1xuICAgIGV4cGVjdChkZXBsb3ltZW50QXJjaGl0ZWN0dXJlKHByb3BzKS5uYW1lKS50b0JlKGhvc3QpO1xuICB9KTtcbn0pO1xuIl19
@@ -86,7 +86,7 @@ function sizeOfDirectory(dir) {
86
86
  * Next.js Cache construct providing unified S3 and DynamoDB cache management.
87
87
  */
88
88
  class NextjsCache extends constructs_1.Construct {
89
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.7.0" };
89
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.7.2" };
90
90
  cacheBucket;
91
91
  revalidationTable;
92
92
  buildId;
@@ -19,7 +19,7 @@ const constants_1 = require("../constants");
19
19
  * Fargate.
20
20
  */
21
21
  class NextjsContainers extends constructs_1.Construct {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.7.0" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.7.2" };
23
23
  albFargateService;
24
24
  ecsCluster;
25
25
  url;
@@ -23,7 +23,7 @@ const zip_directory_1 = require("../utils/zip-directory");
23
23
  * `awslambda.streamifyResponse` directly.
24
24
  */
25
25
  class NextjsFunctions extends constructs_1.Construct {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.7.0" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.7.2" };
27
27
  /**
28
28
  * The `default` group's function: the one the distribution's default behavior
29
29
  * targets, and the only one at all unless `functionGroups` is used.
@@ -11,7 +11,7 @@ const function_groups_1 = require("./adapter/function-groups");
11
11
  const constants_1 = require("./constants");
12
12
  const base_path_1 = require("./utils/base-path");
13
13
  class NextjsDistribution extends constructs_1.Construct {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.7.0" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.7.2" };
15
15
  distribution;
16
16
  props;
17
17
  /**
@@ -18,7 +18,7 @@ const base_path_1 = require("./utils/base-path");
18
18
  * current build id AND are older than `msTtl`
19
19
  */
20
20
  class NextjsPostDeploy extends constructs_1.Construct {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.7.0" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.7.2" };
22
22
  customResource;
23
23
  lambdaFunction;
24
24
  props;
@@ -29,7 +29,7 @@ function staticAssetsObjectsPattern(keyPrefix) {
29
29
  * Creates S3 Bucket for public and _next/static assets and deploys them using S3Deployment.
30
30
  */
31
31
  class NextjsStaticAssets extends constructs_1.Construct {
32
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.7.0" };
32
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.7.2" };
33
33
  bucket;
34
34
  deployment;
35
35
  /**
@@ -15,7 +15,7 @@ const base_path_1 = require("../utils/base-path");
15
15
  * Base class for all Next.js root constructs
16
16
  */
17
17
  class NextjsBaseConstruct extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.0" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.7.2" };
19
19
  nextjsBuild;
20
20
  nextjsStaticAssets;
21
21
  nextjsCache;
@@ -14,7 +14,7 @@ const base_path_1 = require("../utils/base-path");
14
14
  * for containers.
15
15
  */
16
16
  class NextjsGlobalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
17
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.0" };
17
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.7.2" };
18
18
  nextjsContainers;
19
19
  nextjsDistribution;
20
20
  nextjsPostDeploy;
@@ -17,7 +17,7 @@ const base_path_1 = require("../utils/base-path");
17
17
  * for functions.
18
18
  */
19
19
  class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.0" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.7.2" };
21
21
  nextjsFunctions;
22
22
  nextjsDistribution;
23
23
  nextjsPostDeploy;
@@ -13,7 +13,7 @@ const base_path_1 = require("../utils/base-path");
13
13
  * for containers.
14
14
  */
15
15
  class NextjsRegionalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.0" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.7.2" };
17
17
  nextjsContainers;
18
18
  nextjsPostDeploy;
19
19
  /**
@@ -11,7 +11,7 @@ const nextjs_base_construct_1 = require("./nextjs-base-construct");
11
11
  * for routing requests and AWS Lambda Functions for server-side rendering.
12
12
  */
13
13
  class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.0" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.7.2" };
15
15
  nextjsFunctions;
16
16
  nextjsApi;
17
17
  nextjsPostDeploy;