pkg-pr-new 0.0.3 → 0.0.4

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.
Files changed (2) hide show
  1. package/dist/index.js +4 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -10404,7 +10404,7 @@ function extractRepository(manifest) {
10404
10404
  // package.json
10405
10405
  var package_default = {
10406
10406
  name: "pkg-pr-new",
10407
- version: "0.0.3",
10407
+ version: "0.0.2",
10408
10408
  description: "",
10409
10409
  main: "index.js",
10410
10410
  type: "module",
@@ -10432,7 +10432,7 @@ var package_default = {
10432
10432
  };
10433
10433
 
10434
10434
  // index.ts
10435
- var publishUrl = new URL("/publish", "https://localhost:3000");
10435
+ var publishUrl = new URL("/publish", "https://pkg.pr.new/");
10436
10436
  if (!process.env.TEST && process.env.GITHUB_ACTIONS !== "true") {
10437
10437
  console.error("Continuous Releases are only available in Github Actions.");
10438
10438
  process.exit(1);
@@ -10492,7 +10492,7 @@ var main = defineCommand({
10492
10492
  name,
10493
10493
  new URL(
10494
10494
  `/${owner}/${repo}/${name}@${GITHUB_SHA.substring(0, 7)}`,
10495
- "https://localhost:3000"
10495
+ "https://pkg.pr.new/"
10496
10496
  ).href
10497
10497
  );
10498
10498
  }
@@ -10588,4 +10588,4 @@ Make sure to have your package on npm first or configure the 'repository' field
10588
10588
  throw error;
10589
10589
  }
10590
10590
  }
10591
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbnNvbGFAMy4yLjMvbm9kZV9tb2R1bGVzL2NvbnNvbGEvZGlzdC9jb3JlLm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY29uc29sYUAzLjIuMy9ub2RlX21vZHVsZXMvY29uc29sYS9kaXN0L3NoYXJlZC9jb25zb2xhLjA2YWQ4YTY0Lm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY29uc29sYUAzLjIuMy9ub2RlX21vZHVsZXMvY29uc29sYS9kaXN0L3V0aWxzLm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY29uc29sYUAzLjIuMy9ub2RlX21vZHVsZXMvY29uc29sYS9kaXN0L2NodW5rcy9wcm9tcHQubWpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb25zb2xhQDMuMi4zL25vZGVfbW9kdWxlcy9jb25zb2xhL2Rpc3Qvc2hhcmVkL2NvbnNvbGEuMzZjMDAzNGYubWpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9yZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcGFyc2Utb3B0aW9ucy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvaWRlbnRpZmllcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvc2VtdmVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcGFyc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy92YWxpZC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NsZWFuLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvaW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZGlmZi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL21ham9yLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbWlub3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXRjaC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3ByZXJlbGVhc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcmNvbXBhcmUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLWxvb3NlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1idWlsZC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NvcnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9yc29ydC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9lcS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL25lcS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2x0ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NtcC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvZXJjZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0veWFsbGlzdEA0LjAuMC9ub2RlX21vZHVsZXMveWFsbGlzdC9pdGVyYXRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0veWFsbGlzdEA0LjAuMC9ub2RlX21vZHVsZXMveWFsbGlzdC95YWxsaXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9scnUtY2FjaGVANi4wLjAvbm9kZV9tb2R1bGVzL2xydS1jYWNoZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9yYW5nZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9jb21wYXJhdG9yLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvc2F0aXNmaWVzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdG8tY29tcGFyYXRvcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9tYXgtc2F0aXNmeWluZy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL21pbi1zYXRpc2Z5aW5nLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXZlcnNpb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy92YWxpZC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL291dHNpZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9ndHIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9sdHIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9pbnRlcnNlY3RzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc2ltcGxpZnkuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9zdWJzZXQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9idWlsdGluc0A1LjAuMS9ub2RlX21vZHVsZXMvYnVpbHRpbnMvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLW5hbWVANS4wLjAvbm9kZV9tb2R1bGVzL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLW5hbWUvbGliL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb25zb2xhQDMuMi4zL25vZGVfbW9kdWxlcy9jb25zb2xhL2Rpc3QvaW5kZXgubWpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaXR0eUAwLjEuNi9ub2RlX21vZHVsZXMvY2l0dHkvZGlzdC9pbmRleC5tanMiLCAiLi4vaW5kZXgudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL29oYXNoQDEuMS4zL25vZGVfbW9kdWxlcy9vaGFzaC9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDMuMjMuNi9ub2RlX21vZHVsZXMvem9kL2xpYi9pbmRleC5tanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3pvZC1wYWNrYWdlLWpzb25AMS4wLjIvbm9kZV9tb2R1bGVzL3pvZC1wYWNrYWdlLWpzb24vZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcXVpY2stbHJ1QDcuMC4wL25vZGVfbW9kdWxlcy9xdWljay1scnUvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VybC1qb2luQDUuMC4wL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3F1ZXJ5LXJlZ2lzdHJ5QDMuMC4wL25vZGVfbW9kdWxlcy9xdWVyeS1yZWdpc3RyeS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwgIi4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgTG9nTGV2ZWxzID0ge1xuICBzaWxlbnQ6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgZmF0YWw6IDAsXG4gIGVycm9yOiAwLFxuICB3YXJuOiAxLFxuICBsb2c6IDIsXG4gIGluZm86IDMsXG4gIHN1Y2Nlc3M6IDMsXG4gIGZhaWw6IDMsXG4gIHJlYWR5OiAzLFxuICBzdGFydDogMyxcbiAgYm94OiAzLFxuICBkZWJ1ZzogNCxcbiAgdHJhY2U6IDUsXG4gIHZlcmJvc2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxufTtcbmNvbnN0IExvZ1R5cGVzID0ge1xuICAvLyBTaWxlbnRcbiAgc2lsZW50OiB7XG4gICAgbGV2ZWw6IC0xXG4gIH0sXG4gIC8vIExldmVsIDBcbiAgZmF0YWw6IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLmZhdGFsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5lcnJvclxuICB9LFxuICAvLyBMZXZlbCAxXG4gIHdhcm46IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLndhcm5cbiAgfSxcbiAgLy8gTGV2ZWwgMlxuICBsb2c6IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLmxvZ1xuICB9LFxuICAvLyBMZXZlbCAzXG4gIGluZm86IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLmluZm9cbiAgfSxcbiAgc3VjY2Vzczoge1xuICAgIGxldmVsOiBMb2dMZXZlbHMuc3VjY2Vzc1xuICB9LFxuICBmYWlsOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5mYWlsXG4gIH0sXG4gIHJlYWR5OiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5pbmZvXG4gIH0sXG4gIHN0YXJ0OiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5pbmZvXG4gIH0sXG4gIGJveDoge1xuICAgIGxldmVsOiBMb2dMZXZlbHMuaW5mb1xuICB9LFxuICAvLyBMZXZlbCA0XG4gIGRlYnVnOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5kZWJ1Z1xuICB9LFxuICAvLyBMZXZlbCA1XG4gIHRyYWNlOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy50cmFjZVxuICB9LFxuICAvLyBWZXJib3NlXG4gIHZlcmJvc2U6IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLnZlcmJvc2VcbiAgfVxufTtcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn1cbmZ1bmN0aW9uIF9kZWZ1KGJhc2VPYmplY3QsIGRlZmF1bHRzLCBuYW1lc3BhY2UgPSBcIi5cIiwgbWVyZ2VyKSB7XG4gIGlmICghaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgcmV0dXJuIF9kZWZ1KGJhc2VPYmplY3QsIHt9LCBuYW1lc3BhY2UsIG1lcmdlcik7XG4gIH1cbiAgY29uc3Qgb2JqZWN0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBiYXNlT2JqZWN0KSB7XG4gICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIiB8fCBrZXkgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gYmFzZU9iamVjdFtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG1lcmdlciAmJiBtZXJnZXIob2JqZWN0LCBrZXksIHZhbHVlLCBuYW1lc3BhY2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkob2JqZWN0W2tleV0pKSB7XG4gICAgICBvYmplY3Rba2V5XSA9IFsuLi52YWx1ZSwgLi4ub2JqZWN0W2tleV1dO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIGlzT2JqZWN0KG9iamVjdFtrZXldKSkge1xuICAgICAgb2JqZWN0W2tleV0gPSBfZGVmdShcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG9iamVjdFtrZXldLFxuICAgICAgICAobmFtZXNwYWNlID8gYCR7bmFtZXNwYWNlfS5gIDogXCJcIikgKyBrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgbWVyZ2VyXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVmdShtZXJnZXIpIHtcbiAgcmV0dXJuICguLi5hcmd1bWVudHNfKSA9PiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tYXJyYXktcmVkdWNlXG4gICAgYXJndW1lbnRzXy5yZWR1Y2UoKHAsIGMpID0+IF9kZWZ1KHAsIGMsIFwiXCIsIG1lcmdlciksIHt9KVxuICApO1xufVxuY29uc3QgZGVmdSA9IGNyZWF0ZURlZnUoKTtcblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgT2JqZWN0XVwiO1xufVxuZnVuY3Rpb24gaXNMb2dPYmooYXJnKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChhcmcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghYXJnLm1lc3NhZ2UgJiYgIWFyZy5hcmdzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcmcuc3RhY2spIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmxldCBwYXVzZWQgPSBmYWxzZTtcbmNvbnN0IHF1ZXVlID0gW107XG5jbGFzcyBDb25zb2xhIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdHlwZXMgPSBvcHRpb25zLnR5cGVzIHx8IExvZ1R5cGVzO1xuICAgIHRoaXMub3B0aW9ucyA9IGRlZnUoXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRzOiB7IC4uLm9wdGlvbnMuZGVmYXVsdHMgfSxcbiAgICAgICAgbGV2ZWw6IF9ub3JtYWxpemVMb2dMZXZlbChvcHRpb25zLmxldmVsLCB0eXBlcyksXG4gICAgICAgIHJlcG9ydGVyczogWy4uLm9wdGlvbnMucmVwb3J0ZXJzIHx8IFtdXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZXM6IExvZ1R5cGVzLFxuICAgICAgICB0aHJvdHRsZTogMWUzLFxuICAgICAgICB0aHJvdHRsZU1pbjogNSxcbiAgICAgICAgZm9ybWF0T3B0aW9uczoge1xuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgY29sb3JzOiBmYWxzZSxcbiAgICAgICAgICBjb21wYWN0OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIGZvciAoY29uc3QgdHlwZSBpbiB0eXBlcykge1xuICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIC4uLnRoaXMub3B0aW9ucy5kZWZhdWx0cyxcbiAgICAgICAgLi4udHlwZXNbdHlwZV1cbiAgICAgIH07XG4gICAgICB0aGlzW3R5cGVdID0gdGhpcy5fd3JhcExvZ0ZuKGRlZmF1bHRzKTtcbiAgICAgIHRoaXNbdHlwZV0ucmF3ID0gdGhpcy5fd3JhcExvZ0ZuKFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tb2NrRm4pIHtcbiAgICAgIHRoaXMubW9ja1R5cGVzKCk7XG4gICAgfVxuICAgIHRoaXMuX2xhc3RMb2cgPSB7fTtcbiAgfVxuICBnZXQgbGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZXZlbDtcbiAgfVxuICBzZXQgbGV2ZWwobGV2ZWwpIHtcbiAgICB0aGlzLm9wdGlvbnMubGV2ZWwgPSBfbm9ybWFsaXplTG9nTGV2ZWwoXG4gICAgICBsZXZlbCxcbiAgICAgIHRoaXMub3B0aW9ucy50eXBlcyxcbiAgICAgIHRoaXMub3B0aW9ucy5sZXZlbFxuICAgICk7XG4gIH1cbiAgcHJvbXB0KG1lc3NhZ2UsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByb21wdCBpcyBub3Qgc3VwcG9ydGVkIVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wcm9tcHQobWVzc2FnZSwgb3B0cyk7XG4gIH1cbiAgY3JlYXRlKG9wdGlvbnMpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBDb25zb2xhKHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KTtcbiAgICBpZiAodGhpcy5fbW9ja0ZuKSB7XG4gICAgICBpbnN0YW5jZS5tb2NrVHlwZXModGhpcy5fbW9ja0ZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG4gIHdpdGhEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBkZWZhdWx0czoge1xuICAgICAgICAuLi50aGlzLm9wdGlvbnMuZGVmYXVsdHMsXG4gICAgICAgIC4uLmRlZmF1bHRzXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgd2l0aFRhZyh0YWcpIHtcbiAgICByZXR1cm4gdGhpcy53aXRoRGVmYXVsdHMoe1xuICAgICAgdGFnOiB0aGlzLm9wdGlvbnMuZGVmYXVsdHMudGFnID8gdGhpcy5vcHRpb25zLmRlZmF1bHRzLnRhZyArIFwiOlwiICsgdGFnIDogdGFnXG4gICAgfSk7XG4gIH1cbiAgYWRkUmVwb3J0ZXIocmVwb3J0ZXIpIHtcbiAgICB0aGlzLm9wdGlvbnMucmVwb3J0ZXJzLnB1c2gocmVwb3J0ZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHJlbW92ZVJlcG9ydGVyKHJlcG9ydGVyKSB7XG4gICAgaWYgKHJlcG9ydGVyKSB7XG4gICAgICBjb25zdCBpID0gdGhpcy5vcHRpb25zLnJlcG9ydGVycy5pbmRleE9mKHJlcG9ydGVyKTtcbiAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZXBvcnRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMucmVwb3J0ZXJzLnNwbGljZSgwKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgc2V0UmVwb3J0ZXJzKHJlcG9ydGVycykge1xuICAgIHRoaXMub3B0aW9ucy5yZXBvcnRlcnMgPSBBcnJheS5pc0FycmF5KHJlcG9ydGVycykgPyByZXBvcnRlcnMgOiBbcmVwb3J0ZXJzXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB3cmFwQWxsKCkge1xuICAgIHRoaXMud3JhcENvbnNvbGUoKTtcbiAgICB0aGlzLndyYXBTdGQoKTtcbiAgfVxuICByZXN0b3JlQWxsKCkge1xuICAgIHRoaXMucmVzdG9yZUNvbnNvbGUoKTtcbiAgICB0aGlzLnJlc3RvcmVTdGQoKTtcbiAgfVxuICB3cmFwQ29uc29sZSgpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgaW4gdGhpcy5vcHRpb25zLnR5cGVzKSB7XG4gICAgICBpZiAoIWNvbnNvbGVbXCJfX1wiICsgdHlwZV0pIHtcbiAgICAgICAgY29uc29sZVtcIl9fXCIgKyB0eXBlXSA9IGNvbnNvbGVbdHlwZV07XG4gICAgICB9XG4gICAgICBjb25zb2xlW3R5cGVdID0gdGhpc1t0eXBlXS5yYXc7XG4gICAgfVxuICB9XG4gIHJlc3RvcmVDb25zb2xlKCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBpbiB0aGlzLm9wdGlvbnMudHlwZXMpIHtcbiAgICAgIGlmIChjb25zb2xlW1wiX19cIiArIHR5cGVdKSB7XG4gICAgICAgIGNvbnNvbGVbdHlwZV0gPSBjb25zb2xlW1wiX19cIiArIHR5cGVdO1xuICAgICAgICBkZWxldGUgY29uc29sZVtcIl9fXCIgKyB0eXBlXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgd3JhcFN0ZCgpIHtcbiAgICB0aGlzLl93cmFwU3RyZWFtKHRoaXMub3B0aW9ucy5zdGRvdXQsIFwibG9nXCIpO1xuICAgIHRoaXMuX3dyYXBTdHJlYW0odGhpcy5vcHRpb25zLnN0ZGVyciwgXCJsb2dcIik7XG4gIH1cbiAgX3dyYXBTdHJlYW0oc3RyZWFtLCB0eXBlKSB7XG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzdHJlYW0uX193cml0ZSkge1xuICAgICAgc3RyZWFtLl9fd3JpdGUgPSBzdHJlYW0ud3JpdGU7XG4gICAgfVxuICAgIHN0cmVhbS53cml0ZSA9IChkYXRhKSA9PiB7XG4gICAgICB0aGlzW3R5cGVdLnJhdyhTdHJpbmcoZGF0YSkudHJpbSgpKTtcbiAgICB9O1xuICB9XG4gIHJlc3RvcmVTdGQoKSB7XG4gICAgdGhpcy5fcmVzdG9yZVN0cmVhbSh0aGlzLm9wdGlvbnMuc3Rkb3V0KTtcbiAgICB0aGlzLl9yZXN0b3JlU3RyZWFtKHRoaXMub3B0aW9ucy5zdGRlcnIpO1xuICB9XG4gIF9yZXN0b3JlU3RyZWFtKHN0cmVhbSkge1xuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdHJlYW0uX193cml0ZSkge1xuICAgICAgc3RyZWFtLndyaXRlID0gc3RyZWFtLl9fd3JpdGU7XG4gICAgICBkZWxldGUgc3RyZWFtLl9fd3JpdGU7XG4gICAgfVxuICB9XG4gIHBhdXNlTG9ncygpIHtcbiAgICBwYXVzZWQgPSB0cnVlO1xuICB9XG4gIHJlc3VtZUxvZ3MoKSB7XG4gICAgcGF1c2VkID0gZmFsc2U7XG4gICAgY29uc3QgX3F1ZXVlID0gcXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBfcXVldWUpIHtcbiAgICAgIGl0ZW1bMF0uX2xvZ0ZuKGl0ZW1bMV0sIGl0ZW1bMl0pO1xuICAgIH1cbiAgfVxuICBtb2NrVHlwZXMobW9ja0ZuKSB7XG4gICAgY29uc3QgX21vY2tGbiA9IG1vY2tGbiB8fCB0aGlzLm9wdGlvbnMubW9ja0ZuO1xuICAgIHRoaXMuX21vY2tGbiA9IF9tb2NrRm47XG4gICAgaWYgKHR5cGVvZiBfbW9ja0ZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0eXBlIGluIHRoaXMub3B0aW9ucy50eXBlcykge1xuICAgICAgdGhpc1t0eXBlXSA9IF9tb2NrRm4odHlwZSwgdGhpcy5vcHRpb25zLnR5cGVzW3R5cGVdKSB8fCB0aGlzW3R5cGVdO1xuICAgICAgdGhpc1t0eXBlXS5yYXcgPSB0aGlzW3R5cGVdO1xuICAgIH1cbiAgfVxuICBfd3JhcExvZ0ZuKGRlZmF1bHRzLCBpc1Jhdykge1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKHBhdXNlZCkge1xuICAgICAgICBxdWV1ZS5wdXNoKFt0aGlzLCBkZWZhdWx0cywgYXJncywgaXNSYXddKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2xvZ0ZuKGRlZmF1bHRzLCBhcmdzLCBpc1Jhdyk7XG4gICAgfTtcbiAgfVxuICBfbG9nRm4oZGVmYXVsdHMsIGFyZ3MsIGlzUmF3KSB7XG4gICAgaWYgKChkZWZhdWx0cy5sZXZlbCB8fCAwKSA+IHRoaXMubGV2ZWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbG9nT2JqID0ge1xuICAgICAgZGF0ZTogLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksXG4gICAgICBhcmdzOiBbXSxcbiAgICAgIC4uLmRlZmF1bHRzLFxuICAgICAgbGV2ZWw6IF9ub3JtYWxpemVMb2dMZXZlbChkZWZhdWx0cy5sZXZlbCwgdGhpcy5vcHRpb25zLnR5cGVzKVxuICAgIH07XG4gICAgaWYgKCFpc1JhdyAmJiBhcmdzLmxlbmd0aCA9PT0gMSAmJiBpc0xvZ09iaihhcmdzWzBdKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihsb2dPYmosIGFyZ3NbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dPYmouYXJncyA9IFsuLi5hcmdzXTtcbiAgICB9XG4gICAgaWYgKGxvZ09iai5tZXNzYWdlKSB7XG4gICAgICBsb2dPYmouYXJncy51bnNoaWZ0KGxvZ09iai5tZXNzYWdlKTtcbiAgICAgIGRlbGV0ZSBsb2dPYmoubWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKGxvZ09iai5hZGRpdGlvbmFsKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobG9nT2JqLmFkZGl0aW9uYWwpKSB7XG4gICAgICAgIGxvZ09iai5hZGRpdGlvbmFsID0gbG9nT2JqLmFkZGl0aW9uYWwuc3BsaXQoXCJcXG5cIik7XG4gICAgICB9XG4gICAgICBsb2dPYmouYXJncy5wdXNoKFwiXFxuXCIgKyBsb2dPYmouYWRkaXRpb25hbC5qb2luKFwiXFxuXCIpKTtcbiAgICAgIGRlbGV0ZSBsb2dPYmouYWRkaXRpb25hbDtcbiAgICB9XG4gICAgbG9nT2JqLnR5cGUgPSB0eXBlb2YgbG9nT2JqLnR5cGUgPT09IFwic3RyaW5nXCIgPyBsb2dPYmoudHlwZS50b0xvd2VyQ2FzZSgpIDogXCJsb2dcIjtcbiAgICBsb2dPYmoudGFnID0gdHlwZW9mIGxvZ09iai50YWcgPT09IFwic3RyaW5nXCIgPyBsb2dPYmoudGFnIDogXCJcIjtcbiAgICBjb25zdCByZXNvbHZlTG9nID0gKG5ld0xvZyA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCByZXBlYXRlZCA9ICh0aGlzLl9sYXN0TG9nLmNvdW50IHx8IDApIC0gdGhpcy5vcHRpb25zLnRocm90dGxlTWluO1xuICAgICAgaWYgKHRoaXMuX2xhc3RMb2cub2JqZWN0ICYmIHJlcGVhdGVkID4gMCkge1xuICAgICAgICBjb25zdCBhcmdzMiA9IFsuLi50aGlzLl9sYXN0TG9nLm9iamVjdC5hcmdzXTtcbiAgICAgICAgaWYgKHJlcGVhdGVkID4gMSkge1xuICAgICAgICAgIGFyZ3MyLnB1c2goYChyZXBlYXRlZCAke3JlcGVhdGVkfSB0aW1lcylgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sb2coeyAuLi50aGlzLl9sYXN0TG9nLm9iamVjdCwgYXJnczogYXJnczIgfSk7XG4gICAgICAgIHRoaXMuX2xhc3RMb2cuY291bnQgPSAxO1xuICAgICAgfVxuICAgICAgaWYgKG5ld0xvZykge1xuICAgICAgICB0aGlzLl9sYXN0TG9nLm9iamVjdCA9IGxvZ09iajtcbiAgICAgICAgdGhpcy5fbG9nKGxvZ09iaik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fbGFzdExvZy50aW1lb3V0KTtcbiAgICBjb25zdCBkaWZmVGltZSA9IHRoaXMuX2xhc3RMb2cudGltZSAmJiBsb2dPYmouZGF0ZSA/IGxvZ09iai5kYXRlLmdldFRpbWUoKSAtIHRoaXMuX2xhc3RMb2cudGltZS5nZXRUaW1lKCkgOiAwO1xuICAgIHRoaXMuX2xhc3RMb2cudGltZSA9IGxvZ09iai5kYXRlO1xuICAgIGlmIChkaWZmVGltZSA8IHRoaXMub3B0aW9ucy50aHJvdHRsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZExvZyA9IEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICBsb2dPYmoudHlwZSxcbiAgICAgICAgICBsb2dPYmoudGFnLFxuICAgICAgICAgIGxvZ09iai5hcmdzXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBpc1NhbWVMb2cgPSB0aGlzLl9sYXN0TG9nLnNlcmlhbGl6ZWQgPT09IHNlcmlhbGl6ZWRMb2c7XG4gICAgICAgIHRoaXMuX2xhc3RMb2cuc2VyaWFsaXplZCA9IHNlcmlhbGl6ZWRMb2c7XG4gICAgICAgIGlmIChpc1NhbWVMb2cpIHtcbiAgICAgICAgICB0aGlzLl9sYXN0TG9nLmNvdW50ID0gKHRoaXMuX2xhc3RMb2cuY291bnQgfHwgMCkgKyAxO1xuICAgICAgICAgIGlmICh0aGlzLl9sYXN0TG9nLmNvdW50ID4gdGhpcy5vcHRpb25zLnRocm90dGxlTWluKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0TG9nLnRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICByZXNvbHZlTG9nLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMudGhyb3R0bGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzb2x2ZUxvZyh0cnVlKTtcbiAgfVxuICBfbG9nKGxvZ09iaikge1xuICAgIGZvciAoY29uc3QgcmVwb3J0ZXIgb2YgdGhpcy5vcHRpb25zLnJlcG9ydGVycykge1xuICAgICAgcmVwb3J0ZXIubG9nKGxvZ09iaiwge1xuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX25vcm1hbGl6ZUxvZ0xldmVsKGlucHV0LCB0eXBlcyA9IHt9LCBkZWZhdWx0TGV2ZWwgPSAzKSB7XG4gIGlmIChpbnB1dCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMZXZlbDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmICh0eXBlc1tpbnB1dF0gJiYgdHlwZXNbaW5wdXRdLmxldmVsICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdHlwZXNbaW5wdXRdLmxldmVsO1xuICB9XG4gIHJldHVybiBkZWZhdWx0TGV2ZWw7XG59XG5Db25zb2xhLnByb3RvdHlwZS5hZGQgPSBDb25zb2xhLnByb3RvdHlwZS5hZGRSZXBvcnRlcjtcbkNvbnNvbGEucHJvdG90eXBlLnJlbW92ZSA9IENvbnNvbGEucHJvdG90eXBlLnJlbW92ZVJlcG9ydGVyO1xuQ29uc29sYS5wcm90b3R5cGUuY2xlYXIgPSBDb25zb2xhLnByb3RvdHlwZS5yZW1vdmVSZXBvcnRlcjtcbkNvbnNvbGEucHJvdG90eXBlLndpdGhTY29wZSA9IENvbnNvbGEucHJvdG90eXBlLndpdGhUYWc7XG5Db25zb2xhLnByb3RvdHlwZS5tb2NrID0gQ29uc29sYS5wcm90b3R5cGUubW9ja1R5cGVzO1xuQ29uc29sYS5wcm90b3R5cGUucGF1c2UgPSBDb25zb2xhLnByb3RvdHlwZS5wYXVzZUxvZ3M7XG5Db25zb2xhLnByb3RvdHlwZS5yZXN1bWUgPSBDb25zb2xhLnByb3RvdHlwZS5yZXN1bWVMb2dzO1xuZnVuY3Rpb24gY3JlYXRlQ29uc29sYShvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIG5ldyBDb25zb2xhKG9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBDb25zb2xhLCBMb2dMZXZlbHMsIExvZ1R5cGVzLCBjcmVhdGVDb25zb2xhIH07XG4iLCAiaW1wb3J0IHsgZm9ybWF0V2l0aE9wdGlvbnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgc2VwIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuZnVuY3Rpb24gcGFyc2VTdGFjayhzdGFjaykge1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpICsgc2VwO1xuICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KFwiXFxuXCIpLnNwbGljZSgxKS5tYXAoKGwpID0+IGwudHJpbSgpLnJlcGxhY2UoXCJmaWxlOi8vXCIsIFwiXCIpLnJlcGxhY2UoY3dkLCBcIlwiKSk7XG4gIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJlYW0oZGF0YSwgc3RyZWFtKSB7XG4gIGNvbnN0IHdyaXRlID0gc3RyZWFtLl9fd3JpdGUgfHwgc3RyZWFtLndyaXRlO1xuICByZXR1cm4gd3JpdGUuY2FsbChzdHJlYW0sIGRhdGEpO1xufVxuXG5jb25zdCBicmFja2V0ID0gKHgpID0+IHggPyBgWyR7eH1dYCA6IFwiXCI7XG5jbGFzcyBCYXNpY1JlcG9ydGVyIHtcbiAgZm9ybWF0U3RhY2soc3RhY2ssIG9wdHMpIHtcbiAgICByZXR1cm4gXCIgIFwiICsgcGFyc2VTdGFjayhzdGFjaykuam9pbihcIlxcbiAgXCIpO1xuICB9XG4gIGZvcm1hdEFyZ3MoYXJncywgb3B0cykge1xuICAgIGNvbnN0IF9hcmdzID0gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnLnN0YWNrID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBhcmcubWVzc2FnZSArIFwiXFxuXCIgKyB0aGlzLmZvcm1hdFN0YWNrKGFyZy5zdGFjaywgb3B0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtYXRXaXRoT3B0aW9ucyhvcHRzLCAuLi5fYXJncyk7XG4gIH1cbiAgZm9ybWF0RGF0ZShkYXRlLCBvcHRzKSB7XG4gICAgcmV0dXJuIG9wdHMuZGF0ZSA/IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCkgOiBcIlwiO1xuICB9XG4gIGZpbHRlckFuZEpvaW4oYXJyKSB7XG4gICAgcmV0dXJuIGFyci5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIH1cbiAgZm9ybWF0TG9nT2JqKGxvZ09iaiwgb3B0cykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmZvcm1hdEFyZ3MobG9nT2JqLmFyZ3MsIG9wdHMpO1xuICAgIGlmIChsb2dPYmoudHlwZSA9PT0gXCJib3hcIikge1xuICAgICAgcmV0dXJuIFwiXFxuXCIgKyBbXG4gICAgICAgIGJyYWNrZXQobG9nT2JqLnRhZyksXG4gICAgICAgIGxvZ09iai50aXRsZSAmJiBsb2dPYmoudGl0bGUsXG4gICAgICAgIC4uLm1lc3NhZ2Uuc3BsaXQoXCJcXG5cIilcbiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLm1hcCgobCkgPT4gXCIgPiBcIiArIGwpLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJBbmRKb2luKFtcbiAgICAgIGJyYWNrZXQobG9nT2JqLnR5cGUpLFxuICAgICAgYnJhY2tldChsb2dPYmoudGFnKSxcbiAgICAgIG1lc3NhZ2VcbiAgICBdKTtcbiAgfVxuICBsb2cobG9nT2JqLCBjdHgpIHtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5mb3JtYXRMb2dPYmoobG9nT2JqLCB7XG4gICAgICBjb2x1bW5zOiBjdHgub3B0aW9ucy5zdGRvdXQuY29sdW1ucyB8fCAwLFxuICAgICAgLi4uY3R4Lm9wdGlvbnMuZm9ybWF0T3B0aW9uc1xuICAgIH0pO1xuICAgIHJldHVybiB3cml0ZVN0cmVhbShcbiAgICAgIGxpbmUgKyBcIlxcblwiLFxuICAgICAgbG9nT2JqLmxldmVsIDwgMiA/IGN0eC5vcHRpb25zLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyciA6IGN0eC5vcHRpb25zLnN0ZG91dCB8fCBwcm9jZXNzLnN0ZG91dFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzaWNSZXBvcnRlciBhcyBCLCBwYXJzZVN0YWNrIGFzIHAgfTtcbiIsICJpbXBvcnQgKiBhcyB0dHkgZnJvbSAnbm9kZTp0dHknO1xuXG5jb25zdCB7XG4gIGVudiA9IHt9LFxuICBhcmd2ID0gW10sXG4gIHBsYXRmb3JtID0gXCJcIlxufSA9IHR5cGVvZiBwcm9jZXNzID09PSBcInVuZGVmaW5lZFwiID8ge30gOiBwcm9jZXNzO1xuY29uc3QgaXNEaXNhYmxlZCA9IFwiTk9fQ09MT1JcIiBpbiBlbnYgfHwgYXJndi5pbmNsdWRlcyhcIi0tbm8tY29sb3JcIik7XG5jb25zdCBpc0ZvcmNlZCA9IFwiRk9SQ0VfQ09MT1JcIiBpbiBlbnYgfHwgYXJndi5pbmNsdWRlcyhcIi0tY29sb3JcIik7XG5jb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xuY29uc3QgaXNEdW1iVGVybWluYWwgPSBlbnYuVEVSTSA9PT0gXCJkdW1iXCI7XG5jb25zdCBpc0NvbXBhdGlibGVUZXJtaW5hbCA9IHR0eSAmJiB0dHkuaXNhdHR5ICYmIHR0eS5pc2F0dHkoMSkgJiYgZW52LlRFUk0gJiYgIWlzRHVtYlRlcm1pbmFsO1xuY29uc3QgaXNDSSA9IFwiQ0lcIiBpbiBlbnYgJiYgKFwiR0lUSFVCX0FDVElPTlNcIiBpbiBlbnYgfHwgXCJHSVRMQUJfQ0lcIiBpbiBlbnYgfHwgXCJDSVJDTEVDSVwiIGluIGVudik7XG5jb25zdCBpc0NvbG9yU3VwcG9ydGVkID0gIWlzRGlzYWJsZWQgJiYgKGlzRm9yY2VkIHx8IGlzV2luZG93cyAmJiAhaXNEdW1iVGVybWluYWwgfHwgaXNDb21wYXRpYmxlVGVybWluYWwgfHwgaXNDSSk7XG5mdW5jdGlvbiByZXBsYWNlQ2xvc2UoaW5kZXgsIHN0cmluZywgY2xvc2UsIHJlcGxhY2UsIGhlYWQgPSBzdHJpbmcuc2xpY2UoMCwgTWF0aC5tYXgoMCwgaW5kZXgpKSArIHJlcGxhY2UsIHRhaWwgPSBzdHJpbmcuc2xpY2UoTWF0aC5tYXgoMCwgaW5kZXggKyBjbG9zZS5sZW5ndGgpKSwgbmV4dCA9IHRhaWwuaW5kZXhPZihjbG9zZSkpIHtcbiAgcmV0dXJuIGhlYWQgKyAobmV4dCA8IDAgPyB0YWlsIDogcmVwbGFjZUNsb3NlKG5leHQsIHRhaWwsIGNsb3NlLCByZXBsYWNlKSk7XG59XG5mdW5jdGlvbiBjbGVhckJsZWVkKGluZGV4LCBzdHJpbmcsIG9wZW4sIGNsb3NlLCByZXBsYWNlKSB7XG4gIHJldHVybiBpbmRleCA8IDAgPyBvcGVuICsgc3RyaW5nICsgY2xvc2UgOiBvcGVuICsgcmVwbGFjZUNsb3NlKGluZGV4LCBzdHJpbmcsIGNsb3NlLCByZXBsYWNlKSArIGNsb3NlO1xufVxuZnVuY3Rpb24gZmlsdGVyRW1wdHkob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuLCBhdCA9IG9wZW4ubGVuZ3RoICsgMSkge1xuICByZXR1cm4gKHN0cmluZykgPT4gc3RyaW5nIHx8ICEoc3RyaW5nID09PSBcIlwiIHx8IHN0cmluZyA9PT0gdm9pZCAwKSA/IGNsZWFyQmxlZWQoXG4gICAgKFwiXCIgKyBzdHJpbmcpLmluZGV4T2YoY2xvc2UsIGF0KSxcbiAgICBzdHJpbmcsXG4gICAgb3BlbixcbiAgICBjbG9zZSxcbiAgICByZXBsYWNlXG4gICkgOiBcIlwiO1xufVxuZnVuY3Rpb24gaW5pdChvcGVuLCBjbG9zZSwgcmVwbGFjZSkge1xuICByZXR1cm4gZmlsdGVyRW1wdHkoYFxceDFCWyR7b3Blbn1tYCwgYFxceDFCWyR7Y2xvc2V9bWAsIHJlcGxhY2UpO1xufVxuY29uc3QgY29sb3JEZWZzID0ge1xuICByZXNldDogaW5pdCgwLCAwKSxcbiAgYm9sZDogaW5pdCgxLCAyMiwgXCJcXHgxQlsyMm1cXHgxQlsxbVwiKSxcbiAgZGltOiBpbml0KDIsIDIyLCBcIlxceDFCWzIybVxceDFCWzJtXCIpLFxuICBpdGFsaWM6IGluaXQoMywgMjMpLFxuICB1bmRlcmxpbmU6IGluaXQoNCwgMjQpLFxuICBpbnZlcnNlOiBpbml0KDcsIDI3KSxcbiAgaGlkZGVuOiBpbml0KDgsIDI4KSxcbiAgc3RyaWtldGhyb3VnaDogaW5pdCg5LCAyOSksXG4gIGJsYWNrOiBpbml0KDMwLCAzOSksXG4gIHJlZDogaW5pdCgzMSwgMzkpLFxuICBncmVlbjogaW5pdCgzMiwgMzkpLFxuICB5ZWxsb3c6IGluaXQoMzMsIDM5KSxcbiAgYmx1ZTogaW5pdCgzNCwgMzkpLFxuICBtYWdlbnRhOiBpbml0KDM1LCAzOSksXG4gIGN5YW46IGluaXQoMzYsIDM5KSxcbiAgd2hpdGU6IGluaXQoMzcsIDM5KSxcbiAgZ3JheTogaW5pdCg5MCwgMzkpLFxuICBiZ0JsYWNrOiBpbml0KDQwLCA0OSksXG4gIGJnUmVkOiBpbml0KDQxLCA0OSksXG4gIGJnR3JlZW46IGluaXQoNDIsIDQ5KSxcbiAgYmdZZWxsb3c6IGluaXQoNDMsIDQ5KSxcbiAgYmdCbHVlOiBpbml0KDQ0LCA0OSksXG4gIGJnTWFnZW50YTogaW5pdCg0NSwgNDkpLFxuICBiZ0N5YW46IGluaXQoNDYsIDQ5KSxcbiAgYmdXaGl0ZTogaW5pdCg0NywgNDkpLFxuICBibGFja0JyaWdodDogaW5pdCg5MCwgMzkpLFxuICByZWRCcmlnaHQ6IGluaXQoOTEsIDM5KSxcbiAgZ3JlZW5CcmlnaHQ6IGluaXQoOTIsIDM5KSxcbiAgeWVsbG93QnJpZ2h0OiBpbml0KDkzLCAzOSksXG4gIGJsdWVCcmlnaHQ6IGluaXQoOTQsIDM5KSxcbiAgbWFnZW50YUJyaWdodDogaW5pdCg5NSwgMzkpLFxuICBjeWFuQnJpZ2h0OiBpbml0KDk2LCAzOSksXG4gIHdoaXRlQnJpZ2h0OiBpbml0KDk3LCAzOSksXG4gIGJnQmxhY2tCcmlnaHQ6IGluaXQoMTAwLCA0OSksXG4gIGJnUmVkQnJpZ2h0OiBpbml0KDEwMSwgNDkpLFxuICBiZ0dyZWVuQnJpZ2h0OiBpbml0KDEwMiwgNDkpLFxuICBiZ1llbGxvd0JyaWdodDogaW5pdCgxMDMsIDQ5KSxcbiAgYmdCbHVlQnJpZ2h0OiBpbml0KDEwNCwgNDkpLFxuICBiZ01hZ2VudGFCcmlnaHQ6IGluaXQoMTA1LCA0OSksXG4gIGJnQ3lhbkJyaWdodDogaW5pdCgxMDYsIDQ5KSxcbiAgYmdXaGl0ZUJyaWdodDogaW5pdCgxMDcsIDQ5KVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNvbG9ycyh1c2VDb2xvciA9IGlzQ29sb3JTdXBwb3J0ZWQpIHtcbiAgcmV0dXJuIHVzZUNvbG9yID8gY29sb3JEZWZzIDogT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKGNvbG9yRGVmcykubWFwKChrZXkpID0+IFtrZXksIFN0cmluZ10pKTtcbn1cbmNvbnN0IGNvbG9ycyA9IGNyZWF0ZUNvbG9ycygpO1xuZnVuY3Rpb24gZ2V0Q29sb3IoY29sb3IsIGZhbGxiYWNrID0gXCJyZXNldFwiKSB7XG4gIHJldHVybiBjb2xvcnNbY29sb3JdIHx8IGNvbG9yc1tmYWxsYmFja107XG59XG5mdW5jdGlvbiBjb2xvcml6ZShjb2xvciwgdGV4dCkge1xuICByZXR1cm4gZ2V0Q29sb3IoY29sb3IpKHRleHQpO1xufVxuXG5jb25zdCBhbnNpUmVnZXggPSBbXG4gIFwiW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KVwiLFxuICBcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpXCJcbl0uam9pbihcInxcIik7XG5mdW5jdGlvbiBzdHJpcEFuc2kodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoYW5zaVJlZ2V4LCBcImdcIiksIFwiXCIpO1xufVxuZnVuY3Rpb24gY2VudGVyQWxpZ24oc3RyLCBsZW4sIHNwYWNlID0gXCIgXCIpIHtcbiAgY29uc3QgZnJlZSA9IGxlbiAtIHN0ci5sZW5ndGg7XG4gIGlmIChmcmVlIDw9IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGNvbnN0IGZyZWVMZWZ0ID0gTWF0aC5mbG9vcihmcmVlIC8gMik7XG4gIGxldCBfc3RyID0gXCJcIjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIF9zdHIgKz0gaSA8IGZyZWVMZWZ0IHx8IGkgPj0gZnJlZUxlZnQgKyBzdHIubGVuZ3RoID8gc3BhY2UgOiBzdHJbaSAtIGZyZWVMZWZ0XTtcbiAgfVxuICByZXR1cm4gX3N0cjtcbn1cbmZ1bmN0aW9uIHJpZ2h0QWxpZ24oc3RyLCBsZW4sIHNwYWNlID0gXCIgXCIpIHtcbiAgY29uc3QgZnJlZSA9IGxlbiAtIHN0ci5sZW5ndGg7XG4gIGlmIChmcmVlIDw9IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGxldCBfc3RyID0gXCJcIjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIF9zdHIgKz0gaSA8IGZyZWUgPyBzcGFjZSA6IHN0cltpIC0gZnJlZV07XG4gIH1cbiAgcmV0dXJuIF9zdHI7XG59XG5mdW5jdGlvbiBsZWZ0QWxpZ24oc3RyLCBsZW4sIHNwYWNlID0gXCIgXCIpIHtcbiAgbGV0IF9zdHIgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgX3N0ciArPSBpIDwgc3RyLmxlbmd0aCA/IHN0cltpXSA6IHNwYWNlO1xuICB9XG4gIHJldHVybiBfc3RyO1xufVxuZnVuY3Rpb24gYWxpZ24oYWxpZ25tZW50LCBzdHIsIGxlbiwgc3BhY2UgPSBcIiBcIikge1xuICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgIGNhc2UgXCJsZWZ0XCI6IHtcbiAgICAgIHJldHVybiBsZWZ0QWxpZ24oc3RyLCBsZW4sIHNwYWNlKTtcbiAgICB9XG4gICAgY2FzZSBcInJpZ2h0XCI6IHtcbiAgICAgIHJldHVybiByaWdodEFsaWduKHN0ciwgbGVuLCBzcGFjZSk7XG4gICAgfVxuICAgIGNhc2UgXCJjZW50ZXJcIjoge1xuICAgICAgcmV0dXJuIGNlbnRlckFsaWduKHN0ciwgbGVuLCBzcGFjZSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGJveFN0eWxlUHJlc2V0cyA9IHtcbiAgc29saWQ6IHtcbiAgICB0bDogXCJcXHUyNTBDXCIsXG4gICAgdHI6IFwiXFx1MjUxMFwiLFxuICAgIGJsOiBcIlxcdTI1MTRcIixcbiAgICBicjogXCJcXHUyNTE4XCIsXG4gICAgaDogXCJcXHUyNTAwXCIsXG4gICAgdjogXCJcXHUyNTAyXCJcbiAgfSxcbiAgZG91YmxlOiB7XG4gICAgdGw6IFwiXFx1MjU1NFwiLFxuICAgIHRyOiBcIlxcdTI1NTdcIixcbiAgICBibDogXCJcXHUyNTVBXCIsXG4gICAgYnI6IFwiXFx1MjU1RFwiLFxuICAgIGg6IFwiXFx1MjU1MFwiLFxuICAgIHY6IFwiXFx1MjU1MVwiXG4gIH0sXG4gIGRvdWJsZVNpbmdsZToge1xuICAgIHRsOiBcIlxcdTI1NTNcIixcbiAgICB0cjogXCJcXHUyNTU2XCIsXG4gICAgYmw6IFwiXFx1MjU1OVwiLFxuICAgIGJyOiBcIlxcdTI1NUNcIixcbiAgICBoOiBcIlxcdTI1MDBcIixcbiAgICB2OiBcIlxcdTI1NTFcIlxuICB9LFxuICBkb3VibGVTaW5nbGVSb3VuZGVkOiB7XG4gICAgdGw6IFwiXFx1MjU2RFwiLFxuICAgIHRyOiBcIlxcdTI1NkVcIixcbiAgICBibDogXCJcXHUyNTcwXCIsXG4gICAgYnI6IFwiXFx1MjU2RlwiLFxuICAgIGg6IFwiXFx1MjUwMFwiLFxuICAgIHY6IFwiXFx1MjU1MVwiXG4gIH0sXG4gIHNpbmdsZVRoaWNrOiB7XG4gICAgdGw6IFwiXFx1MjUwRlwiLFxuICAgIHRyOiBcIlxcdTI1MTNcIixcbiAgICBibDogXCJcXHUyNTE3XCIsXG4gICAgYnI6IFwiXFx1MjUxQlwiLFxuICAgIGg6IFwiXFx1MjUwMVwiLFxuICAgIHY6IFwiXFx1MjUwM1wiXG4gIH0sXG4gIHNpbmdsZURvdWJsZToge1xuICAgIHRsOiBcIlxcdTI1NTJcIixcbiAgICB0cjogXCJcXHUyNTU1XCIsXG4gICAgYmw6IFwiXFx1MjU1OFwiLFxuICAgIGJyOiBcIlxcdTI1NUJcIixcbiAgICBoOiBcIlxcdTI1NTBcIixcbiAgICB2OiBcIlxcdTI1MDJcIlxuICB9LFxuICBzaW5nbGVEb3VibGVSb3VuZGVkOiB7XG4gICAgdGw6IFwiXFx1MjU2RFwiLFxuICAgIHRyOiBcIlxcdTI1NkVcIixcbiAgICBibDogXCJcXHUyNTcwXCIsXG4gICAgYnI6IFwiXFx1MjU2RlwiLFxuICAgIGg6IFwiXFx1MjU1MFwiLFxuICAgIHY6IFwiXFx1MjUwMlwiXG4gIH0sXG4gIHJvdW5kZWQ6IHtcbiAgICB0bDogXCJcXHUyNTZEXCIsXG4gICAgdHI6IFwiXFx1MjU2RVwiLFxuICAgIGJsOiBcIlxcdTI1NzBcIixcbiAgICBicjogXCJcXHUyNTZGXCIsXG4gICAgaDogXCJcXHUyNTAwXCIsXG4gICAgdjogXCJcXHUyNTAyXCJcbiAgfVxufTtcbmNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgYm9yZGVyQ29sb3I6IFwid2hpdGVcIixcbiAgYm9yZGVyU3R5bGU6IFwicm91bmRlZFwiLFxuICB2YWxpZ246IFwiY2VudGVyXCIsXG4gIHBhZGRpbmc6IDIsXG4gIG1hcmdpbkxlZnQ6IDEsXG4gIG1hcmdpblRvcDogMSxcbiAgbWFyZ2luQm90dG9tOiAxXG59O1xuZnVuY3Rpb24gYm94KHRleHQsIF9vcHRzID0ge30pIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICAuLi5fb3B0cyxcbiAgICBzdHlsZToge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4uX29wdHMuc3R5bGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IHRleHRMaW5lcyA9IHRleHQuc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IGJveExpbmVzID0gW107XG4gIGNvbnN0IF9jb2xvciA9IGdldENvbG9yKG9wdHMuc3R5bGUuYm9yZGVyQ29sb3IpO1xuICBjb25zdCBib3JkZXJTdHlsZSA9IHtcbiAgICAuLi50eXBlb2Ygb3B0cy5zdHlsZS5ib3JkZXJTdHlsZSA9PT0gXCJzdHJpbmdcIiA/IGJveFN0eWxlUHJlc2V0c1tvcHRzLnN0eWxlLmJvcmRlclN0eWxlXSB8fCBib3hTdHlsZVByZXNldHMuc29saWQgOiBvcHRzLnN0eWxlLmJvcmRlclN0eWxlXG4gIH07XG4gIGlmIChfY29sb3IpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBib3JkZXJTdHlsZSkge1xuICAgICAgYm9yZGVyU3R5bGVba2V5XSA9IF9jb2xvcihcbiAgICAgICAgYm9yZGVyU3R5bGVba2V5XVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFkZGluZ09mZnNldCA9IG9wdHMuc3R5bGUucGFkZGluZyAlIDIgPT09IDAgPyBvcHRzLnN0eWxlLnBhZGRpbmcgOiBvcHRzLnN0eWxlLnBhZGRpbmcgKyAxO1xuICBjb25zdCBoZWlnaHQgPSB0ZXh0TGluZXMubGVuZ3RoICsgcGFkZGluZ09mZnNldDtcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCguLi50ZXh0TGluZXMubWFwKChsaW5lKSA9PiBsaW5lLmxlbmd0aCkpICsgcGFkZGluZ09mZnNldDtcbiAgY29uc3Qgd2lkdGhPZmZzZXQgPSB3aWR0aCArIHBhZGRpbmdPZmZzZXQ7XG4gIGNvbnN0IGxlZnRTcGFjZSA9IG9wdHMuc3R5bGUubWFyZ2luTGVmdCA+IDAgPyBcIiBcIi5yZXBlYXQob3B0cy5zdHlsZS5tYXJnaW5MZWZ0KSA6IFwiXCI7XG4gIGlmIChvcHRzLnN0eWxlLm1hcmdpblRvcCA+IDApIHtcbiAgICBib3hMaW5lcy5wdXNoKFwiXCIucmVwZWF0KG9wdHMuc3R5bGUubWFyZ2luVG9wKSk7XG4gIH1cbiAgaWYgKG9wdHMudGl0bGUpIHtcbiAgICBjb25zdCBsZWZ0ID0gYm9yZGVyU3R5bGUuaC5yZXBlYXQoXG4gICAgICBNYXRoLmZsb29yKCh3aWR0aCAtIHN0cmlwQW5zaShvcHRzLnRpdGxlKS5sZW5ndGgpIC8gMilcbiAgICApO1xuICAgIGNvbnN0IHJpZ2h0ID0gYm9yZGVyU3R5bGUuaC5yZXBlYXQoXG4gICAgICB3aWR0aCAtIHN0cmlwQW5zaShvcHRzLnRpdGxlKS5sZW5ndGggLSBzdHJpcEFuc2kobGVmdCkubGVuZ3RoICsgcGFkZGluZ09mZnNldFxuICAgICk7XG4gICAgYm94TGluZXMucHVzaChcbiAgICAgIGAke2xlZnRTcGFjZX0ke2JvcmRlclN0eWxlLnRsfSR7bGVmdH0ke29wdHMudGl0bGV9JHtyaWdodH0ke2JvcmRlclN0eWxlLnRyfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGJveExpbmVzLnB1c2goXG4gICAgICBgJHtsZWZ0U3BhY2V9JHtib3JkZXJTdHlsZS50bH0ke2JvcmRlclN0eWxlLmgucmVwZWF0KHdpZHRoT2Zmc2V0KX0ke2JvcmRlclN0eWxlLnRyfWBcbiAgICApO1xuICB9XG4gIGNvbnN0IHZhbGlnbk9mZnNldCA9IG9wdHMuc3R5bGUudmFsaWduID09PSBcImNlbnRlclwiID8gTWF0aC5mbG9vcigoaGVpZ2h0IC0gdGV4dExpbmVzLmxlbmd0aCkgLyAyKSA6IG9wdHMuc3R5bGUudmFsaWduID09PSBcInRvcFwiID8gaGVpZ2h0IC0gdGV4dExpbmVzLmxlbmd0aCAtIHBhZGRpbmdPZmZzZXQgOiBoZWlnaHQgLSB0ZXh0TGluZXMubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgaWYgKGkgPCB2YWxpZ25PZmZzZXQgfHwgaSA+PSB2YWxpZ25PZmZzZXQgKyB0ZXh0TGluZXMubGVuZ3RoKSB7XG4gICAgICBib3hMaW5lcy5wdXNoKFxuICAgICAgICBgJHtsZWZ0U3BhY2V9JHtib3JkZXJTdHlsZS52fSR7XCIgXCIucmVwZWF0KHdpZHRoT2Zmc2V0KX0ke2JvcmRlclN0eWxlLnZ9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGluZSA9IHRleHRMaW5lc1tpIC0gdmFsaWduT2Zmc2V0XTtcbiAgICAgIGNvbnN0IGxlZnQgPSBcIiBcIi5yZXBlYXQocGFkZGluZ09mZnNldCk7XG4gICAgICBjb25zdCByaWdodCA9IFwiIFwiLnJlcGVhdCh3aWR0aCAtIHN0cmlwQW5zaShsaW5lKS5sZW5ndGgpO1xuICAgICAgYm94TGluZXMucHVzaChcbiAgICAgICAgYCR7bGVmdFNwYWNlfSR7Ym9yZGVyU3R5bGUudn0ke2xlZnR9JHtsaW5lfSR7cmlnaHR9JHtib3JkZXJTdHlsZS52fWBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGJveExpbmVzLnB1c2goXG4gICAgYCR7bGVmdFNwYWNlfSR7Ym9yZGVyU3R5bGUuYmx9JHtib3JkZXJTdHlsZS5oLnJlcGVhdCh3aWR0aE9mZnNldCl9JHtib3JkZXJTdHlsZS5icn1gXG4gICk7XG4gIGlmIChvcHRzLnN0eWxlLm1hcmdpbkJvdHRvbSA+IDApIHtcbiAgICBib3hMaW5lcy5wdXNoKFwiXCIucmVwZWF0KG9wdHMuc3R5bGUubWFyZ2luQm90dG9tKSk7XG4gIH1cbiAgcmV0dXJuIGJveExpbmVzLmpvaW4oXCJcXG5cIik7XG59XG5cbmV4cG9ydCB7IGFsaWduLCBib3gsIGNlbnRlckFsaWduLCBjb2xvcml6ZSwgY29sb3JzLCBnZXRDb2xvciwgbGVmdEFsaWduLCByaWdodEFsaWduLCBzdHJpcEFuc2kgfTtcbiIsICJpbXBvcnQgeyBzdGRpbiwgc3Rkb3V0IH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBmIGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHsgV3JpdGVTdHJlYW0gfSBmcm9tICdub2RlOnR0eSc7XG5pbXBvcnQgeyBnIGFzIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzLCBpIGFzIGlzVW5pY29kZVN1cHBvcnRlZCB9IGZyb20gJy4uL3NoYXJlZC9jb25zb2xhLjM2YzAwMzRmLm1qcyc7XG5pbXBvcnQgcmVxdWlyZSQkMCBmcm9tICd0dHknO1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcbmltcG9ydCAnLi4vY29yZS5tanMnO1xuaW1wb3J0ICcuLi9zaGFyZWQvY29uc29sYS4wNmFkOGE2NC5tanMnO1xuaW1wb3J0ICdub2RlOnV0aWwnO1xuaW1wb3J0ICdub2RlOnBhdGgnO1xuXG5jb25zdCBFU0MgPSAnXFx4MUInO1xuY29uc3QgQ1NJID0gYCR7RVNDfVtgO1xuY29uc3QgYmVlcCA9ICdcXHUwMDA3JztcblxuY29uc3QgY3Vyc29yID0ge1xuICB0byh4LCB5KSB7XG4gICAgaWYgKCF5KSByZXR1cm4gYCR7Q1NJfSR7eCArIDF9R2A7XG4gICAgcmV0dXJuIGAke0NTSX0ke3kgKyAxfTske3ggKyAxfUhgO1xuICB9LFxuICBtb3ZlKHgsIHkpIHtcbiAgICBsZXQgcmV0ID0gJyc7XG5cbiAgICBpZiAoeCA8IDApIHJldCArPSBgJHtDU0l9JHsteH1EYDtcbiAgICBlbHNlIGlmICh4ID4gMCkgcmV0ICs9IGAke0NTSX0ke3h9Q2A7XG5cbiAgICBpZiAoeSA8IDApIHJldCArPSBgJHtDU0l9JHsteX1BYDtcbiAgICBlbHNlIGlmICh5ID4gMCkgcmV0ICs9IGAke0NTSX0ke3l9QmA7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9LFxuICB1cDogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfSR7Y291bnR9QWAsXG4gIGRvd246IChjb3VudCA9IDEpID0+IGAke0NTSX0ke2NvdW50fUJgLFxuICBmb3J3YXJkOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9JHtjb3VudH1DYCxcbiAgYmFja3dhcmQ6IChjb3VudCA9IDEpID0+IGAke0NTSX0ke2NvdW50fURgLFxuICBuZXh0TGluZTogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfUVgLnJlcGVhdChjb3VudCksXG4gIHByZXZMaW5lOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9RmAucmVwZWF0KGNvdW50KSxcbiAgbGVmdDogYCR7Q1NJfUdgLFxuICBoaWRlOiBgJHtDU0l9PzI1bGAsXG4gIHNob3c6IGAke0NTSX0/MjVoYCxcbiAgc2F2ZTogYCR7RVNDfTdgLFxuICByZXN0b3JlOiBgJHtFU0N9OGBcbn07XG5cbmNvbnN0IHNjcm9sbCA9IHtcbiAgdXA6IChjb3VudCA9IDEpID0+IGAke0NTSX1TYC5yZXBlYXQoY291bnQpLFxuICBkb3duOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9VGAucmVwZWF0KGNvdW50KVxufTtcblxuY29uc3QgZXJhc2UgPSB7XG4gIHNjcmVlbjogYCR7Q1NJfTJKYCxcbiAgdXA6IChjb3VudCA9IDEpID0+IGAke0NTSX0xSmAucmVwZWF0KGNvdW50KSxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfUpgLnJlcGVhdChjb3VudCksXG4gIGxpbmU6IGAke0NTSX0yS2AsXG4gIGxpbmVFbmQ6IGAke0NTSX1LYCxcbiAgbGluZVN0YXJ0OiBgJHtDU0l9MUtgLFxuICBsaW5lcyhjb3VudCkge1xuICAgIGxldCBjbGVhciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcbiAgICAgIGNsZWFyICs9IHRoaXMubGluZSArIChpIDwgY291bnQgLSAxID8gY3Vyc29yLnVwKCkgOiAnJyk7XG4gICAgaWYgKGNvdW50KVxuICAgICAgY2xlYXIgKz0gY3Vyc29yLmxlZnQ7XG4gICAgcmV0dXJuIGNsZWFyO1xuICB9XG59O1xuXG52YXIgc3JjID0geyBjdXJzb3IsIHNjcm9sbCwgZXJhc2UsIGJlZXAgfTtcblxudmFyIHBpY29jb2xvcnMgPSB7ZXhwb3J0czoge319O1xuXG5sZXQgdHR5ID0gcmVxdWlyZSQkMDtcblxubGV0IGlzQ29sb3JTdXBwb3J0ZWQgPVxuXHQhKFwiTk9fQ09MT1JcIiBpbiBwcm9jZXNzLmVudiB8fCBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoXCItLW5vLWNvbG9yXCIpKSAmJlxuXHQoXCJGT1JDRV9DT0xPUlwiIGluIHByb2Nlc3MuZW52IHx8XG5cdFx0cHJvY2Vzcy5hcmd2LmluY2x1ZGVzKFwiLS1jb2xvclwiKSB8fFxuXHRcdHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiB8fFxuXHRcdCh0dHkuaXNhdHR5KDEpICYmIHByb2Nlc3MuZW52LlRFUk0gIT09IFwiZHVtYlwiKSB8fFxuXHRcdFwiQ0lcIiBpbiBwcm9jZXNzLmVudik7XG5cbmxldCBmb3JtYXR0ZXIgPVxuXHQob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuKSA9PlxuXHRpbnB1dCA9PiB7XG5cdFx0bGV0IHN0cmluZyA9IFwiXCIgKyBpbnB1dDtcblx0XHRsZXQgaW5kZXggPSBzdHJpbmcuaW5kZXhPZihjbG9zZSwgb3Blbi5sZW5ndGgpO1xuXHRcdHJldHVybiB+aW5kZXhcblx0XHRcdD8gb3BlbiArIHJlcGxhY2VDbG9zZShzdHJpbmcsIGNsb3NlLCByZXBsYWNlLCBpbmRleCkgKyBjbG9zZVxuXHRcdFx0OiBvcGVuICsgc3RyaW5nICsgY2xvc2Vcblx0fTtcblxubGV0IHJlcGxhY2VDbG9zZSA9IChzdHJpbmcsIGNsb3NlLCByZXBsYWNlLCBpbmRleCkgPT4ge1xuXHRsZXQgc3RhcnQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2U7XG5cdGxldCBlbmQgPSBzdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgY2xvc2UubGVuZ3RoKTtcblx0bGV0IG5leHRJbmRleCA9IGVuZC5pbmRleE9mKGNsb3NlKTtcblx0cmV0dXJuIH5uZXh0SW5kZXggPyBzdGFydCArIHJlcGxhY2VDbG9zZShlbmQsIGNsb3NlLCByZXBsYWNlLCBuZXh0SW5kZXgpIDogc3RhcnQgKyBlbmRcbn07XG5cbmxldCBjcmVhdGVDb2xvcnMgPSAoZW5hYmxlZCA9IGlzQ29sb3JTdXBwb3J0ZWQpID0+ICh7XG5cdGlzQ29sb3JTdXBwb3J0ZWQ6IGVuYWJsZWQsXG5cdHJlc2V0OiBlbmFibGVkID8gcyA9PiBgXFx4MWJbMG0ke3N9XFx4MWJbMG1gIDogU3RyaW5nLFxuXHRib2xkOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMW1cIiwgXCJcXHgxYlsyMm1cIiwgXCJcXHgxYlsyMm1cXHgxYlsxbVwiKSA6IFN0cmluZyxcblx0ZGltOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMm1cIiwgXCJcXHgxYlsyMm1cIiwgXCJcXHgxYlsyMm1cXHgxYlsybVwiKSA6IFN0cmluZyxcblx0aXRhbGljOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbM21cIiwgXCJcXHgxYlsyM21cIikgOiBTdHJpbmcsXG5cdHVuZGVybGluZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzRtXCIsIFwiXFx4MWJbMjRtXCIpIDogU3RyaW5nLFxuXHRpbnZlcnNlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbN21cIiwgXCJcXHgxYlsyN21cIikgOiBTdHJpbmcsXG5cdGhpZGRlbjogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzhtXCIsIFwiXFx4MWJbMjhtXCIpIDogU3RyaW5nLFxuXHRzdHJpa2V0aHJvdWdoOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbOW1cIiwgXCJcXHgxYlsyOW1cIikgOiBTdHJpbmcsXG5cdGJsYWNrOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzBtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRyZWQ6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszMW1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdGdyZWVuOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzJtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHR5ZWxsb3c6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszM21cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdGJsdWU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszNG1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdG1hZ2VudGE6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszNW1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdGN5YW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszNm1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdHdoaXRlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzdtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRncmF5OiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbOTBtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRiZ0JsYWNrOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDBtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ1JlZDogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQxbVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdHcmVlbjogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQybVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdZZWxsb3c6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0M21cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnQmx1ZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQ0bVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdNYWdlbnRhOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDVtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ0N5YW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0Nm1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnV2hpdGU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0N21cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG59KTtcblxucGljb2NvbG9ycy5leHBvcnRzID0gY3JlYXRlQ29sb3JzKCk7XG5waWNvY29sb3JzLmV4cG9ydHMuY3JlYXRlQ29sb3JzID0gY3JlYXRlQ29sb3JzO1xuXG52YXIgcGljb2NvbG9yc0V4cG9ydHMgPSBwaWNvY29sb3JzLmV4cG9ydHM7XG5jb25zdCBsID0gLypAX19QVVJFX18qL2dldERlZmF1bHRFeHBvcnRGcm9tQ2pzKHBpY29jb2xvcnNFeHBvcnRzKTtcblxuZnVuY3Rpb24geih7b25seUZpcnN0OnQ9ITF9PXt9KXtjb25zdCB1PVtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpO3JldHVybiBuZXcgUmVnRXhwKHUsdD92b2lkIDA6XCJnXCIpfWZ1bmN0aW9uICQodCl7aWYodHlwZW9mIHQhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiB0fVxcYGApO3JldHVybiB0LnJlcGxhY2UoeigpLFwiXCIpfXZhciBtPXt9LEc9e2dldCBleHBvcnRzKCl7cmV0dXJuIG19LHNldCBleHBvcnRzKHQpe209dDt9fTsoZnVuY3Rpb24odCl7dmFyIHU9e307dC5leHBvcnRzPXUsdS5lYXN0QXNpYW5XaWR0aD1mdW5jdGlvbihlKXt2YXIgcz1lLmNoYXJDb2RlQXQoMCksQz1lLmxlbmd0aD09Mj9lLmNoYXJDb2RlQXQoMSk6MCxEPXM7cmV0dXJuIDU1Mjk2PD1zJiZzPD01NjMxOSYmNTYzMjA8PUMmJkM8PTU3MzQzJiYocyY9MTAyMyxDJj0xMDIzLEQ9czw8MTB8QyxEKz02NTUzNiksRD09MTIyODh8fDY1MjgxPD1EJiZEPD02NTM3Nnx8NjU1MDQ8PUQmJkQ8PTY1NTEwP1wiRlwiOkQ9PTgzNjF8fDY1Mzc3PD1EJiZEPD02NTQ3MHx8NjU0NzQ8PUQmJkQ8PTY1NDc5fHw2NTQ4Mjw9RCYmRDw9NjU0ODd8fDY1NDkwPD1EJiZEPD02NTQ5NXx8NjU0OTg8PUQmJkQ8PTY1NTAwfHw2NTUxMjw9RCYmRDw9NjU1MTg/XCJIXCI6NDM1Mjw9RCYmRDw9NDQ0N3x8NDUxNTw9RCYmRDw9NDUxOXx8NDYwMjw9RCYmRDw9NDYwN3x8OTAwMTw9RCYmRDw9OTAwMnx8MTE5MDQ8PUQmJkQ8PTExOTI5fHwxMTkzMTw9RCYmRDw9MTIwMTl8fDEyMDMyPD1EJiZEPD0xMjI0NXx8MTIyNzI8PUQmJkQ8PTEyMjgzfHwxMjI4OTw9RCYmRDw9MTIzNTB8fDEyMzUzPD1EJiZEPD0xMjQzOHx8MTI0NDE8PUQmJkQ8PTEyNTQzfHwxMjU0OTw9RCYmRDw9MTI1ODl8fDEyNTkzPD1EJiZEPD0xMjY4Nnx8MTI2ODg8PUQmJkQ8PTEyNzMwfHwxMjczNjw9RCYmRDw9MTI3NzF8fDEyNzg0PD1EJiZEPD0xMjgzMHx8MTI4MzI8PUQmJkQ8PTEyODcxfHwxMjg4MDw9RCYmRDw9MTMwNTR8fDEzMDU2PD1EJiZEPD0xOTkwM3x8MTk5Njg8PUQmJkQ8PTQyMTI0fHw0MjEyODw9RCYmRDw9NDIxODJ8fDQzMzYwPD1EJiZEPD00MzM4OHx8NDQwMzI8PUQmJkQ8PTU1MjAzfHw1NTIxNjw9RCYmRDw9NTUyMzh8fDU1MjQzPD1EJiZEPD01NTI5MXx8NjM3NDQ8PUQmJkQ8PTY0MjU1fHw2NTA0MDw9RCYmRDw9NjUwNDl8fDY1MDcyPD1EJiZEPD02NTEwNnx8NjUxMDg8PUQmJkQ8PTY1MTI2fHw2NTEyODw9RCYmRDw9NjUxMzF8fDExMDU5Mjw9RCYmRDw9MTEwNTkzfHwxMjc0ODg8PUQmJkQ8PTEyNzQ5MHx8MTI3NTA0PD1EJiZEPD0xMjc1NDZ8fDEyNzU1Mjw9RCYmRDw9MTI3NTYwfHwxMjc1Njg8PUQmJkQ8PTEyNzU2OXx8MTMxMDcyPD1EJiZEPD0xOTQzNjd8fDE3Nzk4NDw9RCYmRDw9MTk2NjA1fHwxOTY2MDg8PUQmJkQ8PTI2MjE0MT9cIldcIjozMjw9RCYmRDw9MTI2fHwxNjI8PUQmJkQ8PTE2M3x8MTY1PD1EJiZEPD0xNjZ8fEQ9PTE3Mnx8RD09MTc1fHwxMDIxNDw9RCYmRDw9MTAyMjF8fDEwNjI5PD1EJiZEPD0xMDYzMD9cIk5hXCI6RD09MTYxfHxEPT0xNjR8fDE2Nzw9RCYmRDw9MTY4fHxEPT0xNzB8fDE3Mzw9RCYmRDw9MTc0fHwxNzY8PUQmJkQ8PTE4MHx8MTgyPD1EJiZEPD0xODZ8fDE4ODw9RCYmRDw9MTkxfHxEPT0xOTh8fEQ9PTIwOHx8MjE1PD1EJiZEPD0yMTZ8fDIyMjw9RCYmRDw9MjI1fHxEPT0yMzB8fDIzMjw9RCYmRDw9MjM0fHwyMzY8PUQmJkQ8PTIzN3x8RD09MjQwfHwyNDI8PUQmJkQ8PTI0M3x8MjQ3PD1EJiZEPD0yNTB8fEQ9PTI1Mnx8RD09MjU0fHxEPT0yNTd8fEQ9PTI3M3x8RD09Mjc1fHxEPT0yODN8fDI5NDw9RCYmRDw9Mjk1fHxEPT0yOTl8fDMwNTw9RCYmRDw9MzA3fHxEPT0zMTJ8fDMxOTw9RCYmRDw9MzIyfHxEPT0zMjR8fDMyODw9RCYmRDw9MzMxfHxEPT0zMzN8fDMzODw9RCYmRDw9MzM5fHwzNTg8PUQmJkQ8PTM1OXx8RD09MzYzfHxEPT00NjJ8fEQ9PTQ2NHx8RD09NDY2fHxEPT00Njh8fEQ9PTQ3MHx8RD09NDcyfHxEPT00NzR8fEQ9PTQ3Nnx8RD09NTkzfHxEPT02MDl8fEQ9PTcwOHx8RD09NzExfHw3MTM8PUQmJkQ8PTcxNXx8RD09NzE3fHxEPT03MjB8fDcyODw9RCYmRDw9NzMxfHxEPT03MzN8fEQ9PTczNXx8NzY4PD1EJiZEPD04Nzl8fDkxMzw9RCYmRDw9OTI5fHw5MzE8PUQmJkQ8PTkzN3x8OTQ1PD1EJiZEPD05NjF8fDk2Mzw9RCYmRDw9OTY5fHxEPT0xMDI1fHwxMDQwPD1EJiZEPD0xMTAzfHxEPT0xMTA1fHxEPT04MjA4fHw4MjExPD1EJiZEPD04MjE0fHw4MjE2PD1EJiZEPD04MjE3fHw4MjIwPD1EJiZEPD04MjIxfHw4MjI0PD1EJiZEPD04MjI2fHw4MjI4PD1EJiZEPD04MjMxfHxEPT04MjQwfHw4MjQyPD1EJiZEPD04MjQzfHxEPT04MjQ1fHxEPT04MjUxfHxEPT04MjU0fHxEPT04MzA4fHxEPT04MzE5fHw4MzIxPD1EJiZEPD04MzI0fHxEPT04MzY0fHxEPT04NDUxfHxEPT04NDUzfHxEPT04NDU3fHxEPT04NDY3fHxEPT04NDcwfHw4NDgxPD1EJiZEPD04NDgyfHxEPT04NDg2fHxEPT04NDkxfHw4NTMxPD1EJiZEPD04NTMyfHw4NTM5PD1EJiZEPD04NTQyfHw4NTQ0PD1EJiZEPD04NTU1fHw4NTYwPD1EJiZEPD04NTY5fHxEPT04NTg1fHw4NTkyPD1EJiZEPD04NjAxfHw4NjMyPD1EJiZEPD04NjMzfHxEPT04NjU4fHxEPT04NjYwfHxEPT04Njc5fHxEPT04NzA0fHw4NzA2PD1EJiZEPD04NzA3fHw4NzExPD1EJiZEPD04NzEyfHxEPT04NzE1fHxEPT04NzE5fHxEPT04NzIxfHxEPT04NzI1fHxEPT04NzMwfHw4NzMzPD1EJiZEPD04NzM2fHxEPT04NzM5fHxEPT04NzQxfHw4NzQzPD1EJiZEPD04NzQ4fHxEPT04NzUwfHw4NzU2PD1EJiZEPD04NzU5fHw4NzY0PD1EJiZEPD04NzY1fHxEPT04Nzc2fHxEPT04NzgwfHxEPT04Nzg2fHw4ODAwPD1EJiZEPD04ODAxfHw4ODA0PD1EJiZEPD04ODA3fHw4ODEwPD1EJiZEPD04ODExfHw4ODE0PD1EJiZEPD04ODE1fHw4ODM0PD1EJiZEPD04ODM1fHw4ODM4PD1EJiZEPD04ODM5fHxEPT04ODUzfHxEPT04ODU3fHxEPT04ODY5fHxEPT04ODk1fHxEPT04OTc4fHw5MzEyPD1EJiZEPD05NDQ5fHw5NDUxPD1EJiZEPD05NTQ3fHw5NTUyPD1EJiZEPD05NTg3fHw5NjAwPD1EJiZEPD05NjE1fHw5NjE4PD1EJiZEPD05NjIxfHw5NjMyPD1EJiZEPD05NjMzfHw5NjM1PD1EJiZEPD05NjQxfHw5NjUwPD1EJiZEPD05NjUxfHw5NjU0PD1EJiZEPD05NjU1fHw5NjYwPD1EJiZEPD05NjYxfHw5NjY0PD1EJiZEPD05NjY1fHw5NjcwPD1EJiZEPD05NjcyfHxEPT05Njc1fHw5Njc4PD1EJiZEPD05NjgxfHw5Njk4PD1EJiZEPD05NzAxfHxEPT05NzExfHw5NzMzPD1EJiZEPD05NzM0fHxEPT05NzM3fHw5NzQyPD1EJiZEPD05NzQzfHw5NzQ4PD1EJiZEPD05NzQ5fHxEPT05NzU2fHxEPT05NzU4fHxEPT05NzkyfHxEPT05Nzk0fHw5ODI0PD1EJiZEPD05ODI1fHw5ODI3PD1EJiZEPD05ODI5fHw5ODMxPD1EJiZEPD05ODM0fHw5ODM2PD1EJiZEPD05ODM3fHxEPT05ODM5fHw5ODg2PD1EJiZEPD05ODg3fHw5OTE4PD1EJiZEPD05OTE5fHw5OTI0PD1EJiZEPD05OTMzfHw5OTM1PD1EJiZEPD05OTUzfHxEPT05OTU1fHw5OTYwPD1EJiZEPD05OTgzfHxEPT0xMDA0NXx8RD09MTAwNzF8fDEwMTAyPD1EJiZEPD0xMDExMXx8MTEwOTM8PUQmJkQ8PTExMDk3fHwxMjg3Mjw9RCYmRDw9MTI4Nzl8fDU3MzQ0PD1EJiZEPD02Mzc0M3x8NjUwMjQ8PUQmJkQ8PTY1MDM5fHxEPT02NTUzM3x8MTI3MjMyPD1EJiZEPD0xMjcyNDJ8fDEyNzI0ODw9RCYmRDw9MTI3Mjc3fHwxMjcyODA8PUQmJkQ8PTEyNzMzN3x8MTI3MzQ0PD1EJiZEPD0xMjczODZ8fDkxNzc2MDw9RCYmRDw9OTE3OTk5fHw5ODMwNDA8PUQmJkQ8PTEwNDg1NzN8fDEwNDg1NzY8PUQmJkQ8PTExMTQxMDk/XCJBXCI6XCJOXCJ9LHUuY2hhcmFjdGVyTGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciBzPXRoaXMuZWFzdEFzaWFuV2lkdGgoZSk7cmV0dXJuIHM9PVwiRlwifHxzPT1cIldcInx8cz09XCJBXCI/MjoxfTtmdW5jdGlvbiBGKGUpe3JldHVybiBlLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFteXFx1RDgwMC1cXHVERkZGXS9nKXx8W119dS5sZW5ndGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciBzPUYoZSksQz0wLEQ9MDtEPHMubGVuZ3RoO0QrKylDPUMrdGhpcy5jaGFyYWN0ZXJMZW5ndGgoc1tEXSk7cmV0dXJuIEN9LHUuc2xpY2U9ZnVuY3Rpb24oZSxzLEMpe3RleHRMZW49dS5sZW5ndGgoZSkscz1zfHwwLEM9Q3x8MSxzPDAmJihzPXRleHRMZW4rcyksQzwwJiYoQz10ZXh0TGVuK0MpO2Zvcih2YXIgRD1cIlwiLGk9MCxvPUYoZSksRT0wO0U8by5sZW5ndGg7RSsrKXt2YXIgYT1vW0VdLG49dS5sZW5ndGgoYSk7aWYoaT49cy0obj09Mj8xOjApKWlmKGkrbjw9QylEKz1hO2Vsc2UgYnJlYWs7aSs9bjt9cmV0dXJuIER9O30pKEcpO2NvbnN0IEs9bTt2YXIgWT1mdW5jdGlvbigpe3JldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczfFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjcpXFx1REI0MFxcdURDN0Z8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGRlxcdTIwMERcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGRVxcdTIwMERcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKSkoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZDXFx1MjAwRFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpKD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQlxcdTIwMERcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSl8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQig/OlxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKXxcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSl8W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSkpP3woPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pXFx1MjAwRFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfCg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZFXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZEXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZDXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSlcXHVGRTBGfFxcdTIwMEQoPzooPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNDXFx1REZGRnxcXHVEODNDXFx1REZGRXxcXHVEODNDXFx1REZGRHxcXHVEODNDXFx1REZGQyk/fCg/OlxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXwoPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pXFx1MjAwRFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpfFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKSl8XFx1RDgzRFxcdURDNjkoPzpcXHUyMDBEKD86XFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRVxcdURERDEoPzpcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkZcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSkpfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZFXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZEXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZDXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZCXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSl8XFx1RDgzRFxcdURFMzZcXHUyMDBEXFx1RDgzQ1xcdURGMkJ8XFx1RDgzQ1xcdURGRjNcXHVGRTBGXFx1MjAwRFxcdTI2QTd8XFx1RDgzRFxcdURDM0JcXHUyMDBEXFx1Mjc0NHwoPzooPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18XFx1RDgzQ1xcdURGRjRcXHUyMDBEXFx1MjYyMHwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QjBcXHUyNkIxXFx1MjZDOFxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RTlcXHUyNkYwXFx1MjZGMVxcdTI2RjRcXHUyNkY3XFx1MjZGOFxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzYzXFx1MjdBMVxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MzAzMFxcdTMwM0RcXHUzMjk3XFx1MzI5OV18XFx1RDgzQ1tcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REUwMlxcdURFMzdcXHVERjIxXFx1REYyNC1cXHVERjJDXFx1REYzNlxcdURGN0RcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUVcXHVERjlGXFx1REZDRFxcdURGQ0VcXHVERkQ0LVxcdURGREZcXHVERkY1XFx1REZGN118XFx1RDgzRFtcXHVEQzNGXFx1RENGRFxcdURENDlcXHVERDRBXFx1REQ2RlxcdURENzBcXHVERDczXFx1REQ3Ni1cXHVERDc5XFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREQTVcXHVEREE4XFx1RERCMVxcdUREQjJcXHVEREJDXFx1RERDMi1cXHVEREM0XFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERFXFx1RERFMVxcdURERTNcXHVEREU4XFx1RERFRlxcdURERjNcXHVEREZBXFx1REVDQlxcdURFQ0QtXFx1REVDRlxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUYwXFx1REVGM10pXFx1RkUwRnxcXHVEODNDXFx1REZGM1xcdUZFMEZcXHUyMDBEXFx1RDgzQ1xcdURGMDh8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjd8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURFMzVcXHUyMDBEXFx1RDgzRFxcdURDQUJ8XFx1RDgzRFxcdURFMkVcXHUyMDBEXFx1RDgzRFxcdURDQTh8XFx1RDgzRFxcdURDMTVcXHUyMDBEXFx1RDgzRVxcdUREQkF8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRnxcXHVEODNDXFx1REZGRXxcXHVEODNDXFx1REZGRHxcXHVEODNDXFx1REZGQ3xcXHVEODNDXFx1REZGQik/fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZ8XFx1RDgzQ1xcdURGRkV8XFx1RDgzQ1xcdURGRkR8XFx1RDgzQ1xcdURGRkN8XFx1RDgzQ1xcdURGRkIpP3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RDgzQ1xcdURERjRcXHVEODNDXFx1RERGMnxcXHVEODNEXFx1REMwOFxcdTIwMERcXHUyQjFCfFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KXxcXHVEODNEXFx1REM0MVxcdUZFMEZ8XFx1RDgzQ1xcdURGRjNcXHVGRTBGfFxcdUQ4M0NcXHVEREZGKD86XFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdKXxcXHVEODNDXFx1RERGRSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjldKXxcXHVEODNDXFx1RERGQyg/OlxcdUQ4M0NbXFx1RERFQlxcdURERjhdKXxcXHVEODNDXFx1RERGQig/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERjgoPzpcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdKXxcXHVEODNDXFx1RERGNyg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERjMoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQS1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREY0XFx1RERGNVxcdURERjdcXHVEREZBXFx1RERGRl0pfFxcdUQ4M0NcXHVEREYyKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERjEoPzpcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV0pfFxcdUQ4M0NcXHVEREYwKD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQy1cXHVEREVFXFx1RERGMlxcdURERjNcXHVEREY1XFx1RERGN1xcdURERkNcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVEKD86XFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdKXxcXHVEODNDXFx1RERFQyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERFQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdKXxcXHVEODNDXFx1RERFOSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERUNcXHVEREVGXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGRl0pfFxcdUQ4M0NcXHVEREU4KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXSl8XFx1RDgzQ1xcdURERTcoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8WyNcXCowLTldXFx1RkUwRlxcdTIwRTN8XFx1Mjc2NFxcdUZFMEZ8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzBcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNVxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ0XFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVERkY0fCg/OltcXHUyNzBBXFx1MjcwQl18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM0XFx1REQzNlxcdURENzdcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyXFx1REREM1xcdURERDVdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTI2MURcXHUyNzBDXFx1MjcwRF18XFx1RDgzRFtcXHVERDc0XFx1REQ5MF0pKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFtcXHUyNzBBXFx1MjcwQl18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REMwOFxcdURDMTVcXHVEQzNCXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REUyRVxcdURFMzVcXHVERTM2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM0XFx1REQzNlxcdURENzdcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyXFx1REREM1xcdURERDVdfFxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcwXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF18XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdfFtcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVdfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGN0NcXHVERjdFLVxcdURGODRcXHVERjg2LVxcdURGOTNcXHVERkEwLVxcdURGQzFcXHVERkM1XFx1REZDNlxcdURGQzhcXHVERkM5XFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGOC1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1REMwN1xcdURDMDktXFx1REMxNFxcdURDMTYtXFx1REMzQVxcdURDM0MtXFx1REMzRVxcdURDNDBcXHVEQzQ0XFx1REM0NVxcdURDNTEtXFx1REM2NVxcdURDNkFcXHVEQzc5LVxcdURDN0JcXHVEQzdELVxcdURDODBcXHVEQzg0XFx1REM4OC1cXHVEQzhFXFx1REM5MFxcdURDOTItXFx1RENBOVxcdURDQUItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREQTRcXHVEREZCLVxcdURFMkRcXHVERTJGLVxcdURFMzRcXHVERTM3LVxcdURFNDRcXHVERTQ4LVxcdURFNEFcXHVERTgwLVxcdURFQTJcXHVERUE0LVxcdURFQjNcXHVERUI3LVxcdURFQkZcXHVERUMxLVxcdURFQzVcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMURcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OFxcdUREN0EtXFx1RERCNFxcdUREQjdcXHVEREJBXFx1RERCQy1cXHVERENCXFx1REREMFxcdURERTAtXFx1RERGRlxcdURFNzAtXFx1REU3NFxcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4NlxcdURFOTAtXFx1REVBOFxcdURFQjAtXFx1REVCNlxcdURFQzAtXFx1REVDMlxcdURFRDAtXFx1REVENl18KD86W1xcdTIzMUFcXHUyMzFCXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjVGRVxcdTI2MTRcXHUyNjE1XFx1MjY0OC1cXHUyNjUzXFx1MjY3RlxcdTI2OTNcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGMlxcdTI2RjNcXHUyNkY1XFx1MjZGQVxcdTI2RkRcXHUyNzA1XFx1MjcwQVxcdTI3MEJcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjFCXFx1MkIxQ1xcdTJCNTBcXHUyQjU1XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjkzXFx1REZBMC1cXHVERkNBXFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGNFxcdURGRjgtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDM0VcXHVEQzQwXFx1REM0Mi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1REQ3QVxcdUREOTVcXHVERDk2XFx1RERBNFxcdURERkItXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0NcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBDLVxcdUREM0FcXHVERDNDLVxcdURENDVcXHVERDQ3LVxcdURENzhcXHVERDdBLVxcdUREQ0JcXHVERENELVxcdURERkZcXHVERTcwLVxcdURFNzRcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODZcXHVERTkwLVxcdURFQThcXHVERUIwLVxcdURFQjZcXHVERUMwLVxcdURFQzJcXHVERUQwLVxcdURFRDZdKXwoPzpbI1xcKjAtOVxceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFOS1cXHUyM0YzXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCLVxcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MURcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyLVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBMVxcdTI2QTdcXHUyNkFBXFx1MjZBQlxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2QzhcXHUyNkNFXFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZENFxcdTI2RTlcXHUyNkVBXFx1MjZGMC1cXHUyNkY1XFx1MjZGNy1cXHUyNkZBXFx1MjZGRFxcdTI3MDJcXHUyNzA1XFx1MjcwOC1cXHUyNzBEXFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzXFx1Mjc2NFxcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTAyXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMVxcdURGMjQtXFx1REY5M1xcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RS1cXHVERkYwXFx1REZGMy1cXHVERkY1XFx1REZGNy1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1RENGRFxcdURDRkYtXFx1REQzRFxcdURENDktXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdURENkZcXHVERDcwXFx1REQ3My1cXHVERDdBXFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREOTBcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQS1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQi1cXHVERUQyXFx1REVENS1cXHVERUQ3XFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRUJcXHVERUVDXFx1REVGMFxcdURFRjMtXFx1REVGQ1xcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBDLVxcdUREM0FcXHVERDNDLVxcdURENDVcXHVERDQ3LVxcdURENzhcXHVERDdBLVxcdUREQ0JcXHVERENELVxcdURERkZcXHVERTcwLVxcdURFNzRcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODZcXHVERTkwLVxcdURFQThcXHVERUIwLVxcdURFQjZcXHVERUMwLVxcdURFQzJcXHVERUQwLVxcdURFRDZdKVxcdUZFMEZ8KD86W1xcdTI2MURcXHUyNkY5XFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyLVxcdURGQzRcXHVERkM3XFx1REZDQS1cXHVERkNDXXxcXHVEODNEW1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2Ni1cXHVEQzc4XFx1REM3Q1xcdURDODEtXFx1REM4M1xcdURDODUtXFx1REM4N1xcdURDOEZcXHVEQzkxXFx1RENBQVxcdURENzRcXHVERDc1XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNDUtXFx1REU0N1xcdURFNEItXFx1REU0RlxcdURFQTNcXHVERUI0LVxcdURFQjZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMjZcXHVERDMwLVxcdUREMzlcXHVERDNDLVxcdUREM0VcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nfTtmdW5jdGlvbiBjKHQsdT17fSl7aWYodHlwZW9mIHQhPVwic3RyaW5nXCJ8fHQubGVuZ3RoPT09MHx8KHU9e2FtYmlndW91c0lzTmFycm93OiEwLC4uLnV9LHQ9JCh0KSx0Lmxlbmd0aD09PTApKXJldHVybiAwO3Q9dC5yZXBsYWNlKFkoKSxcIiAgXCIpO2NvbnN0IEY9dS5hbWJpZ3VvdXNJc05hcnJvdz8xOjI7bGV0IGU9MDtmb3IoY29uc3QgcyBvZiB0KXtjb25zdCBDPXMuY29kZVBvaW50QXQoMCk7aWYoQzw9MzF8fEM+PTEyNyYmQzw9MTU5fHxDPj03NjgmJkM8PTg3OSljb250aW51ZTtzd2l0Y2goSy5lYXN0QXNpYW5XaWR0aChzKSl7Y2FzZVwiRlwiOmNhc2VcIldcIjplKz0yO2JyZWFrO2Nhc2VcIkFcIjplKz1GO2JyZWFrO2RlZmF1bHQ6ZSs9MTt9fXJldHVybiBlfWNvbnN0IHY9MTAsTD0odD0wKT0+dT0+YFxceDFCWyR7dSt0fW1gLE09KHQ9MCk9PnU9PmBcXHgxQlskezM4K3R9OzU7JHt1fW1gLFQ9KHQ9MCk9Pih1LEYsZSk9PmBcXHgxQlskezM4K3R9OzI7JHt1fTske0Z9OyR7ZX1tYCxyPXttb2RpZmllcjp7cmVzZXQ6WzAsMF0sYm9sZDpbMSwyMl0sZGltOlsyLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0sb3ZlcmxpbmU6WzUzLDU1XSxpbnZlcnNlOls3LDI3XSxoaWRkZW46WzgsMjhdLHN0cmlrZXRocm91Z2g6WzksMjldfSxjb2xvcjp7YmxhY2s6WzMwLDM5XSxyZWQ6WzMxLDM5XSxncmVlbjpbMzIsMzldLHllbGxvdzpbMzMsMzldLGJsdWU6WzM0LDM5XSxtYWdlbnRhOlszNSwzOV0sY3lhbjpbMzYsMzldLHdoaXRlOlszNywzOV0sYmxhY2tCcmlnaHQ6WzkwLDM5XSxncmF5Ols5MCwzOV0sZ3JleTpbOTAsMzldLHJlZEJyaWdodDpbOTEsMzldLGdyZWVuQnJpZ2h0Ols5MiwzOV0seWVsbG93QnJpZ2h0Ols5MywzOV0sYmx1ZUJyaWdodDpbOTQsMzldLG1hZ2VudGFCcmlnaHQ6Wzk1LDM5XSxjeWFuQnJpZ2h0Ols5NiwzOV0sd2hpdGVCcmlnaHQ6Wzk3LDM5XX0sYmdDb2xvcjp7YmdCbGFjazpbNDAsNDldLGJnUmVkOls0MSw0OV0sYmdHcmVlbjpbNDIsNDldLGJnWWVsbG93Ols0Myw0OV0sYmdCbHVlOls0NCw0OV0sYmdNYWdlbnRhOls0NSw0OV0sYmdDeWFuOls0Niw0OV0sYmdXaGl0ZTpbNDcsNDldLGJnQmxhY2tCcmlnaHQ6WzEwMCw0OV0sYmdHcmF5OlsxMDAsNDldLGJnR3JleTpbMTAwLDQ5XSxiZ1JlZEJyaWdodDpbMTAxLDQ5XSxiZ0dyZWVuQnJpZ2h0OlsxMDIsNDldLGJnWWVsbG93QnJpZ2h0OlsxMDMsNDldLGJnQmx1ZUJyaWdodDpbMTA0LDQ5XSxiZ01hZ2VudGFCcmlnaHQ6WzEwNSw0OV0sYmdDeWFuQnJpZ2h0OlsxMDYsNDldLGJnV2hpdGVCcmlnaHQ6WzEwNyw0OV19fTtPYmplY3Qua2V5cyhyLm1vZGlmaWVyKTtjb25zdCBaPU9iamVjdC5rZXlzKHIuY29sb3IpLEg9T2JqZWN0LmtleXMoci5iZ0NvbG9yKTtbLi4uWiwuLi5IXTtmdW5jdGlvbiBVKCl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdFt1LEZdb2YgT2JqZWN0LmVudHJpZXMocikpe2Zvcihjb25zdFtlLHNdb2YgT2JqZWN0LmVudHJpZXMoRikpcltlXT17b3BlbjpgXFx4MUJbJHtzWzBdfW1gLGNsb3NlOmBcXHgxQlske3NbMV19bWB9LEZbZV09cltlXSx0LnNldChzWzBdLHNbMV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHUse3ZhbHVlOkYsZW51bWVyYWJsZTohMX0pO31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJjb2Rlc1wiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITF9KSxyLmNvbG9yLmNsb3NlPVwiXFx4MUJbMzltXCIsci5iZ0NvbG9yLmNsb3NlPVwiXFx4MUJbNDltXCIsci5jb2xvci5hbnNpPUwoKSxyLmNvbG9yLmFuc2kyNTY9TSgpLHIuY29sb3IuYW5zaTE2bT1UKCksci5iZ0NvbG9yLmFuc2k9TCh2KSxyLmJnQ29sb3IuYW5zaTI1Nj1NKHYpLHIuYmdDb2xvci5hbnNpMTZtPVQodiksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocix7cmdiVG9BbnNpMjU2Ont2YWx1ZToodSxGLGUpPT51PT09RiYmRj09PWU/dTw4PzE2OnU+MjQ4PzIzMTpNYXRoLnJvdW5kKCh1LTgpLzI0NyoyNCkrMjMyOjE2KzM2Kk1hdGgucm91bmQodS8yNTUqNSkrNipNYXRoLnJvdW5kKEYvMjU1KjUpK01hdGgucm91bmQoZS8yNTUqNSksZW51bWVyYWJsZTohMX0saGV4VG9SZ2I6e3ZhbHVlOnU9Pntjb25zdCBGPS9bYS1mXFxkXXs2fXxbYS1mXFxkXXszfS9pLmV4ZWModS50b1N0cmluZygxNikpO2lmKCFGKXJldHVybiBbMCwwLDBdO2xldFtlXT1GO2UubGVuZ3RoPT09MyYmKGU9Wy4uLmVdLm1hcChDPT5DK0MpLmpvaW4oXCJcIikpO2NvbnN0IHM9TnVtYmVyLnBhcnNlSW50KGUsMTYpO3JldHVybiBbcz4+MTYmMjU1LHM+PjgmMjU1LHMmMjU1XX0sZW51bWVyYWJsZTohMX0saGV4VG9BbnNpMjU2Ont2YWx1ZTp1PT5yLnJnYlRvQW5zaTI1NiguLi5yLmhleFRvUmdiKHUpKSxlbnVtZXJhYmxlOiExfSxhbnNpMjU2VG9BbnNpOnt2YWx1ZTp1PT57aWYodTw4KXJldHVybiAzMCt1O2lmKHU8MTYpcmV0dXJuIDkwKyh1LTgpO2xldCBGLGUscztpZih1Pj0yMzIpRj0oKHUtMjMyKSoxMCs4KS8yNTUsZT1GLHM9RjtlbHNlIHt1LT0xNjtjb25zdCBpPXUlMzY7Rj1NYXRoLmZsb29yKHUvMzYpLzUsZT1NYXRoLmZsb29yKGkvNikvNSxzPWklNi81O31jb25zdCBDPU1hdGgubWF4KEYsZSxzKSoyO2lmKEM9PT0wKXJldHVybiAzMDtsZXQgRD0zMCsoTWF0aC5yb3VuZChzKTw8MnxNYXRoLnJvdW5kKGUpPDwxfE1hdGgucm91bmQoRikpO3JldHVybiBDPT09MiYmKEQrPTYwKSxEfSxlbnVtZXJhYmxlOiExfSxyZ2JUb0Fuc2k6e3ZhbHVlOih1LEYsZSk9PnIuYW5zaTI1NlRvQW5zaShyLnJnYlRvQW5zaTI1Nih1LEYsZSkpLGVudW1lcmFibGU6ITF9LGhleFRvQW5zaTp7dmFsdWU6dT0+ci5hbnNpMjU2VG9BbnNpKHIuaGV4VG9BbnNpMjU2KHUpKSxlbnVtZXJhYmxlOiExfX0pLHJ9Y29uc3QgcT1VKCkscD1uZXcgU2V0KFtcIlxceDFCXCIsXCJcXHg5QlwiXSksSj0zOSxiPVwiXFx4MDdcIixXPVwiW1wiLFE9XCJdXCIsST1cIm1cIix3PWAke1F9ODs7YCxOPXQ9PmAke3AudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7V30ke3R9JHtJfWAsaj10PT5gJHtwLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke3d9JHt0fSR7Yn1gLFg9dD0+dC5zcGxpdChcIiBcIikubWFwKHU9PmModSkpLF89KHQsdSxGKT0+e2NvbnN0IGU9Wy4uLnVdO2xldCBzPSExLEM9ITEsRD1jKCQodFt0Lmxlbmd0aC0xXSkpO2Zvcihjb25zdFtpLG9db2YgZS5lbnRyaWVzKCkpe2NvbnN0IEU9YyhvKTtpZihEK0U8PUY/dFt0Lmxlbmd0aC0xXSs9bzoodC5wdXNoKG8pLEQ9MCkscC5oYXMobykmJihzPSEwLEM9ZS5zbGljZShpKzEpLmpvaW4oXCJcIikuc3RhcnRzV2l0aCh3KSkscyl7Qz9vPT09YiYmKHM9ITEsQz0hMSk6bz09PUkmJihzPSExKTtjb250aW51ZX1EKz1FLEQ9PT1GJiZpPGUubGVuZ3RoLTEmJih0LnB1c2goXCJcIiksRD0wKTt9IUQmJnRbdC5sZW5ndGgtMV0ubGVuZ3RoPjAmJnQubGVuZ3RoPjEmJih0W3QubGVuZ3RoLTJdKz10LnBvcCgpKTt9LEREPXQ9Pntjb25zdCB1PXQuc3BsaXQoXCIgXCIpO2xldCBGPXUubGVuZ3RoO2Zvcig7Rj4wJiYhKGModVtGLTFdKT4wKTspRi0tO3JldHVybiBGPT09dS5sZW5ndGg/dDp1LnNsaWNlKDAsRikuam9pbihcIiBcIikrdS5zbGljZShGKS5qb2luKFwiXCIpfSx1RD0odCx1LEY9e30pPT57aWYoRi50cmltIT09ITEmJnQudHJpbSgpPT09XCJcIilyZXR1cm4gXCJcIjtsZXQgZT1cIlwiLHMsQztjb25zdCBEPVgodCk7bGV0IGk9W1wiXCJdO2Zvcihjb25zdFtFLGFdb2YgdC5zcGxpdChcIiBcIikuZW50cmllcygpKXtGLnRyaW0hPT0hMSYmKGlbaS5sZW5ndGgtMV09aVtpLmxlbmd0aC0xXS50cmltU3RhcnQoKSk7bGV0IG49YyhpW2kubGVuZ3RoLTFdKTtpZihFIT09MCYmKG4+PXUmJihGLndvcmRXcmFwPT09ITF8fEYudHJpbT09PSExKSYmKGkucHVzaChcIlwiKSxuPTApLChuPjB8fEYudHJpbT09PSExKSYmKGlbaS5sZW5ndGgtMV0rPVwiIFwiLG4rKykpLEYuaGFyZCYmRFtFXT51KXtjb25zdCBCPXUtbixBPTErTWF0aC5mbG9vcigoRFtFXS1CLTEpL3UpO01hdGguZmxvb3IoKERbRV0tMSkvdSk8QSYmaS5wdXNoKFwiXCIpLF8oaSxhLHUpO2NvbnRpbnVlfWlmKG4rRFtFXT51JiZuPjAmJkRbRV0+MCl7aWYoRi53b3JkV3JhcD09PSExJiZuPHUpe18oaSxhLHUpO2NvbnRpbnVlfWkucHVzaChcIlwiKTt9aWYobitEW0VdPnUmJkYud29yZFdyYXA9PT0hMSl7XyhpLGEsdSk7Y29udGludWV9aVtpLmxlbmd0aC0xXSs9YTt9Ri50cmltIT09ITEmJihpPWkubWFwKEU9PkREKEUpKSk7Y29uc3Qgbz1bLi4uaS5qb2luKGBcbmApXTtmb3IoY29uc3RbRSxhXW9mIG8uZW50cmllcygpKXtpZihlKz1hLHAuaGFzKGEpKXtjb25zdHtncm91cHM6Qn09bmV3IFJlZ0V4cChgKD86XFxcXCR7V30oPzxjb2RlPlxcXFxkKyltfFxcXFwke3d9KD88dXJpPi4qKSR7Yn0pYCkuZXhlYyhvLnNsaWNlKEUpLmpvaW4oXCJcIikpfHx7Z3JvdXBzOnt9fTtpZihCLmNvZGUhPT12b2lkIDApe2NvbnN0IEE9TnVtYmVyLnBhcnNlRmxvYXQoQi5jb2RlKTtzPUE9PT1KP3ZvaWQgMDpBO31lbHNlIEIudXJpIT09dm9pZCAwJiYoQz1CLnVyaS5sZW5ndGg9PT0wP3ZvaWQgMDpCLnVyaSk7fWNvbnN0IG49cS5jb2Rlcy5nZXQoTnVtYmVyKHMpKTtvW0UrMV09PT1gXG5gPyhDJiYoZSs9aihcIlwiKSkscyYmbiYmKGUrPU4obikpKTphPT09YFxuYCYmKHMmJm4mJihlKz1OKHMpKSxDJiYoZSs9aihDKSkpO31yZXR1cm4gZX07ZnVuY3Rpb24gUCh0LHUsRil7cmV0dXJuIFN0cmluZyh0KS5ub3JtYWxpemUoKS5yZXBsYWNlKC9cXHJcXG4vZyxgXG5gKS5zcGxpdChgXG5gKS5tYXAoZT0+dUQoZSx1LEYpKS5qb2luKGBcbmApfWZ1bmN0aW9uIEZEKHQsdSl7aWYodD09PXUpcmV0dXJuO2NvbnN0IEY9dC5zcGxpdChgXG5gKSxlPXUuc3BsaXQoYFxuYCkscz1bXTtmb3IobGV0IEM9MDtDPE1hdGgubWF4KEYubGVuZ3RoLGUubGVuZ3RoKTtDKyspRltDXSE9PWVbQ10mJnMucHVzaChDKTtyZXR1cm4gc31jb25zdCBSPVN5bWJvbChcImNsYWNrOmNhbmNlbFwiKTtmdW5jdGlvbiBnKHQsdSl7dC5pc1RUWSYmdC5zZXRSYXdNb2RlKHUpO31jb25zdCBWPW5ldyBNYXAoW1tcImtcIixcInVwXCJdLFtcImpcIixcImRvd25cIl0sW1wiaFwiLFwibGVmdFwiXSxbXCJsXCIsXCJyaWdodFwiXV0pLHREPW5ldyBTZXQoW1widXBcIixcImRvd25cIixcImxlZnRcIixcInJpZ2h0XCIsXCJzcGFjZVwiLFwiZW50ZXJcIl0pO2NsYXNzIGh7Y29uc3RydWN0b3Ioe3JlbmRlcjp1LGlucHV0OkY9c3RkaW4sb3V0cHV0OmU9c3Rkb3V0LC4uLnN9LEM9ITApe3RoaXMuX3RyYWNrPSExLHRoaXMuX2N1cnNvcj0wLHRoaXMuc3RhdGU9XCJpbml0aWFsXCIsdGhpcy5lcnJvcj1cIlwiLHRoaXMuc3Vic2NyaWJlcnM9bmV3IE1hcCx0aGlzLl9wcmV2RnJhbWU9XCJcIix0aGlzLm9wdHM9cyx0aGlzLm9uS2V5cHJlc3M9dGhpcy5vbktleXByZXNzLmJpbmQodGhpcyksdGhpcy5jbG9zZT10aGlzLmNsb3NlLmJpbmQodGhpcyksdGhpcy5yZW5kZXI9dGhpcy5yZW5kZXIuYmluZCh0aGlzKSx0aGlzLl9yZW5kZXI9dS5iaW5kKHRoaXMpLHRoaXMuX3RyYWNrPUMsdGhpcy5pbnB1dD1GLHRoaXMub3V0cHV0PWU7fXByb21wdCgpe2NvbnN0IHU9bmV3IFdyaXRlU3RyZWFtKDApO3JldHVybiB1Ll93cml0ZT0oRixlLHMpPT57dGhpcy5fdHJhY2smJih0aGlzLnZhbHVlPXRoaXMucmwubGluZS5yZXBsYWNlKC9cXHQvZyxcIlwiKSx0aGlzLl9jdXJzb3I9dGhpcy5ybC5jdXJzb3IsdGhpcy5lbWl0KFwidmFsdWVcIix0aGlzLnZhbHVlKSkscygpO30sdGhpcy5pbnB1dC5waXBlKHUpLHRoaXMucmw9Zi5jcmVhdGVJbnRlcmZhY2Uoe2lucHV0OnRoaXMuaW5wdXQsb3V0cHV0OnUsdGFiU2l6ZToyLHByb21wdDpcIlwiLGVzY2FwZUNvZGVUaW1lb3V0OjUwfSksZi5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbnB1dCx0aGlzLnJsKSx0aGlzLnJsLnByb21wdCgpLHRoaXMub3B0cy5pbml0aWFsVmFsdWUhPT12b2lkIDAmJnRoaXMuX3RyYWNrJiZ0aGlzLnJsLndyaXRlKHRoaXMub3B0cy5pbml0aWFsVmFsdWUpLHRoaXMuaW5wdXQub24oXCJrZXlwcmVzc1wiLHRoaXMub25LZXlwcmVzcyksZyh0aGlzLmlucHV0LCEwKSx0aGlzLm91dHB1dC5vbihcInJlc2l6ZVwiLHRoaXMucmVuZGVyKSx0aGlzLnJlbmRlcigpLG5ldyBQcm9taXNlKChGLGUpPT57dGhpcy5vbmNlKFwic3VibWl0XCIsKCk9Pnt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLnNob3cpLHRoaXMub3V0cHV0Lm9mZihcInJlc2l6ZVwiLHRoaXMucmVuZGVyKSxnKHRoaXMuaW5wdXQsITEpLEYodGhpcy52YWx1ZSk7fSksdGhpcy5vbmNlKFwiY2FuY2VsXCIsKCk9Pnt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLnNob3cpLHRoaXMub3V0cHV0Lm9mZihcInJlc2l6ZVwiLHRoaXMucmVuZGVyKSxnKHRoaXMuaW5wdXQsITEpLEYoUik7fSk7fSl9b24odSxGKXtjb25zdCBlPXRoaXMuc3Vic2NyaWJlcnMuZ2V0KHUpPz9bXTtlLnB1c2goe2NiOkZ9KSx0aGlzLnN1YnNjcmliZXJzLnNldCh1LGUpO31vbmNlKHUsRil7Y29uc3QgZT10aGlzLnN1YnNjcmliZXJzLmdldCh1KT8/W107ZS5wdXNoKHtjYjpGLG9uY2U6ITB9KSx0aGlzLnN1YnNjcmliZXJzLnNldCh1LGUpO31lbWl0KHUsLi4uRil7Y29uc3QgZT10aGlzLnN1YnNjcmliZXJzLmdldCh1KT8/W10scz1bXTtmb3IoY29uc3QgQyBvZiBlKUMuY2IoLi4uRiksQy5vbmNlJiZzLnB1c2goKCk9PmUuc3BsaWNlKGUuaW5kZXhPZihDKSwxKSk7Zm9yKGNvbnN0IEMgb2YgcylDKCk7fXVuc3Vic2NyaWJlKCl7dGhpcy5zdWJzY3JpYmVycy5jbGVhcigpO31vbktleXByZXNzKHUsRil7aWYodGhpcy5zdGF0ZT09PVwiZXJyb3JcIiYmKHRoaXMuc3RhdGU9XCJhY3RpdmVcIiksRj8ubmFtZSYmIXRoaXMuX3RyYWNrJiZWLmhhcyhGLm5hbWUpJiZ0aGlzLmVtaXQoXCJjdXJzb3JcIixWLmdldChGLm5hbWUpKSxGPy5uYW1lJiZ0RC5oYXMoRi5uYW1lKSYmdGhpcy5lbWl0KFwiY3Vyc29yXCIsRi5uYW1lKSx1JiYodS50b0xvd2VyQ2FzZSgpPT09XCJ5XCJ8fHUudG9Mb3dlckNhc2UoKT09PVwiblwiKSYmdGhpcy5lbWl0KFwiY29uZmlybVwiLHUudG9Mb3dlckNhc2UoKT09PVwieVwiKSx1JiZ0aGlzLmVtaXQoXCJrZXlcIix1LnRvTG93ZXJDYXNlKCkpLEY/Lm5hbWU9PT1cInJldHVyblwiKXtpZih0aGlzLm9wdHMudmFsaWRhdGUpe2NvbnN0IGU9dGhpcy5vcHRzLnZhbGlkYXRlKHRoaXMudmFsdWUpO2UmJih0aGlzLmVycm9yPWUsdGhpcy5zdGF0ZT1cImVycm9yXCIsdGhpcy5ybC53cml0ZSh0aGlzLnZhbHVlKSk7fXRoaXMuc3RhdGUhPT1cImVycm9yXCImJih0aGlzLnN0YXRlPVwic3VibWl0XCIpO311PT09XCJcdTAwMDNcIiYmKHRoaXMuc3RhdGU9XCJjYW5jZWxcIiksKHRoaXMuc3RhdGU9PT1cInN1Ym1pdFwifHx0aGlzLnN0YXRlPT09XCJjYW5jZWxcIikmJnRoaXMuZW1pdChcImZpbmFsaXplXCIpLHRoaXMucmVuZGVyKCksKHRoaXMuc3RhdGU9PT1cInN1Ym1pdFwifHx0aGlzLnN0YXRlPT09XCJjYW5jZWxcIikmJnRoaXMuY2xvc2UoKTt9Y2xvc2UoKXt0aGlzLmlucHV0LnVucGlwZSgpLHRoaXMuaW5wdXQucmVtb3ZlTGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMub25LZXlwcmVzcyksdGhpcy5vdXRwdXQud3JpdGUoYFxuYCksZyh0aGlzLmlucHV0LCExKSx0aGlzLnJsLmNsb3NlKCksdGhpcy5lbWl0KGAke3RoaXMuc3RhdGV9YCx0aGlzLnZhbHVlKSx0aGlzLnVuc3Vic2NyaWJlKCk7fXJlc3RvcmVDdXJzb3IoKXtjb25zdCB1PVAodGhpcy5fcHJldkZyYW1lLHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMse2hhcmQ6ITB9KS5zcGxpdChgXG5gKS5sZW5ndGgtMTt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLm1vdmUoLTk5OSx1Ki0xKSk7fXJlbmRlcigpe2NvbnN0IHU9UCh0aGlzLl9yZW5kZXIodGhpcyk/P1wiXCIscHJvY2Vzcy5zdGRvdXQuY29sdW1ucyx7aGFyZDohMH0pO2lmKHUhPT10aGlzLl9wcmV2RnJhbWUpe2lmKHRoaXMuc3RhdGU9PT1cImluaXRpYWxcIil0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLmhpZGUpO2Vsc2Uge2NvbnN0IEY9RkQodGhpcy5fcHJldkZyYW1lLHUpO2lmKHRoaXMucmVzdG9yZUN1cnNvcigpLEYmJkY/Lmxlbmd0aD09PTEpe2NvbnN0IGU9RlswXTt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLm1vdmUoMCxlKSksdGhpcy5vdXRwdXQud3JpdGUoc3JjLmVyYXNlLmxpbmVzKDEpKTtjb25zdCBzPXUuc3BsaXQoYFxuYCk7dGhpcy5vdXRwdXQud3JpdGUoc1tlXSksdGhpcy5fcHJldkZyYW1lPXUsdGhpcy5vdXRwdXQud3JpdGUoc3JjLmN1cnNvci5tb3ZlKDAscy5sZW5ndGgtZS0xKSk7cmV0dXJufWVsc2UgaWYoRiYmRj8ubGVuZ3RoPjEpe2NvbnN0IGU9RlswXTt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLm1vdmUoMCxlKSksdGhpcy5vdXRwdXQud3JpdGUoc3JjLmVyYXNlLmRvd24oKSk7Y29uc3QgQz11LnNwbGl0KGBcbmApLnNsaWNlKGUpO3RoaXMub3V0cHV0LndyaXRlKEMuam9pbihgXG5gKSksdGhpcy5fcHJldkZyYW1lPXU7cmV0dXJufXRoaXMub3V0cHV0LndyaXRlKHNyYy5lcmFzZS5kb3duKCkpO310aGlzLm91dHB1dC53cml0ZSh1KSx0aGlzLnN0YXRlPT09XCJpbml0aWFsXCImJih0aGlzLnN0YXRlPVwiYWN0aXZlXCIpLHRoaXMuX3ByZXZGcmFtZT11O319fWNsYXNzIHNEIGV4dGVuZHMgaHtnZXQgY3Vyc29yKCl7cmV0dXJuIHRoaXMudmFsdWU/MDoxfWdldCBfdmFsdWUoKXtyZXR1cm4gdGhpcy5jdXJzb3I9PT0wfWNvbnN0cnVjdG9yKHUpe3N1cGVyKHUsITEpLHRoaXMudmFsdWU9ISF1LmluaXRpYWxWYWx1ZSx0aGlzLm9uKFwidmFsdWVcIiwoKT0+e3RoaXMudmFsdWU9dGhpcy5fdmFsdWU7fSksdGhpcy5vbihcImNvbmZpcm1cIixGPT57dGhpcy5vdXRwdXQud3JpdGUoc3JjLmN1cnNvci5tb3ZlKDAsLTEpKSx0aGlzLnZhbHVlPUYsdGhpcy5zdGF0ZT1cInN1Ym1pdFwiLHRoaXMuY2xvc2UoKTt9KSx0aGlzLm9uKFwiY3Vyc29yXCIsKCk9Pnt0aGlzLnZhbHVlPSF0aGlzLnZhbHVlO30pO319Y2xhc3MgaUQgZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKHUpe3N1cGVyKHUsITEpLHRoaXMuY3Vyc29yPTAsdGhpcy5vcHRpb25zPXUub3B0aW9ucyx0aGlzLnZhbHVlPVsuLi51LmluaXRpYWxWYWx1ZXM/P1tdXSx0aGlzLmN1cnNvcj1NYXRoLm1heCh0aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7dmFsdWU6Rn0pPT5GPT09dS5jdXJzb3JBdCksMCksdGhpcy5vbihcImtleVwiLEY9PntGPT09XCJhXCImJnRoaXMudG9nZ2xlQWxsKCk7fSksdGhpcy5vbihcImN1cnNvclwiLEY9Pntzd2l0Y2goRil7Y2FzZVwibGVmdFwiOmNhc2VcInVwXCI6dGhpcy5jdXJzb3I9dGhpcy5jdXJzb3I9PT0wP3RoaXMub3B0aW9ucy5sZW5ndGgtMTp0aGlzLmN1cnNvci0xO2JyZWFrO2Nhc2VcImRvd25cIjpjYXNlXCJyaWdodFwiOnRoaXMuY3Vyc29yPXRoaXMuY3Vyc29yPT09dGhpcy5vcHRpb25zLmxlbmd0aC0xPzA6dGhpcy5jdXJzb3IrMTticmVhaztjYXNlXCJzcGFjZVwiOnRoaXMudG9nZ2xlVmFsdWUoKTticmVha319KTt9Z2V0IF92YWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLnZhbHVlfXRvZ2dsZUFsbCgpe2NvbnN0IHU9dGhpcy52YWx1ZS5sZW5ndGg9PT10aGlzLm9wdGlvbnMubGVuZ3RoO3RoaXMudmFsdWU9dT9bXTp0aGlzLm9wdGlvbnMubWFwKEY9PkYudmFsdWUpO310b2dnbGVWYWx1ZSgpe2NvbnN0IHU9dGhpcy52YWx1ZS5pbmNsdWRlcyh0aGlzLl92YWx1ZSk7dGhpcy52YWx1ZT11P3RoaXMudmFsdWUuZmlsdGVyKEY9PkYhPT10aGlzLl92YWx1ZSk6Wy4uLnRoaXMudmFsdWUsdGhpcy5fdmFsdWVdO319Y2xhc3MgRUQgZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKHUpe3N1cGVyKHUsITEpLHRoaXMuY3Vyc29yPTAsdGhpcy5vcHRpb25zPXUub3B0aW9ucyx0aGlzLmN1cnNvcj10aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7dmFsdWU6Rn0pPT5GPT09dS5pbml0aWFsVmFsdWUpLHRoaXMuY3Vyc29yPT09LTEmJih0aGlzLmN1cnNvcj0wKSx0aGlzLmNoYW5nZVZhbHVlKCksdGhpcy5vbihcImN1cnNvclwiLEY9Pntzd2l0Y2goRil7Y2FzZVwibGVmdFwiOmNhc2VcInVwXCI6dGhpcy5jdXJzb3I9dGhpcy5jdXJzb3I9PT0wP3RoaXMub3B0aW9ucy5sZW5ndGgtMTp0aGlzLmN1cnNvci0xO2JyZWFrO2Nhc2VcImRvd25cIjpjYXNlXCJyaWdodFwiOnRoaXMuY3Vyc29yPXRoaXMuY3Vyc29yPT09dGhpcy5vcHRpb25zLmxlbmd0aC0xPzA6dGhpcy5jdXJzb3IrMTticmVha310aGlzLmNoYW5nZVZhbHVlKCk7fSk7fWdldCBfdmFsdWUoKXtyZXR1cm4gdGhpcy5vcHRpb25zW3RoaXMuY3Vyc29yXX1jaGFuZ2VWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fdmFsdWUudmFsdWU7fX1jbGFzcyBvRCBleHRlbmRzIGh7Y29uc3RydWN0b3IodSl7c3VwZXIodSksdGhpcy52YWx1ZVdpdGhDdXJzb3I9XCJcIix0aGlzLm9uKFwiZmluYWxpemVcIiwoKT0+e3RoaXMudmFsdWV8fCh0aGlzLnZhbHVlPXUuZGVmYXVsdFZhbHVlKSx0aGlzLnZhbHVlV2l0aEN1cnNvcj10aGlzLnZhbHVlO30pLHRoaXMub24oXCJ2YWx1ZVwiLCgpPT57aWYodGhpcy5jdXJzb3I+PXRoaXMudmFsdWUubGVuZ3RoKXRoaXMudmFsdWVXaXRoQ3Vyc29yPWAke3RoaXMudmFsdWV9JHtsLmludmVyc2UobC5oaWRkZW4oXCJfXCIpKX1gO2Vsc2Uge2NvbnN0IEY9dGhpcy52YWx1ZS5zbGljZSgwLHRoaXMuY3Vyc29yKSxlPXRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO3RoaXMudmFsdWVXaXRoQ3Vyc29yPWAke0Z9JHtsLmludmVyc2UoZVswXSl9JHtlLnNsaWNlKDEpfWA7fX0pO31nZXQgY3Vyc29yKCl7cmV0dXJuIHRoaXMuX2N1cnNvcn19XG5cbmNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGVTdXBwb3J0ZWQoKTtcbmNvbnN0IHMgPSAoYywgZmFsbGJhY2spID0+IHVuaWNvZGUgPyBjIDogZmFsbGJhY2s7XG5jb25zdCBTX1NURVBfQUNUSVZFID0gcyhcIlxcdTI3NkZcIiwgXCI+XCIpO1xuY29uc3QgU19TVEVQX0NBTkNFTCA9IHMoXCJcXHUyNUEwXCIsIFwieFwiKTtcbmNvbnN0IFNfU1RFUF9FUlJPUiA9IHMoXCJcXHUyNUIyXCIsIFwieFwiKTtcbmNvbnN0IFNfU1RFUF9TVUJNSVQgPSBzKFwiXFx1MjcxNFwiLCBcIlxcdTIyMUFcIik7XG5jb25zdCBTX0JBUiA9IFwiXCI7XG5jb25zdCBTX0JBUl9FTkQgPSBcIlwiO1xuY29uc3QgU19SQURJT19BQ1RJVkUgPSBzKFwiXFx1MjVDRlwiLCBcIj5cIik7XG5jb25zdCBTX1JBRElPX0lOQUNUSVZFID0gcyhcIlxcdTI1Q0JcIiwgXCIgXCIpO1xuY29uc3QgU19DSEVDS0JPWF9BQ1RJVkUgPSBzKFwiXFx1MjVGQlwiLCBcIltcXHUyMDIyXVwiKTtcbmNvbnN0IFNfQ0hFQ0tCT1hfU0VMRUNURUQgPSBzKFwiXFx1MjVGQ1wiLCBcIlsrXVwiKTtcbmNvbnN0IFNfQ0hFQ0tCT1hfSU5BQ1RJVkUgPSBzKFwiXFx1MjVGQlwiLCBcIlsgXVwiKTtcbmNvbnN0IHN5bWJvbCA9IChzdGF0ZSkgPT4ge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcImluaXRpYWxcIjpcbiAgICBjYXNlIFwiYWN0aXZlXCI6IHtcbiAgICAgIHJldHVybiBjb2xvcnMuY3lhbihTX1NURVBfQUNUSVZFKTtcbiAgICB9XG4gICAgY2FzZSBcImNhbmNlbFwiOiB7XG4gICAgICByZXR1cm4gY29sb3JzLnJlZChTX1NURVBfQ0FOQ0VMKTtcbiAgICB9XG4gICAgY2FzZSBcImVycm9yXCI6IHtcbiAgICAgIHJldHVybiBjb2xvcnMueWVsbG93KFNfU1RFUF9FUlJPUik7XG4gICAgfVxuICAgIGNhc2UgXCJzdWJtaXRcIjoge1xuICAgICAgcmV0dXJuIGNvbG9ycy5ncmVlbihTX1NURVBfU1VCTUlUKTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCB0ZXh0ID0gKG9wdHMpID0+IHtcbiAgcmV0dXJuIG5ldyBvRCh7XG4gICAgdmFsaWRhdGU6IG9wdHMudmFsaWRhdGUsXG4gICAgcGxhY2Vob2xkZXI6IG9wdHMucGxhY2Vob2xkZXIsXG4gICAgZGVmYXVsdFZhbHVlOiBvcHRzLmRlZmF1bHRWYWx1ZSxcbiAgICBpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlLFxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gYCR7Y29sb3JzLmdyYXkoU19CQVIpfVxuJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICR7b3B0cy5tZXNzYWdlfVxuYDtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gb3B0cy5wbGFjZWhvbGRlciA/IGNvbG9ycy5pbnZlcnNlKG9wdHMucGxhY2Vob2xkZXJbMF0pICsgY29sb3JzLmRpbShvcHRzLnBsYWNlaG9sZGVyLnNsaWNlKDEpKSA6IGNvbG9ycy5pbnZlcnNlKGNvbG9ycy5oaWRkZW4oXCJfXCIpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWVXaXRoQ3Vyc29yIDogcGxhY2Vob2xkZXI7XG4gICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGUudHJpbSgpfVxuJHtjb2xvcnMueWVsbG93KFxuICAgICAgICAgICAgU19CQVJcbiAgICAgICAgICApfSAke3ZhbHVlfVxuJHtjb2xvcnMueWVsbG93KFNfQkFSX0VORCl9ICR7Y29sb3JzLnllbGxvdyhcbiAgICAgICAgICAgIHRoaXMuZXJyb3JcbiAgICAgICAgICApfVxuYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3VibWl0XCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLmRpbShcbiAgICAgICAgICAgIHRoaXMudmFsdWUgfHwgb3B0cy5wbGFjZWhvbGRlclxuICAgICAgICAgICl9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLnN0cmlrZXRocm91Z2goXG4gICAgICAgICAgICBjb2xvcnMuZGltKHRoaXMudmFsdWUgPz8gXCJcIilcbiAgICAgICAgICApfSR7dGhpcy52YWx1ZT8udHJpbSgpID8gXCJcXG5cIiArIGNvbG9ycy5ncmF5KFNfQkFSKSA6IFwiXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmV0dXJuIGAke3RpdGxlfSR7Y29sb3JzLmN5YW4oU19CQVIpfSAke3ZhbHVlfVxuJHtjb2xvcnMuY3lhbihcbiAgICAgICAgICAgIFNfQkFSX0VORFxuICAgICAgICAgICl9XG5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KS5wcm9tcHQoKTtcbn07XG5jb25zdCBjb25maXJtID0gKG9wdHMpID0+IHtcbiAgY29uc3QgYWN0aXZlID0gb3B0cy5hY3RpdmUgPz8gXCJZZXNcIjtcbiAgY29uc3QgaW5hY3RpdmUgPSBvcHRzLmluYWN0aXZlID8/IFwiTm9cIjtcbiAgcmV0dXJuIG5ldyBzRCh7XG4gICAgYWN0aXZlLFxuICAgIGluYWN0aXZlLFxuICAgIGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWUgPz8gdHJ1ZSxcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB0aXRsZSA9IGAke2NvbG9ycy5ncmF5KFNfQkFSKX1cbiR7c3ltYm9sKHRoaXMuc3RhdGUpfSAke29wdHMubWVzc2FnZX1cbmA7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUgPyBhY3RpdmUgOiBpbmFjdGl2ZTtcbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIFwic3VibWl0XCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLmRpbSh2YWx1ZSl9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLnN0cmlrZXRocm91Z2goXG4gICAgICAgICAgICBjb2xvcnMuZGltKHZhbHVlKVxuICAgICAgICAgICl9XG4ke2NvbG9ycy5ncmF5KFNfQkFSKX1gO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuY3lhbihTX0JBUil9ICR7dGhpcy52YWx1ZSA/IGAke2NvbG9ycy5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7YWN0aXZlfWAgOiBgJHtjb2xvcnMuZGltKFNfUkFESU9fSU5BQ1RJVkUpfSAke2NvbG9ycy5kaW0oYWN0aXZlKX1gfSAke2NvbG9ycy5kaW0oXCIvXCIpfSAke3RoaXMudmFsdWUgPyBgJHtjb2xvcnMuZGltKFNfUkFESU9fSU5BQ1RJVkUpfSAke2NvbG9ycy5kaW0oaW5hY3RpdmUpfWAgOiBgJHtjb2xvcnMuZ3JlZW4oU19SQURJT19BQ1RJVkUpfSAke2luYWN0aXZlfWB9XG4ke2NvbG9ycy5jeWFuKFNfQkFSX0VORCl9XG5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KS5wcm9tcHQoKTtcbn07XG5jb25zdCBzZWxlY3QgPSAob3B0cykgPT4ge1xuICBjb25zdCBvcHQgPSAob3B0aW9uLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUpO1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJhY3RpdmVcIjoge1xuICAgICAgICByZXR1cm4gYCR7Y29sb3JzLmdyZWVuKFNfUkFESU9fQUNUSVZFKX0gJHtsYWJlbH0gJHtvcHRpb24uaGludCA/IGNvbG9ycy5kaW0oYCgke29wdGlvbi5oaW50fSlgKSA6IFwiXCJ9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOiB7XG4gICAgICAgIHJldHVybiBgJHtjb2xvcnMuZGltKGxhYmVsKX1gO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNhbmNlbGxlZFwiOiB7XG4gICAgICAgIHJldHVybiBgJHtjb2xvcnMuc3RyaWtldGhyb3VnaChjb2xvcnMuZGltKGxhYmVsKSl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2NvbG9ycy5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgfTtcbiAgcmV0dXJuIG5ldyBFRCh7XG4gICAgb3B0aW9uczogb3B0cy5vcHRpb25zLFxuICAgIGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWUsXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgdGl0bGUgPSBgJHtjb2xvcnMuZ3JheShTX0JBUil9XG4ke3N5bWJvbCh0aGlzLnN0YXRlKX0gJHtvcHRzLm1lc3NhZ2V9XG5gO1xuICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgIGNhc2UgXCJzdWJtaXRcIjoge1xuICAgICAgICAgIHJldHVybiBgJHt0aXRsZX0ke2NvbG9ycy5ncmF5KFNfQkFSKX0gJHtvcHQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLFxuICAgICAgICAgICAgXCJzZWxlY3RlZFwiXG4gICAgICAgICAgKX1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjYW5jZWxcIjoge1xuICAgICAgICAgIHJldHVybiBgJHt0aXRsZX0ke2NvbG9ycy5ncmF5KFNfQkFSKX0gJHtvcHQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLFxuICAgICAgICAgICAgXCJjYW5jZWxsZWRcIlxuICAgICAgICAgICl9XG4ke2NvbG9ycy5ncmF5KFNfQkFSKX1gO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuY3lhbihTX0JBUil9ICR7dGhpcy5vcHRpb25zLm1hcChcbiAgICAgICAgICAgIChvcHRpb24sIGkpID0+IG9wdChvcHRpb24sIGkgPT09IHRoaXMuY3Vyc29yID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIilcbiAgICAgICAgICApLmpvaW4oYFxuJHtjb2xvcnMuY3lhbihTX0JBUil9ICBgKX1cbiR7Y29sb3JzLmN5YW4oU19CQVJfRU5EKX1cbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pLnByb21wdCgpO1xufTtcbmNvbnN0IG11bHRpc2VsZWN0ID0gKG9wdHMpID0+IHtcbiAgY29uc3Qgb3B0ID0gKG9wdGlvbiwgc3RhdGUpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlKTtcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICBjYXNlIFwiYWN0aXZlXCI6IHtcbiAgICAgICAgcmV0dXJuIGAke2NvbG9ycy5jeWFuKFNfQ0hFQ0tCT1hfQUNUSVZFKX0gJHtsYWJlbH0gJHtvcHRpb24uaGludCA/IGNvbG9ycy5kaW0oYCgke29wdGlvbi5oaW50fSlgKSA6IFwiXCJ9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOiB7XG4gICAgICAgIHJldHVybiBgJHtjb2xvcnMuZ3JlZW4oU19DSEVDS0JPWF9TRUxFQ1RFRCl9ICR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJjYW5jZWxsZWRcIjoge1xuICAgICAgICByZXR1cm4gYCR7Y29sb3JzLnN0cmlrZXRocm91Z2goY29sb3JzLmRpbShsYWJlbCkpfWA7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYWN0aXZlLXNlbGVjdGVkXCI6IHtcbiAgICAgICAgcmV0dXJuIGAke2NvbG9ycy5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKX0gJHtsYWJlbH0gJHtvcHRpb24uaGludCA/IGNvbG9ycy5kaW0oYCgke29wdGlvbi5oaW50fSlgKSA6IFwiXCJ9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJzdWJtaXR0ZWRcIjoge1xuICAgICAgICByZXR1cm4gYCR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2NvbG9ycy5kaW0oU19DSEVDS0JPWF9JTkFDVElWRSl9ICR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgfTtcbiAgcmV0dXJuIG5ldyBpRCh7XG4gICAgb3B0aW9uczogb3B0cy5vcHRpb25zLFxuICAgIGluaXRpYWxWYWx1ZXM6IG9wdHMuaW5pdGlhbFZhbHVlcyxcbiAgICByZXF1aXJlZDogb3B0cy5yZXF1aXJlZCA/PyB0cnVlLFxuICAgIGN1cnNvckF0OiBvcHRzLmN1cnNvckF0LFxuICAgIHZhbGlkYXRlKHNlbGVjdGVkKSB7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiBzZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uXG4ke2NvbG9ycy5yZXNldChcbiAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgYFByZXNzICR7Y29sb3JzLmdyYXkoXG4gICAgICAgICAgICAgIGNvbG9ycy5iZ1doaXRlKGNvbG9ycy5pbnZlcnNlKFwiIHNwYWNlIFwiKSlcbiAgICAgICAgICAgICl9IHRvIHNlbGVjdCwgJHtjb2xvcnMuZ3JheShcbiAgICAgICAgICAgICAgY29sb3JzLmJnV2hpdGUoY29sb3JzLmludmVyc2UoXCIgZW50ZXIgXCIpKVxuICAgICAgICAgICAgKX0gdG8gc3VibWl0YFxuICAgICAgICAgIClcbiAgICAgICAgKX1gO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgdGl0bGUgPSBgJHtjb2xvcnMuZ3JheShTX0JBUil9XG4ke3N5bWJvbCh0aGlzLnN0YXRlKX0gJHtvcHRzLm1lc3NhZ2V9XG5gO1xuICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgIGNhc2UgXCJzdWJtaXRcIjoge1xuICAgICAgICAgIHJldHVybiBgJHt0aXRsZX0ke2NvbG9ycy5ncmF5KFNfQkFSKX0gJHt0aGlzLm9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHRoaXMudmFsdWUuaW5jbHVkZXModmFsdWUpKS5tYXAoKG9wdGlvbikgPT4gb3B0KG9wdGlvbiwgXCJzdWJtaXR0ZWRcIikpLmpvaW4oY29sb3JzLmRpbShcIiwgXCIpKSB8fCBjb2xvcnMuZGltKFwibm9uZVwiKX1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjYW5jZWxcIjoge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5vcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB0aGlzLnZhbHVlLmluY2x1ZGVzKHZhbHVlKSkubWFwKChvcHRpb24pID0+IG9wdChvcHRpb24sIFwiY2FuY2VsbGVkXCIpKS5qb2luKGNvbG9ycy5kaW0oXCIsIFwiKSk7XG4gICAgICAgICAgcmV0dXJuIGAke3RpdGxlfSR7Y29sb3JzLmdyYXkoU19CQVIpfSAke2xhYmVsLnRyaW0oKSA/IGAke2xhYmVsfVxuJHtjb2xvcnMuZ3JheShTX0JBUil9YCA6IFwiXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZXJyb3JcIjoge1xuICAgICAgICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuZXJyb3Iuc3BsaXQoXCJcXG5cIikubWFwKFxuICAgICAgICAgICAgKGxuLCBpKSA9PiBpID09PSAwID8gYCR7Y29sb3JzLnllbGxvdyhTX0JBUl9FTkQpfSAke2NvbG9ycy55ZWxsb3cobG4pfWAgOiBgICAgJHtsbn1gXG4gICAgICAgICAgKS5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgIHJldHVybiB0aXRsZSArIGNvbG9ycy55ZWxsb3coU19CQVIpICsgXCIgIFwiICsgdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGkgPT09IHRoaXMuY3Vyc29yO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZSAmJiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gb3B0KG9wdGlvbiwgXCJhY3RpdmUtc2VsZWN0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdChvcHRpb24sIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0KG9wdGlvbiwgYWN0aXZlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIik7XG4gICAgICAgICAgfSkuam9pbihgXG4ke2NvbG9ycy55ZWxsb3coU19CQVIpfSAgYCkgKyBcIlxcblwiICsgZm9vdGVyICsgXCJcXG5cIjtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmV0dXJuIGAke3RpdGxlfSR7Y29sb3JzLmN5YW4oU19CQVIpfSAke3RoaXMub3B0aW9ucy5tYXAoKG9wdGlvbiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBpID09PSB0aGlzLmN1cnNvcjtcbiAgICAgICAgICAgIGlmIChhY3RpdmUgJiYgc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdChvcHRpb24sIFwiYWN0aXZlLXNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcHQob3B0aW9uLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdChvcHRpb24sIGFjdGl2ZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCIpO1xuICAgICAgICAgIH0pLmpvaW4oYFxuJHtjb2xvcnMuY3lhbihTX0JBUil9ICBgKX1cbiR7Y29sb3JzLmN5YW4oU19CQVJfRU5EKX1cbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pLnByb21wdCgpO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0KG1lc3NhZ2UsIG9wdHMgPSB7fSkge1xuICBpZiAoIW9wdHMudHlwZSB8fCBvcHRzLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRleHQoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogb3B0cy5kZWZhdWx0LFxuICAgICAgcGxhY2Vob2xkZXI6IG9wdHMucGxhY2Vob2xkZXIsXG4gICAgICBpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFxuICAgIH0pO1xuICB9XG4gIGlmIChvcHRzLnR5cGUgPT09IFwiY29uZmlybVwiKSB7XG4gICAgcmV0dXJuIGF3YWl0IGNvbmZpcm0oe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsXG4gICAgfSk7XG4gIH1cbiAgaWYgKG9wdHMudHlwZSA9PT0gXCJzZWxlY3RcIikge1xuICAgIHJldHVybiBhd2FpdCBzZWxlY3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IG9wdHMub3B0aW9ucy5tYXAoXG4gICAgICAgIChvKSA9PiB0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIiA/IHsgdmFsdWU6IG8sIGxhYmVsOiBvIH0gOiBvXG4gICAgICApXG4gICAgfSk7XG4gIH1cbiAgaWYgKG9wdHMudHlwZSA9PT0gXCJtdWx0aXNlbGVjdFwiKSB7XG4gICAgcmV0dXJuIGF3YWl0IG11bHRpc2VsZWN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBvcHRzLm9wdGlvbnMubWFwKFxuICAgICAgICAobykgPT4gdHlwZW9mIG8gPT09IFwic3RyaW5nXCIgPyB7IHZhbHVlOiBvLCBsYWJlbDogbyB9IDogb1xuICAgICAgKSxcbiAgICAgIHJlcXVpcmVkOiBvcHRzLnJlcXVpcmVkXG4gICAgfSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHByb21wdCB0eXBlOiAke29wdHMudHlwZX1gKTtcbn1cblxuZXhwb3J0IHsgcHJvbXB0IH07XG4iLCAiaW1wb3J0IHsgY3JlYXRlQ29uc29sYSBhcyBjcmVhdGVDb25zb2xhJDEsIExvZ0xldmVscyB9IGZyb20gJy4uL2NvcmUubWpzJztcbmltcG9ydCB7IEIgYXMgQmFzaWNSZXBvcnRlciwgcCBhcyBwYXJzZVN0YWNrIH0gZnJvbSAnLi9jb25zb2xhLjA2YWQ4YTY0Lm1qcyc7XG5pbXBvcnQgcHJvY2VzcyQxIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBjb2xvcnMsIGJveCwgc3RyaXBBbnNpIGFzIHN0cmlwQW5zaSQxIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgcHJvdmlkZXJzID0gW1xuICBbXCJBUFBWRVlPUlwiXSxcbiAgW1wiQVpVUkVfUElQRUxJTkVTXCIsIFwiU1lTVEVNX1RFQU1GT1VOREFUSU9OQ09MTEVDVElPTlVSSVwiXSxcbiAgW1wiQVpVUkVfU1RBVElDXCIsIFwiSU5QVVRfQVpVUkVfU1RBVElDX1dFQl9BUFBTX0FQSV9UT0tFTlwiXSxcbiAgW1wiQVBQQ0lSQ0xFXCIsIFwiQUNfQVBQQ0lSQ0xFXCJdLFxuICBbXCJCQU1CT09cIiwgXCJiYW1ib29fcGxhbktleVwiXSxcbiAgW1wiQklUQlVDS0VUXCIsIFwiQklUQlVDS0VUX0NPTU1JVFwiXSxcbiAgW1wiQklUUklTRVwiLCBcIkJJVFJJU0VfSU9cIl0sXG4gIFtcIkJVRERZXCIsIFwiQlVERFlfV09SS1NQQUNFX0lEXCJdLFxuICBbXCJCVUlMREtJVEVcIl0sXG4gIFtcIkNJUkNMRVwiLCBcIkNJUkNMRUNJXCJdLFxuICBbXCJDSVJSVVNcIiwgXCJDSVJSVVNfQ0lcIl0sXG4gIFtcIkNMT1VERkxBUkVfUEFHRVNcIiwgXCJDRl9QQUdFU1wiLCB7IGNpOiB0cnVlIH1dLFxuICBbXCJDT0RFQlVJTERcIiwgXCJDT0RFQlVJTERfQlVJTERfQVJOXCJdLFxuICBbXCJDT0RFRlJFU0hcIiwgXCJDRl9CVUlMRF9JRFwiXSxcbiAgW1wiRFJPTkVcIl0sXG4gIFtcIkRST05FXCIsIFwiRFJPTkVfQlVJTERfRVZFTlRcIl0sXG4gIFtcIkRTQVJJXCJdLFxuICBbXCJHSVRIVUJfQUNUSU9OU1wiXSxcbiAgW1wiR0lUTEFCXCIsIFwiR0lUTEFCX0NJXCJdLFxuICBbXCJHSVRMQUJcIiwgXCJDSV9NRVJHRV9SRVFVRVNUX0lEXCJdLFxuICBbXCJHT0NEXCIsIFwiR09fUElQRUxJTkVfTEFCRUxcIl0sXG4gIFtcIkxBWUVSQ0lcIl0sXG4gIFtcIkhVRFNPTlwiLCBcIkhVRFNPTl9VUkxcIl0sXG4gIFtcIkpFTktJTlNcIiwgXCJKRU5LSU5TX1VSTFwiXSxcbiAgW1wiTUFHTlVNXCJdLFxuICBbXCJORVRMSUZZXCJdLFxuICBbXCJORVRMSUZZXCIsIFwiTkVUTElGWV9MT0NBTFwiLCB7IGNpOiBmYWxzZSB9XSxcbiAgW1wiTkVWRVJDT0RFXCJdLFxuICBbXCJSRU5ERVJcIl0sXG4gIFtcIlNBSUxcIiwgXCJTQUlMQ0lcIl0sXG4gIFtcIlNFTUFQSE9SRVwiXSxcbiAgW1wiU0NSRVdEUklWRVJcIl0sXG4gIFtcIlNISVBQQUJMRVwiXSxcbiAgW1wiU09MQU5PXCIsIFwiVERESVVNXCJdLFxuICBbXCJTVFJJREVSXCJdLFxuICBbXCJURUFNQ0lUWVwiLCBcIlRFQU1DSVRZX1ZFUlNJT05cIl0sXG4gIFtcIlRSQVZJU1wiXSxcbiAgW1wiVkVSQ0VMXCIsIFwiTk9XX0JVSUxERVJcIl0sXG4gIFtcIkFQUENFTlRFUlwiLCBcIkFQUENFTlRFUl9CVUlMRF9JRFwiXSxcbiAgW1wiQ09ERVNBTkRCT1hcIiwgXCJDT0RFU0FOREJPWF9TU0VcIiwgeyBjaTogZmFsc2UgfV0sXG4gIFtcIlNUQUNLQkxJVFpcIl0sXG4gIFtcIlNUT1JNS0lUXCJdLFxuICBbXCJDTEVBVlJcIl1cbl07XG5mdW5jdGlvbiBkZXRlY3RQcm92aWRlcihlbnYpIHtcbiAgZm9yIChjb25zdCBwcm92aWRlciBvZiBwcm92aWRlcnMpIHtcbiAgICBjb25zdCBlbnZOYW1lID0gcHJvdmlkZXJbMV0gfHwgcHJvdmlkZXJbMF07XG4gICAgaWYgKGVudltlbnZOYW1lXSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcHJvdmlkZXJbMF0udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgLi4ucHJvdmlkZXJbMl1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChlbnYuU0hFTEwgJiYgZW52LlNIRUxMID09PSBcIi9iaW4vanNoXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogXCJzdGFja2JsaXR6XCIsXG4gICAgICBjaTogZmFsc2VcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBjaTogZmFsc2VcbiAgfTtcbn1cblxuY29uc3QgcHJvY2Vzc1NoaW0gPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiA/IHByb2Nlc3MgOiB7fTtcbmNvbnN0IGVudlNoaW0gPSBwcm9jZXNzU2hpbS5lbnYgfHwge307XG5jb25zdCBwcm92aWRlckluZm8gPSBkZXRlY3RQcm92aWRlcihlbnZTaGltKTtcbmNvbnN0IG5vZGVFTlYgPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViB8fCBcIlwiO1xucHJvY2Vzc1NoaW0ucGxhdGZvcm07XG5wcm92aWRlckluZm8ubmFtZTtcbmNvbnN0IGlzQ0kgPSB0b0Jvb2xlYW4oZW52U2hpbS5DSSkgfHwgcHJvdmlkZXJJbmZvLmNpICE9PSBmYWxzZTtcbmNvbnN0IGhhc1RUWSA9IHRvQm9vbGVhbihwcm9jZXNzU2hpbS5zdGRvdXQgJiYgcHJvY2Vzc1NoaW0uc3Rkb3V0LmlzVFRZKTtcbmNvbnN0IGlzRGVidWcgPSB0b0Jvb2xlYW4oZW52U2hpbS5ERUJVRyk7XG5jb25zdCBpc1Rlc3QgPSBub2RlRU5WID09PSBcInRlc3RcIiB8fCB0b0Jvb2xlYW4oZW52U2hpbS5URVNUKTtcbnRvQm9vbGVhbihlbnZTaGltLk1JTklNQUwpIHx8IGlzQ0kgfHwgaXNUZXN0IHx8ICFoYXNUVFk7XG5mdW5jdGlvbiB0b0Jvb2xlYW4odmFsKSB7XG4gIHJldHVybiB2YWwgPyB2YWwgIT09IFwiZmFsc2VcIiA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBhbnNpUmVnZXgoe29ubHlGaXJzdCA9IGZhbHNlfSA9IHt9KSB7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdCAgICAnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufVxuXG5jb25zdCByZWdleCA9IGFuc2lSZWdleCgpO1xuXG5mdW5jdGlvbiBzdHJpcEFuc2koc3RyaW5nKSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgXFxgc3RyaW5nXFxgLCBnb3QgXFxgJHt0eXBlb2Ygc3RyaW5nfVxcYGApO1xuXHR9XG5cblx0Ly8gRXZlbiB0aG91Z2ggdGhlIHJlZ2V4IGlzIGdsb2JhbCwgd2UgZG9uJ3QgbmVlZCB0byByZXNldCB0aGUgYC5sYXN0SW5kZXhgXG5cdC8vIGJlY2F1c2UgdW5saWtlIGAuZXhlYygpYCBhbmQgYC50ZXN0KClgLCBgLnJlcGxhY2UoKWAgZG9lcyBpdCBhdXRvbWF0aWNhbGx5XG5cdC8vIGFuZCBkb2luZyBpdCBtYW51YWxseSBoYXMgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LlxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVnZXgsICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgKHgpIHtcblx0cmV0dXJuIHggJiYgeC5fX2VzTW9kdWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnZGVmYXVsdCcpID8geFsnZGVmYXVsdCddIDogeDtcbn1cblxudmFyIGVhc3Rhc2lhbndpZHRoID0ge2V4cG9ydHM6IHt9fTtcblxuKGZ1bmN0aW9uIChtb2R1bGUpIHtcblx0dmFyIGVhdyA9IHt9O1xuXG5cdHtcblx0ICBtb2R1bGUuZXhwb3J0cyA9IGVhdztcblx0fVxuXG5cdGVhdy5lYXN0QXNpYW5XaWR0aCA9IGZ1bmN0aW9uKGNoYXJhY3Rlcikge1xuXHQgIHZhciB4ID0gY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCk7XG5cdCAgdmFyIHkgPSAoY2hhcmFjdGVyLmxlbmd0aCA9PSAyKSA/IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDEpIDogMDtcblx0ICB2YXIgY29kZVBvaW50ID0geDtcblx0ICBpZiAoKDB4RDgwMCA8PSB4ICYmIHggPD0gMHhEQkZGKSAmJiAoMHhEQzAwIDw9IHkgJiYgeSA8PSAweERGRkYpKSB7XG5cdCAgICB4ICY9IDB4M0ZGO1xuXHQgICAgeSAmPSAweDNGRjtcblx0ICAgIGNvZGVQb2ludCA9ICh4IDw8IDEwKSB8IHk7XG5cdCAgICBjb2RlUG9pbnQgKz0gMHgxMDAwMDtcblx0ICB9XG5cblx0ICBpZiAoKDB4MzAwMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG5cdCAgICAgICgweEZGRTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRTYpKSB7XG5cdCAgICByZXR1cm4gJ0YnO1xuXHQgIH1cblx0ICBpZiAoKDB4MjBBOSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweEZGNjEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQkUpIHx8XG5cdCAgICAgICgweEZGQzIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQzcpIHx8XG5cdCAgICAgICgweEZGQ0EgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQ0YpIHx8XG5cdCAgICAgICgweEZGRDIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRDcpIHx8XG5cdCAgICAgICgweEZGREEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGREMpIHx8XG5cdCAgICAgICgweEZGRTggPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRUUpKSB7XG5cdCAgICByZXR1cm4gJ0gnO1xuXHQgIH1cblx0ICBpZiAoKDB4MTEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTE1RikgfHxcblx0ICAgICAgKDB4MTFBMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTFBNykgfHxcblx0ICAgICAgKDB4MTFGQSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTFGRikgfHxcblx0ICAgICAgKDB4MjMyOSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjMyQSkgfHxcblx0ICAgICAgKDB4MkU4MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkU5OSkgfHxcblx0ICAgICAgKDB4MkU5QiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkVGMykgfHxcblx0ICAgICAgKDB4MkYwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkZENSkgfHxcblx0ICAgICAgKDB4MkZGMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkZGQikgfHxcblx0ICAgICAgKDB4MzAwMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzAzRSkgfHxcblx0ICAgICAgKDB4MzA0MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzA5NikgfHxcblx0ICAgICAgKDB4MzA5OSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzBGRikgfHxcblx0ICAgICAgKDB4MzEwNSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzEyRCkgfHxcblx0ICAgICAgKDB4MzEzMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzE4RSkgfHxcblx0ICAgICAgKDB4MzE5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzFCQSkgfHxcblx0ICAgICAgKDB4MzFDMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzFFMykgfHxcblx0ICAgICAgKDB4MzFGMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzIxRSkgfHxcblx0ICAgICAgKDB4MzIyMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0NykgfHxcblx0ICAgICAgKDB4MzI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzJGRSkgfHxcblx0ICAgICAgKDB4MzMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4NERCRikgfHxcblx0ICAgICAgKDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTQ4QykgfHxcblx0ICAgICAgKDB4QTQ5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0ICAgICAgKDB4QTk2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTk3QykgfHxcblx0ICAgICAgKDB4QUMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdBMykgfHxcblx0ICAgICAgKDB4RDdCMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdDNikgfHxcblx0ICAgICAgKDB4RDdDQiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdGQikgfHxcblx0ICAgICAgKDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0ICAgICAgKDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcblx0ICAgICAgKDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU1MikgfHxcblx0ICAgICAgKDB4RkU1NCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2NikgfHxcblx0ICAgICAgKDB4RkU2OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0ICAgICAgKDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHQgICAgICAoMHgxRjIwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYyMDIpIHx8XG5cdCAgICAgICgweDFGMjEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjIzQSkgfHxcblx0ICAgICAgKDB4MUYyNDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjQ4KSB8fFxuXHQgICAgICAoMHgxRjI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYyNTEpIHx8XG5cdCAgICAgICgweDIwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRjczRikgfHxcblx0ICAgICAgKDB4MkI3NDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDJGRkZEKSB8fFxuXHQgICAgICAoMHgzMDAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4M0ZGRkQpKSB7XG5cdCAgICByZXR1cm4gJ1cnO1xuXHQgIH1cblx0ICBpZiAoKDB4MDAyMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDA3RSkgfHxcblx0ICAgICAgKDB4MDBBMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBBMykgfHxcblx0ICAgICAgKDB4MDBBNSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBBNikgfHxcblx0ICAgICAgKDB4MDBBQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwQUYgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyN0U2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyN0VEKSB8fFxuXHQgICAgICAoMHgyOTg1IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyOTg2KSkge1xuXHQgICAgcmV0dXJuICdOYSc7XG5cdCAgfVxuXHQgIGlmICgoMHgwMEExID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDBBNCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwQTcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwQTgpIHx8XG5cdCAgICAgICgweDAwQUEgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMEFEIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEFFKSB8fFxuXHQgICAgICAoMHgwMEIwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEI0KSB8fFxuXHQgICAgICAoMHgwMEI2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEJBKSB8fFxuXHQgICAgICAoMHgwMEJDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEJGKSB8fFxuXHQgICAgICAoMHgwMEM2ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDBEMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwRDcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRDgpIHx8XG5cdCAgICAgICgweDAwREUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRTEpIHx8XG5cdCAgICAgICgweDAwRTYgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMEU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEVBKSB8fFxuXHQgICAgICAoMHgwMEVDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEVEKSB8fFxuXHQgICAgICAoMHgwMEYwID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDBGMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBGMykgfHxcblx0ICAgICAgKDB4MDBGNyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBGQSkgfHxcblx0ICAgICAgKDB4MDBGQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwRkUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMTAxID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDExMSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxMTMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMTFCID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDEyNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDEyNykgfHxcblx0ICAgICAgKDB4MDEyQiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxMzEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAxMzMpIHx8XG5cdCAgICAgICgweDAxMzggPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMTNGIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTQyKSB8fFxuXHQgICAgICAoMHgwMTQ0ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDE0OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDE0QikgfHxcblx0ICAgICAgKDB4MDE0RCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxNTIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAxNTMpIHx8XG5cdCAgICAgICgweDAxNjYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAxNjcpIHx8XG5cdCAgICAgICgweDAxNkIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMUNFID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDFEMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxRDIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMUQ0ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDFENiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxRDggPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMURBID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDFEQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAyNTEgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMjYxID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDJDNCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAyQzcgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMkM5IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMkNCKSB8fFxuXHQgICAgICAoMHgwMkNEID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDJEMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAyRDggPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAyREIpIHx8XG5cdCAgICAgICgweDAyREQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMkRGID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDM2RikgfHxcblx0ICAgICAgKDB4MDM5MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNBMSkgfHxcblx0ICAgICAgKDB4MDNBMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNBOSkgfHxcblx0ICAgICAgKDB4MDNCMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNDMSkgfHxcblx0ICAgICAgKDB4MDNDMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNDOSkgfHxcblx0ICAgICAgKDB4MDQwMSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDA0MTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDA0NEYpIHx8XG5cdCAgICAgICgweDA0NTEgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMDEwID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjAxMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxNikgfHxcblx0ICAgICAgKDB4MjAxOCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxOSkgfHxcblx0ICAgICAgKDB4MjAxQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxRCkgfHxcblx0ICAgICAgKDB4MjAyMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAyMikgfHxcblx0ICAgICAgKDB4MjAyNCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAyNykgfHxcblx0ICAgICAgKDB4MjAzMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIwMzIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwMzMpIHx8XG5cdCAgICAgICgweDIwMzUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMDNCID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjAzRSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIwNzQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMDdGID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjA4MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjA4NCkgfHxcblx0ICAgICAgKDB4MjBBQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxMDMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMTA1ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjEwOSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxMTMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMTE2ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjEyMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjEyMikgfHxcblx0ICAgICAgKDB4MjEyNiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxMkIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMTUzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTU0KSB8fFxuXHQgICAgICAoMHgyMTVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTVFKSB8fFxuXHQgICAgICAoMHgyMTYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTZCKSB8fFxuXHQgICAgICAoMHgyMTcwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTc5KSB8fFxuXHQgICAgICAoMHgyMTg5ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjE5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjE5OSkgfHxcblx0ICAgICAgKDB4MjFCOCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjFCOSkgfHxcblx0ICAgICAgKDB4MjFEMiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxRDQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMUU3ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIwMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyMDIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMDMpIHx8XG5cdCAgICAgICgweDIyMDcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMDgpIHx8XG5cdCAgICAgICgweDIyMEIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjBGID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIxMSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyMTUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjFBID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIxRCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIyMCkgfHxcblx0ICAgICAgKDB4MjIyMyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyMjUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjI3IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjJDKSB8fFxuXHQgICAgICAoMHgyMjJFID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIzNCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIzNykgfHxcblx0ICAgICAgKDB4MjIzQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIzRCkgfHxcblx0ICAgICAgKDB4MjI0OCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyNEMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjUyID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjI2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2MSkgfHxcblx0ICAgICAgKDB4MjI2NCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2NykgfHxcblx0ICAgICAgKDB4MjI2QSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2QikgfHxcblx0ICAgICAgKDB4MjI2RSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2RikgfHxcblx0ICAgICAgKDB4MjI4MiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI4MykgfHxcblx0ICAgICAgKDB4MjI4NiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI4NykgfHxcblx0ICAgICAgKDB4MjI5NSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyOTkgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMkE1ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjJCRiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIzMTIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNDYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNEU5KSB8fFxuXHQgICAgICAoMHgyNEVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTRCKSB8fFxuXHQgICAgICAoMHgyNTUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTczKSB8fFxuXHQgICAgICAoMHgyNTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNThGKSB8fFxuXHQgICAgICAoMHgyNTkyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTk1KSB8fFxuXHQgICAgICAoMHgyNUEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUExKSB8fFxuXHQgICAgICAoMHgyNUEzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUE5KSB8fFxuXHQgICAgICAoMHgyNUIyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUIzKSB8fFxuXHQgICAgICAoMHgyNUI2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUI3KSB8fFxuXHQgICAgICAoMHgyNUJDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUJEKSB8fFxuXHQgICAgICAoMHgyNUMwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUMxKSB8fFxuXHQgICAgICAoMHgyNUM2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUM4KSB8fFxuXHQgICAgICAoMHgyNUNCID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjVDRSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVEMSkgfHxcblx0ICAgICAgKDB4MjVFMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVFNSkgfHxcblx0ICAgICAgKDB4MjVFRiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI2MDUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2MDYpIHx8XG5cdCAgICAgICgweDI2MDkgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNjBFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjBGKSB8fFxuXHQgICAgICAoMHgyNjE0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjE1KSB8fFxuXHQgICAgICAoMHgyNjFDID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjYxRSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI2NDAgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNjQyID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjY2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2MSkgfHxcblx0ICAgICAgKDB4MjY2MyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2NSkgfHxcblx0ICAgICAgKDB4MjY2NyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2QSkgfHxcblx0ICAgICAgKDB4MjY2QyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2RCkgfHxcblx0ICAgICAgKDB4MjY2RiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI2OUUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2OUYpIHx8XG5cdCAgICAgICgweDI2QkUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2QkYpIHx8XG5cdCAgICAgICgweDI2QzQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2Q0QpIHx8XG5cdCAgICAgICgweDI2Q0YgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2RTEpIHx8XG5cdCAgICAgICgweDI2RTMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNkU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNkZGKSB8fFxuXHQgICAgICAoMHgyNzNEID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4Mjc1NyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI3NzYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI3N0YpIHx8XG5cdCAgICAgICgweDJCNTUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDJCNTkpIHx8XG5cdCAgICAgICgweDMyNDggPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMyNEYpIHx8XG5cdCAgICAgICgweEUwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEY4RkYpIHx8XG5cdCAgICAgICgweEZFMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFMEYpIHx8XG5cdCAgICAgICgweEZGRkQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgxRjEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxMEEpIHx8XG5cdCAgICAgICgweDFGMTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjEyRCkgfHxcblx0ICAgICAgKDB4MUYxMzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMTY5KSB8fFxuXHQgICAgICAoMHgxRjE3MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxOUEpIHx8XG5cdCAgICAgICgweEUwMTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhFMDFFRikgfHxcblx0ICAgICAgKDB4RjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRkZEKSB8fFxuXHQgICAgICAoMHgxMDAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDEwRkZGRCkpIHtcblx0ICAgIHJldHVybiAnQSc7XG5cdCAgfVxuXG5cdCAgcmV0dXJuICdOJztcblx0fTtcblxuXHRlYXcuY2hhcmFjdGVyTGVuZ3RoID0gZnVuY3Rpb24oY2hhcmFjdGVyKSB7XG5cdCAgdmFyIGNvZGUgPSB0aGlzLmVhc3RBc2lhbldpZHRoKGNoYXJhY3Rlcik7XG5cdCAgaWYgKGNvZGUgPT0gJ0YnIHx8IGNvZGUgPT0gJ1cnIHx8IGNvZGUgPT0gJ0EnKSB7XG5cdCAgICByZXR1cm4gMjtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIDE7XG5cdCAgfVxuXHR9O1xuXG5cdC8vIFNwbGl0IGEgc3RyaW5nIGNvbnNpZGVyaW5nIHN1cnJvZ2F0ZS1wYWlycy5cblx0ZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcblx0ICByZXR1cm4gc3RyaW5nLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFteXFx1RDgwMC1cXHVERkZGXS9nKSB8fCBbXTtcblx0fVxuXG5cdGVhdy5sZW5ndGggPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0ICB2YXIgY2hhcmFjdGVycyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcblx0ICB2YXIgbGVuID0gMDtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgIGxlbiA9IGxlbiArIHRoaXMuY2hhcmFjdGVyTGVuZ3RoKGNoYXJhY3RlcnNbaV0pO1xuXHQgIH1cblx0ICByZXR1cm4gbGVuO1xuXHR9O1xuXG5cdGVhdy5zbGljZSA9IGZ1bmN0aW9uKHRleHQsIHN0YXJ0LCBlbmQpIHtcblx0ICB0ZXh0TGVuID0gZWF3Lmxlbmd0aCh0ZXh0KTtcblx0ICBzdGFydCA9IHN0YXJ0ID8gc3RhcnQgOiAwO1xuXHQgIGVuZCA9IGVuZCA/IGVuZCA6IDE7XG5cdCAgaWYgKHN0YXJ0IDwgMCkge1xuXHQgICAgICBzdGFydCA9IHRleHRMZW4gKyBzdGFydDtcblx0ICB9XG5cdCAgaWYgKGVuZCA8IDApIHtcblx0ICAgICAgZW5kID0gdGV4dExlbiArIGVuZDtcblx0ICB9XG5cdCAgdmFyIHJlc3VsdCA9ICcnO1xuXHQgIHZhciBlYXdMZW4gPSAwO1xuXHQgIHZhciBjaGFycyA9IHN0cmluZ1RvQXJyYXkodGV4dCk7XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGNoYXIgPSBjaGFyc1tpXTtcblx0ICAgIHZhciBjaGFyTGVuID0gZWF3Lmxlbmd0aChjaGFyKTtcblx0ICAgIGlmIChlYXdMZW4gPj0gc3RhcnQgLSAoY2hhckxlbiA9PSAyID8gMSA6IDApKSB7XG5cdCAgICAgICAgaWYgKGVhd0xlbiArIGNoYXJMZW4gPD0gZW5kKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdCArPSBjaGFyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIGVhd0xlbiArPSBjaGFyTGVuO1xuXHQgIH1cblx0ICByZXR1cm4gcmVzdWx0O1xuXHR9OyBcbn0gKGVhc3Rhc2lhbndpZHRoKSk7XG5cbnZhciBlYXN0YXNpYW53aWR0aEV4cG9ydHMgPSBlYXN0YXNpYW53aWR0aC5leHBvcnRzO1xuY29uc3QgZWFzdEFzaWFuV2lkdGggPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoZWFzdGFzaWFud2lkdGhFeHBvcnRzKTtcblxuY29uc3QgZW1vamlSZWdleCA9ICgpID0+IHtcblx0Ly8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG5cdHJldHVybiAvWyMqMC05XVxcdUZFMEY/XFx1MjBFM3xbXFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyXFx1MjY5NC1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTdcXHUyNkFBXFx1MjZCMFxcdTI2QjFcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM4XFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZFOVxcdTI2RjAtXFx1MjZGNVxcdTI2RjdcXHUyNkY4XFx1MjZGQVxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzU3XFx1Mjc2M1xcdTI3QTFcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldXFx1RkUwRj98W1xcdTI2MURcXHUyNzBDXFx1MjcwRF0oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHUyNzBBXFx1MjcwQl0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjY5M1xcdTI2QTFcXHUyNkFCXFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RkRcXHUyNzA1XFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjUwXXxcXHUyNkY5KD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHUyNzY0XFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1RDgzRFxcdUREMjV8XFx1RDgzRVxcdURFNzkpKT98XFx1RDgzQyg/OltcXHVEQzA0XFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdURFMDJcXHVERTM3XFx1REYyMVxcdURGMjQtXFx1REYyQ1xcdURGMzZcXHVERjdEXFx1REY5NlxcdURGOTdcXHVERjk5LVxcdURGOUJcXHVERjlFXFx1REY5RlxcdURGQ0RcXHVERkNFXFx1REZENC1cXHVERkRGXFx1REZGNVxcdURGRjddXFx1RkUwRj98W1xcdURGODVcXHVERkMyXFx1REZDN10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REZDM1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGRjNcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHUyNkE3XFx1RkUwRj98XFx1RDgzQ1xcdURGMDgpKT98XFx1REZGNCg/OlxcdTIwMERcXHUyNjIwXFx1RkUwRj98XFx1REI0MFxcdURDNjdcXHVEQjQwXFx1REM2MlxcdURCNDAoPzpcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2N3xcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3Rik/KXxcXHVEODNEKD86W1xcdURDMDhcXHVEQzI2XSg/OlxcdTIwMERcXHUyQjFCKT98W1xcdURDM0ZcXHVEQ0ZEXFx1REQ0OVxcdURENEFcXHVERDZGXFx1REQ3MFxcdURENzNcXHVERDc2LVxcdURENzlcXHVERDg3XFx1REQ4QS1cXHVERDhEXFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkFcXHVERUNCXFx1REVDRC1cXHVERUNGXFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRjBcXHVERUYzXVxcdUZFMEY/fFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MlxcdURDNzQtXFx1REM3NlxcdURDNzhcXHVEQzdDXFx1REM4M1xcdURDODVcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVERTRDXFx1REU0RlxcdURFQzBcXHVERUNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDc0XFx1REQ5MF0oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzAwLVxcdURDMDdcXHVEQzA5LVxcdURDMTRcXHVEQzE2LVxcdURDMjVcXHVEQzI3LVxcdURDM0FcXHVEQzNDLVxcdURDM0VcXHVEQzQwXFx1REM0NFxcdURDNDVcXHVEQzUxLVxcdURDNjVcXHVEQzZBXFx1REM3OS1cXHVEQzdCXFx1REM3RC1cXHVEQzgwXFx1REM4NFxcdURDODgtXFx1REM4RVxcdURDOTBcXHVEQzkyLVxcdURDQTlcXHVEQ0FCLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVEREE0XFx1RERGQi1cXHVERTJEXFx1REUyRi1cXHVERTM0XFx1REUzNy1cXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ3XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMzQig/OlxcdTIwMERcXHUyNzQ0XFx1RkUwRj8pP3xcXHVEQzQxXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURERThcXHVGRTBGPyk/fFxcdURDNjgoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OHxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2OSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9bXFx1REM2OFxcdURDNjldfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/fFxcdURDNjlcXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pKXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNkYoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REQ3NSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REUyRSg/OlxcdTIwMERcXHVEODNEXFx1RENBOCk/fFxcdURFMzUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQUIpP3xcXHVERTM2KD86XFx1MjAwRFxcdUQ4M0NcXHVERjJCXFx1RkUwRj8pPyl8XFx1RDgzRSg/OltcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMzAtXFx1REQzNFxcdUREMzZcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMlxcdURERDNcXHVEREQ1XFx1REVDMy1cXHVERUM1XFx1REVGMFxcdURFRjItXFx1REVGOF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RERERVxcdUREREZdKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMjAtXFx1REQyNVxcdUREMjctXFx1REQyRlxcdUREM0FcXHVERDNGLVxcdURENDVcXHVERDQ3LVxcdURENzZcXHVERDc4LVxcdUREQjRcXHVEREI3XFx1RERCQVxcdUREQkMtXFx1RERDQ1xcdURERDBcXHVEREUwLVxcdURERkZcXHVERTcwLVxcdURFN0NcXHVERTgwLVxcdURFODhcXHVERTkwLVxcdURFQkRcXHVERUJGLVxcdURFQzJcXHVERUNFLVxcdURFREJcXHVERUUwLVxcdURFRThdfFxcdUREM0MoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/fFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFxcdURERDEoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEpKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcblxuZnVuY3Rpb24gc3RyaW5nV2lkdGgkMShzdHJpbmcsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnIHx8IHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdG9wdGlvbnMgPSB7XG5cdFx0YW1iaWd1b3VzSXNOYXJyb3c6IHRydWUsXG5cdFx0Y291bnRBbnNpRXNjYXBlQ29kZXM6IGZhbHNlLFxuXHRcdC4uLm9wdGlvbnMsXG5cdH07XG5cblx0aWYgKCFvcHRpb25zLmNvdW50QW5zaUVzY2FwZUNvZGVzKSB7XG5cdFx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cdH1cblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgYW1iaWd1b3VzQ2hhcmFjdGVyV2lkdGggPSBvcHRpb25zLmFtYmlndW91c0lzTmFycm93ID8gMSA6IDI7XG5cdGxldCB3aWR0aCA9IDA7XG5cblx0Zm9yIChjb25zdCB7c2VnbWVudDogY2hhcmFjdGVyfSBvZiBuZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KHN0cmluZykpIHtcblx0XHRjb25zdCBjb2RlUG9pbnQgPSBjaGFyYWN0ZXIuY29kZVBvaW50QXQoMCk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGVQb2ludCA8PSAweDFGIHx8IChjb2RlUG9pbnQgPj0gMHg3RiAmJiBjb2RlUG9pbnQgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHgzXzAwICYmIGNvZGVQb2ludCA8PSAweDNfNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChlbW9qaVJlZ2V4KCkudGVzdChjaGFyYWN0ZXIpKSB7XG5cdFx0XHR3aWR0aCArPSAyO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29kZSA9IGVhc3RBc2lhbldpZHRoLmVhc3RBc2lhbldpZHRoKGNoYXJhY3Rlcik7XG5cdFx0c3dpdGNoIChjb2RlKSB7XG5cdFx0XHRjYXNlICdGJzpcblx0XHRcdGNhc2UgJ1cnOiB7XG5cdFx0XHRcdHdpZHRoICs9IDI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlICdBJzoge1xuXHRcdFx0XHR3aWR0aCArPSBhbWJpZ3VvdXNDaGFyYWN0ZXJXaWR0aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0d2lkdGggKz0gMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59XG5cbmZ1bmN0aW9uIGlzVW5pY29kZVN1cHBvcnRlZCgpIHtcblx0aWYgKHByb2Nlc3MkMS5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuXHRcdHJldHVybiBwcm9jZXNzJDEuZW52LlRFUk0gIT09ICdsaW51eCc7IC8vIExpbnV4IGNvbnNvbGUgKGtlcm5lbClcblx0fVxuXG5cdHJldHVybiBCb29sZWFuKHByb2Nlc3MkMS5lbnYuQ0kpXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzJDEuZW52LldUX1NFU1NJT04pIC8vIFdpbmRvd3MgVGVybWluYWxcblx0XHR8fCBCb29sZWFuKHByb2Nlc3MkMS5lbnYuVEVSTUlOVVNfU1VCTElNRSkgLy8gVGVybWludXMgKDwwLjIuMjcpXG5cdFx0fHwgcHJvY2VzcyQxLmVudi5Db25FbXVUYXNrID09PSAne2NtZDo6Q21kZXJ9JyAvLyBDb25FbXUgYW5kIGNtZGVyXG5cdFx0fHwgcHJvY2VzcyQxLmVudi5URVJNX1BST0dSQU0gPT09ICdUZXJtaW51cy1TdWJsaW1lJ1xuXHRcdHx8IHByb2Nlc3MkMS5lbnYuVEVSTV9QUk9HUkFNID09PSAndnNjb2RlJ1xuXHRcdHx8IHByb2Nlc3MkMS5lbnYuVEVSTSA9PT0gJ3h0ZXJtLTI1NmNvbG9yJ1xuXHRcdHx8IHByb2Nlc3MkMS5lbnYuVEVSTSA9PT0gJ2FsYWNyaXR0eSdcblx0XHR8fCBwcm9jZXNzJDEuZW52LlRFUk1JTkFMX0VNVUxBVE9SID09PSAnSmV0QnJhaW5zLUplZGlUZXJtJztcbn1cblxuY29uc3QgVFlQRV9DT0xPUl9NQVAgPSB7XG4gIGluZm86IFwiY3lhblwiLFxuICBmYWlsOiBcInJlZFwiLFxuICBzdWNjZXNzOiBcImdyZWVuXCIsXG4gIHJlYWR5OiBcImdyZWVuXCIsXG4gIHN0YXJ0OiBcIm1hZ2VudGFcIlxufTtcbmNvbnN0IExFVkVMX0NPTE9SX01BUCA9IHtcbiAgMDogXCJyZWRcIixcbiAgMTogXCJ5ZWxsb3dcIlxufTtcbmNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGVTdXBwb3J0ZWQoKTtcbmNvbnN0IHMgPSAoYywgZmFsbGJhY2spID0+IHVuaWNvZGUgPyBjIDogZmFsbGJhY2s7XG5jb25zdCBUWVBFX0lDT05TID0ge1xuICBlcnJvcjogcyhcIlxcdTI3MTZcIiwgXCJcXHhEN1wiKSxcbiAgZmF0YWw6IHMoXCJcXHUyNzE2XCIsIFwiXFx4RDdcIiksXG4gIHJlYWR5OiBzKFwiXFx1MjcxNFwiLCBcIlxcdTIyMUFcIiksXG4gIHdhcm46IHMoXCJcXHUyNkEwXCIsIFwiXFx1MjAzQ1wiKSxcbiAgaW5mbzogcyhcIlxcdTIxMzlcIiwgXCJpXCIpLFxuICBzdWNjZXNzOiBzKFwiXFx1MjcxNFwiLCBcIlxcdTIyMUFcIiksXG4gIGRlYnVnOiBzKFwiXFx1MjY5OVwiLCBcIkRcIiksXG4gIHRyYWNlOiBzKFwiXFx1MjE5MlwiLCBcIlxcdTIxOTJcIiksXG4gIGZhaWw6IHMoXCJcXHUyNzE2XCIsIFwiXFx4RDdcIiksXG4gIHN0YXJ0OiBzKFwiXFx1MjVEMFwiLCBcIm9cIiksXG4gIGxvZzogXCJcIlxufTtcbmZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cikge1xuICBpZiAoIUludGwuU2VnbWVudGVyKSB7XG4gICAgcmV0dXJuIHN0cmlwQW5zaSQxKHN0cikubGVuZ3RoO1xuICB9XG4gIHJldHVybiBzdHJpbmdXaWR0aCQxKHN0cik7XG59XG5jbGFzcyBGYW5jeVJlcG9ydGVyIGV4dGVuZHMgQmFzaWNSZXBvcnRlciB7XG4gIGZvcm1hdFN0YWNrKHN0YWNrKSB7XG4gICAgcmV0dXJuIFwiXFxuXCIgKyBwYXJzZVN0YWNrKHN0YWNrKS5tYXAoXG4gICAgICAobGluZSkgPT4gXCIgIFwiICsgbGluZS5yZXBsYWNlKC9eYXQgKy8sIChtKSA9PiBjb2xvcnMuZ3JheShtKSkucmVwbGFjZSgvXFwoKC4rKVxcKS8sIChfLCBtKSA9PiBgKCR7Y29sb3JzLmN5YW4obSl9KWApXG4gICAgKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIGZvcm1hdFR5cGUobG9nT2JqLCBpc0JhZGdlLCBvcHRzKSB7XG4gICAgY29uc3QgdHlwZUNvbG9yID0gVFlQRV9DT0xPUl9NQVBbbG9nT2JqLnR5cGVdIHx8IExFVkVMX0NPTE9SX01BUFtsb2dPYmoubGV2ZWxdIHx8IFwiZ3JheVwiO1xuICAgIGlmIChpc0JhZGdlKSB7XG4gICAgICByZXR1cm4gZ2V0QmdDb2xvcih0eXBlQ29sb3IpKFxuICAgICAgICBjb2xvcnMuYmxhY2soYCAke2xvZ09iai50eXBlLnRvVXBwZXJDYXNlKCl9IGApXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBfdHlwZSA9IHR5cGVvZiBUWVBFX0lDT05TW2xvZ09iai50eXBlXSA9PT0gXCJzdHJpbmdcIiA/IFRZUEVfSUNPTlNbbG9nT2JqLnR5cGVdIDogbG9nT2JqLmljb24gfHwgbG9nT2JqLnR5cGU7XG4gICAgcmV0dXJuIF90eXBlID8gZ2V0Q29sb3IodHlwZUNvbG9yKShfdHlwZSkgOiBcIlwiO1xuICB9XG4gIGZvcm1hdExvZ09iaihsb2dPYmosIG9wdHMpIHtcbiAgICBjb25zdCBbbWVzc2FnZSwgLi4uYWRkaXRpb25hbF0gPSB0aGlzLmZvcm1hdEFyZ3MobG9nT2JqLmFyZ3MsIG9wdHMpLnNwbGl0KFxuICAgICAgXCJcXG5cIlxuICAgICk7XG4gICAgaWYgKGxvZ09iai50eXBlID09PSBcImJveFwiKSB7XG4gICAgICByZXR1cm4gYm94KFxuICAgICAgICBjaGFyYWN0ZXJGb3JtYXQoXG4gICAgICAgICAgbWVzc2FnZSArIChhZGRpdGlvbmFsLmxlbmd0aCA+IDAgPyBcIlxcblwiICsgYWRkaXRpb25hbC5qb2luKFwiXFxuXCIpIDogXCJcIilcbiAgICAgICAgKSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiBsb2dPYmoudGl0bGUgPyBjaGFyYWN0ZXJGb3JtYXQobG9nT2JqLnRpdGxlKSA6IHZvaWQgMCxcbiAgICAgICAgICBzdHlsZTogbG9nT2JqLnN0eWxlXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmZvcm1hdERhdGUobG9nT2JqLmRhdGUsIG9wdHMpO1xuICAgIGNvbnN0IGNvbG9yZWREYXRlID0gZGF0ZSAmJiBjb2xvcnMuZ3JheShkYXRlKTtcbiAgICBjb25zdCBpc0JhZGdlID0gbG9nT2JqLmJhZGdlID8/IGxvZ09iai5sZXZlbCA8IDI7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZm9ybWF0VHlwZShsb2dPYmosIGlzQmFkZ2UsIG9wdHMpO1xuICAgIGNvbnN0IHRhZyA9IGxvZ09iai50YWcgPyBjb2xvcnMuZ3JheShsb2dPYmoudGFnKSA6IFwiXCI7XG4gICAgbGV0IGxpbmU7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuZmlsdGVyQW5kSm9pbihbdHlwZSwgY2hhcmFjdGVyRm9ybWF0KG1lc3NhZ2UpXSk7XG4gICAgY29uc3QgcmlnaHQgPSB0aGlzLmZpbHRlckFuZEpvaW4ob3B0cy5jb2x1bW5zID8gW3RhZywgY29sb3JlZERhdGVdIDogW3RhZ10pO1xuICAgIGNvbnN0IHNwYWNlID0gKG9wdHMuY29sdW1ucyB8fCAwKSAtIHN0cmluZ1dpZHRoKGxlZnQpIC0gc3RyaW5nV2lkdGgocmlnaHQpIC0gMjtcbiAgICBsaW5lID0gc3BhY2UgPiAwICYmIChvcHRzLmNvbHVtbnMgfHwgMCkgPj0gODAgPyBsZWZ0ICsgXCIgXCIucmVwZWF0KHNwYWNlKSArIHJpZ2h0IDogKHJpZ2h0ID8gYCR7Y29sb3JzLmdyYXkoYFske3JpZ2h0fV1gKX0gYCA6IFwiXCIpICsgbGVmdDtcbiAgICBsaW5lICs9IGNoYXJhY3RlckZvcm1hdChcbiAgICAgIGFkZGl0aW9uYWwubGVuZ3RoID4gMCA/IFwiXFxuXCIgKyBhZGRpdGlvbmFsLmpvaW4oXCJcXG5cIikgOiBcIlwiXG4gICAgKTtcbiAgICBpZiAobG9nT2JqLnR5cGUgPT09IFwidHJhY2VcIikge1xuICAgICAgY29uc3QgX2VyciA9IG5ldyBFcnJvcihcIlRyYWNlOiBcIiArIGxvZ09iai5tZXNzYWdlKTtcbiAgICAgIGxpbmUgKz0gdGhpcy5mb3JtYXRTdGFjayhfZXJyLnN0YWNrIHx8IFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gaXNCYWRnZSA/IFwiXFxuXCIgKyBsaW5lICsgXCJcXG5cIiA6IGxpbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoYXJhY3RlckZvcm1hdChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9gKFteYF0rKWAvZ20sIChfLCBtKSA9PiBjb2xvcnMuY3lhbihtKSkucmVwbGFjZSgvXFxzK18oW15fXSspX1xccysvZ20sIChfLCBtKSA9PiBgICR7Y29sb3JzLnVuZGVybGluZShtKX0gYCk7XG59XG5mdW5jdGlvbiBnZXRDb2xvcihjb2xvciA9IFwid2hpdGVcIikge1xuICByZXR1cm4gY29sb3JzW2NvbG9yXSB8fCBjb2xvcnMud2hpdGU7XG59XG5mdW5jdGlvbiBnZXRCZ0NvbG9yKGNvbG9yID0gXCJiZ1doaXRlXCIpIHtcbiAgcmV0dXJuIGNvbG9yc1tgYmcke2NvbG9yWzBdLnRvVXBwZXJDYXNlKCl9JHtjb2xvci5zbGljZSgxKX1gXSB8fCBjb2xvcnMuYmdXaGl0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29uc29sYShvcHRpb25zID0ge30pIHtcbiAgbGV0IGxldmVsID0gX2dldERlZmF1bHRMb2dMZXZlbCgpO1xuICBpZiAocHJvY2Vzcy5lbnYuQ09OU09MQV9MRVZFTCkge1xuICAgIGxldmVsID0gTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LkNPTlNPTEFfTEVWRUwpID8/IGxldmVsO1xuICB9XG4gIGNvbnN0IGNvbnNvbGEyID0gY3JlYXRlQ29uc29sYSQxKHtcbiAgICBsZXZlbCxcbiAgICBkZWZhdWx0czogeyBsZXZlbCB9LFxuICAgIHN0ZG91dDogcHJvY2Vzcy5zdGRvdXQsXG4gICAgc3RkZXJyOiBwcm9jZXNzLnN0ZGVycixcbiAgICBwcm9tcHQ6ICguLi5hcmdzKSA9PiBpbXBvcnQoJy4uL2NodW5rcy9wcm9tcHQubWpzJykudGhlbigobSkgPT4gbS5wcm9tcHQoLi4uYXJncykpLFxuICAgIHJlcG9ydGVyczogb3B0aW9ucy5yZXBvcnRlcnMgfHwgW1xuICAgICAgb3B0aW9ucy5mYW5jeSA/PyAhKGlzQ0kgfHwgaXNUZXN0KSA/IG5ldyBGYW5jeVJlcG9ydGVyKCkgOiBuZXcgQmFzaWNSZXBvcnRlcigpXG4gICAgXSxcbiAgICAuLi5vcHRpb25zXG4gIH0pO1xuICByZXR1cm4gY29uc29sYTI7XG59XG5mdW5jdGlvbiBfZ2V0RGVmYXVsdExvZ0xldmVsKCkge1xuICBpZiAoaXNEZWJ1Zykge1xuICAgIHJldHVybiBMb2dMZXZlbHMuZGVidWc7XG4gIH1cbiAgaWYgKGlzVGVzdCkge1xuICAgIHJldHVybiBMb2dMZXZlbHMud2FybjtcbiAgfVxuICByZXR1cm4gTG9nTGV2ZWxzLmluZm87XG59XG5jb25zdCBjb25zb2xhID0gY3JlYXRlQ29uc29sYSgpO1xuXG5leHBvcnQgeyBjb25zb2xhIGFzIGEsIGNyZWF0ZUNvbnNvbGEgYXMgYywgZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgYXMgZywgaXNVbmljb2RlU3VwcG9ydGVkIGFzIGkgfTtcbiIsICIvLyBOb3RlOiB0aGlzIGlzIHRoZSBzZW12ZXIub3JnIHZlcnNpb24gb2YgdGhlIHNwZWMgdGhhdCBpdCBpbXBsZW1lbnRzXG4vLyBOb3QgbmVjZXNzYXJpbHkgdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGNvZGUuXG5jb25zdCBTRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU2XG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDkwMDcxOTkyNTQ3NDA5OTFcblxuLy8gTWF4IHNhZmUgc2VnbWVudCBsZW5ndGggZm9yIGNvZXJjaW9uLlxuY29uc3QgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCA9IDE2XG5cbi8vIE1heCBzYWZlIGxlbmd0aCBmb3IgYSBidWlsZCBpZGVudGlmaWVyLiBUaGUgbWF4IGxlbmd0aCBtaW51cyA2IGNoYXJhY3RlcnMgZm9yXG4vLyB0aGUgc2hvcnRlc3QgdmVyc2lvbiB3aXRoIGEgYnVpbGQgMC4wLjArQlVJTEQuXG5jb25zdCBNQVhfU0FGRV9CVUlMRF9MRU5HVEggPSBNQVhfTEVOR1RIIC0gNlxuXG5jb25zdCBSRUxFQVNFX1RZUEVTID0gW1xuICAnbWFqb3InLFxuICAncHJlbWFqb3InLFxuICAnbWlub3InLFxuICAncHJlbWlub3InLFxuICAncGF0Y2gnLFxuICAncHJlcGF0Y2gnLFxuICAncHJlcmVsZWFzZScsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RILFxuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9TQUZFX0lOVEVHRVIsXG4gIFJFTEVBU0VfVFlQRVMsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFOiAwYjAwMSxcbiAgRkxBR19MT09TRTogMGIwMTAsXG59XG4iLCAiY29uc3QgZGVidWcgPSAoXG4gIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICBwcm9jZXNzLmVudiAmJlxuICBwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmXG4gIC9cXGJzZW12ZXJcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpXG4pID8gKC4uLmFyZ3MpID0+IGNvbnNvbGUuZXJyb3IoJ1NFTVZFUicsIC4uLmFyZ3MpXG4gIDogKCkgPT4ge31cblxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1Z1xuIiwgImNvbnN0IHtcbiAgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCxcbiAgTUFYX1NBRkVfQlVJTERfTEVOR1RILFxuICBNQVhfTEVOR1RILFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi9kZWJ1ZycpXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB7fVxuXG4vLyBUaGUgYWN0dWFsIHJlZ2V4cHMgZ28gb24gZXhwb3J0cy5yZVxuY29uc3QgcmUgPSBleHBvcnRzLnJlID0gW11cbmNvbnN0IHNhZmVSZSA9IGV4cG9ydHMuc2FmZVJlID0gW11cbmNvbnN0IHNyYyA9IGV4cG9ydHMuc3JjID0gW11cbmNvbnN0IHQgPSBleHBvcnRzLnQgPSB7fVxubGV0IFIgPSAwXG5cbmNvbnN0IExFVFRFUkRBU0hOVU1CRVIgPSAnW2EtekEtWjAtOS1dJ1xuXG4vLyBSZXBsYWNlIHNvbWUgZ3JlZWR5IHJlZ2V4IHRva2VucyB0byBwcmV2ZW50IHJlZ2V4IGRvcyBpc3N1ZXMuIFRoZXNlIHJlZ2V4IGFyZVxuLy8gdXNlZCBpbnRlcm5hbGx5IHZpYSB0aGUgc2FmZVJlIG9iamVjdCBzaW5jZSBhbGwgaW5wdXRzIGluIHRoaXMgbGlicmFyeSBnZXRcbi8vIG5vcm1hbGl6ZWQgZmlyc3QgdG8gdHJpbSBhbmQgY29sbGFwc2UgYWxsIGV4dHJhIHdoaXRlc3BhY2UuIFRoZSBvcmlnaW5hbFxuLy8gcmVnZXhlcyBhcmUgZXhwb3J0ZWQgZm9yIHVzZXJsYW5kIGNvbnN1bXB0aW9uIGFuZCBsb3dlciBsZXZlbCB1c2FnZS4gQVxuLy8gZnV0dXJlIGJyZWFraW5nIGNoYW5nZSBjb3VsZCBleHBvcnQgdGhlIHNhZmVyIHJlZ2V4IG9ubHkgd2l0aCBhIG5vdGUgdGhhdFxuLy8gYWxsIGlucHV0IHNob3VsZCBoYXZlIGV4dHJhIHdoaXRlc3BhY2UgcmVtb3ZlZC5cbmNvbnN0IHNhZmVSZWdleFJlcGxhY2VtZW50cyA9IFtcbiAgWydcXFxccycsIDFdLFxuICBbJ1xcXFxkJywgTUFYX0xFTkdUSF0sXG4gIFtMRVRURVJEQVNITlVNQkVSLCBNQVhfU0FGRV9CVUlMRF9MRU5HVEhdLFxuXVxuXG5jb25zdCBtYWtlU2FmZVJlZ2V4ID0gKHZhbHVlKSA9PiB7XG4gIGZvciAoY29uc3QgW3Rva2VuLCBtYXhdIG9mIHNhZmVSZWdleFJlcGxhY2VtZW50cykge1xuICAgIHZhbHVlID0gdmFsdWVcbiAgICAgIC5zcGxpdChgJHt0b2tlbn0qYCkuam9pbihgJHt0b2tlbn17MCwke21heH19YClcbiAgICAgIC5zcGxpdChgJHt0b2tlbn0rYCkuam9pbihgJHt0b2tlbn17MSwke21heH19YClcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuY29uc3QgY3JlYXRlVG9rZW4gPSAobmFtZSwgdmFsdWUsIGlzR2xvYmFsKSA9PiB7XG4gIGNvbnN0IHNhZmUgPSBtYWtlU2FmZVJlZ2V4KHZhbHVlKVxuICBjb25zdCBpbmRleCA9IFIrK1xuICBkZWJ1ZyhuYW1lLCBpbmRleCwgdmFsdWUpXG4gIHRbbmFtZV0gPSBpbmRleFxuICBzcmNbaW5kZXhdID0gdmFsdWVcbiAgcmVbaW5kZXhdID0gbmV3IFJlZ0V4cCh2YWx1ZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG4gIHNhZmVSZVtpbmRleF0gPSBuZXcgUmVnRXhwKHNhZmUsIGlzR2xvYmFsID8gJ2cnIDogdW5kZWZpbmVkKVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMgY2FuIGJlIHVzZWQgZm9yIHRva2VuaXppbmcsXG4vLyB2YWxpZGF0aW5nLCBhbmQgcGFyc2luZyBTZW1WZXIgdmVyc2lvbiBzdHJpbmdzLlxuXG4vLyAjIyBOdW1lcmljIElkZW50aWZpZXJcbi8vIEEgc2luZ2xlIGAwYCwgb3IgYSBub24temVybyBkaWdpdCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgZGlnaXRzLlxuXG5jcmVhdGVUb2tlbignTlVNRVJJQ0lERU5USUZJRVInLCAnMHxbMS05XVxcXFxkKicpXG5jcmVhdGVUb2tlbignTlVNRVJJQ0lERU5USUZJRVJMT09TRScsICdcXFxcZCsnKVxuXG4vLyAjIyBOb24tbnVtZXJpYyBJZGVudGlmaWVyXG4vLyBaZXJvIG9yIG1vcmUgZGlnaXRzLCBmb2xsb3dlZCBieSBhIGxldHRlciBvciBoeXBoZW4sIGFuZCB0aGVuIHplcm8gb3Jcbi8vIG1vcmUgbGV0dGVycywgZGlnaXRzLCBvciBoeXBoZW5zLlxuXG5jcmVhdGVUb2tlbignTk9OTlVNRVJJQ0lERU5USUZJRVInLCBgXFxcXGQqW2EtekEtWi1dJHtMRVRURVJEQVNITlVNQkVSfSpgKVxuXG4vLyAjIyBNYWluIFZlcnNpb25cbi8vIFRocmVlIGRvdC1zZXBhcmF0ZWQgbnVtZXJpYyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OJywgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pXFxcXC5gICtcbiAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KWApXG5cbmNyZWF0ZVRva2VuKCdNQUlOVkVSU0lPTkxPT1NFJywgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlgKVxuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uIElkZW50aWZpZXJcbi8vIEEgbnVtZXJpYyBpZGVudGlmaWVyLCBvciBhIG5vbi1udW1lcmljIGlkZW50aWZpZXIuXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFSURFTlRJRklFUicsIGAoPzoke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXVxufXwke3NyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VJREVOVElGSUVSTE9PU0UnLCBgKD86JHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXVxufXwke3NyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuLy8gIyMgUHJlLXJlbGVhc2UgVmVyc2lvblxuLy8gSHlwaGVuLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBkb3Qtc2VwYXJhdGVkIHByZS1yZWxlYXNlIHZlcnNpb25cbi8vIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRScsIGAoPzotKCR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJdXG59KD86XFxcXC4ke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXX0pKikpYClcblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VMT09TRScsIGAoPzotPygke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0VdXG59KD86XFxcXC4ke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0VdfSkqKSlgKVxuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YSBJZGVudGlmaWVyXG4vLyBBbnkgY29tYmluYXRpb24gb2YgZGlnaXRzLCBsZXR0ZXJzLCBvciBoeXBoZW5zLlxuXG5jcmVhdGVUb2tlbignQlVJTERJREVOVElGSUVSJywgYCR7TEVUVEVSREFTSE5VTUJFUn0rYClcblxuLy8gIyMgQnVpbGQgTWV0YWRhdGFcbi8vIFBsdXMgc2lnbiwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgcGVyaW9kLXNlcGFyYXRlZCBidWlsZCBtZXRhZGF0YVxuLy8gaWRlbnRpZmllcnMuXG5cbmNyZWF0ZVRva2VuKCdCVUlMRCcsIGAoPzpcXFxcKygke3NyY1t0LkJVSUxESURFTlRJRklFUl1cbn0oPzpcXFxcLiR7c3JjW3QuQlVJTERJREVOVElGSUVSXX0pKikpYClcblxuLy8gIyMgRnVsbCBWZXJzaW9uIFN0cmluZ1xuLy8gQSBtYWluIHZlcnNpb24sIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYSBwcmUtcmVsZWFzZSB2ZXJzaW9uIGFuZFxuLy8gYnVpbGQgbWV0YWRhdGEuXG5cbi8vIE5vdGUgdGhhdCB0aGUgb25seSBtYWpvciwgbWlub3IsIHBhdGNoLCBhbmQgcHJlLXJlbGVhc2Ugc2VjdGlvbnMgb2Zcbi8vIHRoZSB2ZXJzaW9uIHN0cmluZyBhcmUgY2FwdHVyaW5nIGdyb3Vwcy4gIFRoZSBidWlsZCBtZXRhZGF0YSBpcyBub3QgYVxuLy8gY2FwdHVyaW5nIGdyb3VwLCBiZWNhdXNlIGl0IHNob3VsZCBub3QgZXZlciBiZSB1c2VkIGluIHZlcnNpb25cbi8vIGNvbXBhcmlzb24uXG5cbmNyZWF0ZVRva2VuKCdGVUxMUExBSU4nLCBgdj8ke3NyY1t0Lk1BSU5WRVJTSU9OXVxufSR7c3JjW3QuUFJFUkVMRUFTRV19PyR7XG4gIHNyY1t0LkJVSUxEXX0/YClcblxuY3JlYXRlVG9rZW4oJ0ZVTEwnLCBgXiR7c3JjW3QuRlVMTFBMQUlOXX0kYClcblxuLy8gbGlrZSBmdWxsLCBidXQgYWxsb3dzIHYxLjIuMyBhbmQgPTEuMi4zLCB3aGljaCBwZW9wbGUgZG8gc29tZXRpbWVzLlxuLy8gYWxzbywgMS4wLjBhbHBoYTEgKHByZXJlbGVhc2Ugd2l0aG91dCB0aGUgaHlwaGVuKSB3aGljaCBpcyBwcmV0dHlcbi8vIGNvbW1vbiBpbiB0aGUgbnBtIHJlZ2lzdHJ5LlxuY3JlYXRlVG9rZW4oJ0xPT1NFUExBSU4nLCBgW3Y9XFxcXHNdKiR7c3JjW3QuTUFJTlZFUlNJT05MT09TRV1cbn0ke3NyY1t0LlBSRVJFTEVBU0VMT09TRV19PyR7XG4gIHNyY1t0LkJVSUxEXX0/YClcblxuY3JlYXRlVG9rZW4oJ0xPT1NFJywgYF4ke3NyY1t0LkxPT1NFUExBSU5dfSRgKVxuXG5jcmVhdGVUb2tlbignR1RMVCcsICcoKD86PHw+KT89PyknKVxuXG4vLyBTb21ldGhpbmcgbGlrZSBcIjIuKlwiIG9yIFwiMS4yLnhcIi5cbi8vIE5vdGUgdGhhdCBcIngueFwiIGlzIGEgdmFsaWQgeFJhbmdlIGlkZW50aWZlciwgbWVhbmluZyBcImFueSB2ZXJzaW9uXCJcbi8vIE9ubHkgdGhlIGZpcnN0IGl0ZW0gaXMgc3RyaWN0bHkgcmVxdWlyZWQuXG5jcmVhdGVUb2tlbignWFJBTkdFSURFTlRJRklFUkxPT1NFJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19fHh8WHxcXFxcKmApXG5jcmVhdGVUb2tlbignWFJBTkdFSURFTlRJRklFUicsIGAke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX18eHxYfFxcXFwqYClcblxuY3JlYXRlVG9rZW4oJ1hSQU5HRVBMQUlOJywgYFt2PVxcXFxzXSooJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86JHtzcmNbdC5QUkVSRUxFQVNFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICBzcmNbdC5CVUlMRF19P2AgK1xuICAgICAgICAgICAgICAgICAgIGApPyk/YClcblxuY3JlYXRlVG9rZW4oJ1hSQU5HRVBMQUlOTE9PU0UnLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VMT09TRV19KT8ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbdC5CVUlMRF19P2AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKiR7c3JjW3QuWFJBTkdFUExBSU5dfSRgKVxuY3JlYXRlVG9rZW4oJ1hSQU5HRUxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKiR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIENvZXJjaW9uLlxuLy8gRXh0cmFjdCBhbnl0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGJlIGEgcGFydCBvZiBhIHZhbGlkIHNlbXZlclxuY3JlYXRlVG9rZW4oJ0NPRVJDRVBMQUlOJywgYCR7JyhefFteXFxcXGRdKScgK1xuICAgICAgICAgICAgICAnKFxcXFxkezEsJ30ke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSlgICtcbiAgICAgICAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsJHtNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIfX0pKT9gICtcbiAgICAgICAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsJHtNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIfX0pKT9gKVxuY3JlYXRlVG9rZW4oJ0NPRVJDRScsIGAke3NyY1t0LkNPRVJDRVBMQUlOXX0oPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFRlVMTCcsIHNyY1t0LkNPRVJDRVBMQUlOXSArXG4gICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzoke3NyY1t0LkJVSUxEXX0pP2AgK1xuICAgICAgICAgICAgICBgKD86JHxbXlxcXFxkXSlgKVxuY3JlYXRlVG9rZW4oJ0NPRVJDRVJUTCcsIHNyY1t0LkNPRVJDRV0sIHRydWUpXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMRlVMTCcsIHNyY1t0LkNPRVJDRUZVTExdLCB0cnVlKVxuXG4vLyBUaWxkZSByYW5nZXMuXG4vLyBNZWFuaW5nIGlzIFwicmVhc29uYWJseSBhdCBvciBncmVhdGVyIHRoYW5cIlxuY3JlYXRlVG9rZW4oJ0xPTkVUSUxERScsICcoPzp+Pj8pJylcblxuY3JlYXRlVG9rZW4oJ1RJTERFVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORVRJTERFXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy50aWxkZVRyaW1SZXBsYWNlID0gJyQxfidcblxuY3JlYXRlVG9rZW4oJ1RJTERFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignVElMREVMT09TRScsIGBeJHtzcmNbdC5MT05FVElMREVdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIENhcmV0IHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJhdCBsZWFzdCBhbmQgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aFwiXG5jcmVhdGVUb2tlbignTE9ORUNBUkVUJywgJyg/OlxcXFxeKScpXG5cbmNyZWF0ZVRva2VuKCdDQVJFVFRSSU0nLCBgKFxcXFxzKikke3NyY1t0LkxPTkVDQVJFVF19XFxcXHMrYCwgdHJ1ZSlcbmV4cG9ydHMuY2FyZXRUcmltUmVwbGFjZSA9ICckMV4nXG5cbmNyZWF0ZVRva2VuKCdDQVJFVCcsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5dfSRgKVxuY3JlYXRlVG9rZW4oJ0NBUkVUTE9PU0UnLCBgXiR7c3JjW3QuTE9ORUNBUkVUXX0ke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSRgKVxuXG4vLyBBIHNpbXBsZSBndC9sdC9lcSB0aGluZywgb3IganVzdCBcIlwiIHRvIGluZGljYXRlIFwiYW55IHZlcnNpb25cIlxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JMT09TRScsIGBeJHtzcmNbdC5HVExUXX1cXFxccyooJHtzcmNbdC5MT09TRVBMQUlOXX0pJHxeJGApXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUicsIGBeJHtzcmNbdC5HVExUXX1cXFxccyooJHtzcmNbdC5GVUxMUExBSU5dfSkkfF4kYClcblxuLy8gQW4gZXhwcmVzc2lvbiB0byBzdHJpcCBhbnkgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZSBndGx0IGFuZCB0aGUgdGhpbmdcbi8vIGl0IG1vZGlmaWVzLCBzbyB0aGF0IGA+IDEuMi4zYCA9PT4gYD4xLjIuM2BcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuR1RMVF1cbn1cXFxccyooJHtzcmNbdC5MT09TRVBMQUlOXX18JHtzcmNbdC5YUkFOR0VQTEFJTl19KWAsIHRydWUpXG5leHBvcnRzLmNvbXBhcmF0b3JUcmltUmVwbGFjZSA9ICckMSQyJDMnXG5cbi8vIFNvbWV0aGluZyBsaWtlIGAxLjIuMyAtIDEuMi40YFxuLy8gTm90ZSB0aGF0IHRoZXNlIGFsbCB1c2UgdGhlIGxvb3NlIGZvcm0sIGJlY2F1c2UgdGhleSdsbCBiZVxuLy8gY2hlY2tlZCBhZ2FpbnN0IGVpdGhlciB0aGUgc3RyaWN0IG9yIGxvb3NlIGNvbXBhcmF0b3IgZm9ybVxuLy8gbGF0ZXIuXG5jcmVhdGVUb2tlbignSFlQSEVOUkFOR0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYFxcXFxzKy1cXFxccytgICtcbiAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMqJGApXG5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRUxPT1NFJywgYF5cXFxccyooJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuLy8gU3RhciByYW5nZXMgYmFzaWNhbGx5IGp1c3QgYWxsb3cgYW55dGhpbmcgYXQgYWxsLlxuY3JlYXRlVG9rZW4oJ1NUQVInLCAnKDx8Pik/PT9cXFxccypcXFxcKicpXG4vLyA+PTAuMC4wIGlzIGxpa2UgYSBzdGFyXG5jcmVhdGVUb2tlbignR1RFMCcsICdeXFxcXHMqPj1cXFxccyowXFxcXC4wXFxcXC4wXFxcXHMqJCcpXG5jcmVhdGVUb2tlbignR1RFMFBSRScsICdeXFxcXHMqPj1cXFxccyowXFxcXC4wXFxcXC4wLTBcXFxccyokJylcbiIsICIvLyBwYXJzZSBvdXQganVzdCB0aGUgb3B0aW9ucyB3ZSBjYXJlIGFib3V0XG5jb25zdCBsb29zZU9wdGlvbiA9IE9iamVjdC5mcmVlemUoeyBsb29zZTogdHJ1ZSB9KVxuY29uc3QgZW1wdHlPcHRzID0gT2JqZWN0LmZyZWV6ZSh7IH0pXG5jb25zdCBwYXJzZU9wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVtcHR5T3B0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBsb29zZU9wdGlvblxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VPcHRpb25zXG4iLCAiY29uc3QgbnVtZXJpYyA9IC9eWzAtOV0rJC9cbmNvbnN0IGNvbXBhcmVJZGVudGlmaWVycyA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IGFudW0gPSBudW1lcmljLnRlc3QoYSlcbiAgY29uc3QgYm51bSA9IG51bWVyaWMudGVzdChiKVxuXG4gIGlmIChhbnVtICYmIGJudW0pIHtcbiAgICBhID0gK2FcbiAgICBiID0gK2JcbiAgfVxuXG4gIHJldHVybiBhID09PSBiID8gMFxuICAgIDogKGFudW0gJiYgIWJudW0pID8gLTFcbiAgICA6IChibnVtICYmICFhbnVtKSA/IDFcbiAgICA6IGEgPCBiID8gLTFcbiAgICA6IDFcbn1cblxuY29uc3QgcmNvbXBhcmVJZGVudGlmaWVycyA9IChhLCBiKSA9PiBjb21wYXJlSWRlbnRpZmllcnMoYiwgYSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBhcmVJZGVudGlmaWVycyxcbiAgcmNvbXBhcmVJZGVudGlmaWVycyxcbn1cbiIsICJjb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2RlYnVnJylcbmNvbnN0IHsgTUFYX0xFTkdUSCwgTUFYX1NBRkVfSU5URUdFUiB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9wYXJzZS1vcHRpb25zJylcbmNvbnN0IHsgY29tcGFyZUlkZW50aWZpZXJzIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9pZGVudGlmaWVycycpXG5jbGFzcyBTZW1WZXIge1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgICBpZiAodmVyc2lvbi5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgICAgdmVyc2lvbi5pbmNsdWRlUHJlcmVsZWFzZSA9PT0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi52ZXJzaW9uXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgdmVyc2lvbi4gTXVzdCBiZSBhIHN0cmluZy4gR290IHR5cGUgXCIke3R5cGVvZiB2ZXJzaW9ufVwiLmApXG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24ubGVuZ3RoID4gTUFYX0xFTkdUSCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYHZlcnNpb24gaXMgbG9uZ2VyIHRoYW4gJHtNQVhfTEVOR1RIfSBjaGFyYWN0ZXJzYFxuICAgICAgKVxuICAgIH1cblxuICAgIGRlYnVnKCdTZW1WZXInLCB2ZXJzaW9uLCBvcHRpb25zKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLmxvb3NlID0gISFvcHRpb25zLmxvb3NlXG4gICAgLy8gdGhpcyBpc24ndCBhY3R1YWxseSByZWxldmFudCBmb3IgdmVyc2lvbnMsIGJ1dCBrZWVwIGl0IHNvIHRoYXQgd2VcbiAgICAvLyBkb24ndCBydW4gaW50byB0cm91YmxlIHBhc3NpbmcgdGhpcy5vcHRpb25zIGFyb3VuZC5cbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICBjb25zdCBtID0gdmVyc2lvbi50cmltKCkubWF0Y2gob3B0aW9ucy5sb29zZSA/IHJlW3QuTE9PU0VdIDogcmVbdC5GVUxMXSlcblxuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBWZXJzaW9uOiAke3ZlcnNpb259YClcbiAgICB9XG5cbiAgICB0aGlzLnJhdyA9IHZlcnNpb25cblxuICAgIC8vIHRoZXNlIGFyZSBhY3R1YWxseSBudW1iZXJzXG4gICAgdGhpcy5tYWpvciA9ICttWzFdXG4gICAgdGhpcy5taW5vciA9ICttWzJdXG4gICAgdGhpcy5wYXRjaCA9ICttWzNdXG5cbiAgICBpZiAodGhpcy5tYWpvciA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5tYWpvciA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbWFqb3IgdmVyc2lvbicpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWlub3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWlub3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1pbm9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhdGNoID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLnBhdGNoIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwYXRjaCB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICAvLyBudW1iZXJpZnkgYW55IHByZXJlbGVhc2UgbnVtZXJpYyBpZHNcbiAgICBpZiAoIW1bNF0pIHtcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IG1bNF0uc3BsaXQoJy4nKS5tYXAoKGlkKSA9PiB7XG4gICAgICAgIGlmICgvXlswLTldKyQvLnRlc3QoaWQpKSB7XG4gICAgICAgICAgY29uc3QgbnVtID0gK2lkXG4gICAgICAgICAgaWYgKG51bSA+PSAwICYmIG51bSA8IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuYnVpbGQgPSBtWzVdID8gbVs1XS5zcGxpdCgnLicpIDogW11cbiAgICB0aGlzLmZvcm1hdCgpXG4gIH1cblxuICBmb3JtYXQgKCkge1xuICAgIHRoaXMudmVyc2lvbiA9IGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLnBhdGNofWBcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgdGhpcy52ZXJzaW9uICs9IGAtJHt0aGlzLnByZXJlbGVhc2Uuam9pbignLicpfWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvblxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIGNvbXBhcmUgKG90aGVyKSB7XG4gICAgZGVidWcoJ1NlbVZlci5jb21wYXJlJywgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMsIG90aGVyKVxuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgaWYgKHR5cGVvZiBvdGhlciA9PT0gJ3N0cmluZycgJiYgb3RoZXIgPT09IHRoaXMudmVyc2lvbikge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKG90aGVyLnZlcnNpb24gPT09IHRoaXMudmVyc2lvbikge1xuICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21wYXJlTWFpbihvdGhlcikgfHwgdGhpcy5jb21wYXJlUHJlKG90aGVyKVxuICB9XG5cbiAgY29tcGFyZU1haW4gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMubWFqb3IsIG90aGVyLm1ham9yKSB8fFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMubWlub3IsIG90aGVyLm1pbm9yKSB8fFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMucGF0Y2gsIG90aGVyLnBhdGNoKVxuICAgIClcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIC8vIHByZW1pbm9yIHdpbGwgYnVtcCB0aGUgdmVyc2lvbiB1cCB0byB0aGUgbmV4dCBtaW5vciByZWxlYXNlLCBhbmQgaW1tZWRpYXRlbHlcbiAgLy8gZG93biB0byBwcmUtcmVsZWFzZS4gcHJlbWFqb3IgYW5kIHByZXBhdGNoIHdvcmsgdGhlIHNhbWUgd2F5LlxuICBpbmMgKHJlbGVhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKSB7XG4gICAgc3dpdGNoIChyZWxlYXNlKSB7XG4gICAgICBjYXNlICdwcmVtYWpvcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVtaW5vcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYWxyZWFkeSBhIHByZXJlbGVhc2UsIGl0IHdpbGwgYnVtcCB0byB0aGUgbmV4dCB2ZXJzaW9uXG4gICAgICAgIC8vIGRyb3AgYW55IHByZXJlbGVhc2VzIHRoYXQgbWlnaHQgYWxyZWFkeSBleGlzdCwgc2luY2UgdGhleSBhcmUgbm90XG4gICAgICAgIC8vIHJlbGV2YW50IGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMuaW5jKCdwYXRjaCcsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgYSBub24tcHJlcmVsZWFzZSB2ZXJzaW9uLCB0aGlzIGFjdHMgdGhlIHNhbWUgYXNcbiAgICAgIC8vIHByZXBhdGNoLlxuICAgICAgY2FzZSAncHJlcmVsZWFzZSc6XG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmMoJ3ByZScsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdtYWpvcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWFqb3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtYWpvciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1ham9yLlxuICAgICAgICAvLyAxLjAuMC01IGJ1bXBzIHRvIDEuMC4wXG4gICAgICAgIC8vIDEuMS4wIGJ1bXBzIHRvIDIuMC4wXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLm1pbm9yICE9PSAwIHx8XG4gICAgICAgICAgdGhpcy5wYXRjaCAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW11cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHByZS1taW5vciB2ZXJzaW9uLCBidW1wIHVwIHRvIHRoZSBzYW1lIG1pbm9yIHZlcnNpb24uXG4gICAgICAgIC8vIE90aGVyd2lzZSBpbmNyZW1lbnQgbWlub3IuXG4gICAgICAgIC8vIDEuMi4wLTUgYnVtcHMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjEgYnVtcHMgdG8gMS4zLjBcbiAgICAgICAgaWYgKHRoaXMucGF0Y2ggIT09IDAgfHwgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiwgaXQgd2lsbCBpbmNyZW1lbnQgdGhlIHBhdGNoLlxuICAgICAgICAvLyBJZiBpdCBpcyBhIHByZS1yZWxlYXNlIGl0IHdpbGwgYnVtcCB1cCB0byB0aGUgc2FtZSBwYXRjaCB2ZXJzaW9uLlxuICAgICAgICAvLyAxLjIuMC01IHBhdGNoZXMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjAgcGF0Y2hlcyB0byAxLjIuMVxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucGF0Y2grK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIHB1YmxpY2x5LlxuICAgICAgLy8gMS4wLjAgJ3ByZScgd291bGQgYmVjb21lIDEuMC4wLTAgd2hpY2ggaXMgdGhlIHdyb25nIGRpcmVjdGlvbi5cbiAgICAgIGNhc2UgJ3ByZSc6IHtcbiAgICAgICAgY29uc3QgYmFzZSA9IE51bWJlcihpZGVudGlmaWVyQmFzZSkgPyAxIDogMFxuXG4gICAgICAgIGlmICghaWRlbnRpZmllciAmJiBpZGVudGlmaWVyQmFzZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGlzIGVtcHR5JylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW2Jhc2VdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGkgPSB0aGlzLnByZXJlbGVhc2UubGVuZ3RoXG4gICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlcmVsZWFzZVtpXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlW2ldKytcbiAgICAgICAgICAgICAgaSA9IC0yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gZGlkbid0IGluY3JlbWVudCBhbnl0aGluZ1xuICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgPT09IHRoaXMucHJlcmVsZWFzZS5qb2luKCcuJykgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlLnB1c2goYmFzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLjEgYnVtcHMgdG8gMS4yLjAtYmV0YS4yLFxuICAgICAgICAgIC8vIDEuMi4wLWJldGEuZm9vYmx6IG9yIDEuMi4wLWJldGEgYnVtcHMgdG8gMS4yLjAtYmV0YS4wXG4gICAgICAgICAgbGV0IHByZXJlbGVhc2UgPSBbaWRlbnRpZmllciwgYmFzZV1cbiAgICAgICAgICBpZiAoaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXJdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnModGhpcy5wcmVyZWxlYXNlWzBdLCBpZGVudGlmaWVyKSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMucHJlcmVsZWFzZVsxXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiAke3JlbGVhc2V9YClcbiAgICB9XG4gICAgdGhpcy5yYXcgPSB0aGlzLmZvcm1hdCgpXG4gICAgaWYgKHRoaXMuYnVpbGQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJhdyArPSBgKyR7dGhpcy5idWlsZC5qb2luKCcuJyl9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VtVmVyXG4iLCAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSAodmVyc2lvbiwgb3B0aW9ucywgdGhyb3dFcnJvcnMgPSBmYWxzZSkgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmICghdGhyb3dFcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRocm93IGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwgImNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCB2YWxpZCA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHYgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gdiA/IHYudmVyc2lvbiA6IG51bGxcbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRcbiIsICJjb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgY2xlYW4gPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzID0gcGFyc2UodmVyc2lvbi50cmltKCkucmVwbGFjZSgvXls9dl0rLywgJycpLCBvcHRpb25zKVxuICByZXR1cm4gcyA/IHMudmVyc2lvbiA6IG51bGxcbn1cbm1vZHVsZS5leHBvcnRzID0gY2xlYW5cbiIsICJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IGluYyA9ICh2ZXJzaW9uLCByZWxlYXNlLCBvcHRpb25zLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkgPT4ge1xuICBpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyQmFzZSA9IGlkZW50aWZpZXJcbiAgICBpZGVudGlmaWVyID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIoXG4gICAgICB2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyID8gdmVyc2lvbi52ZXJzaW9uIDogdmVyc2lvbixcbiAgICAgIG9wdGlvbnNcbiAgICApLmluYyhyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkudmVyc2lvblxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jXG4iLCAiY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlLmpzJylcblxuY29uc3QgZGlmZiA9ICh2ZXJzaW9uMSwgdmVyc2lvbjIpID0+IHtcbiAgY29uc3QgdjEgPSBwYXJzZSh2ZXJzaW9uMSwgbnVsbCwgdHJ1ZSlcbiAgY29uc3QgdjIgPSBwYXJzZSh2ZXJzaW9uMiwgbnVsbCwgdHJ1ZSlcbiAgY29uc3QgY29tcGFyaXNvbiA9IHYxLmNvbXBhcmUodjIpXG5cbiAgaWYgKGNvbXBhcmlzb24gPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgdjFIaWdoZXIgPSBjb21wYXJpc29uID4gMFxuICBjb25zdCBoaWdoVmVyc2lvbiA9IHYxSGlnaGVyID8gdjEgOiB2MlxuICBjb25zdCBsb3dWZXJzaW9uID0gdjFIaWdoZXIgPyB2MiA6IHYxXG4gIGNvbnN0IGhpZ2hIYXNQcmUgPSAhIWhpZ2hWZXJzaW9uLnByZXJlbGVhc2UubGVuZ3RoXG4gIGNvbnN0IGxvd0hhc1ByZSA9ICEhbG93VmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aFxuXG4gIGlmIChsb3dIYXNQcmUgJiYgIWhpZ2hIYXNQcmUpIHtcbiAgICAvLyBHb2luZyBmcm9tIHByZXJlbGVhc2UgLT4gbm8gcHJlcmVsZWFzZSByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FzaW5nXG5cbiAgICAvLyBJZiB0aGUgbG93IHZlcnNpb24gaGFzIG9ubHkgYSBtYWpvciwgdGhlbiBpdCB3aWxsIGFsd2F5cyBiZSBhIG1ham9yXG4gICAgLy8gU29tZSBleGFtcGxlczpcbiAgICAvLyAxLjAuMC0xIC0+IDEuMC4wXG4gICAgLy8gMS4wLjAtMSAtPiAxLjEuMVxuICAgIC8vIDEuMC4wLTEgLT4gMi4wLjBcbiAgICBpZiAoIWxvd1ZlcnNpb24ucGF0Y2ggJiYgIWxvd1ZlcnNpb24ubWlub3IpIHtcbiAgICAgIHJldHVybiAnbWFqb3InXG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGl0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nIHRoZSBoaWdoIHZlcnNpb25cblxuICAgIGlmIChoaWdoVmVyc2lvbi5wYXRjaCkge1xuICAgICAgLy8gYW55dGhpbmcgaGlnaGVyIHRoYW4gYSBwYXRjaCBidW1wIHdvdWxkIHJlc3VsdCBpbiB0aGUgd3JvbmcgdmVyc2lvblxuICAgICAgcmV0dXJuICdwYXRjaCdcbiAgICB9XG5cbiAgICBpZiAoaGlnaFZlcnNpb24ubWlub3IpIHtcbiAgICAgIC8vIGFueXRoaW5nIGhpZ2hlciB0aGFuIGEgbWlub3IgYnVtcCB3b3VsZCByZXN1bHQgaW4gdGhlIHdyb25nIHZlcnNpb25cbiAgICAgIHJldHVybiAnbWlub3InXG4gICAgfVxuXG4gICAgLy8gYnVtcGluZyBtYWpvci9taW5vci9wYXRjaCBhbGwgaGF2ZSBzYW1lIHJlc3VsdFxuICAgIHJldHVybiAnbWFqb3InXG4gIH1cblxuICAvLyBhZGQgdGhlIGBwcmVgIHByZWZpeCBpZiB3ZSBhcmUgZ29pbmcgdG8gYSBwcmVyZWxlYXNlIHZlcnNpb25cbiAgY29uc3QgcHJlZml4ID0gaGlnaEhhc1ByZSA/ICdwcmUnIDogJydcblxuICBpZiAodjEubWFqb3IgIT09IHYyLm1ham9yKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdtYWpvcidcbiAgfVxuXG4gIGlmICh2MS5taW5vciAhPT0gdjIubWlub3IpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ21pbm9yJ1xuICB9XG5cbiAgaWYgKHYxLnBhdGNoICE9PSB2Mi5wYXRjaCkge1xuICAgIHJldHVybiBwcmVmaXggKyAncGF0Y2gnXG4gIH1cblxuICAvLyBoaWdoIGFuZCBsb3cgYXJlIHByZWxlYXNlc1xuICByZXR1cm4gJ3ByZXJlbGVhc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZlxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1ham9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5tYWpvclxubW9kdWxlLmV4cG9ydHMgPSBtYWpvclxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1pbm9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5taW5vclxubW9kdWxlLmV4cG9ydHMgPSBtaW5vclxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IHBhdGNoID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5wYXRjaFxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuIiwgImNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBwcmVyZWxlYXNlID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIChwYXJzZWQgJiYgcGFyc2VkLnByZXJlbGVhc2UubGVuZ3RoKSA/IHBhcnNlZC5wcmVyZWxlYXNlIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBwcmVyZWxlYXNlXG4iLCAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT5cbiAgbmV3IFNlbVZlcihhLCBsb29zZSkuY29tcGFyZShuZXcgU2VtVmVyKGIsIGxvb3NlKSlcblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlXG4iLCAiY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShiLCBhLCBsb29zZSlcbm1vZHVsZS5leHBvcnRzID0gcmNvbXBhcmVcbiIsICJjb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IChhLCBiKSA9PiBjb21wYXJlKGEsIGIsIHRydWUpXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBhcmVMb29zZVxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmVCdWlsZCA9IChhLCBiLCBsb29zZSkgPT4ge1xuICBjb25zdCB2ZXJzaW9uQSA9IG5ldyBTZW1WZXIoYSwgbG9vc2UpXG4gIGNvbnN0IHZlcnNpb25CID0gbmV3IFNlbVZlcihiLCBsb29zZSlcbiAgcmV0dXJuIHZlcnNpb25BLmNvbXBhcmUodmVyc2lvbkIpIHx8IHZlcnNpb25BLmNvbXBhcmVCdWlsZCh2ZXJzaW9uQilcbn1cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUJ1aWxkXG4iLCAiY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHNvcnQgPSAobGlzdCwgbG9vc2UpID0+IGxpc3Quc29ydCgoYSwgYikgPT4gY29tcGFyZUJ1aWxkKGEsIGIsIGxvb3NlKSlcbm1vZHVsZS5leHBvcnRzID0gc29ydFxuIiwgImNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCByc29ydCA9IChsaXN0LCBsb29zZSkgPT4gbGlzdC5zb3J0KChhLCBiKSA9PiBjb21wYXJlQnVpbGQoYiwgYSwgbG9vc2UpKVxubW9kdWxlLmV4cG9ydHMgPSByc29ydFxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3QgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID4gMFxubW9kdWxlLmV4cG9ydHMgPSBndFxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbHQgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDwgMFxubW9kdWxlLmV4cG9ydHMgPSBsdFxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID09PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGVxXG4iLCAiY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBuZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpICE9PSAwXG5tb2R1bGUuZXhwb3J0cyA9IG5lcVxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3RlID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA+PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGd0ZVxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbHRlID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGx0ZVxuIiwgImNvbnN0IGVxID0gcmVxdWlyZSgnLi9lcScpXG5jb25zdCBuZXEgPSByZXF1aXJlKCcuL25lcScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4vZ3QnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi9ndGUnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4vbHRlJylcblxuY29uc3QgY21wID0gKGEsIG9wLCBiLCBsb29zZSkgPT4ge1xuICBzd2l0Y2ggKG9wKSB7XG4gICAgY2FzZSAnPT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSA9PT0gYlxuXG4gICAgY2FzZSAnIT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSAhPT0gYlxuXG4gICAgY2FzZSAnJzpcbiAgICBjYXNlICc9JzpcbiAgICBjYXNlICc9PSc6XG4gICAgICByZXR1cm4gZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICchPSc6XG4gICAgICByZXR1cm4gbmVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPic6XG4gICAgICByZXR1cm4gZ3QoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+PSc6XG4gICAgICByZXR1cm4gZ3RlKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPCc6XG4gICAgICByZXR1cm4gbHQoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8PSc6XG4gICAgICByZXR1cm4gbHRlKGEsIGIsIGxvb3NlKVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgb3BlcmF0b3I6ICR7b3B9YClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBjbXBcbiIsICJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IGNvZXJjZSA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgcmV0dXJuIHZlcnNpb25cbiAgfVxuXG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ251bWJlcicpIHtcbiAgICB2ZXJzaW9uID0gU3RyaW5nKHZlcnNpb24pXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgbGV0IG1hdGNoID0gbnVsbFxuICBpZiAoIW9wdGlvbnMucnRsKSB7XG4gICAgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyByZVt0LkNPRVJDRUZVTExdIDogcmVbdC5DT0VSQ0VdKVxuICB9IGVsc2Uge1xuICAgIC8vIEZpbmQgdGhlIHJpZ2h0LW1vc3QgY29lcmNpYmxlIHN0cmluZyB0aGF0IGRvZXMgbm90IHNoYXJlXG4gICAgLy8gYSB0ZXJtaW51cyB3aXRoIGEgbW9yZSBsZWZ0LXdhcmQgY29lcmNpYmxlIHN0cmluZy5cbiAgICAvLyBFZywgJzEuMi4zLjQnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQnLCBub3QgJzMuNCcgb3IgJzQnXG4gICAgLy8gV2l0aCBpbmNsdWRlUHJlcmVsZWFzZSBvcHRpb24gc2V0LCAnMS4yLjMuNC1yYycgd2FudHMgdG8gY29lcmNlICcyLjMuNC1yYycsIG5vdCAnMi4zLjQnXG4gICAgLy9cbiAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHN0cmluZyBjaGVja2luZyB3aXRoIGEgL2cgcmVnZXhwXG4gICAgLy8gTWFudWFsbHkgc2V0IHRoZSBpbmRleCBzbyBhcyB0byBwaWNrIHVwIG92ZXJsYXBwaW5nIG1hdGNoZXMuXG4gICAgLy8gU3RvcCB3aGVuIHdlIGdldCBhIG1hdGNoIHRoYXQgZW5kcyBhdCB0aGUgc3RyaW5nIGVuZCwgc2luY2Ugbm9cbiAgICAvLyBjb2VyY2libGUgc3RyaW5nIGNhbiBiZSBtb3JlIHJpZ2h0LXdhcmQgd2l0aG91dCB0aGUgc2FtZSB0ZXJtaW51cy5cbiAgICBjb25zdCBjb2VyY2VSdGxSZWdleCA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyByZVt0LkNPRVJDRVJUTEZVTExdIDogcmVbdC5DT0VSQ0VSVExdXG4gICAgbGV0IG5leHRcbiAgICB3aGlsZSAoKG5leHQgPSBjb2VyY2VSdGxSZWdleC5leGVjKHZlcnNpb24pKSAmJlxuICAgICAgICAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoICE9PSB2ZXJzaW9uLmxlbmd0aClcbiAgICApIHtcbiAgICAgIGlmICghbWF0Y2ggfHxcbiAgICAgICAgICAgIG5leHQuaW5kZXggKyBuZXh0WzBdLmxlbmd0aCAhPT0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2ggPSBuZXh0XG4gICAgICB9XG4gICAgICBjb2VyY2VSdGxSZWdleC5sYXN0SW5kZXggPSBuZXh0LmluZGV4ICsgbmV4dFsxXS5sZW5ndGggKyBuZXh0WzJdLmxlbmd0aFxuICAgIH1cbiAgICAvLyBsZWF2ZSBpdCBpbiBhIGNsZWFuIHN0YXRlXG4gICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gLTFcbiAgfVxuXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBtYWpvciA9IG1hdGNoWzJdXG4gIGNvbnN0IG1pbm9yID0gbWF0Y2hbM10gfHwgJzAnXG4gIGNvbnN0IHBhdGNoID0gbWF0Y2hbNF0gfHwgJzAnXG4gIGNvbnN0IHByZXJlbGVhc2UgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzVdID8gYC0ke21hdGNoWzVdfWAgOiAnJ1xuICBjb25zdCBidWlsZCA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiYgbWF0Y2hbNl0gPyBgKyR7bWF0Y2hbNl19YCA6ICcnXG5cbiAgcmV0dXJuIHBhcnNlKGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofSR7cHJlcmVsZWFzZX0ke2J1aWxkfWAsIG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGNvZXJjZVxuIiwgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoWWFsbGlzdCkge1xuICBZYWxsaXN0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24qICgpIHtcbiAgICBmb3IgKGxldCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlcjsgd2Fsa2VyID0gd2Fsa2VyLm5leHQpIHtcbiAgICAgIHlpZWxkIHdhbGtlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBZYWxsaXN0XG5cbllhbGxpc3QuTm9kZSA9IE5vZGVcbllhbGxpc3QuY3JlYXRlID0gWWFsbGlzdFxuXG5mdW5jdGlvbiBZYWxsaXN0IChsaXN0KSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoIShzZWxmIGluc3RhbmNlb2YgWWFsbGlzdCkpIHtcbiAgICBzZWxmID0gbmV3IFlhbGxpc3QoKVxuICB9XG5cbiAgc2VsZi50YWlsID0gbnVsbFxuICBzZWxmLmhlYWQgPSBudWxsXG4gIHNlbGYubGVuZ3RoID0gMFxuXG4gIGlmIChsaXN0ICYmIHR5cGVvZiBsaXN0LmZvckVhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHNlbGYucHVzaChpdGVtKVxuICAgIH0pXG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHNlbGYucHVzaChhcmd1bWVudHNbaV0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlbGZcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUucmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlLmxpc3QgIT09IHRoaXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbW92aW5nIG5vZGUgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgbGlzdCcpXG4gIH1cblxuICB2YXIgbmV4dCA9IG5vZGUubmV4dFxuICB2YXIgcHJldiA9IG5vZGUucHJldlxuXG4gIGlmIChuZXh0KSB7XG4gICAgbmV4dC5wcmV2ID0gcHJldlxuICB9XG5cbiAgaWYgKHByZXYpIHtcbiAgICBwcmV2Lm5leHQgPSBuZXh0XG4gIH1cblxuICBpZiAobm9kZSA9PT0gdGhpcy5oZWFkKSB7XG4gICAgdGhpcy5oZWFkID0gbmV4dFxuICB9XG4gIGlmIChub2RlID09PSB0aGlzLnRhaWwpIHtcbiAgICB0aGlzLnRhaWwgPSBwcmV2XG4gIH1cblxuICBub2RlLmxpc3QubGVuZ3RoLS1cbiAgbm9kZS5uZXh0ID0gbnVsbFxuICBub2RlLnByZXYgPSBudWxsXG4gIG5vZGUubGlzdCA9IG51bGxcblxuICByZXR1cm4gbmV4dFxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS51bnNoaWZ0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlID09PSB0aGlzLmhlYWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChub2RlLmxpc3QpIHtcbiAgICBub2RlLmxpc3QucmVtb3ZlTm9kZShub2RlKVxuICB9XG5cbiAgdmFyIGhlYWQgPSB0aGlzLmhlYWRcbiAgbm9kZS5saXN0ID0gdGhpc1xuICBub2RlLm5leHQgPSBoZWFkXG4gIGlmIChoZWFkKSB7XG4gICAgaGVhZC5wcmV2ID0gbm9kZVxuICB9XG5cbiAgdGhpcy5oZWFkID0gbm9kZVxuICBpZiAoIXRoaXMudGFpbCkge1xuICAgIHRoaXMudGFpbCA9IG5vZGVcbiAgfVxuICB0aGlzLmxlbmd0aCsrXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnB1c2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IHRoaXMudGFpbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKG5vZGUubGlzdCkge1xuICAgIG5vZGUubGlzdC5yZW1vdmVOb2RlKG5vZGUpXG4gIH1cblxuICB2YXIgdGFpbCA9IHRoaXMudGFpbFxuICBub2RlLmxpc3QgPSB0aGlzXG4gIG5vZGUucHJldiA9IHRhaWxcbiAgaWYgKHRhaWwpIHtcbiAgICB0YWlsLm5leHQgPSBub2RlXG4gIH1cblxuICB0aGlzLnRhaWwgPSBub2RlXG4gIGlmICghdGhpcy5oZWFkKSB7XG4gICAgdGhpcy5oZWFkID0gbm9kZVxuICB9XG4gIHRoaXMubGVuZ3RoKytcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcHVzaCh0aGlzLCBhcmd1bWVudHNbaV0pXG4gIH1cbiAgcmV0dXJuIHRoaXMubGVuZ3RoXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHVuc2hpZnQodGhpcywgYXJndW1lbnRzW2ldKVxuICB9XG4gIHJldHVybiB0aGlzLmxlbmd0aFxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy50YWlsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgdmFyIHJlcyA9IHRoaXMudGFpbC52YWx1ZVxuICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwucHJldlxuICBpZiAodGhpcy50YWlsKSB7XG4gICAgdGhpcy50YWlsLm5leHQgPSBudWxsXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oZWFkID0gbnVsbFxuICB9XG4gIHRoaXMubGVuZ3RoLS1cbiAgcmV0dXJuIHJlc1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmhlYWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICB2YXIgcmVzID0gdGhpcy5oZWFkLnZhbHVlXG4gIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0XG4gIGlmICh0aGlzLmhlYWQpIHtcbiAgICB0aGlzLmhlYWQucHJldiA9IG51bGxcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRhaWwgPSBudWxsXG4gIH1cbiAgdGhpcy5sZW5ndGgtLVxuICByZXR1cm4gcmVzXG59XG5cbllhbGxpc3QucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpc1xuICBmb3IgKHZhciB3YWxrZXIgPSB0aGlzLmhlYWQsIGkgPSAwOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgaSwgdGhpcylcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG59XG5cbllhbGxpc3QucHJvdG90eXBlLmZvckVhY2hSZXZlcnNlID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXNcbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy50YWlsLCBpID0gdGhpcy5sZW5ndGggLSAxOyB3YWxrZXIgIT09IG51bGw7IGktLSkge1xuICAgIGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgaSwgdGhpcylcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldlxuICB9XG59XG5cbllhbGxpc3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuKSB7XG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgbjsgaSsrKSB7XG4gICAgLy8gYWJvcnQgb3V0IG9mIHRoZSBsaXN0IGVhcmx5IGlmIHdlIGhpdCBhIGN5Y2xlXG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxuICBpZiAoaSA9PT0gbiAmJiB3YWxrZXIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gd2Fsa2VyLnZhbHVlXG4gIH1cbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuZ2V0UmV2ZXJzZSA9IGZ1bmN0aW9uIChuKSB7XG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgbjsgaSsrKSB7XG4gICAgLy8gYWJvcnQgb3V0IG9mIHRoZSBsaXN0IGVhcmx5IGlmIHdlIGhpdCBhIGN5Y2xlXG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxuICBpZiAoaSA9PT0gbiAmJiB3YWxrZXIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gd2Fsa2VyLnZhbHVlXG4gIH1cbn1cblxuWWFsbGlzdC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXNcbiAgdmFyIHJlcyA9IG5ldyBZYWxsaXN0KClcbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgcmVzLnB1c2goZm4uY2FsbCh0aGlzcCwgd2Fsa2VyLnZhbHVlLCB0aGlzKSlcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG4gIHJldHVybiByZXNcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUubWFwUmV2ZXJzZSA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzXG4gIHZhciByZXMgPSBuZXcgWWFsbGlzdCgpXG4gIGZvciAodmFyIHdhbGtlciA9IHRoaXMudGFpbDsgd2Fsa2VyICE9PSBudWxsOykge1xuICAgIHJlcy5wdXNoKGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgdGhpcykpXG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIChmbiwgaW5pdGlhbCkge1xuICB2YXIgYWNjXG4gIHZhciB3YWxrZXIgPSB0aGlzLmhlYWRcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgYWNjID0gaW5pdGlhbFxuICB9IGVsc2UgaWYgKHRoaXMuaGVhZCkge1xuICAgIHdhbGtlciA9IHRoaXMuaGVhZC5uZXh0XG4gICAgYWNjID0gdGhpcy5oZWFkLnZhbHVlXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFsIHZhbHVlJylcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGFjYyA9IGZuKGFjYywgd2Fsa2VyLnZhbHVlLCBpKVxuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0XG4gIH1cblxuICByZXR1cm4gYWNjXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJlZHVjZVJldmVyc2UgPSBmdW5jdGlvbiAoZm4sIGluaXRpYWwpIHtcbiAgdmFyIGFjY1xuICB2YXIgd2Fsa2VyID0gdGhpcy50YWlsXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIGFjYyA9IGluaXRpYWxcbiAgfSBlbHNlIGlmICh0aGlzLnRhaWwpIHtcbiAgICB3YWxrZXIgPSB0aGlzLnRhaWwucHJldlxuICAgIGFjYyA9IHRoaXMudGFpbC52YWx1ZVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBsaXN0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpXG4gIH1cblxuICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyB3YWxrZXIgIT09IG51bGw7IGktLSkge1xuICAgIGFjYyA9IGZuKGFjYywgd2Fsa2VyLnZhbHVlLCBpKVxuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2XG4gIH1cblxuICByZXR1cm4gYWNjXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnIgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlciAhPT0gbnVsbDsgaSsrKSB7XG4gICAgYXJyW2ldID0gd2Fsa2VyLnZhbHVlXG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxuICByZXR1cm4gYXJyXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnRvQXJyYXlSZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy50YWlsOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGFycltpXSA9IHdhbGtlci52YWx1ZVxuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2XG4gIH1cbiAgcmV0dXJuIGFyclxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChmcm9tLCB0bykge1xuICB0byA9IHRvIHx8IHRoaXMubGVuZ3RoXG4gIGlmICh0byA8IDApIHtcbiAgICB0byArPSB0aGlzLmxlbmd0aFxuICB9XG4gIGZyb20gPSBmcm9tIHx8IDBcbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSArPSB0aGlzLmxlbmd0aFxuICB9XG4gIHZhciByZXQgPSBuZXcgWWFsbGlzdCgpXG4gIGlmICh0byA8IGZyb20gfHwgdG8gPCAwKSB7XG4gICAgcmV0dXJuIHJldFxuICB9XG4gIGlmIChmcm9tIDwgMCkge1xuICAgIGZyb20gPSAwXG4gIH1cbiAgaWYgKHRvID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0byA9IHRoaXMubGVuZ3RoXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIHdhbGtlciA9IHRoaXMuaGVhZDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPCBmcm9tOyBpKyspIHtcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG4gIGZvciAoOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IHRvOyBpKyssIHdhbGtlciA9IHdhbGtlci5uZXh0KSB7XG4gICAgcmV0LnB1c2god2Fsa2VyLnZhbHVlKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuc2xpY2VSZXZlcnNlID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gIHRvID0gdG8gfHwgdGhpcy5sZW5ndGhcbiAgaWYgKHRvIDwgMCkge1xuICAgIHRvICs9IHRoaXMubGVuZ3RoXG4gIH1cbiAgZnJvbSA9IGZyb20gfHwgMFxuICBpZiAoZnJvbSA8IDApIHtcbiAgICBmcm9tICs9IHRoaXMubGVuZ3RoXG4gIH1cbiAgdmFyIHJldCA9IG5ldyBZYWxsaXN0KClcbiAgaWYgKHRvIDwgZnJvbSB8fCB0byA8IDApIHtcbiAgICByZXR1cm4gcmV0XG4gIH1cbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSA9IDBcbiAgfVxuICBpZiAodG8gPiB0aGlzLmxlbmd0aCkge1xuICAgIHRvID0gdGhpcy5sZW5ndGhcbiAgfVxuICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGgsIHdhbGtlciA9IHRoaXMudGFpbDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPiB0bzsgaS0tKSB7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxuICBmb3IgKDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPiBmcm9tOyBpLS0sIHdhbGtlciA9IHdhbGtlci5wcmV2KSB7XG4gICAgcmV0LnB1c2god2Fsa2VyLnZhbHVlKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBkZWxldGVDb3VudCwgLi4ubm9kZXMpIHtcbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMVxuICB9XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IHRoaXMubGVuZ3RoICsgc3RhcnQ7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IHN0YXJ0OyBpKyspIHtcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG5cbiAgdmFyIHJldCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyB3YWxrZXIgJiYgaSA8IGRlbGV0ZUNvdW50OyBpKyspIHtcbiAgICByZXQucHVzaCh3YWxrZXIudmFsdWUpXG4gICAgd2Fsa2VyID0gdGhpcy5yZW1vdmVOb2RlKHdhbGtlcilcbiAgfVxuICBpZiAod2Fsa2VyID09PSBudWxsKSB7XG4gICAgd2Fsa2VyID0gdGhpcy50YWlsXG4gIH1cblxuICBpZiAod2Fsa2VyICE9PSB0aGlzLmhlYWQgJiYgd2Fsa2VyICE9PSB0aGlzLnRhaWwpIHtcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldlxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHdhbGtlciA9IGluc2VydCh0aGlzLCB3YWxrZXIsIG5vZGVzW2ldKVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkID0gdGhpcy5oZWFkXG4gIHZhciB0YWlsID0gdGhpcy50YWlsXG4gIGZvciAodmFyIHdhbGtlciA9IGhlYWQ7IHdhbGtlciAhPT0gbnVsbDsgd2Fsa2VyID0gd2Fsa2VyLnByZXYpIHtcbiAgICB2YXIgcCA9IHdhbGtlci5wcmV2XG4gICAgd2Fsa2VyLnByZXYgPSB3YWxrZXIubmV4dFxuICAgIHdhbGtlci5uZXh0ID0gcFxuICB9XG4gIHRoaXMuaGVhZCA9IHRhaWxcbiAgdGhpcy50YWlsID0gaGVhZFxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBpbnNlcnQgKHNlbGYsIG5vZGUsIHZhbHVlKSB7XG4gIHZhciBpbnNlcnRlZCA9IG5vZGUgPT09IHNlbGYuaGVhZCA/XG4gICAgbmV3IE5vZGUodmFsdWUsIG51bGwsIG5vZGUsIHNlbGYpIDpcbiAgICBuZXcgTm9kZSh2YWx1ZSwgbm9kZSwgbm9kZS5uZXh0LCBzZWxmKVxuXG4gIGlmIChpbnNlcnRlZC5uZXh0ID09PSBudWxsKSB7XG4gICAgc2VsZi50YWlsID0gaW5zZXJ0ZWRcbiAgfVxuICBpZiAoaW5zZXJ0ZWQucHJldiA9PT0gbnVsbCkge1xuICAgIHNlbGYuaGVhZCA9IGluc2VydGVkXG4gIH1cblxuICBzZWxmLmxlbmd0aCsrXG5cbiAgcmV0dXJuIGluc2VydGVkXG59XG5cbmZ1bmN0aW9uIHB1c2ggKHNlbGYsIGl0ZW0pIHtcbiAgc2VsZi50YWlsID0gbmV3IE5vZGUoaXRlbSwgc2VsZi50YWlsLCBudWxsLCBzZWxmKVxuICBpZiAoIXNlbGYuaGVhZCkge1xuICAgIHNlbGYuaGVhZCA9IHNlbGYudGFpbFxuICB9XG4gIHNlbGYubGVuZ3RoKytcbn1cblxuZnVuY3Rpb24gdW5zaGlmdCAoc2VsZiwgaXRlbSkge1xuICBzZWxmLmhlYWQgPSBuZXcgTm9kZShpdGVtLCBudWxsLCBzZWxmLmhlYWQsIHNlbGYpXG4gIGlmICghc2VsZi50YWlsKSB7XG4gICAgc2VsZi50YWlsID0gc2VsZi5oZWFkXG4gIH1cbiAgc2VsZi5sZW5ndGgrK1xufVxuXG5mdW5jdGlvbiBOb2RlICh2YWx1ZSwgcHJldiwgbmV4dCwgbGlzdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUodmFsdWUsIHByZXYsIG5leHQsIGxpc3QpXG4gIH1cblxuICB0aGlzLmxpc3QgPSBsaXN0XG4gIHRoaXMudmFsdWUgPSB2YWx1ZVxuXG4gIGlmIChwcmV2KSB7XG4gICAgcHJldi5uZXh0ID0gdGhpc1xuICAgIHRoaXMucHJldiA9IHByZXZcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnByZXYgPSBudWxsXG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5leHQucHJldiA9IHRoaXNcbiAgICB0aGlzLm5leHQgPSBuZXh0XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICB9XG59XG5cbnRyeSB7XG4gIC8vIGFkZCBpZiBzdXBwb3J0IGZvciBTeW1ib2wuaXRlcmF0b3IgaXMgcHJlc2VudFxuICByZXF1aXJlKCcuL2l0ZXJhdG9yLmpzJykoWWFsbGlzdClcbn0gY2F0Y2ggKGVyKSB7fVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBBIGxpbmtlZCBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgcmVjZW50bHktdXNlZC1uZXNzXG5jb25zdCBZYWxsaXN0ID0gcmVxdWlyZSgneWFsbGlzdCcpXG5cbmNvbnN0IE1BWCA9IFN5bWJvbCgnbWF4JylcbmNvbnN0IExFTkdUSCA9IFN5bWJvbCgnbGVuZ3RoJylcbmNvbnN0IExFTkdUSF9DQUxDVUxBVE9SID0gU3ltYm9sKCdsZW5ndGhDYWxjdWxhdG9yJylcbmNvbnN0IEFMTE9XX1NUQUxFID0gU3ltYm9sKCdhbGxvd1N0YWxlJylcbmNvbnN0IE1BWF9BR0UgPSBTeW1ib2woJ21heEFnZScpXG5jb25zdCBESVNQT1NFID0gU3ltYm9sKCdkaXNwb3NlJylcbmNvbnN0IE5PX0RJU1BPU0VfT05fU0VUID0gU3ltYm9sKCdub0Rpc3Bvc2VPblNldCcpXG5jb25zdCBMUlVfTElTVCA9IFN5bWJvbCgnbHJ1TGlzdCcpXG5jb25zdCBDQUNIRSA9IFN5bWJvbCgnY2FjaGUnKVxuY29uc3QgVVBEQVRFX0FHRV9PTl9HRVQgPSBTeW1ib2woJ3VwZGF0ZUFnZU9uR2V0JylcblxuY29uc3QgbmFpdmVMZW5ndGggPSAoKSA9PiAxXG5cbi8vIGxydUxpc3QgaXMgYSB5YWxsaXN0IHdoZXJlIHRoZSBoZWFkIGlzIHRoZSB5b3VuZ2VzdFxuLy8gaXRlbSwgYW5kIHRoZSB0YWlsIGlzIHRoZSBvbGRlc3QuICB0aGUgbGlzdCBjb250YWlucyB0aGUgSGl0XG4vLyBvYmplY3RzIGFzIHRoZSBlbnRyaWVzLlxuLy8gRWFjaCBIaXQgb2JqZWN0IGhhcyBhIHJlZmVyZW5jZSB0byBpdHMgWWFsbGlzdC5Ob2RlLiAgVGhpc1xuLy8gbmV2ZXIgY2hhbmdlcy5cbi8vXG4vLyBjYWNoZSBpcyBhIE1hcCAob3IgUHNldWRvTWFwKSB0aGF0IG1hdGNoZXMgdGhlIGtleXMgdG9cbi8vIHRoZSBZYWxsaXN0Lk5vZGUgb2JqZWN0LlxuY2xhc3MgTFJVQ2FjaGUge1xuICBjb25zdHJ1Y3RvciAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpXG4gICAgICBvcHRpb25zID0geyBtYXg6IG9wdGlvbnMgfVxuXG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgb3B0aW9ucyA9IHt9XG5cbiAgICBpZiAob3B0aW9ucy5tYXggJiYgKHR5cGVvZiBvcHRpb25zLm1heCAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5tYXggPCAwKSlcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpXG4gICAgLy8gS2luZCBvZiB3ZWlyZCB0byBoYXZlIGEgZGVmYXVsdCBtYXggb2YgSW5maW5pdHksIGJ1dCBvaCB3ZWxsLlxuICAgIGNvbnN0IG1heCA9IHRoaXNbTUFYXSA9IG9wdGlvbnMubWF4IHx8IEluZmluaXR5XG5cbiAgICBjb25zdCBsYyA9IG9wdGlvbnMubGVuZ3RoIHx8IG5haXZlTGVuZ3RoXG4gICAgdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl0gPSAodHlwZW9mIGxjICE9PSAnZnVuY3Rpb24nKSA/IG5haXZlTGVuZ3RoIDogbGNcbiAgICB0aGlzW0FMTE9XX1NUQUxFXSA9IG9wdGlvbnMuc3RhbGUgfHwgZmFsc2VcbiAgICBpZiAob3B0aW9ucy5tYXhBZ2UgJiYgdHlwZW9mIG9wdGlvbnMubWF4QWdlICE9PSAnbnVtYmVyJylcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heEFnZSBtdXN0IGJlIGEgbnVtYmVyJylcbiAgICB0aGlzW01BWF9BR0VdID0gb3B0aW9ucy5tYXhBZ2UgfHwgMFxuICAgIHRoaXNbRElTUE9TRV0gPSBvcHRpb25zLmRpc3Bvc2VcbiAgICB0aGlzW05PX0RJU1BPU0VfT05fU0VUXSA9IG9wdGlvbnMubm9EaXNwb3NlT25TZXQgfHwgZmFsc2VcbiAgICB0aGlzW1VQREFURV9BR0VfT05fR0VUXSA9IG9wdGlvbnMudXBkYXRlQWdlT25HZXQgfHwgZmFsc2VcbiAgICB0aGlzLnJlc2V0KClcbiAgfVxuXG4gIC8vIHJlc2l6ZSB0aGUgY2FjaGUgd2hlbiB0aGUgbWF4IGNoYW5nZXMuXG4gIHNldCBtYXggKG1MKSB7XG4gICAgaWYgKHR5cGVvZiBtTCAhPT0gJ251bWJlcicgfHwgbUwgPCAwKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJylcblxuICAgIHRoaXNbTUFYXSA9IG1MIHx8IEluZmluaXR5XG4gICAgdHJpbSh0aGlzKVxuICB9XG4gIGdldCBtYXggKCkge1xuICAgIHJldHVybiB0aGlzW01BWF1cbiAgfVxuXG4gIHNldCBhbGxvd1N0YWxlIChhbGxvd1N0YWxlKSB7XG4gICAgdGhpc1tBTExPV19TVEFMRV0gPSAhIWFsbG93U3RhbGVcbiAgfVxuICBnZXQgYWxsb3dTdGFsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNbQUxMT1dfU1RBTEVdXG4gIH1cblxuICBzZXQgbWF4QWdlIChtQSkge1xuICAgIGlmICh0eXBlb2YgbUEgIT09ICdudW1iZXInKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4QWdlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJylcblxuICAgIHRoaXNbTUFYX0FHRV0gPSBtQVxuICAgIHRyaW0odGhpcylcbiAgfVxuICBnZXQgbWF4QWdlICgpIHtcbiAgICByZXR1cm4gdGhpc1tNQVhfQUdFXVxuICB9XG5cbiAgLy8gcmVzaXplIHRoZSBjYWNoZSB3aGVuIHRoZSBsZW5ndGhDYWxjdWxhdG9yIGNoYW5nZXMuXG4gIHNldCBsZW5ndGhDYWxjdWxhdG9yIChsQykge1xuICAgIGlmICh0eXBlb2YgbEMgIT09ICdmdW5jdGlvbicpXG4gICAgICBsQyA9IG5haXZlTGVuZ3RoXG5cbiAgICBpZiAobEMgIT09IHRoaXNbTEVOR1RIX0NBTENVTEFUT1JdKSB7XG4gICAgICB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXSA9IGxDXG4gICAgICB0aGlzW0xFTkdUSF0gPSAwXG4gICAgICB0aGlzW0xSVV9MSVNUXS5mb3JFYWNoKGhpdCA9PiB7XG4gICAgICAgIGhpdC5sZW5ndGggPSB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXShoaXQudmFsdWUsIGhpdC5rZXkpXG4gICAgICAgIHRoaXNbTEVOR1RIXSArPSBoaXQubGVuZ3RoXG4gICAgICB9KVxuICAgIH1cbiAgICB0cmltKHRoaXMpXG4gIH1cbiAgZ2V0IGxlbmd0aENhbGN1bGF0b3IgKCkgeyByZXR1cm4gdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl0gfVxuXG4gIGdldCBsZW5ndGggKCkgeyByZXR1cm4gdGhpc1tMRU5HVEhdIH1cbiAgZ2V0IGl0ZW1Db3VudCAoKSB7IHJldHVybiB0aGlzW0xSVV9MSVNUXS5sZW5ndGggfVxuXG4gIHJmb3JFYWNoIChmbiwgdGhpc3ApIHtcbiAgICB0aGlzcCA9IHRoaXNwIHx8IHRoaXNcbiAgICBmb3IgKGxldCB3YWxrZXIgPSB0aGlzW0xSVV9MSVNUXS50YWlsOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgICBjb25zdCBwcmV2ID0gd2Fsa2VyLnByZXZcbiAgICAgIGZvckVhY2hTdGVwKHRoaXMsIGZuLCB3YWxrZXIsIHRoaXNwKVxuICAgICAgd2Fsa2VyID0gcHJldlxuICAgIH1cbiAgfVxuXG4gIGZvckVhY2ggKGZuLCB0aGlzcCkge1xuICAgIHRoaXNwID0gdGhpc3AgfHwgdGhpc1xuICAgIGZvciAobGV0IHdhbGtlciA9IHRoaXNbTFJVX0xJU1RdLmhlYWQ7IHdhbGtlciAhPT0gbnVsbDspIHtcbiAgICAgIGNvbnN0IG5leHQgPSB3YWxrZXIubmV4dFxuICAgICAgZm9yRWFjaFN0ZXAodGhpcywgZm4sIHdhbGtlciwgdGhpc3ApXG4gICAgICB3YWxrZXIgPSBuZXh0XG4gICAgfVxuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNbTFJVX0xJU1RdLnRvQXJyYXkoKS5tYXAoayA9PiBrLmtleSlcbiAgfVxuXG4gIHZhbHVlcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNbTFJVX0xJU1RdLnRvQXJyYXkoKS5tYXAoayA9PiBrLnZhbHVlKVxuICB9XG5cbiAgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzW0RJU1BPU0VdICYmXG4gICAgICAgIHRoaXNbTFJVX0xJU1RdICYmXG4gICAgICAgIHRoaXNbTFJVX0xJU1RdLmxlbmd0aCkge1xuICAgICAgdGhpc1tMUlVfTElTVF0uZm9yRWFjaChoaXQgPT4gdGhpc1tESVNQT1NFXShoaXQua2V5LCBoaXQudmFsdWUpKVxuICAgIH1cblxuICAgIHRoaXNbQ0FDSEVdID0gbmV3IE1hcCgpIC8vIGhhc2ggb2YgaXRlbXMgYnkga2V5XG4gICAgdGhpc1tMUlVfTElTVF0gPSBuZXcgWWFsbGlzdCgpIC8vIGxpc3Qgb2YgaXRlbXMgaW4gb3JkZXIgb2YgdXNlIHJlY2VuY3lcbiAgICB0aGlzW0xFTkdUSF0gPSAwIC8vIGxlbmd0aCBvZiBpdGVtcyBpbiB0aGUgbGlzdFxuICB9XG5cbiAgZHVtcCAoKSB7XG4gICAgcmV0dXJuIHRoaXNbTFJVX0xJU1RdLm1hcChoaXQgPT5cbiAgICAgIGlzU3RhbGUodGhpcywgaGl0KSA/IGZhbHNlIDoge1xuICAgICAgICBrOiBoaXQua2V5LFxuICAgICAgICB2OiBoaXQudmFsdWUsXG4gICAgICAgIGU6IGhpdC5ub3cgKyAoaGl0Lm1heEFnZSB8fCAwKVxuICAgICAgfSkudG9BcnJheSgpLmZpbHRlcihoID0+IGgpXG4gIH1cblxuICBkdW1wTHJ1ICgpIHtcbiAgICByZXR1cm4gdGhpc1tMUlVfTElTVF1cbiAgfVxuXG4gIHNldCAoa2V5LCB2YWx1ZSwgbWF4QWdlKSB7XG4gICAgbWF4QWdlID0gbWF4QWdlIHx8IHRoaXNbTUFYX0FHRV1cblxuICAgIGlmIChtYXhBZ2UgJiYgdHlwZW9mIG1heEFnZSAhPT0gJ251bWJlcicpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhBZ2UgbXVzdCBiZSBhIG51bWJlcicpXG5cbiAgICBjb25zdCBub3cgPSBtYXhBZ2UgPyBEYXRlLm5vdygpIDogMFxuICAgIGNvbnN0IGxlbiA9IHRoaXNbTEVOR1RIX0NBTENVTEFUT1JdKHZhbHVlLCBrZXkpXG5cbiAgICBpZiAodGhpc1tDQUNIRV0uaGFzKGtleSkpIHtcbiAgICAgIGlmIChsZW4gPiB0aGlzW01BWF0pIHtcbiAgICAgICAgZGVsKHRoaXMsIHRoaXNbQ0FDSEVdLmdldChrZXkpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXNbQ0FDSEVdLmdldChrZXkpXG4gICAgICBjb25zdCBpdGVtID0gbm9kZS52YWx1ZVxuXG4gICAgICAvLyBkaXNwb3NlIG9mIHRoZSBvbGQgb25lIGJlZm9yZSBvdmVyd3JpdGluZ1xuICAgICAgLy8gc3BsaXQgb3V0IGludG8gMiBpZnMgZm9yIGJldHRlciBjb3ZlcmFnZSB0cmFja2luZ1xuICAgICAgaWYgKHRoaXNbRElTUE9TRV0pIHtcbiAgICAgICAgaWYgKCF0aGlzW05PX0RJU1BPU0VfT05fU0VUXSlcbiAgICAgICAgICB0aGlzW0RJU1BPU0VdKGtleSwgaXRlbS52YWx1ZSlcbiAgICAgIH1cblxuICAgICAgaXRlbS5ub3cgPSBub3dcbiAgICAgIGl0ZW0ubWF4QWdlID0gbWF4QWdlXG4gICAgICBpdGVtLnZhbHVlID0gdmFsdWVcbiAgICAgIHRoaXNbTEVOR1RIXSArPSBsZW4gLSBpdGVtLmxlbmd0aFxuICAgICAgaXRlbS5sZW5ndGggPSBsZW5cbiAgICAgIHRoaXMuZ2V0KGtleSlcbiAgICAgIHRyaW0odGhpcylcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgaGl0ID0gbmV3IEVudHJ5KGtleSwgdmFsdWUsIGxlbiwgbm93LCBtYXhBZ2UpXG5cbiAgICAvLyBvdmVyc2l6ZWQgb2JqZWN0cyBmYWxsIG91dCBvZiBjYWNoZSBhdXRvbWF0aWNhbGx5LlxuICAgIGlmIChoaXQubGVuZ3RoID4gdGhpc1tNQVhdKSB7XG4gICAgICBpZiAodGhpc1tESVNQT1NFXSlcbiAgICAgICAgdGhpc1tESVNQT1NFXShrZXksIHZhbHVlKVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzW0xFTkdUSF0gKz0gaGl0Lmxlbmd0aFxuICAgIHRoaXNbTFJVX0xJU1RdLnVuc2hpZnQoaGl0KVxuICAgIHRoaXNbQ0FDSEVdLnNldChrZXksIHRoaXNbTFJVX0xJU1RdLmhlYWQpXG4gICAgdHJpbSh0aGlzKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBoYXMgKGtleSkge1xuICAgIGlmICghdGhpc1tDQUNIRV0uaGFzKGtleSkpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGhpdCA9IHRoaXNbQ0FDSEVdLmdldChrZXkpLnZhbHVlXG4gICAgcmV0dXJuICFpc1N0YWxlKHRoaXMsIGhpdClcbiAgfVxuXG4gIGdldCAoa2V5KSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBrZXksIHRydWUpXG4gIH1cblxuICBwZWVrIChrZXkpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGtleSwgZmFsc2UpXG4gIH1cblxuICBwb3AgKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzW0xSVV9MSVNUXS50YWlsXG4gICAgaWYgKCFub2RlKVxuICAgICAgcmV0dXJuIG51bGxcblxuICAgIGRlbCh0aGlzLCBub2RlKVxuICAgIHJldHVybiBub2RlLnZhbHVlXG4gIH1cblxuICBkZWwgKGtleSkge1xuICAgIGRlbCh0aGlzLCB0aGlzW0NBQ0hFXS5nZXQoa2V5KSlcbiAgfVxuXG4gIGxvYWQgKGFycikge1xuICAgIC8vIHJlc2V0IHRoZSBjYWNoZVxuICAgIHRoaXMucmVzZXQoKVxuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuICAgIC8vIEEgcHJldmlvdXMgc2VyaWFsaXplZCBjYWNoZSBoYXMgdGhlIG1vc3QgcmVjZW50IGl0ZW1zIGZpcnN0XG4gICAgZm9yIChsZXQgbCA9IGFyci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgY29uc3QgaGl0ID0gYXJyW2xdXG4gICAgICBjb25zdCBleHBpcmVzQXQgPSBoaXQuZSB8fCAwXG4gICAgICBpZiAoZXhwaXJlc0F0ID09PSAwKVxuICAgICAgICAvLyB0aGUgaXRlbSB3YXMgY3JlYXRlZCB3aXRob3V0IGV4cGlyYXRpb24gaW4gYSBub24gYWdlZCBjYWNoZVxuICAgICAgICB0aGlzLnNldChoaXQuaywgaGl0LnYpXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF4QWdlID0gZXhwaXJlc0F0IC0gbm93XG4gICAgICAgIC8vIGRvbnQgYWRkIGFscmVhZHkgZXhwaXJlZCBpdGVtc1xuICAgICAgICBpZiAobWF4QWdlID4gMCkge1xuICAgICAgICAgIHRoaXMuc2V0KGhpdC5rLCBoaXQudiwgbWF4QWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJ1bmUgKCkge1xuICAgIHRoaXNbQ0FDSEVdLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGdldCh0aGlzLCBrZXksIGZhbHNlKSlcbiAgfVxufVxuXG5jb25zdCBnZXQgPSAoc2VsZiwga2V5LCBkb1VzZSkgPT4ge1xuICBjb25zdCBub2RlID0gc2VsZltDQUNIRV0uZ2V0KGtleSlcbiAgaWYgKG5vZGUpIHtcbiAgICBjb25zdCBoaXQgPSBub2RlLnZhbHVlXG4gICAgaWYgKGlzU3RhbGUoc2VsZiwgaGl0KSkge1xuICAgICAgZGVsKHNlbGYsIG5vZGUpXG4gICAgICBpZiAoIXNlbGZbQUxMT1dfU1RBTEVdKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkb1VzZSkge1xuICAgICAgICBpZiAoc2VsZltVUERBVEVfQUdFX09OX0dFVF0pXG4gICAgICAgICAgbm9kZS52YWx1ZS5ub3cgPSBEYXRlLm5vdygpXG4gICAgICAgIHNlbGZbTFJVX0xJU1RdLnVuc2hpZnROb2RlKG5vZGUpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoaXQudmFsdWVcbiAgfVxufVxuXG5jb25zdCBpc1N0YWxlID0gKHNlbGYsIGhpdCkgPT4ge1xuICBpZiAoIWhpdCB8fCAoIWhpdC5tYXhBZ2UgJiYgIXNlbGZbTUFYX0FHRV0pKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IGRpZmYgPSBEYXRlLm5vdygpIC0gaGl0Lm5vd1xuICByZXR1cm4gaGl0Lm1heEFnZSA/IGRpZmYgPiBoaXQubWF4QWdlXG4gICAgOiBzZWxmW01BWF9BR0VdICYmIChkaWZmID4gc2VsZltNQVhfQUdFXSlcbn1cblxuY29uc3QgdHJpbSA9IHNlbGYgPT4ge1xuICBpZiAoc2VsZltMRU5HVEhdID4gc2VsZltNQVhdKSB7XG4gICAgZm9yIChsZXQgd2Fsa2VyID0gc2VsZltMUlVfTElTVF0udGFpbDtcbiAgICAgIHNlbGZbTEVOR1RIXSA+IHNlbGZbTUFYXSAmJiB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgICAvLyBXZSBrbm93IHRoYXQgd2UncmUgYWJvdXQgdG8gZGVsZXRlIHRoaXMgb25lLCBhbmQgYWxzb1xuICAgICAgLy8gd2hhdCB0aGUgbmV4dCBsZWFzdCByZWNlbnRseSB1c2VkIGtleSB3aWxsIGJlLCBzbyBqdXN0XG4gICAgICAvLyBnbyBhaGVhZCBhbmQgc2V0IGl0IG5vdy5cbiAgICAgIGNvbnN0IHByZXYgPSB3YWxrZXIucHJldlxuICAgICAgZGVsKHNlbGYsIHdhbGtlcilcbiAgICAgIHdhbGtlciA9IHByZXZcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVsID0gKHNlbGYsIG5vZGUpID0+IHtcbiAgaWYgKG5vZGUpIHtcbiAgICBjb25zdCBoaXQgPSBub2RlLnZhbHVlXG4gICAgaWYgKHNlbGZbRElTUE9TRV0pXG4gICAgICBzZWxmW0RJU1BPU0VdKGhpdC5rZXksIGhpdC52YWx1ZSlcblxuICAgIHNlbGZbTEVOR1RIXSAtPSBoaXQubGVuZ3RoXG4gICAgc2VsZltDQUNIRV0uZGVsZXRlKGhpdC5rZXkpXG4gICAgc2VsZltMUlVfTElTVF0ucmVtb3ZlTm9kZShub2RlKVxuICB9XG59XG5cbmNsYXNzIEVudHJ5IHtcbiAgY29uc3RydWN0b3IgKGtleSwgdmFsdWUsIGxlbmd0aCwgbm93LCBtYXhBZ2UpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoXG4gICAgdGhpcy5ub3cgPSBub3dcbiAgICB0aGlzLm1heEFnZSA9IG1heEFnZSB8fCAwXG4gIH1cbn1cblxuY29uc3QgZm9yRWFjaFN0ZXAgPSAoc2VsZiwgZm4sIG5vZGUsIHRoaXNwKSA9PiB7XG4gIGxldCBoaXQgPSBub2RlLnZhbHVlXG4gIGlmIChpc1N0YWxlKHNlbGYsIGhpdCkpIHtcbiAgICBkZWwoc2VsZiwgbm9kZSlcbiAgICBpZiAoIXNlbGZbQUxMT1dfU1RBTEVdKVxuICAgICAgaGl0ID0gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKGhpdClcbiAgICBmbi5jYWxsKHRoaXNwLCBoaXQudmFsdWUsIGhpdC5rZXksIHNlbGYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTFJVQ2FjaGVcbiIsICIvLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgUmFuZ2Uge1xuICBjb25zdHJ1Y3RvciAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBpZiAocmFuZ2UgaW5zdGFuY2VvZiBSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgIHJhbmdlLmluY2x1ZGVQcmVyZWxlYXNlID09PSAhIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2VcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UucmF3LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIENvbXBhcmF0b3IpIHtcbiAgICAgIC8vIGp1c3QgcHV0IGl0IGluIHRoZSBzZXQgYW5kIHJldHVyblxuICAgICAgdGhpcy5yYXcgPSByYW5nZS52YWx1ZVxuICAgICAgdGhpcy5zZXQgPSBbW3JhbmdlXV1cbiAgICAgIHRoaXMuZm9ybWF0KClcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlXG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLmpvaW4oJyAnKVxuXG4gICAgLy8gRmlyc3QsIHNwbGl0IG9uIHx8XG4gICAgdGhpcy5zZXQgPSB0aGlzLnJhd1xuICAgICAgLnNwbGl0KCd8fCcpXG4gICAgICAvLyBtYXAgdGhlIHJhbmdlIHRvIGEgMmQgYXJyYXkgb2YgY29tcGFyYXRvcnNcbiAgICAgIC5tYXAociA9PiB0aGlzLnBhcnNlUmFuZ2Uoci50cmltKCkpKVxuICAgICAgLy8gdGhyb3cgb3V0IGFueSBjb21wYXJhdG9yIGxpc3RzIHRoYXQgYXJlIGVtcHR5XG4gICAgICAvLyB0aGlzIGdlbmVyYWxseSBtZWFucyB0aGF0IGl0IHdhcyBub3QgYSB2YWxpZCByYW5nZSwgd2hpY2ggaXMgYWxsb3dlZFxuICAgICAgLy8gaW4gbG9vc2UgbW9kZSwgYnV0IHdpbGwgc3RpbGwgdGhyb3cgaWYgdGhlIFdIT0xFIHJhbmdlIGlzIGludmFsaWQuXG4gICAgICAuZmlsdGVyKGMgPT4gYy5sZW5ndGgpXG5cbiAgICBpZiAoIXRoaXMuc2V0Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBTZW1WZXIgUmFuZ2U6ICR7dGhpcy5yYXd9YClcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSBub3QgdGhlIG51bGwgc2V0LCB0aHJvdyBvdXQgbnVsbCBzZXRzLlxuICAgIGlmICh0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBrZWVwIHRoZSBmaXJzdCBvbmUsIGluIGNhc2UgdGhleSdyZSBhbGwgbnVsbCBzZXRzXG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuc2V0WzBdXG4gICAgICB0aGlzLnNldCA9IHRoaXMuc2V0LmZpbHRlcihjID0+ICFpc051bGxTZXQoY1swXSkpXG4gICAgICBpZiAodGhpcy5zZXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0ID0gW2ZpcnN0XVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYW55IHRoYXQgYXJlICosIHRoZW4gdGhlIHJhbmdlIGlzIGp1c3QgKlxuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICBpZiAoYy5sZW5ndGggPT09IDEgJiYgaXNBbnkoY1swXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gW2NdXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybWF0KClcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgdGhpcy5yYW5nZSA9IHRoaXMuc2V0XG4gICAgICAubWFwKChjb21wcykgPT4gY29tcHMuam9pbignICcpLnRyaW0oKSlcbiAgICAgIC5qb2luKCd8fCcpXG4gICAgICAudHJpbSgpXG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnbHJ1LWNhY2hlJylcbmNvbnN0IGNhY2hlID0gbmV3IExSVSh7IG1heDogMTAwMCB9KVxuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9wYXJzZS1vcHRpb25zJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuL2NvbXBhcmF0b3InKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9kZWJ1ZycpXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuL3NlbXZlcicpXG5jb25zdCB7XG4gIHNhZmVSZTogcmUsXG4gIHQsXG4gIGNvbXBhcmF0b3JUcmltUmVwbGFjZSxcbiAgdGlsZGVUcmltUmVwbGFjZSxcbiAgY2FyZXRUcmltUmVwbGFjZSxcbn0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCB7IEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFLCBGTEFHX0xPT1NFIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuXG5jb25zdCBpc051bGxTZXQgPSBjID0+IGMudmFsdWUgPT09ICc8MC4wLjAtMCdcbmNvbnN0IGlzQW55ID0gYyA9PiBjLnZhbHVlID09PSAnJ1xuXG4vLyB0YWtlIGEgc2V0IG9mIGNvbXBhcmF0b3JzIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGVyZVxuLy8gZXhpc3RzIGEgdmVyc2lvbiB3aGljaCBjYW4gc2F0aXNmeSBpdFxuY29uc3QgaXNTYXRpc2ZpYWJsZSA9IChjb21wYXJhdG9ycywgb3B0aW9ucykgPT4ge1xuICBsZXQgcmVzdWx0ID0gdHJ1ZVxuICBjb25zdCByZW1haW5pbmdDb21wYXJhdG9ycyA9IGNvbXBhcmF0b3JzLnNsaWNlKClcbiAgbGV0IHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcblxuICB3aGlsZSAocmVzdWx0ICYmIHJlbWFpbmluZ0NvbXBhcmF0b3JzLmxlbmd0aCkge1xuICAgIHJlc3VsdCA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLmV2ZXJ5KChvdGhlckNvbXBhcmF0b3IpID0+IHtcbiAgICAgIHJldHVybiB0ZXN0Q29tcGFyYXRvci5pbnRlcnNlY3RzKG90aGVyQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICB9KVxuXG4gICAgdGVzdENvbXBhcmF0b3IgPSByZW1haW5pbmdDb21wYXJhdG9ycy5wb3AoKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBjb21wcmlzZWQgb2YgeHJhbmdlcywgdGlsZGVzLCBzdGFycywgYW5kIGd0bHQncyBhdCB0aGlzIHBvaW50LlxuLy8gYWxyZWFkeSByZXBsYWNlZCB0aGUgaHlwaGVuIHJhbmdlc1xuLy8gdHVybiBpbnRvIGEgc2V0IG9mIEpVU1QgY29tcGFyYXRvcnMuXG5jb25zdCBwYXJzZUNvbXBhcmF0b3IgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygnY29tcCcsIGNvbXAsIG9wdGlvbnMpXG4gIGNvbXAgPSByZXBsYWNlQ2FyZXRzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCdjYXJldCcsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlVGlsZGVzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCd0aWxkZXMnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVhSYW5nZXMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3hyYW5nZScsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlU3RhcnMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3N0YXJzJywgY29tcClcbiAgcmV0dXJuIGNvbXBcbn1cblxuY29uc3QgaXNYID0gaWQgPT4gIWlkIHx8IGlkLnRvTG93ZXJDYXNlKCkgPT09ICd4JyB8fCBpZCA9PT0gJyonXG5cbi8vIH4sIH4+IC0tPiAqIChhbnksIGtpbmRhIHNpbGx5KVxuLy8gfjIsIH4yLngsIH4yLngueCwgfj4yLCB+PjIueCB+PjIueC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyB+Mi4wLCB+Mi4wLngsIH4+Mi4wLCB+PjIuMC54IC0tPiA+PTIuMC4wIDwyLjEuMC0wXG4vLyB+MS4yLCB+MS4yLngsIH4+MS4yLCB+PjEuMi54IC0tPiA+PTEuMi4wIDwxLjMuMC0wXG4vLyB+MS4yLjMsIH4+MS4yLjMgLS0+ID49MS4yLjMgPDEuMy4wLTBcbi8vIH4xLjIuMCwgfj4xLjIuMCAtLT4gPj0xLjIuMCA8MS4zLjAtMFxuLy8gfjAuMC4xIC0tPiA+PTAuMC4xIDwwLjEuMC0wXG5jb25zdCByZXBsYWNlVGlsZGVzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAubWFwKChjKSA9PiByZXBsYWNlVGlsZGUoYywgb3B0aW9ucykpXG4gICAgLmpvaW4oJyAnKVxufVxuXG5jb25zdCByZXBsYWNlVGlsZGUgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCByID0gb3B0aW9ucy5sb29zZSA/IHJlW3QuVElMREVMT09TRV0gOiByZVt0LlRJTERFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd0aWxkZScsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wIDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgIC8vIH4xLjIgPT0gPj0xLjIuMCA8MS4zLjAtMFxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAgPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9IGVsc2UgaWYgKHByKSB7XG4gICAgICBkZWJ1ZygncmVwbGFjZVRpbGRlIHByJywgcHIpXG4gICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIH4xLjIuMyA9PSA+PTEuMi4zIDwxLjMuMC0wXG4gICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfVxuXG4gICAgZGVidWcoJ3RpbGRlIHJldHVybicsIHJldClcbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbi8vIF4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyBeMiwgXjIueCwgXjIueC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyBeMi4wLCBeMi4wLnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIF4xLjIsIF4xLjIueCAtLT4gPj0xLjIuMCA8Mi4wLjAtMFxuLy8gXjEuMi4zIC0tPiA+PTEuMi4zIDwyLjAuMC0wXG4vLyBeMS4yLjAgLS0+ID49MS4yLjAgPDIuMC4wLTBcbi8vIF4wLjAuMSAtLT4gPj0wLjAuMSA8MC4wLjItMFxuLy8gXjAuMS4wIC0tPiA+PTAuMS4wIDwwLjIuMC0wXG5jb25zdCByZXBsYWNlQ2FyZXRzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAubWFwKChjKSA9PiByZXBsYWNlQ2FyZXQoYywgb3B0aW9ucykpXG4gICAgLmpvaW4oJyAnKVxufVxuXG5jb25zdCByZXBsYWNlQ2FyZXQgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygnY2FyZXQnLCBjb21wLCBvcHRpb25zKVxuICBjb25zdCByID0gb3B0aW9ucy5sb29zZSA/IHJlW3QuQ0FSRVRMT09TRV0gOiByZVt0LkNBUkVUXVxuICBjb25zdCB6ID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCdjYXJldCcsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3p9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcikge1xuICAgICAgZGVidWcoJ3JlcGxhY2VDYXJldCBwcicsIHByKVxuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICAgIH0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ25vIHByJylcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgICAgICB9JHt6fSA8JHtNfS4ke219LiR7K3AgKyAxfS0wYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgICAgICB9JHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWJ1ZygnY2FyZXQgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuY29uc3QgcmVwbGFjZVhSYW5nZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVhSYW5nZXMnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVhSYW5nZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2UgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb21wID0gY29tcC50cmltKClcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlhSQU5HRUxPT1NFXSA6IHJlW3QuWFJBTkdFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ3hSYW5nZScsIGNvbXAsIHJldCwgZ3RsdCwgTSwgbSwgcCwgcHIpXG4gICAgY29uc3QgeE0gPSBpc1goTSlcbiAgICBjb25zdCB4bSA9IHhNIHx8IGlzWChtKVxuICAgIGNvbnN0IHhwID0geG0gfHwgaXNYKHApXG4gICAgY29uc3QgYW55WCA9IHhwXG5cbiAgICBpZiAoZ3RsdCA9PT0gJz0nICYmIGFueVgpIHtcbiAgICAgIGd0bHQgPSAnJ1xuICAgIH1cblxuICAgIC8vIGlmIHdlJ3JlIGluY2x1ZGluZyBwcmVyZWxlYXNlcyBpbiB0aGUgbWF0Y2gsIHRoZW4gd2UgbmVlZFxuICAgIC8vIHRvIGZpeCB0aGlzIHRvIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWVcbiAgICBwciA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyAnLTAnIDogJydcblxuICAgIGlmICh4TSkge1xuICAgICAgaWYgKGd0bHQgPT09ICc+JyB8fCBndGx0ID09PSAnPCcpIHtcbiAgICAgICAgLy8gbm90aGluZyBpcyBhbGxvd2VkXG4gICAgICAgIHJldCA9ICc8MC4wLjAtMCdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vdGhpbmcgaXMgZm9yYmlkZGVuXG4gICAgICAgIHJldCA9ICcqJ1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3RsdCAmJiBhbnlYKSB7XG4gICAgICAvLyB3ZSBrbm93IHBhdGNoIGlzIGFuIHgsIGJlY2F1c2Ugd2UgaGF2ZSBhbnkgeCBhdCBhbGwuXG4gICAgICAvLyByZXBsYWNlIFggd2l0aCAwXG4gICAgICBpZiAoeG0pIHtcbiAgICAgICAgbSA9IDBcbiAgICAgIH1cbiAgICAgIHAgPSAwXG5cbiAgICAgIGlmIChndGx0ID09PSAnPicpIHtcbiAgICAgICAgLy8gPjEgPT4gPj0yLjAuMFxuICAgICAgICAvLyA+MS4yID0+ID49MS4zLjBcbiAgICAgICAgZ3RsdCA9ICc+PSdcbiAgICAgICAgaWYgKHhtKSB7XG4gICAgICAgICAgTSA9ICtNICsgMVxuICAgICAgICAgIG0gPSAwXG4gICAgICAgICAgcCA9IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtID0gK20gKyAxXG4gICAgICAgICAgcCA9IDBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChndGx0ID09PSAnPD0nKSB7XG4gICAgICAgIC8vIDw9MC43LnggaXMgYWN0dWFsbHkgPDAuOC4wLCBzaW5jZSBhbnkgMC43Lnggc2hvdWxkXG4gICAgICAgIC8vIHBhc3MuICBTaW1pbGFybHksIDw9Ny54IGlzIGFjdHVhbGx5IDw4LjAuMCwgZXRjLlxuICAgICAgICBndGx0ID0gJzwnXG4gICAgICAgIGlmICh4bSkge1xuICAgICAgICAgIE0gPSArTSArIDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtID0gK20gKyAxXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGd0bHQgPT09ICc8Jykge1xuICAgICAgICBwciA9ICctMCdcbiAgICAgIH1cblxuICAgICAgcmV0ID0gYCR7Z3RsdCArIE19LiR7bX0uJHtwfSR7cHJ9YFxuICAgIH0gZWxzZSBpZiAoeG0pIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHtwcn0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICB9IGVsc2UgaWYgKHhwKSB7XG4gICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7cHJcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9XG5cbiAgICBkZWJ1ZygneFJhbmdlIHJldHVybicsIHJldClcblxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuLy8gQmVjYXVzZSAqIGlzIEFORC1lZCB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgY29tcGFyYXRvcixcbi8vIGFuZCAnJyBtZWFucyBcImFueSB2ZXJzaW9uXCIsIGp1c3QgcmVtb3ZlIHRoZSAqcyBlbnRpcmVseS5cbmNvbnN0IHJlcGxhY2VTdGFycyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdyZXBsYWNlU3RhcnMnLCBjb21wLCBvcHRpb25zKVxuICAvLyBMb29zZW5lc3MgaXMgaWdub3JlZCBoZXJlLiAgc3RhciBpcyBhbHdheXMgYXMgbG9vc2UgYXMgaXQgZ2V0cyFcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UocmVbdC5TVEFSXSwgJycpXG59XG5cbmNvbnN0IHJlcGxhY2VHVEUwID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VHVEUwJywgY29tcCwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UocmVbb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/IHQuR1RFMFBSRSA6IHQuR1RFMF0sICcnKVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBzdHJpbmcucmVwbGFjZShyZVt0LkhZUEhFTlJBTkdFXSlcbi8vIE0sIG0sIHBhdGNoLCBwcmVyZWxlYXNlLCBidWlsZFxuLy8gMS4yIC0gMy40LjUgPT4gPj0xLjIuMCA8PTMuNC41XG4vLyAxLjIuMyAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wIEFueSAzLjQueCB3aWxsIGRvXG4vLyAxLjIgLSAzLjQgPT4gPj0xLjIuMCA8My41LjAtMFxuY29uc3QgaHlwaGVuUmVwbGFjZSA9IGluY1ByID0+ICgkMCxcbiAgZnJvbSwgZk0sIGZtLCBmcCwgZnByLCBmYixcbiAgdG8sIHRNLCB0bSwgdHAsIHRwciwgdGIpID0+IHtcbiAgaWYgKGlzWChmTSkpIHtcbiAgICBmcm9tID0gJydcbiAgfSBlbHNlIGlmIChpc1goZm0pKSB7XG4gICAgZnJvbSA9IGA+PSR7Zk19LjAuMCR7aW5jUHIgPyAnLTAnIDogJyd9YFxuICB9IGVsc2UgaWYgKGlzWChmcCkpIHtcbiAgICBmcm9tID0gYD49JHtmTX0uJHtmbX0uMCR7aW5jUHIgPyAnLTAnIDogJyd9YFxuICB9IGVsc2UgaWYgKGZwcikge1xuICAgIGZyb20gPSBgPj0ke2Zyb219YFxuICB9IGVsc2Uge1xuICAgIGZyb20gPSBgPj0ke2Zyb219JHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH1cblxuICBpZiAoaXNYKHRNKSkge1xuICAgIHRvID0gJydcbiAgfSBlbHNlIGlmIChpc1godG0pKSB7XG4gICAgdG8gPSBgPCR7K3RNICsgMX0uMC4wLTBgXG4gIH0gZWxzZSBpZiAoaXNYKHRwKSkge1xuICAgIHRvID0gYDwke3RNfS4keyt0bSArIDF9LjAtMGBcbiAgfSBlbHNlIGlmICh0cHIpIHtcbiAgICB0byA9IGA8PSR7dE19LiR7dG19LiR7dHB9LSR7dHByfWBcbiAgfSBlbHNlIGlmIChpbmNQcikge1xuICAgIHRvID0gYDwke3RNfS4ke3RtfS4keyt0cCArIDF9LTBgXG4gIH0gZWxzZSB7XG4gICAgdG8gPSBgPD0ke3RvfWBcbiAgfVxuXG4gIHJldHVybiBgJHtmcm9tfSAke3RvfWAudHJpbSgpXG59XG5cbmNvbnN0IHRlc3RTZXQgPSAoc2V0LCB2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFzZXRbaV0udGVzdCh2ZXJzaW9uKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgaWYgKHZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGggJiYgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAvLyBGaW5kIHRoZSBzZXQgb2YgdmVyc2lvbnMgdGhhdCBhcmUgYWxsb3dlZCB0byBoYXZlIHByZXJlbGVhc2VzXG4gICAgLy8gRm9yIGV4YW1wbGUsIF4xLjIuMy1wci4xIGRlc3VnYXJzIHRvID49MS4yLjMtcHIuMSA8Mi4wLjBcbiAgICAvLyBUaGF0IHNob3VsZCBhbGxvdyBgMS4yLjMtcHIuMmAgdG8gcGFzcy5cbiAgICAvLyBIb3dldmVyLCBgMS4yLjQtYWxwaGEubm90cmVhZHlgIHNob3VsZCBOT1QgYmUgYWxsb3dlZCxcbiAgICAvLyBldmVuIHRob3VnaCBpdCdzIHdpdGhpbiB0aGUgcmFuZ2Ugc2V0IGJ5IHRoZSBjb21wYXJhdG9ycy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgICAgZGVidWcoc2V0W2ldLnNlbXZlcilcbiAgICAgIGlmIChzZXRbaV0uc2VtdmVyID09PSBDb21wYXJhdG9yLkFOWSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoc2V0W2ldLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgYWxsb3dlZCA9IHNldFtpXS5zZW12ZXJcbiAgICAgICAgaWYgKGFsbG93ZWQubWFqb3IgPT09IHZlcnNpb24ubWFqb3IgJiZcbiAgICAgICAgICAgIGFsbG93ZWQubWlub3IgPT09IHZlcnNpb24ubWlub3IgJiZcbiAgICAgICAgICAgIGFsbG93ZWQucGF0Y2ggPT09IHZlcnNpb24ucGF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmVyc2lvbiBoYXMgYSAtcHJlLCBidXQgaXQncyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGxpa2UuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuIiwgImNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsICJjb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgcmFuZ2UgPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHJhbmdlLnRlc3QodmVyc2lvbilcbn1cbm1vZHVsZS5leHBvcnRzID0gc2F0aXNmaWVzXG4iLCAiY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcblxuLy8gTW9zdGx5IGp1c3QgZm9yIHRlc3RpbmcgYW5kIGxlZ2FjeSBBUEkgcmVhc29uc1xuY29uc3QgdG9Db21wYXJhdG9ycyA9IChyYW5nZSwgb3B0aW9ucykgPT5cbiAgbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKS5zZXRcbiAgICAubWFwKGNvbXAgPT4gY29tcC5tYXAoYyA9PiBjLnZhbHVlKS5qb2luKCcgJykudHJpbSgpLnNwbGl0KCcgJykpXG5cbm1vZHVsZS5leHBvcnRzID0gdG9Db21wYXJhdG9yc1xuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLCAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IG1pblNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtaW4gPSBudWxsXG4gIGxldCBtaW5TViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1pbiB8fCBtaW5TVi5jb21wYXJlKHYpID09PSAxKSB7XG4gICAgICAgIC8vIGNvbXBhcmUobWluLCB2LCB0cnVlKVxuICAgICAgICBtaW4gPSB2XG4gICAgICAgIG1pblNWID0gbmV3IFNlbVZlcihtaW4sIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gbWluXG59XG5tb2R1bGUuZXhwb3J0cyA9IG1pblNhdGlzZnlpbmdcbiIsICJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3QgZ3QgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZ3QnKVxuXG5jb25zdCBtaW5WZXJzaW9uID0gKHJhbmdlLCBsb29zZSkgPT4ge1xuICByYW5nZSA9IG5ldyBSYW5nZShyYW5nZSwgbG9vc2UpXG5cbiAgbGV0IG1pbnZlciA9IG5ldyBTZW1WZXIoJzAuMC4wJylcbiAgaWYgKHJhbmdlLnRlc3QobWludmVyKSkge1xuICAgIHJldHVybiBtaW52ZXJcbiAgfVxuXG4gIG1pbnZlciA9IG5ldyBTZW1WZXIoJzAuMC4wLTAnKVxuICBpZiAocmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgbWludmVyID0gbnVsbFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNldC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3JzID0gcmFuZ2Uuc2V0W2ldXG5cbiAgICBsZXQgc2V0TWluID0gbnVsbFxuICAgIGNvbXBhcmF0b3JzLmZvckVhY2goKGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIC8vIENsb25lIHRvIGF2b2lkIG1hbmlwdWxhdGluZyB0aGUgY29tcGFyYXRvcidzIHNlbXZlciBvYmplY3QuXG4gICAgICBjb25zdCBjb21wdmVyID0gbmV3IFNlbVZlcihjb21wYXJhdG9yLnNlbXZlci52ZXJzaW9uKVxuICAgICAgc3dpdGNoIChjb21wYXJhdG9yLm9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgIGlmIChjb21wdmVyLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb21wdmVyLnBhdGNoKytcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcHZlci5wcmVyZWxlYXNlLnB1c2goMClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29tcHZlci5yYXcgPSBjb21wdmVyLmZvcm1hdCgpXG4gICAgICAgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICAgICAgY2FzZSAnJzpcbiAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgIGlmICghc2V0TWluIHx8IGd0KGNvbXB2ZXIsIHNldE1pbikpIHtcbiAgICAgICAgICAgIHNldE1pbiA9IGNvbXB2ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhc2UgJzw9JzpcbiAgICAgICAgICAvKiBJZ25vcmUgbWF4aW11bSB2ZXJzaW9ucyAqL1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG9wZXJhdGlvbjogJHtjb21wYXJhdG9yLm9wZXJhdG9yfWApXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoc2V0TWluICYmICghbWludmVyIHx8IGd0KG1pbnZlciwgc2V0TWluKSkpIHtcbiAgICAgIG1pbnZlciA9IHNldE1pblxuICAgIH1cbiAgfVxuXG4gIGlmIChtaW52ZXIgJiYgcmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbm1vZHVsZS5leHBvcnRzID0gbWluVmVyc2lvblxuIiwgImNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBzYXRpc2ZpZXMgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2d0JylcbmNvbnN0IGx0ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9sdGUnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2d0ZScpXG5cbmNvbnN0IG91dHNpZGUgPSAodmVyc2lvbiwgcmFuZ2UsIGhpbG8sIG9wdGlvbnMpID0+IHtcbiAgdmVyc2lvbiA9IG5ldyBTZW1WZXIodmVyc2lvbiwgb3B0aW9ucylcbiAgcmFuZ2UgPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG5cbiAgbGV0IGd0Zm4sIGx0ZWZuLCBsdGZuLCBjb21wLCBlY29tcFxuICBzd2l0Y2ggKGhpbG8pIHtcbiAgICBjYXNlICc+JzpcbiAgICAgIGd0Zm4gPSBndFxuICAgICAgbHRlZm4gPSBsdGVcbiAgICAgIGx0Zm4gPSBsdFxuICAgICAgY29tcCA9ICc+J1xuICAgICAgZWNvbXAgPSAnPj0nXG4gICAgICBicmVha1xuICAgIGNhc2UgJzwnOlxuICAgICAgZ3RmbiA9IGx0XG4gICAgICBsdGVmbiA9IGd0ZVxuICAgICAgbHRmbiA9IGd0XG4gICAgICBjb21wID0gJzwnXG4gICAgICBlY29tcCA9ICc8PSdcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3QgcHJvdmlkZSBhIGhpbG8gdmFsIG9mIFwiPFwiIG9yIFwiPlwiJylcbiAgfVxuXG4gIC8vIElmIGl0IHNhdGlzZmllcyB0aGUgcmFuZ2UgaXQgaXMgbm90IG91dHNpZGVcbiAgaWYgKHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIEZyb20gbm93IG9uLCB2YXJpYWJsZSB0ZXJtcyBhcmUgYXMgaWYgd2UncmUgaW4gXCJndHJcIiBtb2RlLlxuICAvLyBidXQgbm90ZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgZmxpcHBlZCBmb3IgdGhlIFwibHRyXCIgZnVuY3Rpb24uXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZS5zZXQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb21wYXJhdG9ycyA9IHJhbmdlLnNldFtpXVxuXG4gICAgbGV0IGhpZ2ggPSBudWxsXG4gICAgbGV0IGxvdyA9IG51bGxcblxuICAgIGNvbXBhcmF0b3JzLmZvckVhY2goKGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGlmIChjb21wYXJhdG9yLnNlbXZlciA9PT0gQU5ZKSB7XG4gICAgICAgIGNvbXBhcmF0b3IgPSBuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXG4gICAgICB9XG4gICAgICBoaWdoID0gaGlnaCB8fCBjb21wYXJhdG9yXG4gICAgICBsb3cgPSBsb3cgfHwgY29tcGFyYXRvclxuICAgICAgaWYgKGd0Zm4oY29tcGFyYXRvci5zZW12ZXIsIGhpZ2guc2VtdmVyLCBvcHRpb25zKSkge1xuICAgICAgICBoaWdoID0gY29tcGFyYXRvclxuICAgICAgfSBlbHNlIGlmIChsdGZuKGNvbXBhcmF0b3Iuc2VtdmVyLCBsb3cuc2VtdmVyLCBvcHRpb25zKSkge1xuICAgICAgICBsb3cgPSBjb21wYXJhdG9yXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIElmIHRoZSBlZGdlIHZlcnNpb24gY29tcGFyYXRvciBoYXMgYSBvcGVyYXRvciB0aGVuIG91ciB2ZXJzaW9uXG4gICAgLy8gaXNuJ3Qgb3V0c2lkZSBpdFxuICAgIGlmIChoaWdoLm9wZXJhdG9yID09PSBjb21wIHx8IGhpZ2gub3BlcmF0b3IgPT09IGVjb21wKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbG93ZXN0IHZlcnNpb24gY29tcGFyYXRvciBoYXMgYW4gb3BlcmF0b3IgYW5kIG91ciB2ZXJzaW9uXG4gICAgLy8gaXMgbGVzcyB0aGFuIGl0IHRoZW4gaXQgaXNuJ3QgaGlnaGVyIHRoYW4gdGhlIHJhbmdlXG4gICAgaWYgKCghbG93Lm9wZXJhdG9yIHx8IGxvdy5vcGVyYXRvciA9PT0gY29tcCkgJiZcbiAgICAgICAgbHRlZm4odmVyc2lvbiwgbG93LnNlbXZlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAobG93Lm9wZXJhdG9yID09PSBlY29tcCAmJiBsdGZuKHZlcnNpb24sIGxvdy5zZW12ZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdXRzaWRlXG4iLCAiLy8gRGV0ZXJtaW5lIGlmIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIGFsbCB0aGUgdmVyc2lvbnMgcG9zc2libGUgaW4gdGhlIHJhbmdlLlxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG5jb25zdCBndHIgPSAodmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpID0+IG91dHNpZGUodmVyc2lvbiwgcmFuZ2UsICc+Jywgb3B0aW9ucylcbm1vZHVsZS5leHBvcnRzID0gZ3RyXG4iLCAiY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsICJjb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3QgaW50ZXJzZWN0cyA9IChyMSwgcjIsIG9wdGlvbnMpID0+IHtcbiAgcjEgPSBuZXcgUmFuZ2UocjEsIG9wdGlvbnMpXG4gIHIyID0gbmV3IFJhbmdlKHIyLCBvcHRpb25zKVxuICByZXR1cm4gcjEuaW50ZXJzZWN0cyhyMiwgb3B0aW9ucylcbn1cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJzZWN0c1xuIiwgIi8vIGdpdmVuIGEgc2V0IG9mIHZlcnNpb25zIGFuZCBhIHJhbmdlLCBjcmVhdGUgYSBcInNpbXBsaWZpZWRcIiByYW5nZVxuLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2FtZSB2ZXJzaW9ucyB0aGF0IHRoZSBvcmlnaW5hbCByYW5nZSBkb2VzXG4vLyBJZiB0aGUgb3JpZ2luYWwgcmFuZ2UgaXMgc2hvcnRlciB0aGFuIHRoZSBzaW1wbGlmaWVkIG9uZSwgcmV0dXJuIHRoYXQuXG5jb25zdCBzYXRpc2ZpZXMgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvc2F0aXNmaWVzLmpzJylcbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY29tcGFyZS5qcycpXG5tb2R1bGUuZXhwb3J0cyA9ICh2ZXJzaW9ucywgcmFuZ2UsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgc2V0ID0gW11cbiAgbGV0IGZpcnN0ID0gbnVsbFxuICBsZXQgcHJldiA9IG51bGxcbiAgY29uc3QgdiA9IHZlcnNpb25zLnNvcnQoKGEsIGIpID0+IGNvbXBhcmUoYSwgYiwgb3B0aW9ucykpXG4gIGZvciAoY29uc3QgdmVyc2lvbiBvZiB2KSB7XG4gICAgY29uc3QgaW5jbHVkZWQgPSBzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgaWYgKGluY2x1ZGVkKSB7XG4gICAgICBwcmV2ID0gdmVyc2lvblxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICBmaXJzdCA9IHZlcnNpb25cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgc2V0LnB1c2goW2ZpcnN0LCBwcmV2XSlcbiAgICAgIH1cbiAgICAgIHByZXYgPSBudWxsXG4gICAgICBmaXJzdCA9IG51bGxcbiAgICB9XG4gIH1cbiAgaWYgKGZpcnN0KSB7XG4gICAgc2V0LnB1c2goW2ZpcnN0LCBudWxsXSlcbiAgfVxuXG4gIGNvbnN0IHJhbmdlcyA9IFtdXG4gIGZvciAoY29uc3QgW21pbiwgbWF4XSBvZiBzZXQpIHtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgIHJhbmdlcy5wdXNoKG1pbilcbiAgICB9IGVsc2UgaWYgKCFtYXggJiYgbWluID09PSB2WzBdKSB7XG4gICAgICByYW5nZXMucHVzaCgnKicpXG4gICAgfSBlbHNlIGlmICghbWF4KSB7XG4gICAgICByYW5nZXMucHVzaChgPj0ke21pbn1gKVxuICAgIH0gZWxzZSBpZiAobWluID09PSB2WzBdKSB7XG4gICAgICByYW5nZXMucHVzaChgPD0ke21heH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZXMucHVzaChgJHttaW59IC0gJHttYXh9YClcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2ltcGxpZmllZCA9IHJhbmdlcy5qb2luKCcgfHwgJylcbiAgY29uc3Qgb3JpZ2luYWwgPSB0eXBlb2YgcmFuZ2UucmF3ID09PSAnc3RyaW5nJyA/IHJhbmdlLnJhdyA6IFN0cmluZyhyYW5nZSlcbiAgcmV0dXJuIHNpbXBsaWZpZWQubGVuZ3RoIDwgb3JpZ2luYWwubGVuZ3RoID8gc2ltcGxpZmllZCA6IHJhbmdlXG59XG4iLCAiY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1Quc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIXNhdGlzZmllcyhndC5zZW12ZXIsIFN0cmluZyhjKSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsdCkge1xuICAgICAgaWYgKG5lZWREb21MVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21MVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21MVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21MVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21MVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgICBsb3dlciA9IGxvd2VyTFQobHQsIGMsIG9wdGlvbnMpXG4gICAgICAgIGlmIChsb3dlciA9PT0gYyAmJiBsb3dlciAhPT0gbHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsdC5vcGVyYXRvciA9PT0gJzw9JyAmJiAhc2F0aXNmaWVzKGx0LnNlbXZlciwgU3RyaW5nKGMpLCBvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjLm9wZXJhdG9yICYmIChsdCB8fCBndCkgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZXJlIHdhcyBhIDwgb3IgPiwgYW5kIG5vdGhpbmcgaW4gdGhlIGRvbSwgdGhlbiBtdXN0IGJlIGZhbHNlXG4gIC8vIFVOTEVTUyBpdCB3YXMgbGltaXRlZCBieSBhbm90aGVyIHJhbmdlIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uXG4gIC8vIEVnLCA+MS4wLjAgPDEuMC4xIGlzIHN0aWxsIGEgc3Vic2V0IG9mIDwyLjAuMFxuICBpZiAoZ3QgJiYgaGFzRG9tTFQgJiYgIWx0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobHQgJiYgaGFzRG9tR1QgJiYgIWd0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyB3ZSBuZWVkZWQgYSBwcmVyZWxlYXNlIHJhbmdlIGluIGEgc3BlY2lmaWMgdHVwbGUsIGJ1dCBkaWRuJ3QgZ2V0IG9uZVxuICAvLyB0aGVuIHRoaXMgaXNuJ3QgYSBzdWJzZXQuICBlZyA+PTEuMi4zLXByZSBpcyBub3QgYSBzdWJzZXQgb2YgPj0xLjAuMCxcbiAgLy8gYmVjYXVzZSBpdCBpbmNsdWRlcyBwcmVyZWxlYXNlcyBpbiB0aGUgMS4yLjMgdHVwbGVcbiAgaWYgKG5lZWREb21HVFByZSB8fCBuZWVkRG9tTFRQcmUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vID49MS4yLjMgaXMgbG93ZXIgdGhhbiA+MS4yLjNcbmNvbnN0IGhpZ2hlckdUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wID4gMCA/IGFcbiAgICA6IGNvbXAgPCAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJz4nICYmIGEub3BlcmF0b3IgPT09ICc+PScgPyBiXG4gICAgOiBhXG59XG5cbi8vIDw9MS4yLjMgaXMgaGlnaGVyIHRoYW4gPDEuMi4zXG5jb25zdCBsb3dlckxUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wIDwgMCA/IGFcbiAgICA6IGNvbXAgPiAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJzwnICYmIGEub3BlcmF0b3IgPT09ICc8PScgPyBiXG4gICAgOiBhXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3Vic2V0XG4iLCAiLy8ganVzdCBwcmUtbG9hZCBhbGwgdGhlIHN0dWZmIHRoYXQgaW5kZXguanMgbGF6aWx5IGV4cG9ydHNcbmNvbnN0IGludGVybmFsUmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3JlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgaWRlbnRpZmllcnMgPSByZXF1aXJlKCcuL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcGFyc2UnKVxuY29uc3QgdmFsaWQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy92YWxpZCcpXG5jb25zdCBjbGVhbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NsZWFuJylcbmNvbnN0IGluYyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2luYycpXG5jb25zdCBkaWZmID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZGlmZicpXG5jb25zdCBtYWpvciA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL21ham9yJylcbmNvbnN0IG1pbm9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWlub3InKVxuY29uc3QgcGF0Y2ggPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXRjaCcpXG5jb25zdCBwcmVyZWxlYXNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcHJlcmVsZWFzZScpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jjb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvbXBhcmUtbG9vc2UnKVxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc29ydCcpXG5jb25zdCByc29ydCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jzb3J0JylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBlcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL25lcScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndGUnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGNtcCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NtcCcpXG5jb25zdCBjb2VyY2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb2VyY2UnKVxuY29uc3QgQ29tcGFyYXRvciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9jb21wYXJhdG9yJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3NhdGlzZmllcycpXG5jb25zdCB0b0NvbXBhcmF0b3JzID0gcmVxdWlyZSgnLi9yYW5nZXMvdG8tY29tcGFyYXRvcnMnKVxuY29uc3QgbWF4U2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21heC1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblNhdGlzZnlpbmcgPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tc2F0aXNmeWluZycpXG5jb25zdCBtaW5WZXJzaW9uID0gcmVxdWlyZSgnLi9yYW5nZXMvbWluLXZlcnNpb24nKVxuY29uc3QgdmFsaWRSYW5nZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL3ZhbGlkJylcbmNvbnN0IG91dHNpZGUgPSByZXF1aXJlKCcuL3Jhbmdlcy9vdXRzaWRlJylcbmNvbnN0IGd0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2d0cicpXG5jb25zdCBsdHIgPSByZXF1aXJlKCcuL3Jhbmdlcy9sdHInKVxuY29uc3QgaW50ZXJzZWN0cyA9IHJlcXVpcmUoJy4vcmFuZ2VzL2ludGVyc2VjdHMnKVxuY29uc3Qgc2ltcGxpZnlSYW5nZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL3NpbXBsaWZ5JylcbmNvbnN0IHN1YnNldCA9IHJlcXVpcmUoJy4vcmFuZ2VzL3N1YnNldCcpXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2UsXG4gIHZhbGlkLFxuICBjbGVhbixcbiAgaW5jLFxuICBkaWZmLFxuICBtYWpvcixcbiAgbWlub3IsXG4gIHBhdGNoLFxuICBwcmVyZWxlYXNlLFxuICBjb21wYXJlLFxuICByY29tcGFyZSxcbiAgY29tcGFyZUxvb3NlLFxuICBjb21wYXJlQnVpbGQsXG4gIHNvcnQsXG4gIHJzb3J0LFxuICBndCxcbiAgbHQsXG4gIGVxLFxuICBuZXEsXG4gIGd0ZSxcbiAgbHRlLFxuICBjbXAsXG4gIGNvZXJjZSxcbiAgQ29tcGFyYXRvcixcbiAgUmFuZ2UsXG4gIHNhdGlzZmllcyxcbiAgdG9Db21wYXJhdG9ycyxcbiAgbWF4U2F0aXNmeWluZyxcbiAgbWluU2F0aXNmeWluZyxcbiAgbWluVmVyc2lvbixcbiAgdmFsaWRSYW5nZSxcbiAgb3V0c2lkZSxcbiAgZ3RyLFxuICBsdHIsXG4gIGludGVyc2VjdHMsXG4gIHNpbXBsaWZ5UmFuZ2UsXG4gIHN1YnNldCxcbiAgU2VtVmVyLFxuICByZTogaW50ZXJuYWxSZS5yZSxcbiAgc3JjOiBpbnRlcm5hbFJlLnNyYyxcbiAgdG9rZW5zOiBpbnRlcm5hbFJlLnQsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT046IGNvbnN0YW50cy5TRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBSRUxFQVNFX1RZUEVTOiBjb25zdGFudHMuUkVMRUFTRV9UWVBFUyxcbiAgY29tcGFyZUlkZW50aWZpZXJzOiBpZGVudGlmaWVycy5jb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLnJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpXG5cbmNvbnN0IHBlcm1hbmVudE1vZHVsZXMgPSBbXG4gICdhc3NlcnQnLFxuICAnYnVmZmVyJyxcbiAgJ2NoaWxkX3Byb2Nlc3MnLFxuICAnY2x1c3RlcicsXG4gICdjb25zb2xlJyxcbiAgJ2NvbnN0YW50cycsXG4gICdjcnlwdG8nLFxuICAnZGdyYW0nLFxuICAnZG5zJyxcbiAgJ2RvbWFpbicsXG4gICdldmVudHMnLFxuICAnZnMnLFxuICAnaHR0cCcsXG4gICdodHRwcycsXG4gICdtb2R1bGUnLFxuICAnbmV0JyxcbiAgJ29zJyxcbiAgJ3BhdGgnLFxuICAncHVueWNvZGUnLFxuICAncXVlcnlzdHJpbmcnLFxuICAncmVhZGxpbmUnLFxuICAncmVwbCcsXG4gICdzdHJlYW0nLFxuICAnc3RyaW5nX2RlY29kZXInLFxuICAnc3lzJyxcbiAgJ3RpbWVycycsXG4gICd0bHMnLFxuICAndHR5JyxcbiAgJ3VybCcsXG4gICd1dGlsJyxcbiAgJ3ZtJyxcbiAgJ3psaWInXG5dXG5cbmNvbnN0IHZlcnNpb25Mb2NrZWRNb2R1bGVzID0ge1xuICBmcmVlbGlzdDogJzw2LjAuMCcsXG4gIHY4OiAnPj0xLjAuMCcsXG4gIHByb2Nlc3M6ICc+PTEuMS4wJyxcbiAgaW5zcGVjdG9yOiAnPj04LjAuMCcsXG4gIGFzeW5jX2hvb2tzOiAnPj04LjEuMCcsXG4gIGh0dHAyOiAnPj04LjQuMCcsXG4gIHBlcmZfaG9va3M6ICc+PTguNS4wJyxcbiAgdHJhY2VfZXZlbnRzOiAnPj0xMC4wLjAnLFxuICB3b3JrZXJfdGhyZWFkczogJz49MTIuMC4wJyxcbiAgJ25vZGU6dGVzdCc6ICc+PTE4LjAuMCdcbn1cblxuY29uc3QgZXhwZXJpbWVudGFsTW9kdWxlcyA9IHtcbiAgd29ya2VyX3RocmVhZHM6ICc+PTEwLjUuMCcsXG4gIHdhc2k6ICc+PTEyLjE2LjAnLFxuICBkaWFnbm9zdGljc19jaGFubmVsOiAnXjE0LjE3LjAgfHwgPj0xNS4xLjAnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHsgdmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbiwgZXhwZXJpbWVudGFsID0gZmFsc2UgfSA9IHt9KSA9PiB7XG4gIGNvbnN0IGJ1aWx0aW5zID0gWy4uLnBlcm1hbmVudE1vZHVsZXNdXG5cbiAgZm9yIChjb25zdCBbbmFtZSwgc2VtdmVyUmFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHZlcnNpb25Mb2NrZWRNb2R1bGVzKSkge1xuICAgIGlmICh2ZXJzaW9uID09PSAnKicgfHwgc2VtdmVyLnNhdGlzZmllcyh2ZXJzaW9uLCBzZW12ZXJSYW5nZSkpIHtcbiAgICAgIGJ1aWx0aW5zLnB1c2gobmFtZSlcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwZXJpbWVudGFsKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgc2VtdmVyUmFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVyaW1lbnRhbE1vZHVsZXMpKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFidWlsdGlucy5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgICAodmVyc2lvbiA9PT0gJyonIHx8IHNlbXZlci5zYXRpc2ZpZXModmVyc2lvbiwgc2VtdmVyUmFuZ2UpKVxuICAgICAgKSB7XG4gICAgICAgIGJ1aWx0aW5zLnB1c2gobmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVpbHRpbnNcbn1cbiIsICIndXNlIHN0cmljdCdcblxudmFyIHNjb3BlZFBhY2thZ2VQYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXig/OkAoW14vXSs/KVsvXSk/KFteL10rPykkJylcbnZhciBidWlsdGlucyA9IHJlcXVpcmUoJ2J1aWx0aW5zJylcbnZhciBibGFja2xpc3QgPSBbXG4gICdub2RlX21vZHVsZXMnLFxuICAnZmF2aWNvbi5pY28nLFxuXVxuXG5mdW5jdGlvbiB2YWxpZGF0ZSAobmFtZSkge1xuICB2YXIgd2FybmluZ3MgPSBbXVxuICB2YXIgZXJyb3JzID0gW11cblxuICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgIGVycm9ycy5wdXNoKCduYW1lIGNhbm5vdCBiZSBudWxsJylcbiAgICByZXR1cm4gZG9uZSh3YXJuaW5ncywgZXJyb3JzKVxuICB9XG5cbiAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9ycy5wdXNoKCduYW1lIGNhbm5vdCBiZSB1bmRlZmluZWQnKVxuICAgIHJldHVybiBkb25lKHdhcm5pbmdzLCBlcnJvcnMpXG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgZXJyb3JzLnB1c2goJ25hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgcmV0dXJuIGRvbmUod2FybmluZ3MsIGVycm9ycylcbiAgfVxuXG4gIGlmICghbmFtZS5sZW5ndGgpIHtcbiAgICBlcnJvcnMucHVzaCgnbmFtZSBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpXG4gIH1cblxuICBpZiAobmFtZS5tYXRjaCgvXlxcLi8pKSB7XG4gICAgZXJyb3JzLnB1c2goJ25hbWUgY2Fubm90IHN0YXJ0IHdpdGggYSBwZXJpb2QnKVxuICB9XG5cbiAgaWYgKG5hbWUubWF0Y2goL15fLykpIHtcbiAgICBlcnJvcnMucHVzaCgnbmFtZSBjYW5ub3Qgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlJylcbiAgfVxuXG4gIGlmIChuYW1lLnRyaW0oKSAhPT0gbmFtZSkge1xuICAgIGVycm9ycy5wdXNoKCduYW1lIGNhbm5vdCBjb250YWluIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzJylcbiAgfVxuXG4gIC8vIE5vIGZ1bm55IGJ1c2luZXNzXG4gIGJsYWNrbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChibGFja2xpc3RlZE5hbWUpIHtcbiAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpID09PSBibGFja2xpc3RlZE5hbWUpIHtcbiAgICAgIGVycm9ycy5wdXNoKGJsYWNrbGlzdGVkTmFtZSArICcgaXMgYSBibGFja2xpc3RlZCBuYW1lJylcbiAgICB9XG4gIH0pXG5cbiAgLy8gR2VuZXJhdGUgd2FybmluZ3MgZm9yIHN0dWZmIHRoYXQgdXNlZCB0byBiZSBhbGxvd2VkXG5cbiAgLy8gY29yZSBtb2R1bGUgbmFtZXMgbGlrZSBodHRwLCBldmVudHMsIHV0aWwsIGV0Y1xuICBidWlsdGlucyh7IHZlcnNpb246ICcqJyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChidWlsdGluKSB7XG4gICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYnVpbHRpbikge1xuICAgICAgd2FybmluZ3MucHVzaChidWlsdGluICsgJyBpcyBhIGNvcmUgbW9kdWxlIG5hbWUnKVxuICAgIH1cbiAgfSlcblxuICBpZiAobmFtZS5sZW5ndGggPiAyMTQpIHtcbiAgICB3YXJuaW5ncy5wdXNoKCduYW1lIGNhbiBubyBsb25nZXIgY29udGFpbiBtb3JlIHRoYW4gMjE0IGNoYXJhY3RlcnMnKVxuICB9XG5cbiAgLy8gbUl4ZUQgQ2FTZSBuQU1Fc1xuICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpICE9PSBuYW1lKSB7XG4gICAgd2FybmluZ3MucHVzaCgnbmFtZSBjYW4gbm8gbG9uZ2VyIGNvbnRhaW4gY2FwaXRhbCBsZXR0ZXJzJylcbiAgfVxuXG4gIGlmICgvW34nISgpKl0vLnRlc3QobmFtZS5zcGxpdCgnLycpLnNsaWNlKC0xKVswXSkpIHtcbiAgICB3YXJuaW5ncy5wdXNoKCduYW1lIGNhbiBubyBsb25nZXIgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgKFwiflxcJyEoKSpcIiknKVxuICB9XG5cbiAgaWYgKGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSAhPT0gbmFtZSkge1xuICAgIC8vIE1heWJlIGl0J3MgYSBzY29wZWQgcGFja2FnZSBuYW1lLCBsaWtlIEB1c2VyL3BhY2thZ2VcbiAgICB2YXIgbmFtZU1hdGNoID0gbmFtZS5tYXRjaChzY29wZWRQYWNrYWdlUGF0dGVybilcbiAgICBpZiAobmFtZU1hdGNoKSB7XG4gICAgICB2YXIgdXNlciA9IG5hbWVNYXRjaFsxXVxuICAgICAgdmFyIHBrZyA9IG5hbWVNYXRjaFsyXVxuICAgICAgaWYgKGVuY29kZVVSSUNvbXBvbmVudCh1c2VyKSA9PT0gdXNlciAmJiBlbmNvZGVVUklDb21wb25lbnQocGtnKSA9PT0gcGtnKSB7XG4gICAgICAgIHJldHVybiBkb25lKHdhcm5pbmdzLCBlcnJvcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZXJyb3JzLnB1c2goJ25hbWUgY2FuIG9ubHkgY29udGFpbiBVUkwtZnJpZW5kbHkgY2hhcmFjdGVycycpXG4gIH1cblxuICByZXR1cm4gZG9uZSh3YXJuaW5ncywgZXJyb3JzKVxufVxuXG52YXIgZG9uZSA9IGZ1bmN0aW9uICh3YXJuaW5ncywgZXJyb3JzKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgdmFsaWRGb3JOZXdQYWNrYWdlczogZXJyb3JzLmxlbmd0aCA9PT0gMCAmJiB3YXJuaW5ncy5sZW5ndGggPT09IDAsXG4gICAgdmFsaWRGb3JPbGRQYWNrYWdlczogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICB3YXJuaW5nczogd2FybmluZ3MsXG4gICAgZXJyb3JzOiBlcnJvcnMsXG4gIH1cbiAgaWYgKCFyZXN1bHQud2FybmluZ3MubGVuZ3RoKSB7XG4gICAgZGVsZXRlIHJlc3VsdC53YXJuaW5nc1xuICB9XG4gIGlmICghcmVzdWx0LmVycm9ycy5sZW5ndGgpIHtcbiAgICBkZWxldGUgcmVzdWx0LmVycm9yc1xuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWxpZGF0ZVxuIiwgImV4cG9ydCB7IGEgYXMgY29uc29sYSwgYyBhcyBjcmVhdGVDb25zb2xhLCBhIGFzIGRlZmF1bHQgfSBmcm9tICcuL3NoYXJlZC9jb25zb2xhLjM2YzAwMzRmLm1qcyc7XG5leHBvcnQgeyBDb25zb2xhLCBMb2dMZXZlbHMsIExvZ1R5cGVzIH0gZnJvbSAnLi9jb3JlLm1qcyc7XG5pbXBvcnQgJy4vc2hhcmVkL2NvbnNvbGEuMDZhZDhhNjQubWpzJztcbmltcG9ydCAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCAnLi91dGlscy5tanMnO1xuaW1wb3J0ICdub2RlOnR0eSc7XG5pbXBvcnQgJ25vZGU6dXRpbCc7XG5pbXBvcnQgJ25vZGU6cGF0aCc7XG4iLCAiaW1wb3J0IGNvbnNvbGEgZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICdjb25zb2xhL3V0aWxzJztcblxuZnVuY3Rpb24gdG9BcnJheSh2YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmV0dXJuIHZhbCA9PT0gdm9pZCAwID8gW10gOiBbdmFsXTtcbn1cbmZ1bmN0aW9uIGZvcm1hdExpbmVDb2x1bW5zKGxpbmVzLCBsaW5lUHJlZml4ID0gXCJcIikge1xuICBjb25zdCBtYXhMZW5naCA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBmb3IgKGNvbnN0IFtpLCBlbGVtZW50XSBvZiBsaW5lLmVudHJpZXMoKSkge1xuICAgICAgbWF4TGVuZ2hbaV0gPSBNYXRoLm1heChtYXhMZW5naFtpXSB8fCAwLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5lcy5tYXAoXG4gICAgKGwpID0+IGwubWFwKFxuICAgICAgKGMsIGkpID0+IGxpbmVQcmVmaXggKyBjW2kgPT09IDAgPyBcInBhZFN0YXJ0XCIgOiBcInBhZEVuZFwiXShtYXhMZW5naFtpXSlcbiAgICApLmpvaW4oXCIgIFwiKVxuICApLmpvaW4oXCJcXG5cIik7XG59XG5mdW5jdGlvbiByZXNvbHZlVmFsdWUoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gXCJmdW5jdGlvblwiID8gaW5wdXQoKSA6IGlucHV0O1xufVxuY2xhc3MgQ0xJRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMubmFtZSA9IFwiQ0xJRXJyb3JcIjtcbiAgfVxufVxuXG5jb25zdCBOVU1CRVJfQ0hBUl9SRSA9IC9cXGQvO1xuY29uc3QgU1RSX1NQTElUVEVSUyA9IFtcIi1cIiwgXCJfXCIsIFwiL1wiLCBcIi5cIl07XG5mdW5jdGlvbiBpc1VwcGVyY2FzZShjaGFyID0gXCJcIikge1xuICBpZiAoTlVNQkVSX0NIQVJfUkUudGVzdChjaGFyKSkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGNoYXIgIT09IGNoYXIudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHNwbGl0QnlDYXNlKHN0ciwgc2VwYXJhdG9ycykge1xuICBjb25zdCBzcGxpdHRlcnMgPSBzZXBhcmF0b3JzID8/IFNUUl9TUExJVFRFUlM7XG4gIGNvbnN0IHBhcnRzID0gW107XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFydHM7XG4gIH1cbiAgbGV0IGJ1ZmYgPSBcIlwiO1xuICBsZXQgcHJldmlvdXNVcHBlcjtcbiAgbGV0IHByZXZpb3VzU3BsaXR0ZXI7XG4gIGZvciAoY29uc3QgY2hhciBvZiBzdHIpIHtcbiAgICBjb25zdCBpc1NwbGl0dGVyID0gc3BsaXR0ZXJzLmluY2x1ZGVzKGNoYXIpO1xuICAgIGlmIChpc1NwbGl0dGVyID09PSB0cnVlKSB7XG4gICAgICBwYXJ0cy5wdXNoKGJ1ZmYpO1xuICAgICAgYnVmZiA9IFwiXCI7XG4gICAgICBwcmV2aW91c1VwcGVyID0gdm9pZCAwO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzVXBwZXIgPSBpc1VwcGVyY2FzZShjaGFyKTtcbiAgICBpZiAocHJldmlvdXNTcGxpdHRlciA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChwcmV2aW91c1VwcGVyID09PSBmYWxzZSAmJiBpc1VwcGVyID09PSB0cnVlKSB7XG4gICAgICAgIHBhcnRzLnB1c2goYnVmZik7XG4gICAgICAgIGJ1ZmYgPSBjaGFyO1xuICAgICAgICBwcmV2aW91c1VwcGVyID0gaXNVcHBlcjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocHJldmlvdXNVcHBlciA9PT0gdHJ1ZSAmJiBpc1VwcGVyID09PSBmYWxzZSAmJiBidWZmLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdENoYXIgPSBidWZmLmF0KC0xKTtcbiAgICAgICAgcGFydHMucHVzaChidWZmLnNsaWNlKDAsIE1hdGgubWF4KDAsIGJ1ZmYubGVuZ3RoIC0gMSkpKTtcbiAgICAgICAgYnVmZiA9IGxhc3RDaGFyICsgY2hhcjtcbiAgICAgICAgcHJldmlvdXNVcHBlciA9IGlzVXBwZXI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBidWZmICs9IGNoYXI7XG4gICAgcHJldmlvdXNVcHBlciA9IGlzVXBwZXI7XG4gICAgcHJldmlvdXNTcGxpdHRlciA9IGlzU3BsaXR0ZXI7XG4gIH1cbiAgcGFydHMucHVzaChidWZmKTtcbiAgcmV0dXJuIHBhcnRzO1xufVxuZnVuY3Rpb24gdXBwZXJGaXJzdChzdHIpIHtcbiAgcmV0dXJuIHN0ciA/IHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpIDogXCJcIjtcbn1cbmZ1bmN0aW9uIGxvd2VyRmlyc3Qoc3RyKSB7XG4gIHJldHVybiBzdHIgPyBzdHJbMF0udG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSA6IFwiXCI7XG59XG5mdW5jdGlvbiBwYXNjYWxDYXNlKHN0ciwgb3B0cykge1xuICByZXR1cm4gc3RyID8gKEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ciA6IHNwbGl0QnlDYXNlKHN0cikpLm1hcCgocCkgPT4gdXBwZXJGaXJzdChvcHRzPy5ub3JtYWxpemUgPyBwLnRvTG93ZXJDYXNlKCkgOiBwKSkuam9pbihcIlwiKSA6IFwiXCI7XG59XG5mdW5jdGlvbiBjYW1lbENhc2Uoc3RyLCBvcHRzKSB7XG4gIHJldHVybiBsb3dlckZpcnN0KHBhc2NhbENhc2Uoc3RyIHx8IFwiXCIsIG9wdHMpKTtcbn1cbmZ1bmN0aW9uIGtlYmFiQ2FzZShzdHIsIGpvaW5lcikge1xuICByZXR1cm4gc3RyID8gKEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ciA6IHNwbGl0QnlDYXNlKHN0cikpLm1hcCgocCkgPT4gcC50b0xvd2VyQ2FzZSgpKS5qb2luKGpvaW5lciA/PyBcIi1cIikgOiBcIlwiO1xufVxuXG5mdW5jdGlvbiB0b0FycihhbnkpIHtcbiAgcmV0dXJuIGFueSA9PSB2b2lkIDAgPyBbXSA6IEFycmF5LmlzQXJyYXkoYW55KSA/IGFueSA6IFthbnldO1xufVxuZnVuY3Rpb24gdG9WYWwob3V0LCBrZXksIHZhbCwgb3B0cykge1xuICBsZXQgeDtcbiAgY29uc3Qgb2xkID0gb3V0W2tleV07XG4gIGNvbnN0IG54dCA9IH5vcHRzLnN0cmluZy5pbmRleE9mKGtleSkgPyB2YWwgPT0gdm9pZCAwIHx8IHZhbCA9PT0gdHJ1ZSA/IFwiXCIgOiBTdHJpbmcodmFsKSA6IHR5cGVvZiB2YWwgPT09IFwiYm9vbGVhblwiID8gdmFsIDogfm9wdHMuYm9vbGVhbi5pbmRleE9mKGtleSkgPyB2YWwgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsID09PSBcInRydWVcIiB8fCAob3V0Ll8ucHVzaCgoeCA9ICt2YWwsIHggKiAwID09PSAwKSA/IHggOiB2YWwpLCAhIXZhbCkgOiAoeCA9ICt2YWwsIHggKiAwID09PSAwKSA/IHggOiB2YWw7XG4gIG91dFtrZXldID0gb2xkID09IHZvaWQgMCA/IG54dCA6IEFycmF5LmlzQXJyYXkob2xkKSA/IG9sZC5jb25jYXQobnh0KSA6IFtvbGQsIG54dF07XG59XG5mdW5jdGlvbiBwYXJzZVJhd0FyZ3MoYXJncyA9IFtdLCBvcHRzID0ge30pIHtcbiAgbGV0IGs7XG4gIGxldCBhcnI7XG4gIGxldCBhcmc7XG4gIGxldCBuYW1lO1xuICBsZXQgdmFsO1xuICBjb25zdCBvdXQgPSB7IF86IFtdIH07XG4gIGxldCBpID0gMDtcbiAgbGV0IGogPSAwO1xuICBsZXQgaWR4ID0gMDtcbiAgY29uc3QgbGVuID0gYXJncy5sZW5ndGg7XG4gIGNvbnN0IGFsaWJpID0gb3B0cy5hbGlhcyAhPT0gdm9pZCAwO1xuICBjb25zdCBzdHJpY3QgPSBvcHRzLnVua25vd24gIT09IHZvaWQgMDtcbiAgY29uc3QgZGVmYXVsdHMgPSBvcHRzLmRlZmF1bHQgIT09IHZvaWQgMDtcbiAgb3B0cy5hbGlhcyA9IG9wdHMuYWxpYXMgfHwge307XG4gIG9wdHMuc3RyaW5nID0gdG9BcnIob3B0cy5zdHJpbmcpO1xuICBvcHRzLmJvb2xlYW4gPSB0b0FycihvcHRzLmJvb2xlYW4pO1xuICBpZiAoYWxpYmkpIHtcbiAgICBmb3IgKGsgaW4gb3B0cy5hbGlhcykge1xuICAgICAgYXJyID0gb3B0cy5hbGlhc1trXSA9IHRvQXJyKG9wdHMuYWxpYXNba10pO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAob3B0cy5hbGlhc1thcnJbaV1dID0gYXJyLmNvbmNhdChrKSkuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmb3IgKGkgPSBvcHRzLmJvb2xlYW4ubGVuZ3RoOyBpLS0gPiAwOyApIHtcbiAgICBhcnIgPSBvcHRzLmFsaWFzW29wdHMuYm9vbGVhbltpXV0gfHwgW107XG4gICAgZm9yIChqID0gYXJyLmxlbmd0aDsgai0tID4gMDsgKSB7XG4gICAgICBvcHRzLmJvb2xlYW4ucHVzaChhcnJbal0pO1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSBvcHRzLnN0cmluZy5sZW5ndGg7IGktLSA+IDA7ICkge1xuICAgIGFyciA9IG9wdHMuYWxpYXNbb3B0cy5zdHJpbmdbaV1dIHx8IFtdO1xuICAgIGZvciAoaiA9IGFyci5sZW5ndGg7IGotLSA+IDA7ICkge1xuICAgICAgb3B0cy5zdHJpbmcucHVzaChhcnJbal0pO1xuICAgIH1cbiAgfVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBmb3IgKGsgaW4gb3B0cy5kZWZhdWx0KSB7XG4gICAgICBuYW1lID0gdHlwZW9mIG9wdHMuZGVmYXVsdFtrXTtcbiAgICAgIGFyciA9IG9wdHMuYWxpYXNba10gPSBvcHRzLmFsaWFzW2tdIHx8IFtdO1xuICAgICAgaWYgKG9wdHNbbmFtZV0gIT09IHZvaWQgMCkge1xuICAgICAgICBvcHRzW25hbWVdLnB1c2goayk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvcHRzW25hbWVdLnB1c2goYXJyW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBrZXlzID0gc3RyaWN0ID8gT2JqZWN0LmtleXMob3B0cy5hbGlhcykgOiBbXTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgIG91dC5fID0gb3V0Ll8uY29uY2F0KGFyZ3Muc2xpY2UoKytpKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZm9yIChqID0gMDsgaiA8IGFyZy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGFyZy5jaGFyQ29kZUF0KGopICE9PSA0NSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGogPT09IDApIHtcbiAgICAgIG91dC5fLnB1c2goYXJnKTtcbiAgICB9IGVsc2UgaWYgKGFyZy5zdWJzdHJpbmcoaiwgaiArIDMpID09PSBcIm5vLVwiKSB7XG4gICAgICBuYW1lID0gYXJnLnNsaWNlKE1hdGgubWF4KDAsIGogKyAzKSk7XG4gICAgICBpZiAoc3RyaWN0ICYmICF+a2V5cy5pbmRleE9mKG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnVua25vd24oYXJnKTtcbiAgICAgIH1cbiAgICAgIG91dFtuYW1lXSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGlkeCA9IGogKyAxOyBpZHggPCBhcmcubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBpZiAoYXJnLmNoYXJDb2RlQXQoaWR4KSA9PT0gNjEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmFtZSA9IGFyZy5zdWJzdHJpbmcoaiwgaWR4KTtcbiAgICAgIHZhbCA9IGFyZy5zbGljZShNYXRoLm1heCgwLCArK2lkeCkpIHx8IGkgKyAxID09PSBsZW4gfHwgKFwiXCIgKyBhcmdzW2kgKyAxXSkuY2hhckNvZGVBdCgwKSA9PT0gNDUgfHwgYXJnc1srK2ldO1xuICAgICAgYXJyID0gaiA9PT0gMiA/IFtuYW1lXSA6IG5hbWU7XG4gICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGFyci5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIG5hbWUgPSBhcnJbaWR4XTtcbiAgICAgICAgaWYgKHN0cmljdCAmJiAhfmtleXMuaW5kZXhPZihuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBvcHRzLnVua25vd24oXCItXCIucmVwZWF0KGopICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9WYWwob3V0LCBuYW1lLCBpZHggKyAxIDwgYXJyLmxlbmd0aCB8fCB2YWwsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBmb3IgKGsgaW4gb3B0cy5kZWZhdWx0KSB7XG4gICAgICBpZiAob3V0W2tdID09PSB2b2lkIDApIHtcbiAgICAgICAgb3V0W2tdID0gb3B0cy5kZWZhdWx0W2tdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxpYmkpIHtcbiAgICBmb3IgKGsgaW4gb3V0KSB7XG4gICAgICBhcnIgPSBvcHRzLmFsaWFzW2tdIHx8IFtdO1xuICAgICAgd2hpbGUgKGFyci5sZW5ndGggPiAwKSB7XG4gICAgICAgIG91dFthcnIuc2hpZnQoKV0gPSBvdXRba107XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhyYXdBcmdzLCBhcmdzRGVmKSB7XG4gIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICBib29sZWFuOiBbXSxcbiAgICBzdHJpbmc6IFtdLFxuICAgIG1peGVkOiBbXSxcbiAgICBhbGlhczoge30sXG4gICAgZGVmYXVsdDoge31cbiAgfTtcbiAgY29uc3QgYXJncyA9IHJlc29sdmVBcmdzKGFyZ3NEZWYpO1xuICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgaWYgKGFyZy50eXBlID09PSBcInBvc2l0aW9uYWxcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhcmcudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcGFyc2VPcHRpb25zLnN0cmluZy5wdXNoKGFyZy5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGFyZy50eXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcGFyc2VPcHRpb25zLmJvb2xlYW4ucHVzaChhcmcubmFtZSk7XG4gICAgfVxuICAgIGlmIChhcmcuZGVmYXVsdCAhPT0gdm9pZCAwKSB7XG4gICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFthcmcubmFtZV0gPSBhcmcuZGVmYXVsdDtcbiAgICB9XG4gICAgaWYgKGFyZy5hbGlhcykge1xuICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2FyZy5uYW1lXSA9IGFyZy5hbGlhcztcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VSYXdBcmdzKHJhd0FyZ3MsIHBhcnNlT3B0aW9ucyk7XG4gIGNvbnN0IFsuLi5wb3NpdGlvbmFsQXJndW1lbnRzXSA9IHBhcnNlZC5fO1xuICBjb25zdCBwYXJzZWRBcmdzUHJveHkgPSBuZXcgUHJveHkocGFyc2VkLCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXSA/PyB0YXJnZXRbY2FtZWxDYXNlKHByb3ApXSA/PyB0YXJnZXRba2ViYWJDYXNlKHByb3ApXTtcbiAgICB9XG4gIH0pO1xuICBmb3IgKGNvbnN0IFssIGFyZ10gb2YgYXJncy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoYXJnLnR5cGUgPT09IFwicG9zaXRpb25hbFwiKSB7XG4gICAgICBjb25zdCBuZXh0UG9zaXRpb25hbEFyZ3VtZW50ID0gcG9zaXRpb25hbEFyZ3VtZW50cy5zaGlmdCgpO1xuICAgICAgaWYgKG5leHRQb3NpdGlvbmFsQXJndW1lbnQgIT09IHZvaWQgMCkge1xuICAgICAgICBwYXJzZWRBcmdzUHJveHlbYXJnLm5hbWVdID0gbmV4dFBvc2l0aW9uYWxBcmd1bWVudDtcbiAgICAgIH0gZWxzZSBpZiAoYXJnLmRlZmF1bHQgPT09IHZvaWQgMCAmJiBhcmcucmVxdWlyZWQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBDTElFcnJvcihcbiAgICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBwb3NpdGlvbmFsIGFyZ3VtZW50OiAke2FyZy5uYW1lLnRvVXBwZXJDYXNlKCl9YCxcbiAgICAgICAgICBcIkVBUkdcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkQXJnc1Byb3h5W2FyZy5uYW1lXSA9IGFyZy5kZWZhdWx0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLnJlcXVpcmVkICYmIHBhcnNlZEFyZ3NQcm94eVthcmcubmFtZV0gPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IENMSUVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAtLSR7YXJnLm5hbWV9YCwgXCJFQVJHXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkQXJnc1Byb3h5O1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFyZ3MoYXJnc0RlZikge1xuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAoY29uc3QgW25hbWUsIGFyZ0RlZl0gb2YgT2JqZWN0LmVudHJpZXMoYXJnc0RlZiB8fCB7fSkpIHtcbiAgICBhcmdzLnB1c2goe1xuICAgICAgLi4uYXJnRGVmLFxuICAgICAgbmFtZSxcbiAgICAgIGFsaWFzOiB0b0FycmF5KGFyZ0RlZi5hbGlhcylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYXJncztcbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29tbWFuZChkZWYpIHtcbiAgcmV0dXJuIGRlZjtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY21kLCBvcHRzKSB7XG4gIGNvbnN0IGNtZEFyZ3MgPSBhd2FpdCByZXNvbHZlVmFsdWUoY21kLmFyZ3MgfHwge30pO1xuICBjb25zdCBwYXJzZWRBcmdzID0gcGFyc2VBcmdzKG9wdHMucmF3QXJncywgY21kQXJncyk7XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgcmF3QXJnczogb3B0cy5yYXdBcmdzLFxuICAgIGFyZ3M6IHBhcnNlZEFyZ3MsXG4gICAgZGF0YTogb3B0cy5kYXRhLFxuICAgIGNtZFxuICB9O1xuICBpZiAodHlwZW9mIGNtZC5zZXR1cCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgYXdhaXQgY21kLnNldHVwKGNvbnRleHQpO1xuICB9XG4gIGxldCByZXN1bHQ7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3ViQ29tbWFuZHMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY21kLnN1YkNvbW1hbmRzKTtcbiAgICBpZiAoc3ViQ29tbWFuZHMgJiYgT2JqZWN0LmtleXMoc3ViQ29tbWFuZHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN1YkNvbW1hbmRBcmdJbmRleCA9IG9wdHMucmF3QXJncy5maW5kSW5kZXgoXG4gICAgICAgIChhcmcpID0+ICFhcmcuc3RhcnRzV2l0aChcIi1cIilcbiAgICAgICk7XG4gICAgICBjb25zdCBzdWJDb21tYW5kTmFtZSA9IG9wdHMucmF3QXJnc1tzdWJDb21tYW5kQXJnSW5kZXhdO1xuICAgICAgaWYgKHN1YkNvbW1hbmROYW1lKSB7XG4gICAgICAgIGlmICghc3ViQ29tbWFuZHNbc3ViQ29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENMSUVycm9yKFxuICAgICAgICAgICAgYFVua25vd24gY29tbWFuZCBcXGAke3N1YkNvbW1hbmROYW1lfVxcYGAsXG4gICAgICAgICAgICBcIkVfVU5LTk9XTl9DT01NQU5EXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YkNvbW1hbmQgPSBhd2FpdCByZXNvbHZlVmFsdWUoc3ViQ29tbWFuZHNbc3ViQ29tbWFuZE5hbWVdKTtcbiAgICAgICAgaWYgKHN1YkNvbW1hbmQpIHtcbiAgICAgICAgICBhd2FpdCBydW5Db21tYW5kKHN1YkNvbW1hbmQsIHtcbiAgICAgICAgICAgIHJhd0FyZ3M6IG9wdHMucmF3QXJncy5zbGljZShzdWJDb21tYW5kQXJnSW5kZXggKyAxKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFjbWQucnVuKSB7XG4gICAgICAgIHRocm93IG5ldyBDTElFcnJvcihgTm8gY29tbWFuZCBzcGVjaWZpZWQuYCwgXCJFX05PX0NPTU1BTkRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY21kLnJ1biA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjbWQucnVuKGNvbnRleHQpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodHlwZW9mIGNtZC5jbGVhbnVwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGF3YWl0IGNtZC5jbGVhbnVwKGNvbnRleHQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZXN1bHQgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTdWJDb21tYW5kKGNtZCwgcmF3QXJncywgcGFyZW50KSB7XG4gIGNvbnN0IHN1YkNvbW1hbmRzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNtZC5zdWJDb21tYW5kcyk7XG4gIGlmIChzdWJDb21tYW5kcyAmJiBPYmplY3Qua2V5cyhzdWJDb21tYW5kcykubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHN1YkNvbW1hbmRBcmdJbmRleCA9IHJhd0FyZ3MuZmluZEluZGV4KChhcmcpID0+ICFhcmcuc3RhcnRzV2l0aChcIi1cIikpO1xuICAgIGNvbnN0IHN1YkNvbW1hbmROYW1lID0gcmF3QXJnc1tzdWJDb21tYW5kQXJnSW5kZXhdO1xuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSBhd2FpdCByZXNvbHZlVmFsdWUoc3ViQ29tbWFuZHNbc3ViQ29tbWFuZE5hbWVdKTtcbiAgICBpZiAoc3ViQ29tbWFuZCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVTdWJDb21tYW5kKFxuICAgICAgICBzdWJDb21tYW5kLFxuICAgICAgICByYXdBcmdzLnNsaWNlKHN1YkNvbW1hbmRBcmdJbmRleCArIDEpLFxuICAgICAgICBjbWRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbY21kLCBwYXJlbnRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93VXNhZ2UoY21kLCBwYXJlbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zb2xhLmxvZyhhd2FpdCByZW5kZXJVc2FnZShjbWQsIHBhcmVudCkgKyBcIlxcblwiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xhLmVycm9yKGVycm9yKTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyVXNhZ2UoY21kLCBwYXJlbnQpIHtcbiAgY29uc3QgY21kTWV0YSA9IGF3YWl0IHJlc29sdmVWYWx1ZShjbWQubWV0YSB8fCB7fSk7XG4gIGNvbnN0IGNtZEFyZ3MgPSByZXNvbHZlQXJncyhhd2FpdCByZXNvbHZlVmFsdWUoY21kLmFyZ3MgfHwge30pKTtcbiAgY29uc3QgcGFyZW50TWV0YSA9IGF3YWl0IHJlc29sdmVWYWx1ZShwYXJlbnQ/Lm1ldGEgfHwge30pO1xuICBjb25zdCBjb21tYW5kTmFtZSA9IGAke3BhcmVudE1ldGEubmFtZSA/IGAke3BhcmVudE1ldGEubmFtZX0gYCA6IFwiXCJ9YCArIChjbWRNZXRhLm5hbWUgfHwgcHJvY2Vzcy5hcmd2WzFdKTtcbiAgY29uc3QgYXJnTGluZXMgPSBbXTtcbiAgY29uc3QgcG9zTGluZXMgPSBbXTtcbiAgY29uc3QgY29tbWFuZHNMaW5lcyA9IFtdO1xuICBjb25zdCB1c2FnZUxpbmUgPSBbXTtcbiAgZm9yIChjb25zdCBhcmcgb2YgY21kQXJncykge1xuICAgIGlmIChhcmcudHlwZSA9PT0gXCJwb3NpdGlvbmFsXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBhcmcubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IGFyZy5yZXF1aXJlZCAhPT0gZmFsc2UgJiYgYXJnLmRlZmF1bHQgPT09IHZvaWQgMDtcbiAgICAgIGNvbnN0IGRlZmF1bHRIaW50ID0gYXJnLmRlZmF1bHQgPyBgPVwiJHthcmcuZGVmYXVsdH1cImAgOiBcIlwiO1xuICAgICAgcG9zTGluZXMucHVzaChbXG4gICAgICAgIFwiYFwiICsgbmFtZSArIGRlZmF1bHRIaW50ICsgXCJgXCIsXG4gICAgICAgIGFyZy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgICBhcmcudmFsdWVIaW50ID8gYDwke2FyZy52YWx1ZUhpbnR9PmAgOiBcIlwiXG4gICAgICBdKTtcbiAgICAgIHVzYWdlTGluZS5wdXNoKGlzUmVxdWlyZWQgPyBgPCR7bmFtZX0+YCA6IGBbJHtuYW1lfV1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IGFyZy5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiBhcmcuZGVmYXVsdCA9PT0gdm9pZCAwO1xuICAgICAgY29uc3QgYXJnU3RyID0gKGFyZy50eXBlID09PSBcImJvb2xlYW5cIiAmJiBhcmcuZGVmYXVsdCA9PT0gdHJ1ZSA/IFtcbiAgICAgICAgLi4uKGFyZy5hbGlhcyB8fCBbXSkubWFwKChhKSA9PiBgLS1uby0ke2F9YCksXG4gICAgICAgIGAtLW5vLSR7YXJnLm5hbWV9YFxuICAgICAgXS5qb2luKFwiLCBcIikgOiBbLi4uKGFyZy5hbGlhcyB8fCBbXSkubWFwKChhKSA9PiBgLSR7YX1gKSwgYC0tJHthcmcubmFtZX1gXS5qb2luKFxuICAgICAgICBcIiwgXCJcbiAgICAgICkpICsgKGFyZy50eXBlID09PSBcInN0cmluZ1wiICYmIChhcmcudmFsdWVIaW50IHx8IGFyZy5kZWZhdWx0KSA/IGA9JHthcmcudmFsdWVIaW50ID8gYDwke2FyZy52YWx1ZUhpbnR9PmAgOiBgXCIke2FyZy5kZWZhdWx0IHx8IFwiXCJ9XCJgfWAgOiBcIlwiKTtcbiAgICAgIGFyZ0xpbmVzLnB1c2goW1xuICAgICAgICBcImBcIiArIGFyZ1N0ciArIChpc1JlcXVpcmVkID8gXCIgKHJlcXVpcmVkKVwiIDogXCJcIikgKyBcImBcIixcbiAgICAgICAgYXJnLmRlc2NyaXB0aW9uIHx8IFwiXCJcbiAgICAgIF0pO1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgdXNhZ2VMaW5lLnB1c2goYXJnU3RyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNtZC5zdWJDb21tYW5kcykge1xuICAgIGNvbnN0IGNvbW1hbmROYW1lcyA9IFtdO1xuICAgIGNvbnN0IHN1YkNvbW1hbmRzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNtZC5zdWJDb21tYW5kcyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgc3ViXSBvZiBPYmplY3QuZW50cmllcyhzdWJDb21tYW5kcykpIHtcbiAgICAgIGNvbnN0IHN1YkNtZCA9IGF3YWl0IHJlc29sdmVWYWx1ZShzdWIpO1xuICAgICAgY29uc3QgbWV0YSA9IGF3YWl0IHJlc29sdmVWYWx1ZShzdWJDbWQ/Lm1ldGEpO1xuICAgICAgY29tbWFuZHNMaW5lcy5wdXNoKFtgXFxgJHtuYW1lfVxcYGAsIG1ldGE/LmRlc2NyaXB0aW9uIHx8IFwiXCJdKTtcbiAgICAgIGNvbW1hbmROYW1lcy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgICB1c2FnZUxpbmUucHVzaChjb21tYW5kTmFtZXMuam9pbihcInxcIikpO1xuICB9XG4gIGNvbnN0IHVzYWdlTGluZXMgPSBbXTtcbiAgY29uc3QgdmVyc2lvbiA9IGNtZE1ldGEudmVyc2lvbiB8fCBwYXJlbnRNZXRhLnZlcnNpb247XG4gIHVzYWdlTGluZXMucHVzaChcbiAgICBjb2xvcnMuZ3JheShcbiAgICAgIGAke2NtZE1ldGEuZGVzY3JpcHRpb259ICgke2NvbW1hbmROYW1lICsgKHZlcnNpb24gPyBgIHYke3ZlcnNpb259YCA6IFwiXCIpfSlgXG4gICAgKSxcbiAgICBcIlwiXG4gICk7XG4gIGNvbnN0IGhhc09wdGlvbnMgPSBhcmdMaW5lcy5sZW5ndGggPiAwIHx8IHBvc0xpbmVzLmxlbmd0aCA+IDA7XG4gIHVzYWdlTGluZXMucHVzaChcbiAgICBgJHtjb2xvcnMudW5kZXJsaW5lKGNvbG9ycy5ib2xkKFwiVVNBR0VcIikpfSBcXGAke2NvbW1hbmROYW1lfSR7aGFzT3B0aW9ucyA/IFwiIFtPUFRJT05TXVwiIDogXCJcIn0gJHt1c2FnZUxpbmUuam9pbihcIiBcIil9XFxgYCxcbiAgICBcIlwiXG4gICk7XG4gIGlmIChwb3NMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdXNhZ2VMaW5lcy5wdXNoKGNvbG9ycy51bmRlcmxpbmUoY29sb3JzLmJvbGQoXCJBUkdVTUVOVFNcIikpLCBcIlwiKTtcbiAgICB1c2FnZUxpbmVzLnB1c2goZm9ybWF0TGluZUNvbHVtbnMocG9zTGluZXMsIFwiICBcIikpO1xuICAgIHVzYWdlTGluZXMucHVzaChcIlwiKTtcbiAgfVxuICBpZiAoYXJnTGluZXMubGVuZ3RoID4gMCkge1xuICAgIHVzYWdlTGluZXMucHVzaChjb2xvcnMudW5kZXJsaW5lKGNvbG9ycy5ib2xkKFwiT1BUSU9OU1wiKSksIFwiXCIpO1xuICAgIHVzYWdlTGluZXMucHVzaChmb3JtYXRMaW5lQ29sdW1ucyhhcmdMaW5lcywgXCIgIFwiKSk7XG4gICAgdXNhZ2VMaW5lcy5wdXNoKFwiXCIpO1xuICB9XG4gIGlmIChjb21tYW5kc0xpbmVzLmxlbmd0aCA+IDApIHtcbiAgICB1c2FnZUxpbmVzLnB1c2goY29sb3JzLnVuZGVybGluZShjb2xvcnMuYm9sZChcIkNPTU1BTkRTXCIpKSwgXCJcIik7XG4gICAgdXNhZ2VMaW5lcy5wdXNoKGZvcm1hdExpbmVDb2x1bW5zKGNvbW1hbmRzTGluZXMsIFwiICBcIikpO1xuICAgIHVzYWdlTGluZXMucHVzaChcbiAgICAgIFwiXCIsXG4gICAgICBgVXNlIFxcYCR7Y29tbWFuZE5hbWV9IDxjb21tYW5kPiAtLWhlbHBcXGAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21tYW5kLmBcbiAgICApO1xuICB9XG4gIHJldHVybiB1c2FnZUxpbmVzLmZpbHRlcigobCkgPT4gdHlwZW9mIGwgPT09IFwic3RyaW5nXCIpLmpvaW4oXCJcXG5cIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bk1haW4oY21kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcmF3QXJncyA9IG9wdHMucmF3QXJncyB8fCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gIGNvbnN0IHNob3dVc2FnZSQxID0gb3B0cy5zaG93VXNhZ2UgfHwgc2hvd1VzYWdlO1xuICB0cnkge1xuICAgIGlmIChyYXdBcmdzLmluY2x1ZGVzKFwiLS1oZWxwXCIpIHx8IHJhd0FyZ3MuaW5jbHVkZXMoXCItaFwiKSkge1xuICAgICAgYXdhaXQgc2hvd1VzYWdlJDEoLi4uYXdhaXQgcmVzb2x2ZVN1YkNvbW1hbmQoY21kLCByYXdBcmdzKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSBlbHNlIGlmIChyYXdBcmdzLmxlbmd0aCA9PT0gMSAmJiByYXdBcmdzWzBdID09PSBcIi0tdmVyc2lvblwiKSB7XG4gICAgICBjb25zdCBtZXRhID0gdHlwZW9mIGNtZC5tZXRhID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCBjbWQubWV0YSgpIDogYXdhaXQgY21kLm1ldGE7XG4gICAgICBpZiAoIW1ldGE/LnZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IENMSUVycm9yKFwiTm8gdmVyc2lvbiBzcGVjaWZpZWRcIiwgXCJFX05PX1ZFUlNJT05cIik7XG4gICAgICB9XG4gICAgICBjb25zb2xhLmxvZyhtZXRhLnZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKGNtZCwgeyByYXdBcmdzIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBpc0NMSUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBDTElFcnJvcjtcbiAgICBpZiAoIWlzQ0xJRXJyb3IpIHtcbiAgICAgIGNvbnNvbGEuZXJyb3IoZXJyb3IsIFwiXFxuXCIpO1xuICAgIH1cbiAgICBpZiAoaXNDTElFcnJvcikge1xuICAgICAgYXdhaXQgc2hvd1VzYWdlJDEoLi4uYXdhaXQgcmVzb2x2ZVN1YkNvbW1hbmQoY21kLCByYXdBcmdzKSk7XG4gICAgfVxuICAgIGNvbnNvbGEuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVNYWluKGNtZCkge1xuICByZXR1cm4gKG9wdHMgPSB7fSkgPT4gcnVuTWFpbihjbWQsIG9wdHMpO1xufVxuXG5leHBvcnQgeyBjcmVhdGVNYWluLCBkZWZpbmVDb21tYW5kLCBwYXJzZUFyZ3MsIHJlbmRlclVzYWdlLCBydW5Db21tYW5kLCBydW5NYWluLCBzaG93VXNhZ2UgfTtcbiIsICJpbXBvcnQgeyBkZWZpbmVDb21tYW5kLCBydW5NYWluLCBwYXJzZUFyZ3MgfSBmcm9tIFwiY2l0dHlcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGV6U3Bhd24gZnJvbSBcIkBqc2RldnRvb2xzL2V6LXNwYXduXCI7XG4vLyBpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgaGFzaCB9IGZyb20gXCJvaGFzaFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9hY3Rpb25cIjtcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IGdldFBhY2thZ2VNYW5pZmVzdCB9IGZyb20gXCJxdWVyeS1yZWdpc3RyeVwiO1xuaW1wb3J0IHsgZXh0cmFjdE93bmVyQW5kUmVwbywgZXh0cmFjdFJlcG9zaXRvcnkgfSBmcm9tIFwiQHBrZy1wci1uZXcvdXRpbHNcIjtcbmltcG9ydCBcIi4vZW52aXJvbm1lbnRzXCI7XG5pbXBvcnQgcGtnIGZyb20gXCIuL3BhY2thZ2UuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIHZhciBBUElfVVJMOiBzdHJpbmc7XG59XG5cbmNvbnN0IHB1Ymxpc2hVcmwgPSBuZXcgVVJMKFwiL3B1Ymxpc2hcIiwgQVBJX1VSTCk7XG5cbmlmICghcHJvY2Vzcy5lbnYuVEVTVCAmJiBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OUyAhPT0gXCJ0cnVlXCIpIHtcbiAgY29uc29sZS5lcnJvcihcIkNvbnRpbnVvdXMgUmVsZWFzZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIEdpdGh1YiBBY3Rpb25zLlwiKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3Qgb2N0b2tpdCA9IG5ldyBPY3Rva2l0KCk7XG5cbmNvbnN0IHtcbiAgR0lUSFVCX1NFUlZFUl9VUkwsXG4gIEdJVEhVQl9SRVBPU0lUT1JZLFxuICBHSVRIVUJfUlVOX0lELFxuICBHSVRIVUJfUlVOX0FUVEVNUFQsXG4gIEdJVEhVQl9BQ1RPUl9JRCxcbiAgR0lUSFVCX1NIQSxcbn0gPSBwcm9jZXNzLmVudjtcblxuY29uc3QgW293bmVyLCByZXBvXSA9IEdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KFwiL1wiKTtcblxuY29uc3QgY29tbWl0ID0gYXdhaXQgb2N0b2tpdC5naXQuZ2V0Q29tbWl0KHtcbiAgb3duZXIsXG4gIHJlcG8sXG4gIGNvbW1pdF9zaGE6IEdJVEhVQl9TSEEsXG59KTtcblxuY29uc3QgY29tbWl0VGltZXN0YW1wID0gRGF0ZS5wYXJzZShjb21taXQuZGF0YS5jb21taXR0ZXIuZGF0ZSk7XG5cbi8vIE5vdGU6IElmIHlvdSBuZWVkIHRvIHVzZSBhIHdvcmtmbG93IHJ1bidzIFVSTCBmcm9tIHdpdGhpbiBhIGpvYiwgeW91IGNhbiBjb21iaW5lIHRoZXNlIHZhcmlhYmxlczogJEdJVEhVQl9TRVJWRVJfVVJMLyRHSVRIVUJfUkVQT1NJVE9SWS9hY3Rpb25zL3J1bnMvJEdJVEhVQl9SVU5fSURcbmNvbnN0IHVybCA9IGAke0dJVEhVQl9TRVJWRVJfVVJMfS8ke293bmVyfS8ke3JlcG99L2FjdGlvbnMvcnVucy8ke0dJVEhVQl9SVU5fSUR9YDtcblxuY29uc3QgbWV0YWRhdGEgPSB7XG4gIHVybCxcbiAgYXR0ZW1wdDogTnVtYmVyKEdJVEhVQl9SVU5fQVRURU1QVCksXG4gIGFjdG9yOiBOdW1iZXIoR0lUSFVCX0FDVE9SX0lEKSxcbn07XG5cbmNvbnN0IGtleSA9IGhhc2gobWV0YWRhdGEpO1xuXG5jb25zdCBtYWluID0gZGVmaW5lQ29tbWFuZCh7XG4gIG1ldGE6IHtcbiAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgICBuYW1lOiBcInN0YWNrYmxpdHpcIixcbiAgICBkZXNjcmlwdGlvbjogXCJBIENMSSBmb3IgcGtnLnByLm5ldyAoQ29udGludW91cyBSZWxlYXNlcylcIixcbiAgfSxcbiAgc3ViQ29tbWFuZHM6IHtcbiAgICBwdWJsaXNoOiAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgY29tcGFjdDoge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgXCJjb21wYWN0IHVybHMuIFRoZSBzaG9ydGVzdCBmb3JtIG9mIHVybHMgbGlrZSBwa2cucHIubmV3L3RpbnliZW5jaEBhODMyYTU1KVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJ1bjogYXN5bmMgKHsgYXJncyB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGFjdCA9ICEhYXJncy5jb21wYWN0O1xuXG4gICAgICAgICAgY29uc3QgcGF0aHMgPSAoYXJncy5fLmxlbmd0aCA/IGFyZ3MuXyA6IFtcIi5cIl0pLm1hcCgocCkgPT5cbiAgICAgICAgICAgIHBhdGgucmVzb2x2ZShwKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZGVwczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgICAgICAgICBjb25zdCBwSnNvbkNvbnRlbnQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBwSnNvblBhdGggPSBwYXRoLnJlc29sdmUocCwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IGF3YWl0IGltcG9ydFBhY2thZ2VKc29uKHBKc29uUGF0aCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wYWN0KSB7XG4gICAgICAgICAgICAgIGF3YWl0IHZlcmlmeUNvbXBhY3RNb2RlKG5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXBzLnNldChcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgbmV3IFVSTChcbiAgICAgICAgICAgICAgICBgLyR7b3duZXJ9LyR7cmVwb30vJHtuYW1lfUAke0dJVEhVQl9TSEEuc3Vic3RyaW5nKDAsIDcpfWAsXG4gICAgICAgICAgICAgICAgQVBJX1VSTCxcbiAgICAgICAgICAgICAgKS5ocmVmLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBwSnNvblBhdGggPSBwYXRoLnJlc29sdmUocCwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocEpzb25QYXRoLCBcInV0Zi04XCIpO1xuICAgICAgICAgICAgcEpzb25Db250ZW50LnNldChwSnNvblBhdGgsIGNvbnRlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBwSnNvbiA9IGF3YWl0IGltcG9ydFBhY2thZ2VKc29uKHBKc29uUGF0aCk7XG4gICAgICAgICAgICBoaWphY2tEZXBzKGRlcHMsIHBKc29uLmRlcGVuZGVuY2llcyk7XG4gICAgICAgICAgICBoaWphY2tEZXBzKGRlcHMsIHBKc29uLmRldkRlcGVuZGVuY2llcyk7XG4gICAgICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUocEpzb25QYXRoLCBKU09OLnN0cmluZ2lmeShwSnNvbikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXRocykge1xuICAgICAgICAgICAgY29uc3QgcEpzb25QYXRoID0gcGF0aC5yZXNvbHZlKHAsIFwicGFja2FnZS5qc29uXCIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnRQYWNrYWdlSnNvbihwSnNvblBhdGgpO1xuICAgICAgICAgICAgICBhd2FpdCBlelNwYXduLmFzeW5jKFwibnBtIHBhY2tcIiwgeyBzdGRpbzogXCJpbmhlcml0XCIsIGN3ZDogcCB9KTtcblxuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke25hbWV9LSR7dmVyc2lvbn0udGd6YDtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgucmVzb2x2ZShwLCBmaWxlTmFtZSkpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZmlsZV0sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIGJsb2IsIGZpbGVOYW1lKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwSnNvblBhdGgsIHBKc29uQ29udGVudC5nZXQocEpzb25QYXRoKSEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHB1Ymxpc2hVcmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwic2ItY29tcGFjdFwiOiBgJHtjb21wYWN0fWAsXG4gICAgICAgICAgICAgIFwic2Ita2V5XCI6IGtleSxcbiAgICAgICAgICAgICAgXCJzYi1jb21taXQtdGltZXN0YW1wXCI6IGNvbW1pdFRpbWVzdGFtcC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGxhdGVyUmVzID0gYXdhaXQgcmVzLmNsb25lKCkuanNvbigpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgICAgIHJlcy5zdGF0dXMsXG4gICAgICAgICAgICAyMDAsXG4gICAgICAgICAgICBgcHVibGlzaGluZyBmYWlsZWQ6ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBcdTI2QTFcdUZFMEYgWW91ciBucG0gcGFja2FnZXMgYXJlIHB1Ymxpc2hlZC5cbiAgICAgICAgICAgICR7Wy4uLmZvcm1EYXRhLmtleXMoKV0ubWFwKChuYW1lLCBpKSA9PiBgJHtuYW1lfTogXFxgbnBtIGkgJHtsYXRlclJlcy51cmxzW2ldfVxcYGApLmpvaW4oXCJcXG5cIil9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIGxpbms6ICgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGE6IHt9LFxuICAgICAgICBydW46ICgpID0+IHt9LFxuICAgICAgfTtcbiAgICB9LFxuICB9LFxufSk7XG5cbnJ1bk1haW4obWFpbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBhY2thZ2VKc29uKHA6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICBjb25zdCB7IGRlZmF1bHQ6IG9iaiB9ID0gYXdhaXQgaW1wb3J0KHBhdGhUb0ZpbGVVUkwocCkuaHJlZiwge1xuICAgIHdpdGg6IHsgdHlwZTogXCJqc29uXCIgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaGlqYWNrRGVwcyhcbiAgbmV3RGVwczogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgb2xkRGVwcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4pIHtcbiAgaWYgKCFvbGREZXBzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3QgW25ld0RlcCwgdXJsXSBvZiBuZXdEZXBzKSB7XG4gICAgaWYgKG5ld0RlcCBpbiBvbGREZXBzKSB7XG4gICAgICBvbGREZXBzW25ld0RlcF0gPSB1cmw7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUNvbXBhY3RNb2RlKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgYHBrZy1wci1uZXcgY2Fubm90IHJlc29sdmUgJHtwYWNrYWdlTmFtZX0gZnJvbSBucG0uIC0tY29tcGFjdCBmbGFnIGRlcGVuZHMgb24gdGhlIHBhY2thZ2UgYmVpbmcgYXZhaWxhYmxlIGluIG5wbS5cbk1ha2Ugc3VyZSB0byBoYXZlIHlvdXIgcGFja2FnZSBvbiBucG0gZmlyc3Qgb3IgY29uZmlndXJlIHRoZSAncmVwb3NpdG9yeScgZmllbGQgaW4geW91ciBwYWNrYWdlLmpzb24gcHJvcGVybHkuYCxcbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGdldFBhY2thZ2VNYW5pZmVzdChwYWNrYWdlTmFtZSk7XG5cbiAgICBjb25zdCByZXBvc2l0b3J5ID0gZXh0cmFjdFJlcG9zaXRvcnkobWFuaWZlc3QpO1xuICAgIGlmICghcmVwb3NpdG9yeSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBleHRyYWN0T3duZXJBbmRSZXBvKHJlcG9zaXRvcnkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiIsICJjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5mcmVlemUoe1xuICBpZ25vcmVVbmtub3duOiBmYWxzZSxcbiAgcmVzcGVjdFR5cGU6IGZhbHNlLFxuICByZXNwZWN0RnVuY3Rpb25OYW1lczogZmFsc2UsXG4gIHJlc3BlY3RGdW5jdGlvblByb3BlcnRpZXM6IGZhbHNlLFxuICB1bm9yZGVyZWRPYmplY3RzOiB0cnVlLFxuICB1bm9yZGVyZWRBcnJheXM6IGZhbHNlLFxuICB1bm9yZGVyZWRTZXRzOiBmYWxzZSxcbiAgZXhjbHVkZUtleXM6IHZvaWQgMCxcbiAgZXhjbHVkZVZhbHVlczogdm9pZCAwLFxuICByZXBsYWNlcjogdm9pZCAwXG59KTtcbmZ1bmN0aW9uIG9iamVjdEhhc2gob2JqZWN0LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHsgLi4uZGVmYXVsdHMsIC4uLm9wdGlvbnMgfTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHM7XG4gIH1cbiAgY29uc3QgaGFzaGVyID0gY3JlYXRlSGFzaGVyKG9wdGlvbnMpO1xuICBoYXNoZXIuZGlzcGF0Y2gob2JqZWN0KTtcbiAgcmV0dXJuIGhhc2hlci50b1N0cmluZygpO1xufVxuY29uc3QgZGVmYXVsdFByb3RvdHlwZXNLZXlzID0gT2JqZWN0LmZyZWV6ZShbXG4gIFwicHJvdG90eXBlXCIsXG4gIFwiX19wcm90b19fXCIsXG4gIFwiY29uc3RydWN0b3JcIlxuXSk7XG5mdW5jdGlvbiBjcmVhdGVIYXNoZXIob3B0aW9ucykge1xuICBsZXQgYnVmZiA9IFwiXCI7XG4gIGxldCBjb250ZXh0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qgd3JpdGUgPSAoc3RyKSA9PiB7XG4gICAgYnVmZiArPSBzdHI7XG4gIH07XG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYnVmZjtcbiAgICB9LFxuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9LFxuICAgIGRpc3BhdGNoKHZhbHVlKSB7XG4gICAgICBpZiAob3B0aW9ucy5yZXBsYWNlcikge1xuICAgICAgICB2YWx1ZSA9IG9wdGlvbnMucmVwbGFjZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IHZhbHVlID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsdWU7XG4gICAgICByZXR1cm4gdGhpc1t0eXBlXSh2YWx1ZSk7XG4gICAgfSxcbiAgICBvYmplY3Qob2JqZWN0KSB7XG4gICAgICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QudG9KU09OID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0KG9iamVjdC50b0pTT04oKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBvYmpTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcbiAgICAgIGxldCBvYmpUeXBlID0gXCJcIjtcbiAgICAgIGNvbnN0IG9iamVjdExlbmd0aCA9IG9ialN0cmluZy5sZW5ndGg7XG4gICAgICBpZiAob2JqZWN0TGVuZ3RoIDwgMTApIHtcbiAgICAgICAgb2JqVHlwZSA9IFwidW5rbm93bjpbXCIgKyBvYmpTdHJpbmcgKyBcIl1cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialR5cGUgPSBvYmpTdHJpbmcuc2xpY2UoOCwgb2JqZWN0TGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICBvYmpUeXBlID0gb2JqVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgbGV0IG9iamVjdE51bWJlciA9IG51bGw7XG4gICAgICBpZiAoKG9iamVjdE51bWJlciA9IGNvbnRleHQuZ2V0KG9iamVjdCkpID09PSB2b2lkIDApIHtcbiAgICAgICAgY29udGV4dC5zZXQob2JqZWN0LCBjb250ZXh0LnNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goXCJbQ0lSQ1VMQVI6XCIgKyBvYmplY3ROdW1iZXIgKyBcIl1cIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBCdWZmZXIuaXNCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICAgICAgd3JpdGUoXCJidWZmZXI6XCIpO1xuICAgICAgICByZXR1cm4gd3JpdGUob2JqZWN0LnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICB9XG4gICAgICBpZiAob2JqVHlwZSAhPT0gXCJvYmplY3RcIiAmJiBvYmpUeXBlICE9PSBcImZ1bmN0aW9uXCIgJiYgb2JqVHlwZSAhPT0gXCJhc3luY2Z1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHRoaXNbb2JqVHlwZV0pIHtcbiAgICAgICAgICB0aGlzW29ialR5cGVdKG9iamVjdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuaWdub3JlVW5rbm93bikge1xuICAgICAgICAgIHRoaXMudW5rb3duKG9iamVjdCwgb2JqVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5vcmRlcmVkT2JqZWN0cykge1xuICAgICAgICAgIGtleXMgPSBrZXlzLnNvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXh0cmFLZXlzID0gW107XG4gICAgICAgIGlmIChvcHRpb25zLnJlc3BlY3RUeXBlICE9PSBmYWxzZSAmJiAhaXNOYXRpdmVGdW5jdGlvbihvYmplY3QpKSB7XG4gICAgICAgICAgZXh0cmFLZXlzID0gZGVmYXVsdFByb3RvdHlwZXNLZXlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVLZXlzKSB7XG4gICAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhb3B0aW9ucy5leGNsdWRlS2V5cyhrZXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGV4dHJhS2V5cyA9IGV4dHJhS2V5cy5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFvcHRpb25zLmV4Y2x1ZGVLZXlzKGtleSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGUoXCJvYmplY3Q6XCIgKyAoa2V5cy5sZW5ndGggKyBleHRyYUtleXMubGVuZ3RoKSArIFwiOlwiKTtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hGb3JLZXkgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChrZXkpO1xuICAgICAgICAgIHdyaXRlKFwiOlwiKTtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZXhjbHVkZVZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChvYmplY3Rba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdyaXRlKFwiLFwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgIGRpc3BhdGNoRm9yS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXh0cmFLZXlzKSB7XG4gICAgICAgICAgZGlzcGF0Y2hGb3JLZXkoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYXJyYXkoYXJyLCB1bm9yZGVyZWQpIHtcbiAgICAgIHVub3JkZXJlZCA9IHVub3JkZXJlZCA9PT0gdm9pZCAwID8gb3B0aW9ucy51bm9yZGVyZWRBcnJheXMgIT09IGZhbHNlIDogdW5vcmRlcmVkO1xuICAgICAgd3JpdGUoXCJhcnJheTpcIiArIGFyci5sZW5ndGggKyBcIjpcIik7XG4gICAgICBpZiAoIXVub3JkZXJlZCB8fCBhcnIubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBhcnIpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZXh0QWRkaXRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhcnIubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoZXIgPSBjcmVhdGVIYXNoZXIob3B0aW9ucyk7XG4gICAgICAgIGhhc2hlci5kaXNwYXRjaChlbnRyeSk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhhc2hlci5nZXRDb250ZXh0KCkpIHtcbiAgICAgICAgICBjb250ZXh0QWRkaXRpb25zLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzaGVyLnRvU3RyaW5nKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0QWRkaXRpb25zO1xuICAgICAgZW50cmllcy5zb3J0KCk7XG4gICAgICByZXR1cm4gdGhpcy5hcnJheShlbnRyaWVzLCBmYWxzZSk7XG4gICAgfSxcbiAgICBkYXRlKGRhdGUpIHtcbiAgICAgIHJldHVybiB3cml0ZShcImRhdGU6XCIgKyBkYXRlLnRvSlNPTigpKTtcbiAgICB9LFxuICAgIHN5bWJvbChzeW0pIHtcbiAgICAgIHJldHVybiB3cml0ZShcInN5bWJvbDpcIiArIHN5bS50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIHVua293bih2YWx1ZSwgdHlwZSkge1xuICAgICAgd3JpdGUodHlwZSk7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdyaXRlKFwiOlwiKTtcbiAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuZW50cmllcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFycmF5KFxuICAgICAgICAgIEFycmF5LmZyb20odmFsdWUuZW50cmllcygpKSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICAgLyogb3JkZXJlZCAqL1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXJyb3IoZXJyKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJlcnJvcjpcIiArIGVyci50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIGJvb2xlYW4oYm9vbCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiYm9vbDpcIiArIGJvb2wpO1xuICAgIH0sXG4gICAgc3RyaW5nKHN0cmluZykge1xuICAgICAgd3JpdGUoXCJzdHJpbmc6XCIgKyBzdHJpbmcubGVuZ3RoICsgXCI6XCIpO1xuICAgICAgd3JpdGUoc3RyaW5nKTtcbiAgICB9LFxuICAgIGZ1bmN0aW9uKGZuKSB7XG4gICAgICB3cml0ZShcImZuOlwiKTtcbiAgICAgIGlmIChpc05hdGl2ZUZ1bmN0aW9uKGZuKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKFwiW25hdGl2ZV1cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKGZuLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucmVzcGVjdEZ1bmN0aW9uTmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goXCJmdW5jdGlvbi1uYW1lOlwiICsgU3RyaW5nKGZuLm5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnJlc3BlY3RGdW5jdGlvblByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5vYmplY3QoZm4pO1xuICAgICAgfVxuICAgIH0sXG4gICAgbnVtYmVyKG51bWJlcikge1xuICAgICAgcmV0dXJuIHdyaXRlKFwibnVtYmVyOlwiICsgbnVtYmVyKTtcbiAgICB9LFxuICAgIHhtbCh4bWwpIHtcbiAgICAgIHJldHVybiB3cml0ZShcInhtbDpcIiArIHhtbC50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIG51bGwoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJOdWxsXCIpO1xuICAgIH0sXG4gICAgdW5kZWZpbmVkKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiVW5kZWZpbmVkXCIpO1xuICAgIH0sXG4gICAgcmVnZXhwKHJlZ2V4KSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJyZWdleDpcIiArIHJlZ2V4LnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgdWludDhhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwidWludDhhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIHVpbnQ4Y2xhbXBlZGFycmF5KGFycikge1xuICAgICAgd3JpdGUoXCJ1aW50OGNsYW1wZWRhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIGludDhhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwiaW50OGFycmF5OlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgdWludDE2YXJyYXkoYXJyKSB7XG4gICAgICB3cml0ZShcInVpbnQxNmFycmF5OlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgaW50MTZhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwiaW50MTZhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIHVpbnQzMmFycmF5KGFycikge1xuICAgICAgd3JpdGUoXCJ1aW50MzJhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIGludDMyYXJyYXkoYXJyKSB7XG4gICAgICB3cml0ZShcImludDMyYXJyYXk6XCIpO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKSk7XG4gICAgfSxcbiAgICBmbG9hdDMyYXJyYXkoYXJyKSB7XG4gICAgICB3cml0ZShcImZsb2F0MzJhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIGZsb2F0NjRhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwiZmxvYXQ2NGFycmF5OlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgYXJyYXlidWZmZXIoYXJyKSB7XG4gICAgICB3cml0ZShcImFycmF5YnVmZmVyOlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKG5ldyBVaW50OEFycmF5KGFycikpO1xuICAgIH0sXG4gICAgdXJsKHVybCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidXJsOlwiICsgdXJsLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgbWFwKG1hcCkge1xuICAgICAgd3JpdGUoXCJtYXA6XCIpO1xuICAgICAgY29uc3QgYXJyID0gWy4uLm1hcF07XG4gICAgICByZXR1cm4gdGhpcy5hcnJheShhcnIsIG9wdGlvbnMudW5vcmRlcmVkU2V0cyAhPT0gZmFsc2UpO1xuICAgIH0sXG4gICAgc2V0KHNldCkge1xuICAgICAgd3JpdGUoXCJzZXQ6XCIpO1xuICAgICAgY29uc3QgYXJyID0gWy4uLnNldF07XG4gICAgICByZXR1cm4gdGhpcy5hcnJheShhcnIsIG9wdGlvbnMudW5vcmRlcmVkU2V0cyAhPT0gZmFsc2UpO1xuICAgIH0sXG4gICAgZmlsZShmaWxlKSB7XG4gICAgICB3cml0ZShcImZpbGU6XCIpO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goW2ZpbGUubmFtZSwgZmlsZS5zaXplLCBmaWxlLnR5cGUsIGZpbGUubGFzdE1vZGZpZWRdKTtcbiAgICB9LFxuICAgIGJsb2IoKSB7XG4gICAgICBpZiAob3B0aW9ucy5pZ25vcmVVbmtub3duKSB7XG4gICAgICAgIHJldHVybiB3cml0ZShcIltibG9iXVwiKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0hhc2hpbmcgQmxvYiBvYmplY3RzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXFxuVXNlIFwib3B0aW9ucy5yZXBsYWNlclwiIG9yIFwib3B0aW9ucy5pZ25vcmVVbmtub3duXCJcXG4nXG4gICAgICApO1xuICAgIH0sXG4gICAgZG9td2luZG93KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiZG9td2luZG93XCIpO1xuICAgIH0sXG4gICAgYmlnaW50KG51bWJlcikge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiYmlnaW50OlwiICsgbnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgLyogTm9kZS5qcyBzdGFuZGFyZCBuYXRpdmUgb2JqZWN0cyAqL1xuICAgIHByb2Nlc3MoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJwcm9jZXNzXCIpO1xuICAgIH0sXG4gICAgdGltZXIoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJ0aW1lclwiKTtcbiAgICB9LFxuICAgIHBpcGUoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJwaXBlXCIpO1xuICAgIH0sXG4gICAgdGNwKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidGNwXCIpO1xuICAgIH0sXG4gICAgdWRwKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidWRwXCIpO1xuICAgIH0sXG4gICAgdHR5KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidHR5XCIpO1xuICAgIH0sXG4gICAgc3RhdHdhdGNoZXIoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJzdGF0d2F0Y2hlclwiKTtcbiAgICB9LFxuICAgIHNlY3VyZWNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJzZWN1cmVjb250ZXh0XCIpO1xuICAgIH0sXG4gICAgY29ubmVjdGlvbigpIHtcbiAgICAgIHJldHVybiB3cml0ZShcImNvbm5lY3Rpb25cIik7XG4gICAgfSxcbiAgICB6bGliKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiemxpYlwiKTtcbiAgICB9LFxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJjb250ZXh0XCIpO1xuICAgIH0sXG4gICAgbm9kZXNjcmlwdCgpIHtcbiAgICAgIHJldHVybiB3cml0ZShcIm5vZGVzY3JpcHRcIik7XG4gICAgfSxcbiAgICBodHRwcGFyc2VyKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiaHR0cHBhcnNlclwiKTtcbiAgICB9LFxuICAgIGRhdGF2aWV3KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiZGF0YXZpZXdcIik7XG4gICAgfSxcbiAgICBzaWduYWwoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJzaWduYWxcIik7XG4gICAgfSxcbiAgICBmc2V2ZW50KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiZnNldmVudFwiKTtcbiAgICB9LFxuICAgIHRsc3dyYXAoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJ0bHN3cmFwXCIpO1xuICAgIH1cbiAgfTtcbn1cbmNvbnN0IG5hdGl2ZUZ1bmMgPSBcIltuYXRpdmUgY29kZV0gfVwiO1xuY29uc3QgbmF0aXZlRnVuY0xlbmd0aCA9IG5hdGl2ZUZ1bmMubGVuZ3RoO1xuZnVuY3Rpb24gaXNOYXRpdmVGdW5jdGlvbihmKSB7XG4gIGlmICh0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmKS5zbGljZSgtbmF0aXZlRnVuY0xlbmd0aCkgPT09IG5hdGl2ZUZ1bmM7XG59XG5cbmNsYXNzIFdvcmRBcnJheSB7XG4gIGNvbnN0cnVjdG9yKHdvcmRzLCBzaWdCeXRlcykge1xuICAgIHdvcmRzID0gdGhpcy53b3JkcyA9IHdvcmRzIHx8IFtdO1xuICAgIHRoaXMuc2lnQnl0ZXMgPSBzaWdCeXRlcyA9PT0gdm9pZCAwID8gd29yZHMubGVuZ3RoICogNCA6IHNpZ0J5dGVzO1xuICB9XG4gIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgICByZXR1cm4gKGVuY29kZXIgfHwgSGV4KS5zdHJpbmdpZnkodGhpcyk7XG4gIH1cbiAgY29uY2F0KHdvcmRBcnJheSkge1xuICAgIHRoaXMuY2xhbXAoKTtcbiAgICBpZiAodGhpcy5zaWdCeXRlcyAlIDQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZEFycmF5LnNpZ0J5dGVzOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGhhdEJ5dGUgPSB3b3JkQXJyYXkud29yZHNbaSA+Pj4gMl0gPj4+IDI0IC0gaSAlIDQgKiA4ICYgMjU1O1xuICAgICAgICB0aGlzLndvcmRzW3RoaXMuc2lnQnl0ZXMgKyBpID4+PiAyXSB8PSB0aGF0Qnl0ZSA8PCAyNCAtICh0aGlzLnNpZ0J5dGVzICsgaSkgJSA0ICogODtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3b3JkQXJyYXkuc2lnQnl0ZXM7IGogKz0gNCkge1xuICAgICAgICB0aGlzLndvcmRzW3RoaXMuc2lnQnl0ZXMgKyBqID4+PiAyXSA9IHdvcmRBcnJheS53b3Jkc1tqID4+PiAyXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zaWdCeXRlcyArPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xhbXAoKSB7XG4gICAgdGhpcy53b3Jkc1t0aGlzLnNpZ0J5dGVzID4+PiAyXSAmPSA0Mjk0OTY3Mjk1IDw8IDMyIC0gdGhpcy5zaWdCeXRlcyAlIDQgKiA4O1xuICAgIHRoaXMud29yZHMubGVuZ3RoID0gTWF0aC5jZWlsKHRoaXMuc2lnQnl0ZXMgLyA0KTtcbiAgfVxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IFdvcmRBcnJheShbLi4udGhpcy53b3Jkc10pO1xuICB9XG59XG5jb25zdCBIZXggPSB7XG4gIHN0cmluZ2lmeSh3b3JkQXJyYXkpIHtcbiAgICBjb25zdCBoZXhDaGFycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZEFycmF5LnNpZ0J5dGVzOyBpKyspIHtcbiAgICAgIGNvbnN0IGJpdGUgPSB3b3JkQXJyYXkud29yZHNbaSA+Pj4gMl0gPj4+IDI0IC0gaSAlIDQgKiA4ICYgMjU1O1xuICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSA+Pj4gNCkudG9TdHJpbmcoMTYpLCAoYml0ZSAmIDE1KS50b1N0cmluZygxNikpO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Q2hhcnMuam9pbihcIlwiKTtcbiAgfVxufTtcbmNvbnN0IEJhc2U2NCA9IHtcbiAgc3RyaW5naWZ5KHdvcmRBcnJheSkge1xuICAgIGNvbnN0IGtleVN0ciA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIjtcbiAgICBjb25zdCBiYXNlNjRDaGFycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZEFycmF5LnNpZ0J5dGVzOyBpICs9IDMpIHtcbiAgICAgIGNvbnN0IGJ5dGUxID0gd29yZEFycmF5LndvcmRzW2kgPj4+IDJdID4+PiAyNCAtIGkgJSA0ICogOCAmIDI1NTtcbiAgICAgIGNvbnN0IGJ5dGUyID0gd29yZEFycmF5LndvcmRzW2kgKyAxID4+PiAyXSA+Pj4gMjQgLSAoaSArIDEpICUgNCAqIDggJiAyNTU7XG4gICAgICBjb25zdCBieXRlMyA9IHdvcmRBcnJheS53b3Jkc1tpICsgMiA+Pj4gMl0gPj4+IDI0IC0gKGkgKyAyKSAlIDQgKiA4ICYgMjU1O1xuICAgICAgY29uc3QgdHJpcGxldCA9IGJ5dGUxIDw8IDE2IHwgYnl0ZTIgPDwgOCB8IGJ5dGUzO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA0ICYmIGkgKiA4ICsgaiAqIDYgPCB3b3JkQXJyYXkuc2lnQnl0ZXMgKiA4OyBqKyspIHtcbiAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChrZXlTdHIuY2hhckF0KHRyaXBsZXQgPj4+IDYgKiAoMyAtIGopICYgNjMpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U2NENoYXJzLmpvaW4oXCJcIik7XG4gIH1cbn07XG5jb25zdCBMYXRpbjEgPSB7XG4gIHBhcnNlKGxhdGluMVN0cikge1xuICAgIGNvbnN0IGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG4gICAgY29uc3Qgd29yZHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhdGluMVN0ckxlbmd0aDsgaSsrKSB7XG4gICAgICB3b3Jkc1tpID4+PiAyXSB8PSAobGF0aW4xU3RyLmNoYXJDb2RlQXQoaSkgJiAyNTUpIDw8IDI0IC0gaSAlIDQgKiA4O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdvcmRBcnJheSh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcbiAgfVxufTtcbmNvbnN0IFV0ZjggPSB7XG4gIHBhcnNlKHV0ZjhTdHIpIHtcbiAgICByZXR1cm4gTGF0aW4xLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh1dGY4U3RyKSkpO1xuICB9XG59O1xuY2xhc3MgQnVmZmVyZWRCbG9ja0FsZ29yaXRobSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5KCk7XG4gICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG4gICAgdGhpcy5fbWluQnVmZmVyU2l6ZSA9IDA7XG4gICAgdGhpcy5ibG9ja1NpemUgPSA1MTIgLyAzMjtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLl9kYXRhID0gbmV3IFdvcmRBcnJheSgpO1xuICAgIHRoaXMuX25EYXRhQnl0ZXMgPSAwO1xuICB9XG4gIF9hcHBlbmQoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZGF0YSA9IFV0ZjgucGFyc2UoZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGEuY29uY2F0KGRhdGEpO1xuICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9kb1Byb2Nlc3NCbG9jayhfZGF0YVdvcmRzLCBfb2Zmc2V0KSB7XG4gIH1cbiAgX3Byb2Nlc3MoZG9GbHVzaCkge1xuICAgIGxldCBwcm9jZXNzZWRXb3JkcztcbiAgICBsZXQgbkJsb2Nrc1JlYWR5ID0gdGhpcy5fZGF0YS5zaWdCeXRlcyAvICh0aGlzLmJsb2NrU2l6ZSAqIDQpO1xuICAgIGlmIChkb0ZsdXNoKSB7XG4gICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5tYXgoKG5CbG9ja3NSZWFkeSB8IDApIC0gdGhpcy5fbWluQnVmZmVyU2l6ZSwgMCk7XG4gICAgfVxuICAgIGNvbnN0IG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogdGhpcy5ibG9ja1NpemU7XG4gICAgY29uc3QgbkJ5dGVzUmVhZHkgPSBNYXRoLm1pbihuV29yZHNSZWFkeSAqIDQsIHRoaXMuX2RhdGEuc2lnQnl0ZXMpO1xuICAgIGlmIChuV29yZHNSZWFkeSkge1xuICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbldvcmRzUmVhZHk7IG9mZnNldCArPSB0aGlzLmJsb2NrU2l6ZSkge1xuICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayh0aGlzLl9kYXRhLndvcmRzLCBvZmZzZXQpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkV29yZHMgPSB0aGlzLl9kYXRhLndvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG4gICAgICB0aGlzLl9kYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdvcmRBcnJheShwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuICB9XG59XG5jbGFzcyBIYXNoZXIgZXh0ZW5kcyBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtIHtcbiAgdXBkYXRlKG1lc3NhZ2VVcGRhdGUpIHtcbiAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG4gICAgdGhpcy5fcHJvY2VzcygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpIHtcbiAgICBpZiAobWVzc2FnZVVwZGF0ZSkge1xuICAgICAgdGhpcy5fYXBwZW5kKG1lc3NhZ2VVcGRhdGUpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBIID0gW1xuICAxNzc5MDMzNzAzLFxuICAtMTE1MDgzMzAxOSxcbiAgMTAxMzkwNDI0MixcbiAgLTE1MjE0ODY1MzQsXG4gIDEzNTk4OTMxMTksXG4gIC0xNjk0MTQ0MzcyLFxuICA1Mjg3MzQ2MzUsXG4gIDE1NDE0NTkyMjVcbl07XG5jb25zdCBLID0gW1xuICAxMTE2MzUyNDA4LFxuICAxODk5NDQ3NDQxLFxuICAtMTI0NTY0MzgyNSxcbiAgLTM3Mzk1NzcyMyxcbiAgOTYxOTg3MTYzLFxuICAxNTA4OTcwOTkzLFxuICAtMTg0MTMzMTU0OCxcbiAgLTE0MjQyMDQwNzUsXG4gIC02NzA1ODYyMTYsXG4gIDMxMDU5ODQwMSxcbiAgNjA3MjI1Mjc4LFxuICAxNDI2ODgxOTg3LFxuICAxOTI1MDc4Mzg4LFxuICAtMjEzMjg4OTA5MCxcbiAgLTE2ODAwNzkxOTMsXG4gIC0xMDQ2NzQ0NzE2LFxuICAtNDU5NTc2ODk1LFxuICAtMjcyNzQyNTIyLFxuICAyNjQzNDcwNzgsXG4gIDYwNDgwNzYyOCxcbiAgNzcwMjU1OTgzLFxuICAxMjQ5MTUwMTIyLFxuICAxNTU1MDgxNjkyLFxuICAxOTk2MDY0OTg2LFxuICAtMTc0MDc0NjQxNCxcbiAgLTE0NzMxMzI5NDcsXG4gIC0xMzQxOTcwNDg4LFxuICAtMTA4NDY1MzYyNSxcbiAgLTk1ODM5NTQwNSxcbiAgLTcxMDQzODU4NSxcbiAgMTEzOTI2OTkzLFxuICAzMzgyNDE4OTUsXG4gIDY2NjMwNzIwNSxcbiAgNzczNTI5OTEyLFxuICAxMjk0NzU3MzcyLFxuICAxMzk2MTgyMjkxLFxuICAxNjk1MTgzNzAwLFxuICAxOTg2NjYxMDUxLFxuICAtMjExNzk0MDk0NixcbiAgLTE4MzgwMTEyNTksXG4gIC0xNTY0NDgxMzc1LFxuICAtMTQ3NDY2NDg4NSxcbiAgLTEwMzUyMzY0OTYsXG4gIC05NDkyMDI1MjUsXG4gIC03Nzg5MDE0NzksXG4gIC02OTQ2MTQ0OTIsXG4gIC0yMDAzOTUzODcsXG4gIDI3NTQyMzM0NCxcbiAgNDMwMjI3NzM0LFxuICA1MDY5NDg2MTYsXG4gIDY1OTA2MDU1NixcbiAgODgzOTk3ODc3LFxuICA5NTgxMzk1NzEsXG4gIDEzMjI4MjIyMTgsXG4gIDE1MzcwMDIwNjMsXG4gIDE3NDc4NzM3NzksXG4gIDE5NTU1NjIyMjIsXG4gIDIwMjQxMDQ4MTUsXG4gIC0yMDY3MjM2ODQ0LFxuICAtMTkzMzExNDg3MixcbiAgLTE4NjY1MzA4MjIsXG4gIC0xNTM4MjMzMTA5LFxuICAtMTA5MDkzNTgxNyxcbiAgLTk2NTY0MTk5OFxuXTtcbmNvbnN0IFcgPSBbXTtcbmNsYXNzIFNIQTI1NiBleHRlbmRzIEhhc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkoWy4uLkhdKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICBzdXBlci5yZXNldCgpO1xuICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5KFsuLi5IXSk7XG4gIH1cbiAgX2RvUHJvY2Vzc0Jsb2NrKE0sIG9mZnNldCkge1xuICAgIGNvbnN0IEgyID0gdGhpcy5faGFzaC53b3JkcztcbiAgICBsZXQgYSA9IEgyWzBdO1xuICAgIGxldCBiID0gSDJbMV07XG4gICAgbGV0IGMgPSBIMlsyXTtcbiAgICBsZXQgZCA9IEgyWzNdO1xuICAgIGxldCBlID0gSDJbNF07XG4gICAgbGV0IGYgPSBIMls1XTtcbiAgICBsZXQgZyA9IEgyWzZdO1xuICAgIGxldCBoID0gSDJbN107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDE2KSB7XG4gICAgICAgIFdbaV0gPSBNW29mZnNldCArIGldIHwgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdhbW1hMHggPSBXW2kgLSAxNV07XG4gICAgICAgIGNvbnN0IGdhbW1hMCA9IChnYW1tYTB4IDw8IDI1IHwgZ2FtbWEweCA+Pj4gNykgXiAoZ2FtbWEweCA8PCAxNCB8IGdhbW1hMHggPj4+IDE4KSBeIGdhbW1hMHggPj4+IDM7XG4gICAgICAgIGNvbnN0IGdhbW1hMXggPSBXW2kgLSAyXTtcbiAgICAgICAgY29uc3QgZ2FtbWExID0gKGdhbW1hMXggPDwgMTUgfCBnYW1tYTF4ID4+PiAxNykgXiAoZ2FtbWExeCA8PCAxMyB8IGdhbW1hMXggPj4+IDE5KSBeIGdhbW1hMXggPj4+IDEwO1xuICAgICAgICBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl07XG4gICAgICB9XG4gICAgICBjb25zdCBjaCA9IGUgJiBmIF4gfmUgJiBnO1xuICAgICAgY29uc3QgbWFqID0gYSAmIGIgXiBhICYgYyBeIGIgJiBjO1xuICAgICAgY29uc3Qgc2lnbWEwID0gKGEgPDwgMzAgfCBhID4+PiAyKSBeIChhIDw8IDE5IHwgYSA+Pj4gMTMpIF4gKGEgPDwgMTAgfCBhID4+PiAyMik7XG4gICAgICBjb25zdCBzaWdtYTEgPSAoZSA8PCAyNiB8IGUgPj4+IDYpIF4gKGUgPDwgMjEgfCBlID4+PiAxMSkgXiAoZSA8PCA3IHwgZSA+Pj4gMjUpO1xuICAgICAgY29uc3QgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcbiAgICAgIGNvbnN0IHQyID0gc2lnbWEwICsgbWFqO1xuICAgICAgaCA9IGc7XG4gICAgICBnID0gZjtcbiAgICAgIGYgPSBlO1xuICAgICAgZSA9IGQgKyB0MSB8IDA7XG4gICAgICBkID0gYztcbiAgICAgIGMgPSBiO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gdDEgKyB0MiB8IDA7XG4gICAgfVxuICAgIEgyWzBdID0gSDJbMF0gKyBhIHwgMDtcbiAgICBIMlsxXSA9IEgyWzFdICsgYiB8IDA7XG4gICAgSDJbMl0gPSBIMlsyXSArIGMgfCAwO1xuICAgIEgyWzNdID0gSDJbM10gKyBkIHwgMDtcbiAgICBIMls0XSA9IEgyWzRdICsgZSB8IDA7XG4gICAgSDJbNV0gPSBIMls1XSArIGYgfCAwO1xuICAgIEgyWzZdID0gSDJbNl0gKyBnIHwgMDtcbiAgICBIMls3XSA9IEgyWzddICsgaCB8IDA7XG4gIH1cbiAgZmluYWxpemUobWVzc2FnZVVwZGF0ZSkge1xuICAgIHN1cGVyLmZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpO1xuICAgIGNvbnN0IG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcbiAgICBjb25zdCBuQml0c0xlZnQgPSB0aGlzLl9kYXRhLnNpZ0J5dGVzICogODtcbiAgICB0aGlzLl9kYXRhLndvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMTI4IDw8IDI0IC0gbkJpdHNMZWZ0ICUgMzI7XG4gICAgdGhpcy5fZGF0YS53b3Jkc1sobkJpdHNMZWZ0ICsgNjQgPj4+IDkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKFxuICAgICAgbkJpdHNUb3RhbCAvIDQyOTQ5NjcyOTZcbiAgICApO1xuICAgIHRoaXMuX2RhdGEud29yZHNbKG5CaXRzTGVmdCArIDY0ID4+PiA5IDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcbiAgICB0aGlzLl9kYXRhLnNpZ0J5dGVzID0gdGhpcy5fZGF0YS53b3Jkcy5sZW5ndGggKiA0O1xuICAgIHRoaXMuX3Byb2Nlc3MoKTtcbiAgICByZXR1cm4gdGhpcy5faGFzaDtcbiAgfVxufVxuZnVuY3Rpb24gc2hhMjU2KG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBTSEEyNTYoKS5maW5hbGl6ZShtZXNzYWdlKS50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gc2hhMjU2YmFzZTY0KG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBTSEEyNTYoKS5maW5hbGl6ZShtZXNzYWdlKS50b1N0cmluZyhCYXNlNjQpO1xufVxuXG5mdW5jdGlvbiBoYXNoKG9iamVjdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGhhc2hlZCA9IHR5cGVvZiBvYmplY3QgPT09IFwic3RyaW5nXCIgPyBvYmplY3QgOiBvYmplY3RIYXNoKG9iamVjdCwgb3B0aW9ucyk7XG4gIHJldHVybiBzaGEyNTZiYXNlNjQoaGFzaGVkKS5zbGljZSgwLCAxMCk7XG59XG5cbmZ1bmN0aW9uIG11cm11ckhhc2goa2V5LCBzZWVkID0gMCkge1xuICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGtleSA9IGNyZWF0ZUJ1ZmZlcihrZXkpO1xuICB9XG4gIGxldCBpID0gMDtcbiAgbGV0IGgxID0gc2VlZDtcbiAgbGV0IGsxO1xuICBsZXQgaDFiO1xuICBjb25zdCByZW1haW5kZXIgPSBrZXkubGVuZ3RoICYgMztcbiAgY29uc3QgYnl0ZXMgPSBrZXkubGVuZ3RoIC0gcmVtYWluZGVyO1xuICBjb25zdCBjMSA9IDM0MzI5MTgzNTM7XG4gIGNvbnN0IGMyID0gNDYxODQ1OTA3O1xuICB3aGlsZSAoaSA8IGJ5dGVzKSB7XG4gICAgazEgPSBrZXlbaV0gJiAyNTUgfCAoa2V5WysraV0gJiAyNTUpIDw8IDggfCAoa2V5WysraV0gJiAyNTUpIDw8IDE2IHwgKGtleVsrK2ldICYgMjU1KSA8PCAyNDtcbiAgICArK2k7XG4gICAgazEgPSAoazEgJiA2NTUzNSkgKiBjMSArICgoKGsxID4+PiAxNikgKiBjMSAmIDY1NTM1KSA8PCAxNikgJiA0Mjk0OTY3Mjk1O1xuICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgazEgPSAoazEgJiA2NTUzNSkgKiBjMiArICgoKGsxID4+PiAxNikgKiBjMiAmIDY1NTM1KSA8PCAxNikgJiA0Mjk0OTY3Mjk1O1xuICAgIGgxIF49IGsxO1xuICAgIGgxID0gaDEgPDwgMTMgfCBoMSA+Pj4gMTk7XG4gICAgaDFiID0gKGgxICYgNjU1MzUpICogNSArICgoKGgxID4+PiAxNikgKiA1ICYgNjU1MzUpIDw8IDE2KSAmIDQyOTQ5NjcyOTU7XG4gICAgaDEgPSAoaDFiICYgNjU1MzUpICsgMjc0OTIgKyAoKChoMWIgPj4+IDE2KSArIDU4OTY0ICYgNjU1MzUpIDw8IDE2KTtcbiAgfVxuICBrMSA9IDA7XG4gIHN3aXRjaCAocmVtYWluZGVyKSB7XG4gICAgY2FzZSAzOiB7XG4gICAgICBrMSBePSAoa2V5W2kgKyAyXSAmIDI1NSkgPDwgMTY7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICBrMSBePSAoa2V5W2kgKyAxXSAmIDI1NSkgPDwgODtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDE6IHtcbiAgICAgIGsxIF49IGtleVtpXSAmIDI1NTtcbiAgICAgIGsxID0gKGsxICYgNjU1MzUpICogYzEgKyAoKChrMSA+Pj4gMTYpICogYzEgJiA2NTUzNSkgPDwgMTYpICYgNDI5NDk2NzI5NTtcbiAgICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgICBrMSA9IChrMSAmIDY1NTM1KSAqIGMyICsgKCgoazEgPj4+IDE2KSAqIGMyICYgNjU1MzUpIDw8IDE2KSAmIDQyOTQ5NjcyOTU7XG4gICAgICBoMSBePSBrMTtcbiAgICB9XG4gIH1cbiAgaDEgXj0ga2V5Lmxlbmd0aDtcbiAgaDEgXj0gaDEgPj4+IDE2O1xuICBoMSA9IChoMSAmIDY1NTM1KSAqIDIyNDY4MjI1MDcgKyAoKChoMSA+Pj4gMTYpICogMjI0NjgyMjUwNyAmIDY1NTM1KSA8PCAxNikgJiA0Mjk0OTY3Mjk1O1xuICBoMSBePSBoMSA+Pj4gMTM7XG4gIGgxID0gKGgxICYgNjU1MzUpICogMzI2NjQ4OTkwOSArICgoKGgxID4+PiAxNikgKiAzMjY2NDg5OTA5ICYgNjU1MzUpIDw8IDE2KSAmIDQyOTQ5NjcyOTU7XG4gIGgxIF49IGgxID4+PiAxNjtcbiAgcmV0dXJuIGgxID4+PiAwO1xufVxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyKHZhbCkge1xuICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbCk7XG59XG5cbmZ1bmN0aW9uIGlzRXF1YWwob2JqZWN0MSwgb2JqZWN0MiwgaGFzaE9wdGlvbnMgPSB7fSkge1xuICBpZiAob2JqZWN0MSA9PT0gb2JqZWN0Mikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChvYmplY3RIYXNoKG9iamVjdDEsIGhhc2hPcHRpb25zKSA9PT0gb2JqZWN0SGFzaChvYmplY3QyLCBoYXNoT3B0aW9ucykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGRpZmYob2JqMSwgb2JqMiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGgxID0gX3RvSGFzaGVkT2JqZWN0KG9iajEsIG9wdHMpO1xuICBjb25zdCBoMiA9IF90b0hhc2hlZE9iamVjdChvYmoyLCBvcHRzKTtcbiAgcmV0dXJuIF9kaWZmKGgxLCBoMiwgb3B0cyk7XG59XG5mdW5jdGlvbiBfZGlmZihoMSwgaDIsIG9wdHMgPSB7fSkge1xuICBjb25zdCBkaWZmcyA9IFtdO1xuICBjb25zdCBhbGxQcm9wcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtcbiAgICAuLi5PYmplY3Qua2V5cyhoMS5wcm9wcyB8fCB7fSksXG4gICAgLi4uT2JqZWN0LmtleXMoaDIucHJvcHMgfHwge30pXG4gIF0pO1xuICBpZiAoaDEucHJvcHMgJiYgaDIucHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgIGNvbnN0IHAxID0gaDEucHJvcHNbcHJvcF07XG4gICAgICBjb25zdCBwMiA9IGgyLnByb3BzW3Byb3BdO1xuICAgICAgaWYgKHAxICYmIHAyKSB7XG4gICAgICAgIGRpZmZzLnB1c2goLi4uX2RpZmYoaDEucHJvcHM/Lltwcm9wXSwgaDIucHJvcHM/Lltwcm9wXSwgb3B0cykpO1xuICAgICAgfSBlbHNlIGlmIChwMSB8fCBwMikge1xuICAgICAgICBkaWZmcy5wdXNoKFxuICAgICAgICAgIG5ldyBEaWZmRW50cnkoKHAyIHx8IHAxKS5rZXksIHAxID8gXCJyZW1vdmVkXCIgOiBcImFkZGVkXCIsIHAyLCBwMSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGFsbFByb3BzLnNpemUgPT09IDAgJiYgaDEuaGFzaCAhPT0gaDIuaGFzaCkge1xuICAgIGRpZmZzLnB1c2gobmV3IERpZmZFbnRyeSgoaDIgfHwgaDEpLmtleSwgXCJjaGFuZ2VkXCIsIGgyLCBoMSkpO1xuICB9XG4gIHJldHVybiBkaWZmcztcbn1cbmZ1bmN0aW9uIF90b0hhc2hlZE9iamVjdChvYmosIG9wdHMsIGtleSA9IFwiXCIpIHtcbiAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG5ldyBEaWZmSGFzaGVkT2JqZWN0KGtleSwgb2JqLCBvYmplY3RIYXNoKG9iaiwgb3B0cykpO1xuICB9XG4gIGNvbnN0IHByb3BzID0ge307XG4gIGNvbnN0IGhhc2hlcyA9IFtdO1xuICBmb3IgKGNvbnN0IF9rZXkgaW4gb2JqKSB7XG4gICAgcHJvcHNbX2tleV0gPSBfdG9IYXNoZWRPYmplY3QoXG4gICAgICBvYmpbX2tleV0sXG4gICAgICBvcHRzLFxuICAgICAga2V5ID8gYCR7a2V5fS4ke19rZXl9YCA6IF9rZXlcbiAgICApO1xuICAgIGhhc2hlcy5wdXNoKHByb3BzW19rZXldLmhhc2gpO1xuICB9XG4gIHJldHVybiBuZXcgRGlmZkhhc2hlZE9iamVjdChrZXksIG9iaiwgYHske2hhc2hlcy5qb2luKFwiOlwiKX19YCwgcHJvcHMpO1xufVxuY2xhc3MgRGlmZkVudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3Ioa2V5LCB0eXBlLCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMubmV3VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLm9sZFZhbHVlID0gb2xkVmFsdWU7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gIH1cbiAgdG9KU09OKCkge1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFwiYWRkZWRcIjoge1xuICAgICAgICByZXR1cm4gYEFkZGVkICAgXFxgJHt0aGlzLmtleX1cXGBgO1xuICAgICAgfVxuICAgICAgY2FzZSBcInJlbW92ZWRcIjoge1xuICAgICAgICByZXR1cm4gYFJlbW92ZWQgXFxgJHt0aGlzLmtleX1cXGBgO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNoYW5nZWRcIjoge1xuICAgICAgICByZXR1cm4gYENoYW5nZWQgXFxgJHt0aGlzLmtleX1cXGAgZnJvbSBcXGAke3RoaXMub2xkVmFsdWU/LnRvU3RyaW5nKCkgfHwgXCItXCJ9XFxgIHRvIFxcYCR7dGhpcy5uZXdWYWx1ZS50b1N0cmluZygpfVxcYGA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5jbGFzcyBEaWZmSGFzaGVkT2JqZWN0IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3Ioa2V5LCB2YWx1ZSwgaGFzaCwgcHJvcHMpIHtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5oYXNoID0gaGFzaDtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgIHJldHVybiBgeyR7T2JqZWN0LmtleXModGhpcy5wcm9wcykuam9pbihcIixcIil9fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGsgPSB0aGlzLmtleSB8fCBcIi5cIjtcbiAgICBpZiAodGhpcy5wcm9wcykge1xuICAgICAgcmV0dXJuIGAke2t9KHske09iamVjdC5rZXlzKHRoaXMucHJvcHMpLmpvaW4oXCIsXCIpfX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2t9KCR7dGhpcy52YWx1ZX0pYDtcbiAgfVxufVxuXG5leHBvcnQgeyBkaWZmLCBoYXNoLCBpc0VxdWFsLCBtdXJtdXJIYXNoLCBvYmplY3RIYXNoLCBzaGEyNTYsIHNoYTI1NmJhc2U2NCB9O1xuIiwgInZhciB1dGlsO1xuKGZ1bmN0aW9uICh1dGlsKSB7XG4gICAgdXRpbC5hc3NlcnRFcXVhbCA9ICh2YWwpID0+IHZhbDtcbiAgICBmdW5jdGlvbiBhc3NlcnRJcyhfYXJnKSB7IH1cbiAgICB1dGlsLmFzc2VydElzID0gYXNzZXJ0SXM7XG4gICAgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuICAgIHV0aWwuYXNzZXJ0TmV2ZXIgPSBhc3NlcnROZXZlcjtcbiAgICB1dGlsLmFycmF5VG9FbnVtID0gKGl0ZW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIG9ialtpdGVtXSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZEtleXMgPSB1dGlsLm9iamVjdEtleXMob2JqKS5maWx0ZXIoKGspID0+IHR5cGVvZiBvYmpbb2JqW2tdXSAhPT0gXCJudW1iZXJcIik7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiB2YWxpZEtleXMpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkW2tdID0gb2JqW2tdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyhmaWx0ZXJlZCk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdFZhbHVlcyA9IChvYmopID0+IHtcbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0S2V5cyhvYmopLm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtlXTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdEtleXMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09IFwiZnVuY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgPyAob2JqKSA9PiBPYmplY3Qua2V5cyhvYmopIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6IChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9O1xuICAgIHV0aWwuZmluZCA9IChhcnIsIGNoZWNrZXIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGNoZWNrZXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHV0aWwuaXNJbnRlZ2VyID0gdHlwZW9mIE51bWJlci5pc0ludGVnZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/ICh2YWwpID0+IE51bWJlci5pc0ludGVnZXIodmFsKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKHZhbCkgJiYgTWF0aC5mbG9vcih2YWwpID09PSB2YWw7XG4gICAgZnVuY3Rpb24gam9pblZhbHVlcyhhcnJheSwgc2VwYXJhdG9yID0gXCIgfCBcIikge1xuICAgICAgICByZXR1cm4gYXJyYXlcbiAgICAgICAgICAgIC5tYXAoKHZhbCkgPT4gKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgPyBgJyR7dmFsfSdgIDogdmFsKSlcbiAgICAgICAgICAgIC5qb2luKHNlcGFyYXRvcik7XG4gICAgfVxuICAgIHV0aWwuam9pblZhbHVlcyA9IGpvaW5WYWx1ZXM7XG4gICAgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIgPSAoXywgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSh1dGlsIHx8ICh1dGlsID0ge30pKTtcbnZhciBvYmplY3RVdGlsO1xuKGZ1bmN0aW9uIChvYmplY3RVdGlsKSB7XG4gICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyA9IChmaXJzdCwgc2Vjb25kKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5maXJzdCxcbiAgICAgICAgICAgIC4uLnNlY29uZCwgLy8gc2Vjb25kIG92ZXJ3cml0ZXMgZmlyc3RcbiAgICAgICAgfTtcbiAgICB9O1xufSkob2JqZWN0VXRpbCB8fCAob2JqZWN0VXRpbCA9IHt9KSk7XG5jb25zdCBab2RQYXJzZWRUeXBlID0gdXRpbC5hcnJheVRvRW51bShbXG4gICAgXCJzdHJpbmdcIixcbiAgICBcIm5hblwiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJmbG9hdFwiLFxuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiZGF0ZVwiLFxuICAgIFwiYmlnaW50XCIsXG4gICAgXCJzeW1ib2xcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgXCJ1bmRlZmluZWRcIixcbiAgICBcIm51bGxcIixcbiAgICBcImFycmF5XCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcInVua25vd25cIixcbiAgICBcInByb21pc2VcIixcbiAgICBcInZvaWRcIixcbiAgICBcIm5ldmVyXCIsXG4gICAgXCJtYXBcIixcbiAgICBcInNldFwiLFxuXSk7XG5jb25zdCBnZXRQYXJzZWRUeXBlID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZDtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc3RyaW5nO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICByZXR1cm4gaXNOYU4oZGF0YSkgPyBab2RQYXJzZWRUeXBlLm5hbiA6IFpvZFBhcnNlZFR5cGUubnVtYmVyO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYm9vbGVhbjtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5mdW5jdGlvbjtcbiAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYmlnaW50O1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zeW1ib2w7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS50aGVuICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGRhdGEudGhlbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgZGF0YS5jYXRjaCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5wcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm1hcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgU2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIERhdGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUub2JqZWN0O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUudW5rbm93bjtcbiAgICB9XG59O1xuXG5jb25zdCBab2RJc3N1ZUNvZGUgPSB1dGlsLmFycmF5VG9FbnVtKFtcbiAgICBcImludmFsaWRfdHlwZVwiLFxuICAgIFwiaW52YWxpZF9saXRlcmFsXCIsXG4gICAgXCJjdXN0b21cIixcbiAgICBcImludmFsaWRfdW5pb25cIixcbiAgICBcImludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvclwiLFxuICAgIFwiaW52YWxpZF9lbnVtX3ZhbHVlXCIsXG4gICAgXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgIFwiaW52YWxpZF9hcmd1bWVudHNcIixcbiAgICBcImludmFsaWRfcmV0dXJuX3R5cGVcIixcbiAgICBcImludmFsaWRfZGF0ZVwiLFxuICAgIFwiaW52YWxpZF9zdHJpbmdcIixcbiAgICBcInRvb19zbWFsbFwiLFxuICAgIFwidG9vX2JpZ1wiLFxuICAgIFwiaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXNcIixcbiAgICBcIm5vdF9tdWx0aXBsZV9vZlwiLFxuICAgIFwibm90X2Zpbml0ZVwiLFxuXSk7XG5jb25zdCBxdW90ZWxlc3NKc29uID0gKG9iaikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgIHJldHVybiBqc29uLnJlcGxhY2UoL1wiKFteXCJdKylcIjovZywgXCIkMTpcIik7XG59O1xuY2xhc3MgWm9kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoaXNzdWVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaXNzdWVzID0gW107XG4gICAgICAgIHRoaXMuYWRkSXNzdWUgPSAoc3ViKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzc3VlcyA9IFsuLi50aGlzLmlzc3Vlcywgc3ViXTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZXMgPSAoc3VicyA9IFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzc3VlcyA9IFsuLi50aGlzLmlzc3VlcywgLi4uc3Vic107XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdHVhbFByb3RvID0gbmV3LnRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBiYW4vYmFuXG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgYWN0dWFsUHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBhY3R1YWxQcm90bztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hbWUgPSBcIlpvZEVycm9yXCI7XG4gICAgICAgIHRoaXMuaXNzdWVzID0gaXNzdWVzO1xuICAgIH1cbiAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXM7XG4gICAgfVxuICAgIGZvcm1hdChfbWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlciA9IF9tYXBwZXIgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpc3N1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWUudW5pb25FcnJvcnMubWFwKHByb2Nlc3NFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcihpc3N1ZS5yZXR1cm5UeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfYXJndW1lbnRzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLmFyZ3VtZW50c0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGlzc3VlLnBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGlzc3VlLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGlzc3VlLnBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAodHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHR5cGVvZiBlbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc3QgZXJyb3JBcnJheTogYW55ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlcnJvckFycmF5Ll9lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgZXJyb3JBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXS5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3VycltlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3NFcnJvcih0aGlzKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkRXJyb3JzO1xuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgWm9kRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIFpvZEVycm9yOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH1cbiAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgfVxuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICBmbGF0dGVuKG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBmb3JtRXJyb3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoc3ViLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSA9IGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSB8fCBbXTtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tzdWIucGF0aFswXV0ucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtRXJyb3JzLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGZvcm1FcnJvcnMsIGZpZWxkRXJyb3JzIH07XG4gICAgfVxuICAgIGdldCBmb3JtRXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0dGVuKCk7XG4gICAgfVxufVxuWm9kRXJyb3IuY3JlYXRlID0gKGlzc3VlcykgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKGlzc3Vlcyk7XG4gICAgcmV0dXJuIGVycm9yO1xufTtcblxuY29uc3QgZXJyb3JNYXAgPSAoaXNzdWUsIF9jdHgpID0+IHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnJlY2VpdmVkID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlJlcXVpcmVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEV4cGVjdGVkICR7aXNzdWUuZXhwZWN0ZWR9LCByZWNlaXZlZCAke2lzc3VlLnJlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGxpdGVyYWwgdmFsdWUsIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoaXNzdWUuZXhwZWN0ZWQsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBVbnJlY29nbml6ZWQga2V5KHMpIGluIG9iamVjdDogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb246XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBlbnVtIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX0sIHJlY2VpdmVkICcke2lzc3VlLnJlY2VpdmVkfSdgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGZ1bmN0aW9uIGFyZ3VtZW50c2A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBmdW5jdGlvbiByZXR1cm4gdHlwZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9kYXRlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGRhdGVgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwiaW5jbHVkZXNcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBpbmNsdWRlIFwiJHtpc3N1ZS52YWxpZGF0aW9uLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uLnBvc2l0aW9uID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYCR7bWVzc2FnZX0gYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2lzc3VlLnZhbGlkYXRpb24ucG9zaXRpb259YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcInN0YXJ0c1dpdGhcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBzdGFydCB3aXRoIFwiJHtpc3N1ZS52YWxpZGF0aW9uLnN0YXJ0c1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImVuZHNXaXRoXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3QgZW5kIHdpdGggXCIke2lzc3VlLnZhbGlkYXRpb24uZW5kc1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihpc3N1ZS52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS52YWxpZGF0aW9uICE9PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgJHtpc3N1ZS52YWxpZGF0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX3NtYWxsOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnR5cGUgPT09IFwiYXJyYXlcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEFycmF5IG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG1vcmUgdGhhbmB9ICR7aXNzdWUubWluaW11bX0gZWxlbWVudChzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgU3RyaW5nIG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG92ZXJgfSAke2lzc3VlLm1pbmltdW19IGNoYXJhY3RlcihzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5IGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBncmVhdGVyIHRoYW4gYH0ke2lzc3VlLm1pbmltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiZGF0ZVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRGF0ZSBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseSBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgZ3JlYXRlciB0aGFuIGB9JHtuZXcgRGF0ZShOdW1iZXIoaXNzdWUubWluaW11bSkpfWA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnRvb19iaWc6XG4gICAgICAgICAgICBpZiAoaXNzdWUudHlwZSA9PT0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQXJyYXkgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbW9zdGAgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfSBlbGVtZW50KHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBTdHJpbmcgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbW9zdGAgOiBgdW5kZXJgfSAke2lzc3VlLm1heGltdW19IGNoYXJhY3RlcihzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5YFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgbGVzcyB0aGFuIG9yIGVxdWFsIHRvYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImJpZ2ludFwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQmlnSW50IG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5YFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgbGVzcyB0aGFuIG9yIGVxdWFsIHRvYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImRhdGVcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYERhdGUgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBzbWFsbGVyIHRoYW5gfSAke25ldyBEYXRlKE51bWJlcihpc3N1ZS5tYXhpbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuY3VzdG9tOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlczpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW50ZXJzZWN0aW9uIHJlc3VsdHMgY291bGQgbm90IGJlIG1lcmdlZGA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7aXNzdWUubXVsdGlwbGVPZn1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLm5vdF9maW5pdGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJOdW1iZXIgbXVzdCBiZSBmaW5pdGVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbWVzc2FnZSA9IF9jdHguZGVmYXVsdEVycm9yO1xuICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihpc3N1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IG1lc3NhZ2UgfTtcbn07XG5cbmxldCBvdmVycmlkZUVycm9yTWFwID0gZXJyb3JNYXA7XG5mdW5jdGlvbiBzZXRFcnJvck1hcChtYXApIHtcbiAgICBvdmVycmlkZUVycm9yTWFwID0gbWFwO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3JNYXAoKSB7XG4gICAgcmV0dXJuIG92ZXJyaWRlRXJyb3JNYXA7XG59XG5cbmNvbnN0IG1ha2VJc3N1ZSA9IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IGRhdGEsIHBhdGgsIGVycm9yTWFwcywgaXNzdWVEYXRhIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBbLi4ucGF0aCwgLi4uKGlzc3VlRGF0YS5wYXRoIHx8IFtdKV07XG4gICAgY29uc3QgZnVsbElzc3VlID0ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgIH07XG4gICAgaWYgKGlzc3VlRGF0YS5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICAgICAgbWVzc2FnZTogaXNzdWVEYXRhLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGNvbnN0IG1hcHMgPSBlcnJvck1hcHNcbiAgICAgICAgLmZpbHRlcigobSkgPT4gISFtKVxuICAgICAgICAuc2xpY2UoKVxuICAgICAgICAucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgbWFwIG9mIG1hcHMpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gbWFwKGZ1bGxJc3N1ZSwgeyBkYXRhLCBkZWZhdWx0RXJyb3I6IGVycm9yTWVzc2FnZSB9KS5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgfTtcbn07XG5jb25zdCBFTVBUWV9QQVRIID0gW107XG5mdW5jdGlvbiBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIGlzc3VlRGF0YSkge1xuICAgIGNvbnN0IG92ZXJyaWRlTWFwID0gZ2V0RXJyb3JNYXAoKTtcbiAgICBjb25zdCBpc3N1ZSA9IG1ha2VJc3N1ZSh7XG4gICAgICAgIGlzc3VlRGF0YTogaXNzdWVEYXRhLFxuICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgIGVycm9yTWFwczogW1xuICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICBjdHguc2NoZW1hRXJyb3JNYXAsXG4gICAgICAgICAgICBvdmVycmlkZU1hcCxcbiAgICAgICAgICAgIG92ZXJyaWRlTWFwID09PSBlcnJvck1hcCA/IHVuZGVmaW5lZCA6IGVycm9yTWFwLCAvLyB0aGVuIGdsb2JhbCBkZWZhdWx0IG1hcFxuICAgICAgICBdLmZpbHRlcigoeCkgPT4gISF4KSxcbiAgICB9KTtcbiAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKGlzc3VlKTtcbn1cbmNsYXNzIFBhcnNlU3RhdHVzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFwidmFsaWRcIjtcbiAgICB9XG4gICAgZGlydHkoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09PSBcInZhbGlkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJkaXJ0eVwiO1xuICAgIH1cbiAgICBhYm9ydCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFwiYWJvcnRlZFwiO1xuICAgIH1cbiAgICBzdGF0aWMgbWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChzLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogYXJyYXlWYWx1ZSB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgbWVyZ2VPYmplY3RBc3luYyhzdGF0dXMsIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHN5bmNQYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgc3luY1BhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBzeW5jUGFpcnMpO1xuICAgIH1cbiAgICBzdGF0aWMgbWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IHBhaXI7XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBpZiAoa2V5LnZhbHVlICE9PSBcIl9fcHJvdG9fX1wiICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiB8fCBwYWlyLmFsd2F5c1NldCkpIHtcbiAgICAgICAgICAgICAgICBmaW5hbE9iamVjdFtrZXkudmFsdWVdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE9iamVjdCB9O1xuICAgIH1cbn1cbmNvbnN0IElOVkFMSUQgPSBPYmplY3QuZnJlZXplKHtcbiAgICBzdGF0dXM6IFwiYWJvcnRlZFwiLFxufSk7XG5jb25zdCBESVJUWSA9ICh2YWx1ZSkgPT4gKHsgc3RhdHVzOiBcImRpcnR5XCIsIHZhbHVlIH0pO1xuY29uc3QgT0sgPSAodmFsdWUpID0+ICh7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZSB9KTtcbmNvbnN0IGlzQWJvcnRlZCA9ICh4KSA9PiB4LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCI7XG5jb25zdCBpc0RpcnR5ID0gKHgpID0+IHguc3RhdHVzID09PSBcImRpcnR5XCI7XG5jb25zdCBpc1ZhbGlkID0gKHgpID0+IHguc3RhdHVzID09PSBcInZhbGlkXCI7XG5jb25zdCBpc0FzeW5jID0gKHgpID0+IHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHggaW5zdGFuY2VvZiBQcm9taXNlO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbmZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxudmFyIGVycm9yVXRpbDtcbihmdW5jdGlvbiAoZXJyb3JVdGlsKSB7XG4gICAgZXJyb3JVdGlsLmVyclRvT2JqID0gKG1lc3NhZ2UpID0+IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8geyBtZXNzYWdlIH0gOiBtZXNzYWdlIHx8IHt9O1xuICAgIGVycm9yVXRpbC50b1N0cmluZyA9IChtZXNzYWdlKSA9PiB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBtZXNzYWdlID09PSBudWxsIHx8IG1lc3NhZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1lc3NhZ2UubWVzc2FnZTtcbn0pKGVycm9yVXRpbCB8fCAoZXJyb3JVdGlsID0ge30pKTtcblxudmFyIF9ab2RFbnVtX2NhY2hlLCBfWm9kTmF0aXZlRW51bV9jYWNoZTtcbmNsYXNzIFBhcnNlSW5wdXRMYXp5UGF0aCB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCB2YWx1ZSwgcGF0aCwga2V5KSB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFBhdGggPSBbXTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRQYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2tleSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsIC4uLnRoaXMuX2tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCwgdGhpcy5fa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkUGF0aDtcbiAgICB9XG59XG5jb25zdCBoYW5kbGVSZXN1bHQgPSAoY3R4LCByZXN1bHQpID0+IHtcbiAgICBpZiAoaXNWYWxpZChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHJlc3VsdC52YWx1ZSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCFjdHguY29tbW9uLmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZhbGlkYXRpb24gZmFpbGVkIGJ1dCBubyBpc3N1ZXMgZGV0ZWN0ZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihjdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbn07XG5mdW5jdGlvbiBwcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zKVxuICAgICAgICByZXR1cm4ge307XG4gICAgY29uc3QgeyBlcnJvck1hcCwgaW52YWxpZF90eXBlX2Vycm9yLCByZXF1aXJlZF9lcnJvciwgZGVzY3JpcHRpb24gfSA9IHBhcmFtcztcbiAgICBpZiAoZXJyb3JNYXAgJiYgKGludmFsaWRfdHlwZV9lcnJvciB8fCByZXF1aXJlZF9lcnJvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCB1c2UgXCJpbnZhbGlkX3R5cGVfZXJyb3JcIiBvciBcInJlcXVpcmVkX2Vycm9yXCIgaW4gY29uanVuY3Rpb24gd2l0aCBjdXN0b20gZXJyb3IgbWFwLmApO1xuICAgIH1cbiAgICBpZiAoZXJyb3JNYXApXG4gICAgICAgIHJldHVybiB7IGVycm9yTWFwOiBlcnJvck1hcCwgZGVzY3JpcHRpb24gfTtcbiAgICBjb25zdCBjdXN0b21NYXAgPSAoaXNzLCBjdHgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgeyBtZXNzYWdlIH0gPSBwYXJhbXM7XG4gICAgICAgIGlmIChpc3MuY29kZSA9PT0gXCJpbnZhbGlkX2VudW1fdmFsdWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogbWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGEgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IChfYSA9IG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6IHJlcXVpcmVkX2Vycm9yKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzcy5jb2RlICE9PSBcImludmFsaWRfdHlwZVwiKVxuICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlOiAoX2IgPSBtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiBpbnZhbGlkX3R5cGVfZXJyb3IpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICB9O1xuICAgIHJldHVybiB7IGVycm9yTWFwOiBjdXN0b21NYXAsIGRlc2NyaXB0aW9uIH07XG59XG5jbGFzcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihkZWYpIHtcbiAgICAgICAgLyoqIEFsaWFzIG9mIHNhZmVQYXJzZUFzeW5jICovXG4gICAgICAgIHRoaXMuc3BhID0gdGhpcy5zYWZlUGFyc2VBc3luYztcbiAgICAgICAgdGhpcy5fZGVmID0gZGVmO1xuICAgICAgICB0aGlzLnBhcnNlID0gdGhpcy5wYXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZSA9IHRoaXMuc2FmZVBhcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGFyc2VBc3luYyA9IHRoaXMucGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZUFzeW5jID0gdGhpcy5zYWZlUGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNwYSA9IHRoaXMuc3BhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVmaW5lID0gdGhpcy5yZWZpbmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZpbmVtZW50ID0gdGhpcy5yZWZpbmVtZW50LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3VwZXJSZWZpbmUgPSB0aGlzLnN1cGVyUmVmaW5lLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGFibGUgPSB0aGlzLm51bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGlzaCA9IHRoaXMubnVsbGlzaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFycmF5ID0gdGhpcy5hcnJheS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLnByb21pc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vciA9IHRoaXMub3IuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hbmQgPSB0aGlzLmFuZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYnJhbmQgPSB0aGlzLmJyYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVmYXVsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNhdGNoID0gdGhpcy5jYXRjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlID0gdGhpcy5kZXNjcmliZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBpcGUgPSB0aGlzLnBpcGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHkuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc051bGxhYmxlID0gdGhpcy5pc051bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIF9nZXRUeXBlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBfZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCkge1xuICAgICAgICByZXR1cm4gKGN0eCB8fCB7XG4gICAgICAgICAgICBjb21tb246IGlucHV0LnBhcmVudC5jb21tb24sXG4gICAgICAgICAgICBkYXRhOiBpbnB1dC5kYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IG5ldyBQYXJzZVN0YXR1cygpLFxuICAgICAgICAgICAgY3R4OiB7XG4gICAgICAgICAgICAgICAgY29tbW9uOiBpbnB1dC5wYXJlbnQuY29tbW9uLFxuICAgICAgICAgICAgICAgIGRhdGE6IGlucHV0LmRhdGEsXG4gICAgICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGFyc2VTeW5jKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3luY2hyb25vdXMgcGFyc2UgZW5jb3VudGVyZWQgcHJvbWlzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX3BhcnNlQXN5bmMoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuICAgIHBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNhZmVQYXJzZShkYXRhLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgc2FmZVBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgYXN5bmM6IChfYSA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5hc3luYykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGV4dHVhbEVycm9yTWFwOiBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuZXJyb3JNYXAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5wYXRoKSB8fCBbXSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShkYXRhKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2VTeW5jKHsgZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgICAgICByZXR1cm4gaGFuZGxlUmVzdWx0KGN0eCwgcmVzdWx0KTtcbiAgICB9XG4gICAgYXN5bmMgcGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zYWZlUGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgYXN5bmMgc2FmZVBhcnNlQXN5bmMoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgY29udGV4dHVhbEVycm9yTWFwOiBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5wYXRoKSB8fCBbXSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShkYXRhKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWF5YmVBc3luY1Jlc3VsdCA9IHRoaXMuX3BhcnNlKHsgZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoaXNBc3luYyhtYXliZUFzeW5jUmVzdWx0KVxuICAgICAgICAgICAgPyBtYXliZUFzeW5jUmVzdWx0XG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShtYXliZUFzeW5jUmVzdWx0KSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICByZWZpbmUoY2hlY2ssIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZ2V0SXNzdWVQcm9wZXJ0aWVzID0gKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtZXNzYWdlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZmluZW1lbnQoKHZhbCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaGVjayh2YWwpO1xuICAgICAgICAgICAgY29uc3Qgc2V0RXJyb3IgPSAoKSA9PiBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICAgICAgLi4uZ2V0SXNzdWVQcm9wZXJ0aWVzKHZhbCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWZpbmVtZW50KGNoZWNrLCByZWZpbmVtZW50RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmICghY2hlY2sodmFsKSkge1xuICAgICAgICAgICAgICAgIGN0eC5hZGRJc3N1ZSh0eXBlb2YgcmVmaW5lbWVudERhdGEgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IHJlZmluZW1lbnREYXRhKHZhbCwgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHJlZmluZW1lbnREYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9yZWZpbmVtZW50KHJlZmluZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInJlZmluZW1lbnRcIiwgcmVmaW5lbWVudCB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudChyZWZpbmVtZW50KTtcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBab2RPcHRpb25hbC5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBab2ROdWxsYWJsZS5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGlzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbGFibGUoKS5vcHRpb25hbCgpO1xuICAgIH1cbiAgICBhcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZEFycmF5LmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gWm9kUHJvbWlzZS5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgb3Iob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBab2RVbmlvbi5jcmVhdGUoW3RoaXMsIG9wdGlvbl0sIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIGFuZChpbmNvbWluZykge1xuICAgICAgICByZXR1cm4gWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZSh0aGlzLCBpbmNvbWluZywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgdHJhbnNmb3JtKHRyYW5zZm9ybSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwidHJhbnNmb3JtXCIsIHRyYW5zZm9ybSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVmYXVsdChkZWYpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlRnVuYyA9IHR5cGVvZiBkZWYgPT09IFwiZnVuY3Rpb25cIiA/IGRlZiA6ICgpID0+IGRlZjtcbiAgICAgICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIGlubmVyVHlwZTogdGhpcyxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlRnVuYyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGJyYW5kKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJyYW5kZWQoe1xuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCcmFuZGVkLFxuICAgICAgICAgICAgdHlwZTogdGhpcyxcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoKGRlZikge1xuICAgICAgICBjb25zdCBjYXRjaFZhbHVlRnVuYyA9IHR5cGVvZiBkZWYgPT09IFwiZnVuY3Rpb25cIiA/IGRlZiA6ICgpID0+IGRlZjtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RDYXRjaCh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBpbm5lclR5cGU6IHRoaXMsXG4gICAgICAgICAgICBjYXRjaFZhbHVlOiBjYXRjaFZhbHVlRnVuYyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQ2F0Y2gsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICBjb25zdCBUaGlzID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBUaGlzKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGlwZSh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIFpvZFBpcGVsaW5lLmNyZWF0ZSh0aGlzLCB0YXJnZXQpO1xuICAgIH1cbiAgICByZWFkb25seSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZFJlYWRvbmx5LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG4gICAgaXNPcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZVBhcnNlKHVuZGVmaW5lZCkuc3VjY2VzcztcbiAgICB9XG4gICAgaXNOdWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZVBhcnNlKG51bGwpLnN1Y2Nlc3M7XG4gICAgfVxufVxuY29uc3QgY3VpZFJlZ2V4ID0gL15jW15cXHMtXXs4LH0kL2k7XG5jb25zdCBjdWlkMlJlZ2V4ID0gL15bMC05YS16XSskLztcbmNvbnN0IHVsaWRSZWdleCA9IC9eWzAtOUEtSEpLTU5QLVRWLVpdezI2fSQvO1xuLy8gY29uc3QgdXVpZFJlZ2V4ID1cbi8vICAgL14oW2EtZjAtOV17OH0tW2EtZjAtOV17NH0tWzEtNV1bYS1mMC05XXszfS1bYS1mMC05XXs0fS1bYS1mMC05XXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmNvbnN0IHV1aWRSZWdleCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC9pO1xuY29uc3QgbmFub2lkUmVnZXggPSAvXlthLXowLTlfLV17MjF9JC9pO1xuY29uc3QgZHVyYXRpb25SZWdleCA9IC9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xcZCtZKXwoPzpbLStdP1xcZCtbLixdXFxkK1kkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/Oig/OlstK10/XFxkK1cpfCg/OlstK10/XFxkK1suLF1cXGQrVyQpKT8oPzooPzpbLStdP1xcZCtEKXwoPzpbLStdP1xcZCtbLixdXFxkK0QkKSk/KD86VCg/PVtcXGQrLV0pKD86KD86Wy0rXT9cXGQrSCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtIJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzpbLStdP1xcZCsoPzpbLixdXFxkKyk/Uyk/KT8/JC87XG4vLyBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NjE4MS8xNTUwMTU1XG4vLyBvbGQgdmVyc2lvbjogdG9vIHNsb3csIGRpZG4ndCBzdXBwb3J0IHVuaWNvZGVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPSAvXigoKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSsoXFwuKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSspKil8KChcXHgyMikoKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPygoW1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4N2ZdfFxceDIxfFtcXHgyMy1cXHg1Yl18W1xceDVkLVxceDdlXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KFxcXFwoW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBkLVxceDdmXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSkqKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPyhcXHgyMikpKUAoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSkkL2k7XG4vL29sZCBlbWFpbCByZWdleFxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKChbXjw+KClbXFxdLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF0uLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoPyEtKShbXjw+KClbXFxdLiw7Olxcc0BcIl0rXFwuKStbXjw+KClbXFxdLiw7Olxcc0BcIl17MSx9KVteLTw+KClbXFxdLiw7Olxcc0BcIl0kL2k7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChcXFsoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXF0pfChcXFtJUHY2OigoW2EtZjAtOV17MSw0fTopezd9fDo6KFthLWYwLTldezEsNH06KXswLDZ9fChbYS1mMC05XXsxLDR9Oil7MX06KFthLWYwLTldezEsNH06KXswLDV9fChbYS1mMC05XXsxLDR9Oil7Mn06KFthLWYwLTldezEsNH06KXswLDR9fChbYS1mMC05XXsxLDR9Oil7M306KFthLWYwLTldezEsNH06KXswLDN9fChbYS1mMC05XXsxLDR9Oil7NH06KFthLWYwLTldezEsNH06KXswLDJ9fChbYS1mMC05XXsxLDR9Oil7NX06KFthLWYwLTldezEsNH06KXswLDF9KShbYS1mMC05XXsxLDR9fCgoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSlcXF0pfChbQS1aYS16MC05XShbQS1aYS16MC05LV0qW0EtWmEtejAtOV0pKihcXC5bQS1aYS16XXsyLH0pKykpJC87XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16QS1aMC05XFwuXFwhXFwjXFwkXFwlXFwmXFwnXFwqXFwrXFwvXFw9XFw/XFxeXFxfXFxgXFx7XFx8XFx9XFx+XFwtXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXig/OlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pJC9pO1xuY29uc3QgZW1haWxSZWdleCA9IC9eKD8hXFwuKSg/IS4qXFwuXFwuKShbQS1aMC05XycrXFwtXFwuXSopW0EtWjAtOV8rLV1AKFtBLVowLTldW0EtWjAtOVxcLV0qXFwuKStbQS1aXXsyLH0kL2k7XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16MC05LiEjJCUmXHUyMDE5KisvPT9eX2B7fH1+LV0rQFthLXowLTktXSsoPzpcXC5bYS16MC05XFwtXSspKiQvaTtcbi8vIGZyb20gaHR0cHM6Ly90aGVrZXZpbnNjb3R0LmNvbS9lbW9qaXMtaW4tamF2YXNjcmlwdC8jd3JpdGluZy1hLXJlZ3VsYXItZXhwcmVzc2lvblxuY29uc3QgX2Vtb2ppUmVnZXggPSBgXihcXFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxcXFxwe0Vtb2ppX0NvbXBvbmVudH0pKyRgO1xubGV0IGVtb2ppUmVnZXg7XG4vLyBmYXN0ZXIsIHNpbXBsZXIsIHNhZmVyXG5jb25zdCBpcHY0UmVnZXggPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvO1xuY29uc3QgaXB2NlJlZ2V4ID0gL14oKFthLWYwLTldezEsNH06KXs3fXw6OihbYS1mMC05XXsxLDR9Oil7MCw2fXwoW2EtZjAtOV17MSw0fTopezF9OihbYS1mMC05XXsxLDR9Oil7MCw1fXwoW2EtZjAtOV17MSw0fTopezJ9OihbYS1mMC05XXsxLDR9Oil7MCw0fXwoW2EtZjAtOV17MSw0fTopezN9OihbYS1mMC05XXsxLDR9Oil7MCwzfXwoW2EtZjAtOV17MSw0fTopezR9OihbYS1mMC05XXsxLDR9Oil7MCwyfXwoW2EtZjAtOV17MSw0fTopezV9OihbYS1mMC05XXsxLDR9Oil7MCwxfSkoW2EtZjAtOV17MSw0fXwoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkpJC87XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODYwMzkyL2RldGVybWluZS1pZi1zdHJpbmctaXMtaW4tYmFzZTY0LXVzaW5nLWphdmFzY3JpcHRcbmNvbnN0IGJhc2U2NFJlZ2V4ID0gL14oWzAtOWEtekEtWisvXXs0fSkqKChbMC05YS16QS1aKy9dezJ9PT0pfChbMC05YS16QS1aKy9dezN9PSkpPyQvO1xuLy8gc2ltcGxlXG4vLyBjb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn1gO1xuLy8gbm8gbGVhcCB5ZWFyIHZhbGlkYXRpb25cbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS0oKDBbMTM1NzhdfDEwfDEyKS0zMXwoMFsxMy05XXwxWzAtMl0pLTMwfCgwWzEtOV18MVswLTJdKS0oMFsxLTldfDFcXFxcZHwyXFxcXGQpKWA7XG4vLyB3aXRoIGxlYXAgeWVhciB2YWxpZGF0aW9uXG5jb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgKChcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KDBbNDY5XXwxMSktKDBbMS05XXxbMTJdXFxcXGR8MzApfCgwMiktKDBbMS05XXwxXFxcXGR8MlswLThdKSkpYDtcbmNvbnN0IGRhdGVSZWdleCA9IG5ldyBSZWdFeHAoYF4ke2RhdGVSZWdleFNvdXJjZX0kYCk7XG5mdW5jdGlvbiB0aW1lUmVnZXhTb3VyY2UoYXJncykge1xuICAgIC8vIGxldCByZWdleCA9IGBcXFxcZHsyfTpcXFxcZHsyfTpcXFxcZHsyfWA7XG4gICAgbGV0IHJlZ2V4ID0gYChbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkOlswLTVdXFxcXGRgO1xuICAgIGlmIChhcmdzLnByZWNpc2lvbikge1xuICAgICAgICByZWdleCA9IGAke3JlZ2V4fVxcXFwuXFxcXGR7JHthcmdzLnByZWNpc2lvbn19YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgICByZWdleCA9IGAke3JlZ2V4fShcXFxcLlxcXFxkKyk/YDtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuZnVuY3Rpb24gdGltZVJlZ2V4KGFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfSRgKTtcbn1cbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE0MzIzMVxuZnVuY3Rpb24gZGF0ZXRpbWVSZWdleChhcmdzKSB7XG4gICAgbGV0IHJlZ2V4ID0gYCR7ZGF0ZVJlZ2V4U291cmNlfVQke3RpbWVSZWdleFNvdXJjZShhcmdzKX1gO1xuICAgIGNvbnN0IG9wdHMgPSBbXTtcbiAgICBvcHRzLnB1c2goYXJncy5sb2NhbCA/IGBaP2AgOiBgWmApO1xuICAgIGlmIChhcmdzLm9mZnNldClcbiAgICAgICAgb3B0cy5wdXNoKGAoWystXVxcXFxkezJ9Oj9cXFxcZHsyfSlgKTtcbiAgICByZWdleCA9IGAke3JlZ2V4fSgke29wdHMuam9pbihcInxcIil9KWA7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4fSRgKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRJUChpcCwgdmVyc2lvbikge1xuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NFwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY0UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NlwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY2UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IFN0cmluZyhpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA8IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gaW5wdXQuZGF0YS5sZW5ndGggPCBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW1haWxcIikge1xuICAgICAgICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVtb2ppXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVtb2ppUmVnZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1vamlSZWdleCA9IG5ldyBSZWdFeHAoX2Vtb2ppUmVnZXgsIFwidVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbW9qaVJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJlbW9qaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidXVpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dWlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInV1aWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW5vaWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwibmFub2lkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjdWlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1aWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgIGlmICghY3VpZDJSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdWxpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1bGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrLnJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IGNoZWNrLnJlZ2V4LnRlc3QoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0ZXN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwicmVnZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRyaW1cIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiaW5jbHVkZXNcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5pbmNsdWRlcyhjaGVjay52YWx1ZSwgY2hlY2sucG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgaW5jbHVkZXM6IGNoZWNrLnZhbHVlLCBwb3NpdGlvbjogY2hlY2sucG9zaXRpb24gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRvTG93ZXJDYXNlXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0b1VwcGVyQ2FzZVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwic3RhcnRzV2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLnN0YXJ0c1dpdGgoY2hlY2sudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgc3RhcnRzV2l0aDogY2hlY2sudmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVuZHNXaXRoXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuZW5kc1dpdGgoY2hlY2sudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgZW5kc1dpdGg6IGNoZWNrLnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkYXRldGltZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBkYXRldGltZVJlZ2V4KGNoZWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBkYXRlUmVnZXg7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSB0aW1lUmVnZXgoY2hlY2spO1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImR1cmF0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWR1cmF0aW9uUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJpcFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSVAoaW5wdXQuZGF0YSwgY2hlY2sudmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJpcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiYmFzZTY0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJiYXNlNjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgX3JlZ2V4KHJlZ2V4LCB2YWxpZGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmluZW1lbnQoKGRhdGEpID0+IHJlZ2V4LnRlc3QoZGF0YSksIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW1haWwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImVtYWlsXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1cmxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBlbW9qaShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1vamlcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1dWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1dWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgbmFub2lkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJuYW5vaWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJjdWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgY3VpZDIobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWQyXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdWxpZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwidWxpZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGJhc2U2NChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiYmFzZTY0XCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgaXAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImlwXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zKSB9KTtcbiAgICB9XG4gICAgZGF0ZXRpbWUob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxvY2FsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgIHByZWNpc2lvbjogdHlwZW9mIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uKSA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uLFxuICAgICAgICAgICAgb2Zmc2V0OiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub2Zmc2V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgIGxvY2FsOiAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRhdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImRhdGVcIiwgbWVzc2FnZSB9KTtcbiAgICB9XG4gICAgdGltZShvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IG51bGwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInRpbWVcIixcbiAgICAgICAgICAgIHByZWNpc2lvbjogdHlwZW9mIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uKSA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGR1cmF0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJkdXJhdGlvblwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHJlZ2V4KHJlZ2V4LCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInJlZ2V4XCIsXG4gICAgICAgICAgICByZWdleDogcmVnZXgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbmNsdWRlcyh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJpbmNsdWRlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcG9zaXRpb246IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wb3NpdGlvbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGFydHNXaXRoKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInN0YXJ0c1dpdGhcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVuZHNXaXRoKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImVuZHNXaXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtaW4obWluTGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IG1pbkxlbmd0aCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhMZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogbWF4TGVuZ3RoLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGVuZ3RoKGxlbiwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJsZW5ndGhcIixcbiAgICAgICAgICAgIHZhbHVlOiBsZW4sXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Ugei5zdHJpbmcoKS5taW4oMSkgaW5zdGVhZC5cbiAgICAgKiBAc2VlIHtAbGluayBab2RTdHJpbmcubWlufVxuICAgICAqL1xuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIGVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSk7XG4gICAgfVxuICAgIHRyaW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0cmltXCIgfV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b0xvd2VyQ2FzZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRvTG93ZXJDYXNlXCIgfV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b1VwcGVyQ2FzZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRvVXBwZXJDYXNlXCIgfV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgaXNEYXRldGltZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJkYXRldGltZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJkYXRlXCIpO1xuICAgIH1cbiAgICBnZXQgaXNUaW1lKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInRpbWVcIik7XG4gICAgfVxuICAgIGdldCBpc0R1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImR1cmF0aW9uXCIpO1xuICAgIH1cbiAgICBnZXQgaXNFbWFpbCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJlbWFpbFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVVJMKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInVybFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1vamkoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZW1vamlcIik7XG4gICAgfVxuICAgIGdldCBpc1VVSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidXVpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzTkFOT0lEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcIm5hbm9pZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQ1VJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJjdWlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDVUlEMigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJjdWlkMlwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVUxJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1bGlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNJUCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJpcFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4TGVuZ3RoKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kU3RyaW5nLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZyxcbiAgICAgICAgY29lcmNlOiAoX2EgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM5NjY0ODQvd2h5LWRvZXMtbW9kdWx1cy1vcGVyYXRvci1yZXR1cm4tZnJhY3Rpb25hbC1udW1iZXItaW4tamF2YXNjcmlwdC8zMTcxMTAzNCMzMTcxMTAzNFxuZnVuY3Rpb24gZmxvYXRTYWZlUmVtYWluZGVyKHZhbCwgc3RlcCkge1xuICAgIGNvbnN0IHZhbERlY0NvdW50ID0gKHZhbC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3Qgc3RlcERlY0NvdW50ID0gKHN0ZXAudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoO1xuICAgIGNvbnN0IGRlY0NvdW50ID0gdmFsRGVjQ291bnQgPiBzdGVwRGVjQ291bnQgPyB2YWxEZWNDb3VudCA6IHN0ZXBEZWNDb3VudDtcbiAgICBjb25zdCB2YWxJbnQgPSBwYXJzZUludCh2YWwudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIGNvbnN0IHN0ZXBJbnQgPSBwYXJzZUludChzdGVwLnRvRml4ZWQoZGVjQ291bnQpLnJlcGxhY2UoXCIuXCIsIFwiXCIpKTtcbiAgICByZXR1cm4gKHZhbEludCAlIHN0ZXBJbnQpIC8gTWF0aC5wb3coMTAsIGRlY0NvdW50KTtcbn1cbmNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgICAgICB0aGlzLnN0ZXAgPSB0aGlzLm11bHRpcGxlT2Y7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IE51bWJlcihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5udW1iZXIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJpbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0ludGVnZXIoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBcImZsb2F0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChmbG9hdFNhZmVSZW1haW5kZXIoaW5wdXQuZGF0YSwgY2hlY2sudmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2YsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZU9mOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImZpbml0ZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9maW5pdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImludFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25wb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpbml0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImZpbml0ZVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2FmZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KS5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgZ2V0IGlzSW50KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImludFwiIHx8XG4gICAgICAgICAgICAoY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIgJiYgdXRpbC5pc0ludGVnZXIoY2gudmFsdWUpKSk7XG4gICAgfVxuICAgIGdldCBpc0Zpbml0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGwsIG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwiZmluaXRlXCIgfHxcbiAgICAgICAgICAgICAgICBjaC5raW5kID09PSBcImludFwiIHx8XG4gICAgICAgICAgICAgICAgY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG1pbikgJiYgTnVtYmVyLmlzRmluaXRlKG1heCk7XG4gICAgfVxufVxuWm9kTnVtYmVyLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVtYmVyLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEJpZ0ludCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBCaWdJbnQoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5iaWdpbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYmlnaW50LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGNoZWNrLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LmRhdGEgPCBjaGVjay52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0LmRhdGEgPD0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA+IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA+PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YSAlIGNoZWNrLnZhbHVlICE9PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlT2Y6IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBndGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGd0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHRlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIHNldExpbWl0KGtpbmQsIHZhbHVlLCBpbmNsdXNpdmUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCaWdJbnQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLmNoZWNrcyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25wb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbm5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbXVsdGlwbGVPZih2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG59XG5ab2RCaWdJbnQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQmlnSW50LFxuICAgICAgICBjb2VyY2U6IChfYSA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQm9vbGVhbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IEJvb2xlYW4oaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5ib29sZWFuKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kQm9vbGVhbi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RCb29sZWFuKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZERhdGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBuZXcgRGF0ZShpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuZGF0ZSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihpbnB1dC5kYXRhLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG5ldyBQYXJzZVN0YXR1cygpO1xuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaGVjay5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpIDwgY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmdldFRpbWUoKSA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMudmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IERhdGUoaW5wdXQuZGF0YS5nZXRUaW1lKCkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2REYXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1pbihtaW5EYXRlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IG1pbkRhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heERhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogbWF4RGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluRGF0ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgPyBuZXcgRGF0ZShtaW4pIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IG1heERhdGUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heCAhPSBudWxsID8gbmV3IERhdGUobWF4KSA6IG51bGw7XG4gICAgfVxufVxuWm9kRGF0ZS5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2REYXRlKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgY29lcmNlOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgfHwgZmFsc2UsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGF0ZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFN5bWJvbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN5bWJvbCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zeW1ib2wsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kU3ltYm9sLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFN5bWJvbCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3ltYm9sLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVW5kZWZpbmVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RVbmRlZmluZWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5kZWZpbmVkKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmRlZmluZWQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROdWxsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5udWxsLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZE51bGwuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVsbCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEFueSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvLyB0byBwcmV2ZW50IGluc3RhbmNlcyBvZiBvdGhlciBjbGFzc2VzIGZyb20gZXh0ZW5kaW5nIFpvZEFueS4gdGhpcyBjYXVzZXMgaXNzdWVzIHdpdGggY2F0Y2hhbGwgaW4gWm9kT2JqZWN0LlxuICAgICAgICB0aGlzLl9hbnkgPSB0cnVlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZEFueS5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RBbnkoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFueSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFVua25vd24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgLy8gcmVxdWlyZWRcbiAgICAgICAgdGhpcy5fdW5rbm93biA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kVW5rbm93bi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmtub3duKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmtub3duLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTmV2ZXIgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5uZXZlcixcbiAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgIH1cbn1cblpvZE5ldmVyLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5ldmVyKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROZXZlcixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFZvaWQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUudm9pZCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RWb2lkLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFZvaWQoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFZvaWQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RBcnJheSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCwgc3RhdHVzIH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLl9kZWY7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5hcnJheSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYuZXhhY3RMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGN0eC5kYXRhLmxlbmd0aCA+IGRlZi5leGFjdExlbmd0aC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY3R4LmRhdGEubGVuZ3RoIDwgZGVmLmV4YWN0TGVuZ3RoLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRvb0JpZyB8fCB0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0b29CaWcgPyBab2RJc3N1ZUNvZGUudG9vX2JpZyA6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06ICh0b29TbWFsbCA/IGRlZi5leGFjdExlbmd0aC52YWx1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06ICh0b29CaWcgPyBkZWYuZXhhY3RMZW5ndGgudmFsdWUgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5leGFjdExlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWluTGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEubGVuZ3RoIDwgZGVmLm1pbkxlbmd0aC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluTGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluTGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5tYXhMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPiBkZWYubWF4TGVuZ3RoLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBkZWYubWF4TGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4TGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWYudHlwZS5fcGFyc2VBc3luYyhuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKTtcbiAgICAgICAgICAgIH0pKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi50eXBlLl9wYXJzZVN5bmMobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IHsgdmFsdWU6IG1pbkxlbmd0aCwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4TGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiB7IHZhbHVlOiBtYXhMZW5ndGgsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGVuZ3RoKGxlbiwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGV4YWN0TGVuZ3RoOiB7IHZhbHVlOiBsZW4sIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgbWVzc2FnZSk7XG4gICAgfVxufVxuWm9kQXJyYXkuY3JlYXRlID0gKHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICAgIGV4YWN0TGVuZ3RoOiBudWxsLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gZGVlcFBhcnRpYWxpZnkoc2NoZW1hKSB7XG4gICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE9iamVjdCkge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuc2hhcGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gc2NoZW1hLnNoYXBlW2tleV07XG4gICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gWm9kT3B0aW9uYWwuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KGZpZWxkU2NoZW1hKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4uc2NoZW1hLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RBcnJheSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnNjaGVtYS5fZGVmLFxuICAgICAgICAgICAgdHlwZTogZGVlcFBhcnRpYWxpZnkoc2NoZW1hLmVsZW1lbnQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIFpvZE9wdGlvbmFsLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kTnVsbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZE51bGxhYmxlLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kVHVwbGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZFR1cGxlLmNyZWF0ZShzY2hlbWEuaXRlbXMubWFwKChpdGVtKSA9PiBkZWVwUGFydGlhbGlmeShpdGVtKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG59XG5jbGFzcyBab2RPYmplY3QgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIEluIG1vc3QgY2FzZXMsIHRoaXMgaXMgbm8gbG9uZ2VyIG5lZWRlZCAtIHVua25vd24gcHJvcGVydGllcyBhcmUgbm93IHNpbGVudGx5IHN0cmlwcGVkLlxuICAgICAgICAgKiBJZiB5b3Ugd2FudCB0byBwYXNzIHRocm91Z2ggdW5rbm93biBwcm9wZXJ0aWVzLCB1c2UgYC5wYXNzdGhyb3VnaCgpYCBpbnN0ZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ub25zdHJpY3QgPSB0aGlzLnBhc3N0aHJvdWdoO1xuICAgICAgICAvLyBleHRlbmQ8XG4gICAgICAgIC8vICAgQXVnbWVudGF0aW9uIGV4dGVuZHMgWm9kUmF3U2hhcGUsXG4gICAgICAgIC8vICAgTmV3T3V0cHV0IGV4dGVuZHMgdXRpbC5mbGF0dGVuPHtcbiAgICAgICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIE91dHB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfb3V0cHV0XCJdXG4gICAgICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIE91dHB1dFxuICAgICAgICAvLyAgICAgICA/IE91dHB1dFtrXVxuICAgICAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgICAgICAvLyAgIH0+LFxuICAgICAgICAvLyAgIE5ld0lucHV0IGV4dGVuZHMgdXRpbC5mbGF0dGVuPHtcbiAgICAgICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIElucHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgICAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9pbnB1dFwiXVxuICAgICAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBJbnB1dFxuICAgICAgICAvLyAgICAgICA/IElucHV0W2tdXG4gICAgICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgICAgIC8vICAgfT5cbiAgICAgICAgLy8gPihcbiAgICAgICAgLy8gICBhdWdtZW50YXRpb246IEF1Z21lbnRhdGlvblxuICAgICAgICAvLyApOiBab2RPYmplY3Q8XG4gICAgICAgIC8vICAgZXh0ZW5kU2hhcGU8VCwgQXVnbWVudGF0aW9uPixcbiAgICAgICAgLy8gICBVbmtub3duS2V5cyxcbiAgICAgICAgLy8gICBDYXRjaGFsbCxcbiAgICAgICAgLy8gICBOZXdPdXRwdXQsXG4gICAgICAgIC8vICAgTmV3SW5wdXRcbiAgICAgICAgLy8gPiB7XG4gICAgICAgIC8vICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAvLyAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAvLyAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgIC8vICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAvLyAgICAgICAuLi5hdWdtZW50YXRpb24sXG4gICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgLy8gICB9KSBhcyBhbnk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIFVzZSBgLmV4dGVuZGAgaW5zdGVhZFxuICAgICAgICAgKiAgKi9cbiAgICAgICAgdGhpcy5hdWdtZW50ID0gdGhpcy5leHRlbmQ7XG4gICAgfVxuICAgIF9nZXRDYWNoZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWNoZWQgIT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkO1xuICAgICAgICBjb25zdCBzaGFwZSA9IHRoaXMuX2RlZi5zaGFwZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gdXRpbC5vYmplY3RLZXlzKHNoYXBlKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9jYWNoZWQgPSB7IHNoYXBlLCBrZXlzIH0pO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgeyBzaGFwZSwga2V5czogc2hhcGVLZXlzIH0gPSB0aGlzLl9nZXRDYWNoZWQoKTtcbiAgICAgICAgY29uc3QgZXh0cmFLZXlzID0gW107XG4gICAgICAgIGlmICghKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIFpvZE5ldmVyICYmXG4gICAgICAgICAgICB0aGlzLl9kZWYudW5rbm93bktleXMgPT09IFwic3RyaXBcIikpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGN0eC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFwZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFwZUtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbGlkYXRvciA9IHNoYXBlW2tleV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICB2YWx1ZToga2V5VmFsaWRhdG9yLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBab2ROZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdW5rbm93bktleXMgPSB0aGlzLl9kZWYudW5rbm93bktleXM7XG4gICAgICAgICAgICBpZiAodW5rbm93bktleXMgPT09IFwicGFzc3Rocm91Z2hcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4dHJhS2V5cykge1xuICAgICAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBjdHguZGF0YVtrZXldIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVua25vd25LZXlzID09PSBcInN0cmljdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogZXh0cmFLZXlzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5rbm93bktleXMgPT09IFwic3RyaXBcIikgO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBab2RPYmplY3QgZXJyb3I6IGludmFsaWQgdW5rbm93bktleXMgdmFsdWUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBydW4gY2F0Y2hhbGwgdmFsaWRhdGlvblxuICAgICAgICAgICAgY29uc3QgY2F0Y2hhbGwgPSB0aGlzLl9kZWYuY2F0Y2hhbGw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHRyYUtleXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0Y2hhbGwuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIGtleSkgLy8sIGN0eC5jaGlsZChrZXkpLCB2YWx1ZSwgZ2V0UGFyc2VkVHlwZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzeW5jUGFpcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3luY1BhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IHBhaXIuYWx3YXlzU2V0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNQYWlycztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHN5bmNQYWlycykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBzeW5jUGFpcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zaGFwZSgpO1xuICAgIH1cbiAgICBzdHJpY3QobWVzc2FnZSkge1xuICAgICAgICBlcnJvclV0aWwuZXJyVG9PYmo7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICAgICAgLi4uKG1lc3NhZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcDogKGlzc3VlLCBjdHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRFcnJvciA9IChfYyA9IChfYiA9IChfYSA9IHRoaXMuX2RlZikuZXJyb3JNYXApID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBpc3N1ZSwgY3R4KS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBjdHguZGVmYXVsdEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc3VlLmNvZGUgPT09IFwidW5yZWNvZ25pemVkX2tleXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAoX2QgPSBlcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkubWVzc2FnZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RyaXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXNzdGhyb3VnaCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwicGFzc3Rocm91Z2hcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNvbnN0IEF1Z21lbnRGYWN0b3J5ID1cbiAgICAvLyAgIDxEZWYgZXh0ZW5kcyBab2RPYmplY3REZWY+KGRlZjogRGVmKSA9PlxuICAgIC8vICAgPEF1Z21lbnRhdGlvbiBleHRlbmRzIFpvZFJhd1NoYXBlPihcbiAgICAvLyAgICAgYXVnbWVudGF0aW9uOiBBdWdtZW50YXRpb25cbiAgICAvLyAgICk6IFpvZE9iamVjdDxcbiAgICAvLyAgICAgZXh0ZW5kU2hhcGU8UmV0dXJuVHlwZTxEZWZbXCJzaGFwZVwiXT4sIEF1Z21lbnRhdGlvbj4sXG4gICAgLy8gICAgIERlZltcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgICBEZWZbXCJjYXRjaGFsbFwiXVxuICAgIC8vICAgPiA9PiB7XG4gICAgLy8gICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgICAuLi5kZWYsXG4gICAgLy8gICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgLy8gICAgICAgICAuLi5kZWYuc2hhcGUoKSxcbiAgICAvLyAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAvLyAgICAgICB9KSxcbiAgICAvLyAgICAgfSkgYXMgYW55O1xuICAgIC8vICAgfTtcbiAgICBleHRlbmQoYXVnbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJpb3IgdG8gem9kQDEuMC4xMiB0aGVyZSB3YXMgYSBidWcgaW4gdGhlXG4gICAgICogaW5mZXJyZWQgdHlwZSBvZiBtZXJnZWQgb2JqZWN0cy4gUGxlYXNlXG4gICAgICogdXBncmFkZSBpZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBpc3N1ZXMuXG4gICAgICovXG4gICAgbWVyZ2UobWVyZ2luZykge1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgICAgICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICAgICAgLi4ubWVyZ2luZy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG4gICAgLy8gbWVyZ2U8XG4gICAgLy8gICBJbmNvbWluZyBleHRlbmRzIEFueVpvZE9iamVjdCxcbiAgICAvLyAgIEF1Z21lbnRhdGlvbiBleHRlbmRzIEluY29taW5nW1wic2hhcGVcIl0sXG4gICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIE91dHB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBPdXRwdXRcbiAgICAvLyAgICAgICA/IE91dHB1dFtrXVxuICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgLy8gICB9LFxuICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIElucHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgSW5wdXRcbiAgICAvLyAgICAgICA/IElucHV0W2tdXG4gICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAvLyAgIH1cbiAgICAvLyA+KFxuICAgIC8vICAgbWVyZ2luZzogSW5jb21pbmdcbiAgICAvLyApOiBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdLFxuICAgIC8vICAgTmV3T3V0cHV0LFxuICAgIC8vICAgTmV3SW5wdXRcbiAgICAvLyA+IHtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBzZXRLZXkoa2V5LCBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXVnbWVudCh7IFtrZXldOiBzY2hlbWEgfSk7XG4gICAgfVxuICAgIC8vIG1lcmdlPEluY29taW5nIGV4dGVuZHMgQW55Wm9kT2JqZWN0PihcbiAgICAvLyAgIG1lcmdpbmc6IEluY29taW5nXG4gICAgLy8gKTogLy9ab2RPYmplY3Q8VCAmIEluY29taW5nW1wiX3NoYXBlXCJdLCBVbmtub3duS2V5cywgQ2F0Y2hhbGw+ID0gKG1lcmdpbmcpID0+IHtcbiAgICAvLyBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdXG4gICAgLy8gPiB7XG4gICAgLy8gICAvLyBjb25zdCBtZXJnZWRTaGFwZSA9IG9iamVjdFV0aWwubWVyZ2VTaGFwZXMoXG4gICAgLy8gICAvLyAgIHRoaXMuX2RlZi5zaGFwZSgpLFxuICAgIC8vICAgLy8gICBtZXJnaW5nLl9kZWYuc2hhcGUoKVxuICAgIC8vICAgLy8gKTtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBjYXRjaGFsbChpbmRleCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjYXRjaGFsbDogaW5kZXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaWNrKG1hc2spIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKG1hc2spLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1hc2tba2V5XSAmJiB0aGlzLnNoYXBlW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb21pdChtYXNrKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZGVlcFBhcnRpYWwoKSB7XG4gICAgICAgIHJldHVybiBkZWVwUGFydGlhbGlmeSh0aGlzKTtcbiAgICB9XG4gICAgcGFydGlhbChtYXNrKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgaWYgKG1hc2sgJiYgIW1hc2tba2V5XSkge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBmaWVsZFNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBmaWVsZFNjaGVtYS5vcHRpb25hbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWlyZWQobWFzaykge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXdGaWVsZCBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQuX2RlZi5pbm5lclR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBuZXdGaWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGtleW9mKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlWm9kRW51bSh1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpO1xuICAgIH1cbn1cblpvZE9iamVjdC5jcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LnN0cmljdENyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LmxhenljcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RVbmlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2RlZi5vcHRpb25zO1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVSZXN1bHRzKHJlc3VsdHMpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBmaXJzdCBpc3N1ZS1mcmVlIHZhbGlkYXRpb24gaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpc3N1ZXMgZnJvbSBkaXJ0eSBvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaCguLi5yZXN1bHQuY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXR1cm4gaW52YWxpZFxuICAgICAgICAgICAgY29uc3QgdW5pb25FcnJvcnMgPSByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiBuZXcgWm9kRXJyb3IocmVzdWx0LmN0eC5jb21tb24uaXNzdWVzKSk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbixcbiAgICAgICAgICAgICAgICB1bmlvbkVycm9ycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChvcHRpb25zLm1hcChhc3luYyAob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHggPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBhd2FpdCBvcHRpb24uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBjdHg6IGNoaWxkQ3R4LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSkudGhlbihoYW5kbGVSZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaXJ0eSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGlzc3VlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3R4ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LmNvbW1vbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGNoaWxkQ3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiICYmICFkaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHsgcmVzdWx0LCBjdHg6IGNoaWxkQ3R4IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGlsZEN0eC5jb21tb24uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXMucHVzaChjaGlsZEN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGlydHkpIHtcbiAgICAgICAgICAgICAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKC4uLmRpcnR5LmN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlydHkucmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdW5pb25FcnJvcnMgPSBpc3N1ZXMubWFwKChpc3N1ZXMpID0+IG5ldyBab2RFcnJvcihpc3N1ZXMpKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uLFxuICAgICAgICAgICAgICAgIHVuaW9uRXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zO1xuICAgIH1cbn1cblpvZFVuaW9uLmNyZWF0ZSA9ICh0eXBlcywgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmlvbih7XG4gICAgICAgIG9wdGlvbnM6IHR5cGVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuaW9uLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmNvbnN0IGdldERpc2NyaW1pbmF0b3IgPSAodHlwZSkgPT4ge1xuICAgIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTGF6eSkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuaW5uZXJUeXBlKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTGl0ZXJhbCkge1xuICAgICAgICByZXR1cm4gW3R5cGUudmFsdWVdO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRW51bSkge1xuICAgICAgICByZXR1cm4gdHlwZS5vcHRpb25zO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTmF0aXZlRW51bSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYmFuL2JhblxuICAgICAgICByZXR1cm4gdXRpbC5vYmplY3RWYWx1ZXModHlwZS5lbnVtKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZERlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5fZGVmLmlubmVyVHlwZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RVbmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTnVsbCkge1xuICAgICAgICByZXR1cm4gW251bGxdO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIC4uLmdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSldO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTnVsbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIFtudWxsLCAuLi5nZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEJyYW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RSZWFkb25seSkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZENhdGNoKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuX2RlZi5pbm5lclR5cGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn07XG5jbGFzcyBab2REaXNjcmltaW5hdGVkVW5pb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvciA9IHRoaXMuZGlzY3JpbWluYXRvcjtcbiAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclZhbHVlID0gY3R4LmRhdGFbZGlzY3JpbWluYXRvcl07XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMub3B0aW9uc01hcC5nZXQoZGlzY3JpbWluYXRvclZhbHVlKTtcbiAgICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogQXJyYXkuZnJvbSh0aGlzLm9wdGlvbnNNYXAua2V5cygpKSxcbiAgICAgICAgICAgICAgICBwYXRoOiBbZGlzY3JpbWluYXRvcl0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkaXNjcmltaW5hdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmRpc2NyaW1pbmF0b3I7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBvcHRpb25zTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnNNYXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgZGlzY3JpbWluYXRlZCB1bmlvbiBzY2hlbWEuIEl0cyBiZWhhdmlvdXIgaXMgdmVyeSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIG5vcm1hbCB6LnVuaW9uKCkgY29uc3RydWN0b3IuXG4gICAgICogSG93ZXZlciwgaXQgb25seSBhbGxvd3MgYSB1bmlvbiBvZiBvYmplY3RzLCBhbGwgb2Ygd2hpY2ggbmVlZCB0byBzaGFyZSBhIGRpc2NyaW1pbmF0b3IgcHJvcGVydHkuIFRoaXMgcHJvcGVydHkgbXVzdFxuICAgICAqIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIGVhY2ggb2JqZWN0IGluIHRoZSB1bmlvbi5cbiAgICAgKiBAcGFyYW0gZGlzY3JpbWluYXRvciB0aGUgbmFtZSBvZiB0aGUgZGlzY3JpbWluYXRvciBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0eXBlcyBhbiBhcnJheSBvZiBvYmplY3Qgc2NoZW1hc1xuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKGRpc2NyaW1pbmF0b3IsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgICAvLyBHZXQgYWxsIHRoZSB2YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlc1xuICAgICAgICBjb25zdCBvcHRpb25zTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclZhbHVlcyA9IGdldERpc2NyaW1pbmF0b3IodHlwZS5zaGFwZVtkaXNjcmltaW5hdG9yXSk7XG4gICAgICAgICAgICBpZiAoIWRpc2NyaW1pbmF0b3JWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGRpc2NyaW1pbmF0b3IgdmFsdWUgZm9yIGtleSBcXGAke2Rpc2NyaW1pbmF0b3J9XFxgIGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQgZnJvbSBhbGwgc2NoZW1hIG9wdGlvbnNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZGlzY3JpbWluYXRvclZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zTWFwLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjcmltaW5hdG9yIHByb3BlcnR5ICR7U3RyaW5nKGRpc2NyaW1pbmF0b3IpfSBoYXMgZHVwbGljYXRlIHZhbHVlICR7U3RyaW5nKHZhbHVlKX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9uc01hcC5zZXQodmFsdWUsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kRGlzY3JpbWluYXRlZFVuaW9uKHtcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGlzY3JpbWluYXRlZFVuaW9uLFxuICAgICAgICAgICAgZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zTWFwLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlcyhhLCBiKSB7XG4gICAgY29uc3QgYVR5cGUgPSBnZXRQYXJzZWRUeXBlKGEpO1xuICAgIGNvbnN0IGJUeXBlID0gZ2V0UGFyc2VkVHlwZShiKTtcbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGJLZXlzID0gdXRpbC5vYmplY3RLZXlzKGIpO1xuICAgICAgICBjb25zdCBzaGFyZWRLZXlzID0gdXRpbFxuICAgICAgICAgICAgLm9iamVjdEtleXMoYSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gYktleXMuaW5kZXhPZihrZXkpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IG5ld09iaiA9IHsgLi4uYSwgLi4uYiB9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFyZWRLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRWYWx1ZSA9IG1lcmdlVmFsdWVzKGFba2V5XSwgYltrZXldKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld09ialtrZXldID0gc2hhcmVkVmFsdWUuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3T2JqIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLmFycmF5ICYmIGJUeXBlID09PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0FycmF5ID0gW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbUEgPSBhW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1CID0gYltpbmRleF07XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRWYWx1ZSA9IG1lcmdlVmFsdWVzKGl0ZW1BLCBpdGVtQik7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdBcnJheS5wdXNoKHNoYXJlZFZhbHVlLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdBcnJheSB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5kYXRlICYmXG4gICAgICAgIGJUeXBlID09PSBab2RQYXJzZWRUeXBlLmRhdGUgJiZcbiAgICAgICAgK2EgPT09ICtiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICB9XG59XG5jbGFzcyBab2RJbnRlcnNlY3Rpb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgaGFuZGxlUGFyc2VkID0gKHBhcnNlZExlZnQsIHBhcnNlZFJpZ2h0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNBYm9ydGVkKHBhcnNlZExlZnQpIHx8IGlzQWJvcnRlZChwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlVmFsdWVzKHBhcnNlZExlZnQudmFsdWUsIHBhcnNlZFJpZ2h0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmICghbWVyZ2VkLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RpcnR5KHBhcnNlZExlZnQpIHx8IGlzRGlydHkocGFyc2VkUmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IG1lcmdlZC5kYXRhIH07XG4gICAgICAgIH07XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5sZWZ0Ll9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWYucmlnaHQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSkudGhlbigoW2xlZnQsIHJpZ2h0XSkgPT4gaGFuZGxlUGFyc2VkKGxlZnQsIHJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUGFyc2VkKHRoaXMuX2RlZi5sZWZ0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSksIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblpvZEludGVyc2VjdGlvbi5jcmVhdGUgPSAobGVmdCwgcmlnaHQsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kSW50ZXJzZWN0aW9uKHtcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEludGVyc2VjdGlvbixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFR1cGxlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5hcnJheSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPCB0aGlzLl9kZWYuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgIG1pbmltdW06IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3QgPSB0aGlzLl9kZWYucmVzdDtcbiAgICAgICAgaWYgKCFyZXN0ICYmIGN0eC5kYXRhLmxlbmd0aCA+IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgIG1heGltdW06IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLmN0eC5kYXRhXVxuICAgICAgICAgICAgLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLl9kZWYuaXRlbXNbaXRlbUluZGV4XSB8fCB0aGlzLl9kZWYucmVzdDtcbiAgICAgICAgICAgIGlmICghc2NoZW1hKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpdGVtSW5kZXgpKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+ICEheCk7IC8vIGZpbHRlciBudWxsc1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGl0ZW1zKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCBpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLml0ZW1zO1xuICAgIH1cbiAgICByZXN0KHJlc3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RUdXBsZSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXN0LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5ab2RUdXBsZS5jcmVhdGUgPSAoc2NoZW1hcywgcGFyYW1zKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB6LnR1cGxlKFsgLi4uIF0pXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgaXRlbXM6IHNjaGVtYXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVHVwbGUsXG4gICAgICAgIHJlc3Q6IG51bGwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RSZWNvcmQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBnZXQga2V5U2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgfVxuICAgIGdldCB2YWx1ZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgICAgIGNvbnN0IGtleVR5cGUgPSB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3R4LmRhdGEpIHtcbiAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleToga2V5VHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGtleSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBjdHguZGF0YVtrZXldLCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0QXN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShmaXJzdCwgc2Vjb25kLCB0aGlyZCkge1xuICAgICAgICBpZiAoc2Vjb25kIGluc3RhbmNlb2YgWm9kVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAgICAgIGtleVR5cGU6IGZpcnN0LFxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZTogc2Vjb25kLFxuICAgICAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcmQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAga2V5VHlwZTogWm9kU3RyaW5nLmNyZWF0ZSgpLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiBmaXJzdCxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhzZWNvbmQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBab2RNYXAgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBnZXQga2V5U2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgfVxuICAgIGdldCB2YWx1ZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubWFwKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm1hcCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleVR5cGUgPSB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICAgICAgY29uc3QgcGFpcnMgPSBbLi4uY3R4LmRhdGEuZW50cmllcygpXS5tYXAoKFtrZXksIHZhbHVlXSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5OiBrZXlUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwga2V5LCBjdHgucGF0aCwgW2luZGV4LCBcImtleVwiXSkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIFtpbmRleCwgXCJ2YWx1ZVwiXSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsTWFwLnNldChrZXkudmFsdWUsIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE1hcCB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxNYXAuc2V0KGtleS52YWx1ZSwgdmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE1hcCB9O1xuICAgICAgICB9XG4gICAgfVxufVxuWm9kTWFwLmNyZWF0ZSA9IChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTWFwKHtcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE1hcCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFNldCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc2V0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnNldCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuX2RlZjtcbiAgICAgICAgaWYgKGRlZi5taW5TaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEuc2l6ZSA8IGRlZi5taW5TaXplLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5TaXplLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1pblNpemUubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1heFNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplID4gZGVmLm1heFNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhTaXplLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1heFNpemUubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBmdW5jdGlvbiBmaW5hbGl6ZVNldChlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIHBhcnNlZFNldC5hZGQoZWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IHBhcnNlZFNldCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLmN0eC5kYXRhLnZhbHVlcygpXS5tYXAoKGl0ZW0sIGkpID0+IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSkpO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGVsZW1lbnRzKS50aGVuKChlbGVtZW50cykgPT4gZmluYWxpemVTZXQoZWxlbWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGl6ZVNldChlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWluKG1pblNpemUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWluU2l6ZTogeyB2YWx1ZTogbWluU2l6ZSwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4U2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtYXhTaXplOiB7IHZhbHVlOiBtYXhTaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNpemUoc2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oc2l6ZSwgbWVzc2FnZSkubWF4KHNpemUsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBtZXNzYWdlKTtcbiAgICB9XG59XG5ab2RTZXQuY3JlYXRlID0gKHZhbHVlVHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIG1pblNpemU6IG51bGwsXG4gICAgICAgIG1heFNpemU6IG51bGwsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU2V0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRnVuY3Rpb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSA9IHRoaXMuaW1wbGVtZW50O1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5mdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VBcmdzSXNzdWUoYXJncywgZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSXNzdWUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3MsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICAgICAgICAgIGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLFxuICAgICAgICAgICAgICAgICAgICBjdHguc2NoZW1hRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGdldEVycm9yTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWFwLFxuICAgICAgICAgICAgICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9hcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0Vycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWFrZVJldHVybnNJc3N1ZShyZXR1cm5zLCBlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VJc3N1ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogcmV0dXJucyxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcHM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3JNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3JldHVybl90eXBlLFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGVycm9yTWFwOiBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCB9O1xuICAgICAgICBjb25zdCBmbiA9IGN0eC5kYXRhO1xuICAgICAgICBpZiAodGhpcy5fZGVmLnJldHVybnMgaW5zdGFuY2VvZiBab2RQcm9taXNlKSB7XG4gICAgICAgICAgICAvLyBXb3VsZCBsb3ZlIGEgd2F5IHRvIGF2b2lkIGRpc2FibGluZyB0aGlzIHJ1bGUsIGJ1dCB3ZSBuZWVkXG4gICAgICAgICAgICAvLyBhbiBhbGlhcyAodXNpbmcgYW4gYXJyb3cgZnVuY3Rpb24gd2FzIHdoYXQgY2F1c2VkIDI2NTEpLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT0soYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihbXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IGF3YWl0IG1lLl9kZWYuYXJnc1xuICAgICAgICAgICAgICAgICAgICAucGFyc2VBc3luYyhhcmdzLCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5hZGRJc3N1ZShtYWtlQXJnc0lzc3VlKGFyZ3MsIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUmVmbGVjdC5hcHBseShmbiwgdGhpcywgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmV0dXJucyA9IGF3YWl0IG1lLl9kZWYucmV0dXJucy5fZGVmLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgLnBhcnNlQXN5bmMocmVzdWx0LCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5hZGRJc3N1ZShtYWtlUmV0dXJuc0lzc3VlKHJlc3VsdCwgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV291bGQgbG92ZSBhIHdheSB0byBhdm9pZCBkaXNhYmxpbmcgdGhpcyBydWxlLCBidXQgd2UgbmVlZFxuICAgICAgICAgICAgLy8gYW4gYWxpYXMgKHVzaW5nIGFuIGFycm93IGZ1bmN0aW9uIHdhcyB3aGF0IGNhdXNlZCAyNjUxKS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIE9LKGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IG1lLl9kZWYuYXJncy5zYWZlUGFyc2UoYXJncywgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZEFyZ3Muc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VBcmdzSXNzdWUoYXJncywgcGFyc2VkQXJncy5lcnJvcildKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5hcHBseShmbiwgdGhpcywgcGFyc2VkQXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gbWUuX2RlZi5yZXR1cm5zLnNhZmVQYXJzZShyZXN1bHQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRSZXR1cm5zLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFpvZEVycm9yKFttYWtlUmV0dXJuc0lzc3VlKHJlc3VsdCwgcGFyc2VkUmV0dXJucy5lcnJvcildKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFJldHVybnMuZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhcmFtZXRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuYXJncztcbiAgICB9XG4gICAgcmV0dXJuVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5yZXR1cm5zO1xuICAgIH1cbiAgICBhcmdzKC4uLml0ZW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgYXJnczogWm9kVHVwbGUuY3JlYXRlKGl0ZW1zKS5yZXN0KFpvZFVua25vd24uY3JlYXRlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJucyhyZXR1cm5UeXBlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgcmV0dXJuczogcmV0dXJuVHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGltcGxlbWVudChmdW5jKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZ1bmMgPSB0aGlzLnBhcnNlKGZ1bmMpO1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVkRnVuYztcbiAgICB9XG4gICAgc3RyaWN0SW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGFyZ3MsIHJldHVybnMsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgIGFyZ3M6IChhcmdzXG4gICAgICAgICAgICAgICAgPyBhcmdzXG4gICAgICAgICAgICAgICAgOiBab2RUdXBsZS5jcmVhdGUoW10pLnJlc3QoWm9kVW5rbm93bi5jcmVhdGUoKSkpLFxuICAgICAgICAgICAgcmV0dXJuczogcmV0dXJucyB8fCBab2RVbmtub3duLmNyZWF0ZSgpLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RGdW5jdGlvbixcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY2xhc3MgWm9kTGF6eSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBzY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZ2V0dGVyKCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgbGF6eVNjaGVtYSA9IHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICAgICAgcmV0dXJuIGxhenlTY2hlbWEuX3BhcnNlKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICB9XG59XG5ab2RMYXp5LmNyZWF0ZSA9IChnZXR0ZXIsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTGF6eSh7XG4gICAgICAgIGdldHRlcjogZ2V0dGVyLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZExhenksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RMaXRlcmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5kYXRhICE9PSB0aGlzLl9kZWYudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB0aGlzLl9kZWYudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWU7XG4gICAgfVxufVxuWm9kTGl0ZXJhbC5jcmVhdGUgPSAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTGl0ZXJhbCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RMaXRlcmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gY3JlYXRlWm9kRW51bSh2YWx1ZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFbnVtLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5jbGFzcyBab2RFbnVtIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIF9ab2RFbnVtX2NhY2hlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5kYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdXRpbC5qb2luVmFsdWVzKGV4cGVjdGVkVmFsdWVzKSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ab2RFbnVtX2NhY2hlLCBcImZcIikpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1pvZEVudW1fY2FjaGUsIG5ldyBTZXQodGhpcy5fZGVmLnZhbHVlcyksIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZEVudW1fY2FjaGUsIFwiZlwiKS5oYXMoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG4gICAgZ2V0IGVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBnZXQgVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZ2V0IEVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBleHRyYWN0KHZhbHVlcywgbmV3RGVmID0gdGhpcy5fZGVmKSB7XG4gICAgICAgIHJldHVybiBab2RFbnVtLmNyZWF0ZSh2YWx1ZXMsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIC4uLm5ld0RlZixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4Y2x1ZGUodmFsdWVzLCBuZXdEZWYgPSB0aGlzLl9kZWYpIHtcbiAgICAgICAgcmV0dXJuIFpvZEVudW0uY3JlYXRlKHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gIXZhbHVlcy5pbmNsdWRlcyhvcHQpKSwge1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgLi4ubmV3RGVmLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5fWm9kRW51bV9jYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5ab2RFbnVtLmNyZWF0ZSA9IGNyZWF0ZVpvZEVudW07XG5jbGFzcyBab2ROYXRpdmVFbnVtIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIF9ab2ROYXRpdmVFbnVtX2NhY2hlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRW51bVZhbHVlcyA9IHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpO1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zdHJpbmcgJiZcbiAgICAgICAgICAgIGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB1dGlsLm9iamVjdFZhbHVlcyhuYXRpdmVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB1dGlsLmpvaW5WYWx1ZXMoZXhwZWN0ZWRWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZE5hdGl2ZUVudW1fY2FjaGUsIFwiZlwiKSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgbmV3IFNldCh1dGlsLmdldFZhbGlkRW51bVZhbHVlcyh0aGlzLl9kZWYudmFsdWVzKSksIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZE5hdGl2ZUVudW1fY2FjaGUsIFwiZlwiKS5oYXMoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdXRpbC5vYmplY3RWYWx1ZXMobmF0aXZlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBleHBlY3RlZFZhbHVlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBnZXQgZW51bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgfVxufVxuX1pvZE5hdGl2ZUVudW1fY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuWm9kTmF0aXZlRW51bS5jcmVhdGUgPSAodmFsdWVzLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5hdGl2ZUVudW0oe1xuICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROYXRpdmVFbnVtLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kUHJvbWlzZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5wcm9taXNlICYmXG4gICAgICAgICAgICBjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5wcm9taXNlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzaWZpZWQgPSBjdHgucGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5wcm9taXNlXG4gICAgICAgICAgICA/IGN0eC5kYXRhXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShjdHguZGF0YSk7XG4gICAgICAgIHJldHVybiBPSyhwcm9taXNpZmllZC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGUucGFyc2VBc3luYyhkYXRhLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5ab2RQcm9taXNlLmNyZWF0ZSA9IChzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kUHJvbWlzZSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQcm9taXNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRWZmZWN0cyBleHRlbmRzIFpvZFR5cGUge1xuICAgIGlubmVyVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWE7XG4gICAgfVxuICAgIHNvdXJjZVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gICAgICAgICAgICA/IHRoaXMuX2RlZi5zY2hlbWEuc291cmNlVHlwZSgpXG4gICAgICAgICAgICA6IHRoaXMuX2RlZi5zY2hlbWE7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBlZmZlY3QgPSB0aGlzLl9kZWYuZWZmZWN0IHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGNoZWNrQ3R4ID0ge1xuICAgICAgICAgICAgYWRkSXNzdWU6IChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIGFyZyk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5mYXRhbCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhdGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjaGVja0N0eC5hZGRJc3N1ZSA9IGNoZWNrQ3R4LmFkZElzc3VlLmJpbmQoY2hlY2tDdHgpO1xuICAgICAgICBpZiAoZWZmZWN0LnR5cGUgPT09IFwicHJlcHJvY2Vzc1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBlZmZlY3QudHJhbnNmb3JtKGN0eC5kYXRhLCBjaGVja0N0eCk7XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocHJvY2Vzc2VkKS50aGVuKGFzeW5jIChwcm9jZXNzZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwcm9jZXNzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcHJvY2Vzc2VkLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInJlZmluZW1lbnRcIikge1xuICAgICAgICAgICAgY29uc3QgZXhlY3V0ZVJlZmluZW1lbnQgPSAoYWNjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZWZmZWN0LnJlZmluZW1lbnQoYWNjLCBjaGVja0N0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3luYyByZWZpbmVtZW50IGVuY291bnRlcmVkIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZSBvcGVyYXRpb24uIFVzZSAucGFyc2VBc3luYyBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lciA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChpbm5lci5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWRcbiAgICAgICAgICAgICAgICBleGVjdXRlUmVmaW5lbWVudChpbm5lci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbm5lci52YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgLl9wYXJzZUFzeW5jKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoaW5uZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRlUmVmaW5lbWVudChpbm5lci52YWx1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlubmVyLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKGJhc2UpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlZmZlY3QudHJhbnNmb3JtKGJhc2UudmFsdWUsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzeW5jaHJvbm91cyB0cmFuc2Zvcm0gZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcmVzdWx0IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAuX3BhcnNlQXN5bmMoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChiYXNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZChiYXNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpKS50aGVuKChyZXN1bHQpID0+ICh7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcmVzdWx0IH0pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGVmZmVjdCk7XG4gICAgfVxufVxuWm9kRWZmZWN0cy5jcmVhdGUgPSAoc2NoZW1hLCBlZmZlY3QsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICBlZmZlY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RFZmZlY3RzLmNyZWF0ZVdpdGhQcmVwcm9jZXNzID0gKHByZXByb2Nlc3MsIHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJwcmVwcm9jZXNzXCIsIHRyYW5zZm9ybTogcHJlcHJvY2VzcyB9LFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RPcHRpb25hbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIE9LKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RPcHRpb25hbC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPcHRpb25hbCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPcHRpb25hbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE51bGxhYmxlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUubnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIE9LKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kTnVsbGFibGUuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVsbGFibGUoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbGFibGUsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2REZWZhdWx0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBsZXQgZGF0YSA9IGN0eC5kYXRhO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGVmLmRlZmF1bHRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZURlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZERlZmF1bHQuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRGVmYXVsdCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBwYXJhbXMuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHBhcmFtcy5kZWZhdWx0XG4gICAgICAgICAgICA6ICgpID0+IHBhcmFtcy5kZWZhdWx0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQ2F0Y2ggZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIC8vIG5ld0N0eCBpcyB1c2VkIHRvIG5vdCBjb2xsZWN0IGlzc3VlcyBmcm9tIGlubmVyIHR5cGVzIGluIGN0eFxuICAgICAgICBjb25zdCBuZXdDdHggPSB7XG4gICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhOiBuZXdDdHguZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IG5ld0N0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiB7XG4gICAgICAgICAgICAgICAgLi4ubmV3Q3R4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0FzeW5jKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBcInZhbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzdWx0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZi5jYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWm9kRXJyb3IobmV3Q3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVzdWx0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWm9kRXJyb3IobmV3Q3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBuZXdDdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUNhdGNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RDYXRjaC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RDYXRjaCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RDYXRjaCxcbiAgICAgICAgY2F0Y2hWYWx1ZTogdHlwZW9mIHBhcmFtcy5jYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gcGFyYW1zLmNhdGNoIDogKCkgPT4gcGFyYW1zLmNhdGNoLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTmFOIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubmFuKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5hbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbn1cblpvZE5hTi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROYU4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hTixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNvbnN0IEJSQU5EID0gU3ltYm9sKFwiem9kX2JyYW5kXCIpO1xuY2xhc3MgWm9kQnJhbmRlZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGN0eC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxufVxuY2xhc3MgWm9kUGlwZWxpbmUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUFzeW5jID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluUmVzdWx0ID0gYXdhaXQgdGhpcy5fZGVmLmluLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkoaW5SZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vdXQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpblJlc3VsdCA9IHRoaXMuX2RlZi5pbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwiZGlydHlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm91dC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RQaXBlbGluZSh7XG4gICAgICAgICAgICBpbjogYSxcbiAgICAgICAgICAgIG91dDogYixcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNsYXNzIFpvZFJlYWRvbmx5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgY29uc3QgZnJlZXplID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YS52YWx1ZSA9IE9iamVjdC5mcmVlemUoZGF0YS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGlzQXN5bmMocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHQudGhlbigoZGF0YSkgPT4gZnJlZXplKGRhdGEpKVxuICAgICAgICAgICAgOiBmcmVlemUocmVzdWx0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RSZWFkb25seS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RSZWFkb25seSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWFkb25seSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGN1c3RvbShjaGVjaywgcGFyYW1zID0ge30sIFxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICpcbiAqIFBhc3MgYGZhdGFsYCBpbnRvIHRoZSBwYXJhbXMgb2JqZWN0IGluc3RlYWQ6XG4gKlxuICogYGBgdHNcbiAqIHouc3RyaW5nKCkuY3VzdG9tKCh2YWwpID0+IHZhbC5sZW5ndGggPiA1LCB7IGZhdGFsOiBmYWxzZSB9KVxuICogYGBgXG4gKlxuICovXG5mYXRhbCkge1xuICAgIGlmIChjaGVjaylcbiAgICAgICAgcmV0dXJuIFpvZEFueS5jcmVhdGUoKS5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaWYgKCFjaGVjayhkYXRhKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSB0eXBlb2YgcGFyYW1zID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJhbXMoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgcGFyYW1zID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgbWVzc2FnZTogcGFyYW1zIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyYW1zO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9mYXRhbCA9IChfYiA9IChfYSA9IHAuZmF0YWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhdGFsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gdHlwZW9mIHAgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2U6IHAgfSA6IHA7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHsgY29kZTogXCJjdXN0b21cIiwgLi4ucDIsIGZhdGFsOiBfZmF0YWwgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBab2RBbnkuY3JlYXRlKCk7XG59XG5jb25zdCBsYXRlID0ge1xuICAgIG9iamVjdDogWm9kT2JqZWN0LmxhenljcmVhdGUsXG59O1xudmFyIFpvZEZpcnN0UGFydHlUeXBlS2luZDtcbihmdW5jdGlvbiAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKSB7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU3RyaW5nXCJdID0gXCJab2RTdHJpbmdcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdW1iZXJcIl0gPSBcIlpvZE51bWJlclwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5hTlwiXSA9IFwiWm9kTmFOXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQmlnSW50XCJdID0gXCJab2RCaWdJbnRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCb29sZWFuXCJdID0gXCJab2RCb29sZWFuXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGF0ZVwiXSA9IFwiWm9kRGF0ZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFN5bWJvbFwiXSA9IFwiWm9kU3ltYm9sXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5kZWZpbmVkXCJdID0gXCJab2RVbmRlZmluZWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdWxsXCJdID0gXCJab2ROdWxsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQW55XCJdID0gXCJab2RBbnlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmtub3duXCJdID0gXCJab2RVbmtub3duXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmV2ZXJcIl0gPSBcIlpvZE5ldmVyXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVm9pZFwiXSA9IFwiWm9kVm9pZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEFycmF5XCJdID0gXCJab2RBcnJheVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE9iamVjdFwiXSA9IFwiWm9kT2JqZWN0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5pb25cIl0gPSBcIlpvZFVuaW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCJdID0gXCJab2REaXNjcmltaW5hdGVkVW5pb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RJbnRlcnNlY3Rpb25cIl0gPSBcIlpvZEludGVyc2VjdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFR1cGxlXCJdID0gXCJab2RUdXBsZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFJlY29yZFwiXSA9IFwiWm9kUmVjb3JkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTWFwXCJdID0gXCJab2RNYXBcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTZXRcIl0gPSBcIlpvZFNldFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEZ1bmN0aW9uXCJdID0gXCJab2RGdW5jdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZExhenlcIl0gPSBcIlpvZExhenlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RMaXRlcmFsXCJdID0gXCJab2RMaXRlcmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRW51bVwiXSA9IFwiWm9kRW51bVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEVmZmVjdHNcIl0gPSBcIlpvZEVmZmVjdHNcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROYXRpdmVFbnVtXCJdID0gXCJab2ROYXRpdmVFbnVtXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kT3B0aW9uYWxcIl0gPSBcIlpvZE9wdGlvbmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVsbGFibGVcIl0gPSBcIlpvZE51bGxhYmxlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGVmYXVsdFwiXSA9IFwiWm9kRGVmYXVsdFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZENhdGNoXCJdID0gXCJab2RDYXRjaFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFByb21pc2VcIl0gPSBcIlpvZFByb21pc2VcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCcmFuZGVkXCJdID0gXCJab2RCcmFuZGVkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUGlwZWxpbmVcIl0gPSBcIlpvZFBpcGVsaW5lXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUmVhZG9ubHlcIl0gPSBcIlpvZFJlYWRvbmx5XCI7XG59KShab2RGaXJzdFBhcnR5VHlwZUtpbmQgfHwgKFpvZEZpcnN0UGFydHlUeXBlS2luZCA9IHt9KSk7XG5jb25zdCBpbnN0YW5jZU9mVHlwZSA9IChcbi8vIGNvbnN0IGluc3RhbmNlT2ZUeXBlID0gPFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+KFxuY2xzLCBwYXJhbXMgPSB7XG4gICAgbWVzc2FnZTogYElucHV0IG5vdCBpbnN0YW5jZSBvZiAke2Nscy5uYW1lfWAsXG59KSA9PiBjdXN0b20oKGRhdGEpID0+IGRhdGEgaW5zdGFuY2VvZiBjbHMsIHBhcmFtcyk7XG5jb25zdCBzdHJpbmdUeXBlID0gWm9kU3RyaW5nLmNyZWF0ZTtcbmNvbnN0IG51bWJlclR5cGUgPSBab2ROdW1iZXIuY3JlYXRlO1xuY29uc3QgbmFuVHlwZSA9IFpvZE5hTi5jcmVhdGU7XG5jb25zdCBiaWdJbnRUeXBlID0gWm9kQmlnSW50LmNyZWF0ZTtcbmNvbnN0IGJvb2xlYW5UeXBlID0gWm9kQm9vbGVhbi5jcmVhdGU7XG5jb25zdCBkYXRlVHlwZSA9IFpvZERhdGUuY3JlYXRlO1xuY29uc3Qgc3ltYm9sVHlwZSA9IFpvZFN5bWJvbC5jcmVhdGU7XG5jb25zdCB1bmRlZmluZWRUeXBlID0gWm9kVW5kZWZpbmVkLmNyZWF0ZTtcbmNvbnN0IG51bGxUeXBlID0gWm9kTnVsbC5jcmVhdGU7XG5jb25zdCBhbnlUeXBlID0gWm9kQW55LmNyZWF0ZTtcbmNvbnN0IHVua25vd25UeXBlID0gWm9kVW5rbm93bi5jcmVhdGU7XG5jb25zdCBuZXZlclR5cGUgPSBab2ROZXZlci5jcmVhdGU7XG5jb25zdCB2b2lkVHlwZSA9IFpvZFZvaWQuY3JlYXRlO1xuY29uc3QgYXJyYXlUeXBlID0gWm9kQXJyYXkuY3JlYXRlO1xuY29uc3Qgb2JqZWN0VHlwZSA9IFpvZE9iamVjdC5jcmVhdGU7XG5jb25zdCBzdHJpY3RPYmplY3RUeXBlID0gWm9kT2JqZWN0LnN0cmljdENyZWF0ZTtcbmNvbnN0IHVuaW9uVHlwZSA9IFpvZFVuaW9uLmNyZWF0ZTtcbmNvbnN0IGRpc2NyaW1pbmF0ZWRVbmlvblR5cGUgPSBab2REaXNjcmltaW5hdGVkVW5pb24uY3JlYXRlO1xuY29uc3QgaW50ZXJzZWN0aW9uVHlwZSA9IFpvZEludGVyc2VjdGlvbi5jcmVhdGU7XG5jb25zdCB0dXBsZVR5cGUgPSBab2RUdXBsZS5jcmVhdGU7XG5jb25zdCByZWNvcmRUeXBlID0gWm9kUmVjb3JkLmNyZWF0ZTtcbmNvbnN0IG1hcFR5cGUgPSBab2RNYXAuY3JlYXRlO1xuY29uc3Qgc2V0VHlwZSA9IFpvZFNldC5jcmVhdGU7XG5jb25zdCBmdW5jdGlvblR5cGUgPSBab2RGdW5jdGlvbi5jcmVhdGU7XG5jb25zdCBsYXp5VHlwZSA9IFpvZExhenkuY3JlYXRlO1xuY29uc3QgbGl0ZXJhbFR5cGUgPSBab2RMaXRlcmFsLmNyZWF0ZTtcbmNvbnN0IGVudW1UeXBlID0gWm9kRW51bS5jcmVhdGU7XG5jb25zdCBuYXRpdmVFbnVtVHlwZSA9IFpvZE5hdGl2ZUVudW0uY3JlYXRlO1xuY29uc3QgcHJvbWlzZVR5cGUgPSBab2RQcm9taXNlLmNyZWF0ZTtcbmNvbnN0IGVmZmVjdHNUeXBlID0gWm9kRWZmZWN0cy5jcmVhdGU7XG5jb25zdCBvcHRpb25hbFR5cGUgPSBab2RPcHRpb25hbC5jcmVhdGU7XG5jb25zdCBudWxsYWJsZVR5cGUgPSBab2ROdWxsYWJsZS5jcmVhdGU7XG5jb25zdCBwcmVwcm9jZXNzVHlwZSA9IFpvZEVmZmVjdHMuY3JlYXRlV2l0aFByZXByb2Nlc3M7XG5jb25zdCBwaXBlbGluZVR5cGUgPSBab2RQaXBlbGluZS5jcmVhdGU7XG5jb25zdCBvc3RyaW5nID0gKCkgPT4gc3RyaW5nVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvbnVtYmVyID0gKCkgPT4gbnVtYmVyVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvYm9vbGVhbiA9ICgpID0+IGJvb2xlYW5UeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IGNvZXJjZSA9IHtcbiAgICBzdHJpbmc6ICgoYXJnKSA9PiBab2RTdHJpbmcuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIG51bWJlcjogKChhcmcpID0+IFpvZE51bWJlci5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgYm9vbGVhbjogKChhcmcpID0+IFpvZEJvb2xlYW4uY3JlYXRlKHtcbiAgICAgICAgLi4uYXJnLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgfSkpLFxuICAgIGJpZ2ludDogKChhcmcpID0+IFpvZEJpZ0ludC5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgZGF0ZTogKChhcmcpID0+IFpvZERhdGUuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxufTtcbmNvbnN0IE5FVkVSID0gSU5WQUxJRDtcblxudmFyIHogPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGRlZmF1bHRFcnJvck1hcDogZXJyb3JNYXAsXG4gICAgc2V0RXJyb3JNYXA6IHNldEVycm9yTWFwLFxuICAgIGdldEVycm9yTWFwOiBnZXRFcnJvck1hcCxcbiAgICBtYWtlSXNzdWU6IG1ha2VJc3N1ZSxcbiAgICBFTVBUWV9QQVRIOiBFTVBUWV9QQVRILFxuICAgIGFkZElzc3VlVG9Db250ZXh0OiBhZGRJc3N1ZVRvQ29udGV4dCxcbiAgICBQYXJzZVN0YXR1czogUGFyc2VTdGF0dXMsXG4gICAgSU5WQUxJRDogSU5WQUxJRCxcbiAgICBESVJUWTogRElSVFksXG4gICAgT0s6IE9LLFxuICAgIGlzQWJvcnRlZDogaXNBYm9ydGVkLFxuICAgIGlzRGlydHk6IGlzRGlydHksXG4gICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICBpc0FzeW5jOiBpc0FzeW5jLFxuICAgIGdldCB1dGlsICgpIHsgcmV0dXJuIHV0aWw7IH0sXG4gICAgZ2V0IG9iamVjdFV0aWwgKCkgeyByZXR1cm4gb2JqZWN0VXRpbDsgfSxcbiAgICBab2RQYXJzZWRUeXBlOiBab2RQYXJzZWRUeXBlLFxuICAgIGdldFBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUsXG4gICAgWm9kVHlwZTogWm9kVHlwZSxcbiAgICBkYXRldGltZVJlZ2V4OiBkYXRldGltZVJlZ2V4LFxuICAgIFpvZFN0cmluZzogWm9kU3RyaW5nLFxuICAgIFpvZE51bWJlcjogWm9kTnVtYmVyLFxuICAgIFpvZEJpZ0ludDogWm9kQmlnSW50LFxuICAgIFpvZEJvb2xlYW46IFpvZEJvb2xlYW4sXG4gICAgWm9kRGF0ZTogWm9kRGF0ZSxcbiAgICBab2RTeW1ib2w6IFpvZFN5bWJvbCxcbiAgICBab2RVbmRlZmluZWQ6IFpvZFVuZGVmaW5lZCxcbiAgICBab2ROdWxsOiBab2ROdWxsLFxuICAgIFpvZEFueTogWm9kQW55LFxuICAgIFpvZFVua25vd246IFpvZFVua25vd24sXG4gICAgWm9kTmV2ZXI6IFpvZE5ldmVyLFxuICAgIFpvZFZvaWQ6IFpvZFZvaWQsXG4gICAgWm9kQXJyYXk6IFpvZEFycmF5LFxuICAgIFpvZE9iamVjdDogWm9kT2JqZWN0LFxuICAgIFpvZFVuaW9uOiBab2RVbmlvbixcbiAgICBab2REaXNjcmltaW5hdGVkVW5pb246IFpvZERpc2NyaW1pbmF0ZWRVbmlvbixcbiAgICBab2RJbnRlcnNlY3Rpb246IFpvZEludGVyc2VjdGlvbixcbiAgICBab2RUdXBsZTogWm9kVHVwbGUsXG4gICAgWm9kUmVjb3JkOiBab2RSZWNvcmQsXG4gICAgWm9kTWFwOiBab2RNYXAsXG4gICAgWm9kU2V0OiBab2RTZXQsXG4gICAgWm9kRnVuY3Rpb246IFpvZEZ1bmN0aW9uLFxuICAgIFpvZExhenk6IFpvZExhenksXG4gICAgWm9kTGl0ZXJhbDogWm9kTGl0ZXJhbCxcbiAgICBab2RFbnVtOiBab2RFbnVtLFxuICAgIFpvZE5hdGl2ZUVudW06IFpvZE5hdGl2ZUVudW0sXG4gICAgWm9kUHJvbWlzZTogWm9kUHJvbWlzZSxcbiAgICBab2RFZmZlY3RzOiBab2RFZmZlY3RzLFxuICAgIFpvZFRyYW5zZm9ybWVyOiBab2RFZmZlY3RzLFxuICAgIFpvZE9wdGlvbmFsOiBab2RPcHRpb25hbCxcbiAgICBab2ROdWxsYWJsZTogWm9kTnVsbGFibGUsXG4gICAgWm9kRGVmYXVsdDogWm9kRGVmYXVsdCxcbiAgICBab2RDYXRjaDogWm9kQ2F0Y2gsXG4gICAgWm9kTmFOOiBab2ROYU4sXG4gICAgQlJBTkQ6IEJSQU5ELFxuICAgIFpvZEJyYW5kZWQ6IFpvZEJyYW5kZWQsXG4gICAgWm9kUGlwZWxpbmU6IFpvZFBpcGVsaW5lLFxuICAgIFpvZFJlYWRvbmx5OiBab2RSZWFkb25seSxcbiAgICBjdXN0b206IGN1c3RvbSxcbiAgICBTY2hlbWE6IFpvZFR5cGUsXG4gICAgWm9kU2NoZW1hOiBab2RUeXBlLFxuICAgIGxhdGU6IGxhdGUsXG4gICAgZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCAoKSB7IHJldHVybiBab2RGaXJzdFBhcnR5VHlwZUtpbmQ7IH0sXG4gICAgY29lcmNlOiBjb2VyY2UsXG4gICAgYW55OiBhbnlUeXBlLFxuICAgIGFycmF5OiBhcnJheVR5cGUsXG4gICAgYmlnaW50OiBiaWdJbnRUeXBlLFxuICAgIGJvb2xlYW46IGJvb2xlYW5UeXBlLFxuICAgIGRhdGU6IGRhdGVUeXBlLFxuICAgIGRpc2NyaW1pbmF0ZWRVbmlvbjogZGlzY3JpbWluYXRlZFVuaW9uVHlwZSxcbiAgICBlZmZlY3Q6IGVmZmVjdHNUeXBlLFxuICAgICdlbnVtJzogZW51bVR5cGUsXG4gICAgJ2Z1bmN0aW9uJzogZnVuY3Rpb25UeXBlLFxuICAgICdpbnN0YW5jZW9mJzogaW5zdGFuY2VPZlR5cGUsXG4gICAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25UeXBlLFxuICAgIGxhenk6IGxhenlUeXBlLFxuICAgIGxpdGVyYWw6IGxpdGVyYWxUeXBlLFxuICAgIG1hcDogbWFwVHlwZSxcbiAgICBuYW46IG5hblR5cGUsXG4gICAgbmF0aXZlRW51bTogbmF0aXZlRW51bVR5cGUsXG4gICAgbmV2ZXI6IG5ldmVyVHlwZSxcbiAgICAnbnVsbCc6IG51bGxUeXBlLFxuICAgIG51bGxhYmxlOiBudWxsYWJsZVR5cGUsXG4gICAgbnVtYmVyOiBudW1iZXJUeXBlLFxuICAgIG9iamVjdDogb2JqZWN0VHlwZSxcbiAgICBvYm9vbGVhbjogb2Jvb2xlYW4sXG4gICAgb251bWJlcjogb251bWJlcixcbiAgICBvcHRpb25hbDogb3B0aW9uYWxUeXBlLFxuICAgIG9zdHJpbmc6IG9zdHJpbmcsXG4gICAgcGlwZWxpbmU6IHBpcGVsaW5lVHlwZSxcbiAgICBwcmVwcm9jZXNzOiBwcmVwcm9jZXNzVHlwZSxcbiAgICBwcm9taXNlOiBwcm9taXNlVHlwZSxcbiAgICByZWNvcmQ6IHJlY29yZFR5cGUsXG4gICAgc2V0OiBzZXRUeXBlLFxuICAgIHN0cmljdE9iamVjdDogc3RyaWN0T2JqZWN0VHlwZSxcbiAgICBzdHJpbmc6IHN0cmluZ1R5cGUsXG4gICAgc3ltYm9sOiBzeW1ib2xUeXBlLFxuICAgIHRyYW5zZm9ybWVyOiBlZmZlY3RzVHlwZSxcbiAgICB0dXBsZTogdHVwbGVUeXBlLFxuICAgICd1bmRlZmluZWQnOiB1bmRlZmluZWRUeXBlLFxuICAgIHVuaW9uOiB1bmlvblR5cGUsXG4gICAgdW5rbm93bjogdW5rbm93blR5cGUsXG4gICAgJ3ZvaWQnOiB2b2lkVHlwZSxcbiAgICBORVZFUjogTkVWRVIsXG4gICAgWm9kSXNzdWVDb2RlOiBab2RJc3N1ZUNvZGUsXG4gICAgcXVvdGVsZXNzSnNvbjogcXVvdGVsZXNzSnNvbixcbiAgICBab2RFcnJvcjogWm9kRXJyb3Jcbn0pO1xuXG5leHBvcnQgeyBCUkFORCwgRElSVFksIEVNUFRZX1BBVEgsIElOVkFMSUQsIE5FVkVSLCBPSywgUGFyc2VTdGF0dXMsIFpvZFR5cGUgYXMgU2NoZW1hLCBab2RBbnksIFpvZEFycmF5LCBab2RCaWdJbnQsIFpvZEJvb2xlYW4sIFpvZEJyYW5kZWQsIFpvZENhdGNoLCBab2REYXRlLCBab2REZWZhdWx0LCBab2REaXNjcmltaW5hdGVkVW5pb24sIFpvZEVmZmVjdHMsIFpvZEVudW0sIFpvZEVycm9yLCBab2RGaXJzdFBhcnR5VHlwZUtpbmQsIFpvZEZ1bmN0aW9uLCBab2RJbnRlcnNlY3Rpb24sIFpvZElzc3VlQ29kZSwgWm9kTGF6eSwgWm9kTGl0ZXJhbCwgWm9kTWFwLCBab2ROYU4sIFpvZE5hdGl2ZUVudW0sIFpvZE5ldmVyLCBab2ROdWxsLCBab2ROdWxsYWJsZSwgWm9kTnVtYmVyLCBab2RPYmplY3QsIFpvZE9wdGlvbmFsLCBab2RQYXJzZWRUeXBlLCBab2RQaXBlbGluZSwgWm9kUHJvbWlzZSwgWm9kUmVhZG9ubHksIFpvZFJlY29yZCwgWm9kVHlwZSBhcyBab2RTY2hlbWEsIFpvZFNldCwgWm9kU3RyaW5nLCBab2RTeW1ib2wsIFpvZEVmZmVjdHMgYXMgWm9kVHJhbnNmb3JtZXIsIFpvZFR1cGxlLCBab2RUeXBlLCBab2RVbmRlZmluZWQsIFpvZFVuaW9uLCBab2RVbmtub3duLCBab2RWb2lkLCBhZGRJc3N1ZVRvQ29udGV4dCwgYW55VHlwZSBhcyBhbnksIGFycmF5VHlwZSBhcyBhcnJheSwgYmlnSW50VHlwZSBhcyBiaWdpbnQsIGJvb2xlYW5UeXBlIGFzIGJvb2xlYW4sIGNvZXJjZSwgY3VzdG9tLCBkYXRlVHlwZSBhcyBkYXRlLCBkYXRldGltZVJlZ2V4LCB6IGFzIGRlZmF1bHQsIGVycm9yTWFwIGFzIGRlZmF1bHRFcnJvck1hcCwgZGlzY3JpbWluYXRlZFVuaW9uVHlwZSBhcyBkaXNjcmltaW5hdGVkVW5pb24sIGVmZmVjdHNUeXBlIGFzIGVmZmVjdCwgZW51bVR5cGUgYXMgZW51bSwgZnVuY3Rpb25UeXBlIGFzIGZ1bmN0aW9uLCBnZXRFcnJvck1hcCwgZ2V0UGFyc2VkVHlwZSwgaW5zdGFuY2VPZlR5cGUgYXMgaW5zdGFuY2VvZiwgaW50ZXJzZWN0aW9uVHlwZSBhcyBpbnRlcnNlY3Rpb24sIGlzQWJvcnRlZCwgaXNBc3luYywgaXNEaXJ0eSwgaXNWYWxpZCwgbGF0ZSwgbGF6eVR5cGUgYXMgbGF6eSwgbGl0ZXJhbFR5cGUgYXMgbGl0ZXJhbCwgbWFrZUlzc3VlLCBtYXBUeXBlIGFzIG1hcCwgbmFuVHlwZSBhcyBuYW4sIG5hdGl2ZUVudW1UeXBlIGFzIG5hdGl2ZUVudW0sIG5ldmVyVHlwZSBhcyBuZXZlciwgbnVsbFR5cGUgYXMgbnVsbCwgbnVsbGFibGVUeXBlIGFzIG51bGxhYmxlLCBudW1iZXJUeXBlIGFzIG51bWJlciwgb2JqZWN0VHlwZSBhcyBvYmplY3QsIG9iamVjdFV0aWwsIG9ib29sZWFuLCBvbnVtYmVyLCBvcHRpb25hbFR5cGUgYXMgb3B0aW9uYWwsIG9zdHJpbmcsIHBpcGVsaW5lVHlwZSBhcyBwaXBlbGluZSwgcHJlcHJvY2Vzc1R5cGUgYXMgcHJlcHJvY2VzcywgcHJvbWlzZVR5cGUgYXMgcHJvbWlzZSwgcXVvdGVsZXNzSnNvbiwgcmVjb3JkVHlwZSBhcyByZWNvcmQsIHNldFR5cGUgYXMgc2V0LCBzZXRFcnJvck1hcCwgc3RyaWN0T2JqZWN0VHlwZSBhcyBzdHJpY3RPYmplY3QsIHN0cmluZ1R5cGUgYXMgc3RyaW5nLCBzeW1ib2xUeXBlIGFzIHN5bWJvbCwgZWZmZWN0c1R5cGUgYXMgdHJhbnNmb3JtZXIsIHR1cGxlVHlwZSBhcyB0dXBsZSwgdW5kZWZpbmVkVHlwZSBhcyB1bmRlZmluZWQsIHVuaW9uVHlwZSBhcyB1bmlvbiwgdW5rbm93blR5cGUgYXMgdW5rbm93biwgdXRpbCwgdm9pZFR5cGUgYXMgdm9pZCwgeiB9O1xuIiwgIi8vIHNyYy9wYWNrYWdlLWpzb24udHNcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG52YXIgQnVncyA9IHoudW5pb24oW1xuICB6LnN0cmluZygpLFxuICB6Lm9iamVjdCh7XG4gICAgdXJsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxuXSk7XG52YXIgRnVuZGluZyA9IHoudW5pb24oW1xuICB6LnN0cmluZygpLFxuICB6Lm9iamVjdCh7XG4gICAgdXJsOiB6LnN0cmluZygpLFxuICAgIHR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KSxcbiAgei5hcnJheShcbiAgICB6LnVuaW9uKFtcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHVybDogei5zdHJpbmcoKSxcbiAgICAgICAgdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gICAgICB9KVxuICAgIF0pXG4gIClcbl0pO1xudmFyIFBlcnNvbiA9IHoudW5pb24oW1xuICB6LnN0cmluZygpLFxuICB6Lm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBlbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG5dKTtcbnZhciBSZXBvc2l0b3J5ID0gei51bmlvbihbXG4gIHouc3RyaW5nKCksXG4gIHoub2JqZWN0KHtcbiAgICAvKiogUmVwb3NpdG9yeSB0eXBlIChlLmcuLCBgZ2l0YCkuICovXG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICAvKiogTWFjaGluZS1yZWFkYWJsZSByZXBvc2l0b3J5IFVSTCAoZS5nLiwgYGh0dHBzOi8vZ2l0aHViLmNvbS91c2VyL3JlcG8uZ2l0YCkuICovXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICAgIC8qKiBEaXJlY3RvcnkgaW4gYSBtb25vcmVwbyB3aGVyZSB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGlzIGxvY2F0ZWQuICovXG4gICAgZGlyZWN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbl0pO1xudmFyIFBhY2thZ2VKc29uID0gei5vYmplY3Qoe1xuICAvKiogUGFja2FnZSBuYW1lLiAqL1xuICBuYW1lOiB6LnN0cmluZygpLFxuICAvKiogUGFja2FnZSBzZW12ZXIgdmVyc2lvbiBudW1iZXIuICovXG4gIHZlcnNpb246IHouc3RyaW5nKCksXG4gIC8qKiBEZXNjcmlwdGlvbiBmb3IgdGhlIHBhY2thZ2UuICovXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBMaXN0IG9mIGtleXdvcmRzIGZvciBzZWFyY2hpbmcgdGhlIHBhY2thZ2UuICovXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBVUkwgb2YgdGhlIHBhY2thZ2UncyBob21lcGFnZS4gKi9cbiAgaG9tZXBhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIElzc3VlIHRyYWNrZXIgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICBidWdzOiBCdWdzLm9wdGlvbmFsKCksXG4gIC8qKiBTUERYIGxpY2Vuc2UgZXhwcmVzc2lvbiBvciBhIGN1c3RvbSBsaWNlbnNlLiAqL1xuICBsaWNlbnNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBBdXRob3Igb2YgdGhlIHBhY2thZ2UuICovXG4gIGF1dGhvcjogUGVyc29uLm9wdGlvbmFsKCksXG4gIC8qKiBDb250cmlidXRvcnMgdG8gdGhlIHBhY2thZ2UuICovXG4gIGNvbnRyaWJ1dG9yczogei5hcnJheShQZXJzb24pLm9wdGlvbmFsKCksXG4gIC8qKiBNYWludGFpbmVycyBvZiB0aGUgcGFja2FnZS4gKi9cbiAgbWFpbnRhaW5lcnM6IHouYXJyYXkoUGVyc29uKS5vcHRpb25hbCgpLFxuICAvKiogRnVuZGluZyBvcHRpb25zIGZvciB0aGUgcGFja2FnZS4gKi9cbiAgZnVuZGluZzogRnVuZGluZy5vcHRpb25hbCgpLFxuICAvKiogRmlsZSBwYXR0ZXJucyBmb3IgZmlsZXMgdG8gYmUgaW5jbHVkZWQgd2hlbiBwdWJsaXNoaW5nIHRoZSBwYWNrYWdlLiAqL1xuICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogTWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHBhY2thZ2UsIHVzdWFsbHkgQ29tbW9uSlMuICovXG4gIG1haW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gIE1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBwYWNrYWdlIHdoZW4gdXNlZCBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5ucG1qcy5jb20vY2xpL3YxMC9jb25maWd1cmluZy1ucG0vcGFja2FnZS1qc29uI2Jyb3dzZXJ9XG4gIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RlZnVuY3R6b21iaWUvNDMzOTkwMS80OTQ5MzgzNmZiODczZGRhYTRiOGE3YWEwZWYyMzUyMTE5ZjY5MjExfVxuICAqL1xuICBicm93c2VyOiB6LnVuaW9uKFt6LnN0cmluZygpLCB6LnJlY29yZCh6LnVuaW9uKFt6LnN0cmluZygpLCB6LmJvb2xlYW4oKV0pKV0pLm9wdGlvbmFsKCksXG4gIC8qKiBFeGVjdXRhYmxlIGZpbGVzLiAqL1xuICBiaW46IHoudW5pb24oW3ouc3RyaW5nKCksIHoucmVjb3JkKHouc3RyaW5nKCkpXSkub3B0aW9uYWwoKSxcbiAgLyoqIERvY3VtZW50YXRpb24gdG8gYmUgdXNlZCB3aXRoIHRoZSBgbWFuYCBjb21tYW5kLiAqL1xuICBtYW46IHoudW5pb24oW3ouc3RyaW5nKCksIHouYXJyYXkoei5zdHJpbmcoKSldKS5vcHRpb25hbCgpLFxuICAvKiogRGlyZWN0b3JpZXMgaW4gdGhlIHBhY2thZ2UuICovXG4gIGRpcmVjdG9yaWVzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogUmVwb3NpdG9yeSBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZS4gKi9cbiAgcmVwb3NpdG9yeTogUmVwb3NpdG9yeS5vcHRpb25hbCgpLFxuICAvKiogU2NyaXB0cyB1c2VkIGluIHRoZSBwYWNrYWdlLiAqL1xuICBzY3JpcHRzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogQ29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHNjcmlwdHMuICovXG4gIGNvbmZpZzogei5yZWNvcmQoei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBQcm9kdWN0aW9uIGRlcGVuZGVuY2llcy4gKi9cbiAgZGVwZW5kZW5jaWVzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogRGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzLiAqL1xuICBkZXZEZXBlbmRlbmNpZXM6IHoucmVjb3JkKHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBQZWVyIGRlcGVuZGVuY2llcy4gKi9cbiAgcGVlckRlcGVuZGVuY2llczogei5yZWNvcmQoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLyoqIE1ldGFkYXRhIGFib3V0IHBlZXIgZGVwZW5kZW5jaWVzLiAqL1xuICBwZWVyRGVwZW5kZW5jaWVzTWV0YTogei5yZWNvcmQoei5vYmplY3QoeyBvcHRpb25hbDogei5ib29sZWFuKCkgfSkpLm9wdGlvbmFsKCksXG4gIC8qKiBEZXBlbmRlbmNpZXMgYnVuZGxlZCB3aXRoIHRoZSBwYWNrYWdlLiAqL1xuICBidW5kbGVEZXBlbmRlbmNpZXM6IHoudW5pb24oW3ouYm9vbGVhbigpLCB6LmFycmF5KHouc3RyaW5nKCkpXSkub3B0aW9uYWwoKSxcbiAgLyoqIERlcGVuZGVuY2llcyBidW5kbGVkIHdpdGggdGhlIHBhY2thZ2UgKGVxdWl2YWxlbnQgdG8gYGJ1bmRsZURlcGVuZGVuY2llc2ApLiAqL1xuICBidW5kbGVkRGVwZW5kZW5jaWVzOiB6LnVuaW9uKFt6LmJvb2xlYW4oKSwgei5hcnJheSh6LnN0cmluZygpKV0pLm9wdGlvbmFsKCksXG4gIC8qKiBPcHRpb25hbCBkZXBlbmRlbmNpZXMuICovXG4gIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogT3ZlcnJpZGVzIGZvciBkZXBlbmRlbmN5IHJlc29sdXRpb24gdXNpbmcgbnBtLiAqL1xuICBvdmVycmlkZXM6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAvKiogUnVudGltZSBzeXN0ZW1zIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbiAgZW5naW5lczogei5yZWNvcmQoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLyoqIE9wZXJhdGluZyBzeXN0ZW1zIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbiAgb3M6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLyoqIENQVSBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbiAgY3B1OiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBUcnVlIGlmIHRoZSBwYWNrYWdlIHNob3VsZCBub3QgYmUgcHVibGlzaGVkLiAqL1xuICBwcml2YXRlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvKiogQ29uZmlndXJhdGlvbiB2YWx1ZXMgdXNlZCBhdCBwdWJsaXNoaW5nIHRpbWUuICovXG4gIHB1Ymxpc2hDb25maWc6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAvKiogRmlsZSBwYXR0ZXJucyBmb3IgbG9jYXRpbmcgbG9jYWwgd29ya3NwYWNlcy4gKi9cbiAgd29ya3NwYWNlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogRGVwcmVjYXRpb24gbWVzc2FnZS4gKi9cbiAgZGVwcmVjYXRlZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogTWFpbiBFU00gZW50cnkgcG9pbnQgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICBtb2R1bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFR5cGUgZm9yIGFsbCB0aGUgYC5qc2AgZmlsZXMgaW4gdGhlIHBhY2thZ2UsIHVzdWFsbHkgYG1vZHVsZWAuICovXG4gIHR5cGU6IHoudW5pb24oW3oubGl0ZXJhbChcIm1vZHVsZVwiKSwgei5saXRlcmFsKFwiY29tbW9uanNcIildKS5vcHRpb25hbCgpLFxuICAvKiogTWFpbiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuICovXG4gIHR5cGVzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBNYWluIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSAoZXF1aXZhbGVudCB0byBgdHlwZXNgKS4gKi9cbiAgdHlwaW5nczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgVHlwZVNjcmlwdCB0eXBlcyByZXNvbHV0aW9ucy5cbiAgXHRAc2VlIHtAbGluayBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9kZWNsYXJhdGlvbi1maWxlcy9wdWJsaXNoaW5nLmh0bWwjdmVyc2lvbi1zZWxlY3Rpb24td2l0aC10eXBlc3ZlcnNpb25zfVxuICBcdCovXG4gIHR5cGVzVmVyc2lvbnM6IHoucmVjb3JkKHoucmVjb3JkKHouYXJyYXkoei5zdHJpbmcoKSkpKS5vcHRpb25hbCgpLFxuICAvKipcbiAgXHRDb3JlcGFjayBwYWNrYWdlIG1hbmFnZXIuXG4gIFx0QHNlZSB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jb3JlcGFjay5odG1sfVxuICBcdCovXG4gIHBhY2thZ2VNYW5hZ2VyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBUcnVlIGlmIGltcG9ydGluZyBtb2R1bGVzIGZyb20gdGhlIHBhY2thZ2UgY2F1c2VzIHNpZGUgZWZmZWN0cy4gKi9cbiAgc2lkZUVmZmVjdHM6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIC8qKlxuICBJbXBvcnRzIG1hcC5cbiAgQHNlZSB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wYWNrYWdlcy5odG1sI2ltcG9ydHN9XG4gICovXG4gIGltcG9ydHM6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAvKipcbiAgUGFja2FnZSBleHBvcnRzLlxuICBAc2VlIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvYXBpL3BhY2thZ2VzLmh0bWwjZXhwb3J0c31cbiAgKi9cbiAgZXhwb3J0czogei51bmlvbihbei5udWxsKCksIHouc3RyaW5nKCksIHouYXJyYXkoei5zdHJpbmcoKSksIHoucmVjb3JkKHoudW5rbm93bigpKV0pLm9wdGlvbmFsKClcbn0pLnBhc3N0aHJvdWdoKCk7XG5leHBvcnQge1xuICBQYWNrYWdlSnNvblxufTtcbiIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBRdWlja0xSVSBleHRlbmRzIE1hcCB7XG5cdCNzaXplID0gMDtcblx0I2NhY2hlID0gbmV3IE1hcCgpO1xuXHQjb2xkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cdCNtYXhTaXplO1xuXHQjbWF4QWdlO1xuXHQjb25FdmljdGlvbjtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKCEob3B0aW9ucy5tYXhTaXplICYmIG9wdGlvbnMubWF4U2l6ZSA+IDApKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgbWF4U2l6ZWAgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCcpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhBZ2UgPT09ICdudW1iZXInICYmIG9wdGlvbnMubWF4QWdlID09PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgbWF4QWdlYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jbWF4U2l6ZSA9IG9wdGlvbnMubWF4U2l6ZTtcblx0XHR0aGlzLiNtYXhBZ2UgPSBvcHRpb25zLm1heEFnZSB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdFx0dGhpcy4jb25FdmljdGlvbiA9IG9wdGlvbnMub25FdmljdGlvbjtcblx0fVxuXG5cdC8vIEZvciB0ZXN0cy5cblx0Z2V0IF9fb2xkQ2FjaGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI29sZENhY2hlO1xuXHR9XG5cblx0I2VtaXRFdmljdGlvbnMoY2FjaGUpIHtcblx0XHRpZiAodHlwZW9mIHRoaXMuI29uRXZpY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIGNhY2hlKSB7XG5cdFx0XHR0aGlzLiNvbkV2aWN0aW9uKGtleSwgaXRlbS52YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0I2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIHtcblx0XHRpZiAodHlwZW9mIGl0ZW0uZXhwaXJ5ID09PSAnbnVtYmVyJyAmJiBpdGVtLmV4cGlyeSA8PSBEYXRlLm5vdygpKSB7XG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuI29uRXZpY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dGhpcy4jb25FdmljdGlvbihrZXksIGl0ZW0udmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5kZWxldGUoa2V5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQjZ2V0T3JEZWxldGVJZkV4cGlyZWQoa2V5LCBpdGVtKSB7XG5cdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pO1xuXHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIGl0ZW0udmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0I2dldEl0ZW1WYWx1ZShrZXksIGl0ZW0pIHtcblx0XHRyZXR1cm4gaXRlbS5leHBpcnkgPyB0aGlzLiNnZXRPckRlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIDogaXRlbS52YWx1ZTtcblx0fVxuXG5cdCNwZWVrKGtleSwgY2FjaGUpIHtcblx0XHRjb25zdCBpdGVtID0gY2FjaGUuZ2V0KGtleSk7XG5cblx0XHRyZXR1cm4gdGhpcy4jZ2V0SXRlbVZhbHVlKGtleSwgaXRlbSk7XG5cdH1cblxuXHQjc2V0KGtleSwgdmFsdWUpIHtcblx0XHR0aGlzLiNjYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG5cdFx0dGhpcy4jc2l6ZSsrO1xuXG5cdFx0aWYgKHRoaXMuI3NpemUgPj0gdGhpcy4jbWF4U2l6ZSkge1xuXHRcdFx0dGhpcy4jc2l6ZSA9IDA7XG5cdFx0XHR0aGlzLiNlbWl0RXZpY3Rpb25zKHRoaXMuI29sZENhY2hlKTtcblx0XHRcdHRoaXMuI29sZENhY2hlID0gdGhpcy4jY2FjaGU7XG5cdFx0XHR0aGlzLiNjYWNoZSA9IG5ldyBNYXAoKTtcblx0XHR9XG5cdH1cblxuXHQjbW92ZVRvUmVjZW50KGtleSwgaXRlbSkge1xuXHRcdHRoaXMuI29sZENhY2hlLmRlbGV0ZShrZXkpO1xuXHRcdHRoaXMuI3NldChrZXksIGl0ZW0pO1xuXHR9XG5cblx0KiAjZW50cmllc0FzY2VuZGluZygpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy4jb2xkQ2FjaGUpIHtcblx0XHRcdGNvbnN0IFtrZXksIHZhbHVlXSA9IGl0ZW07XG5cdFx0XHRpZiAoIXRoaXMuI2NhY2hlLmhhcyhrZXkpKSB7XG5cdFx0XHRcdGNvbnN0IGRlbGV0ZWQgPSB0aGlzLiNkZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7XG5cdFx0XHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdHlpZWxkIGl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy4jY2FjaGUpIHtcblx0XHRcdGNvbnN0IFtrZXksIHZhbHVlXSA9IGl0ZW07XG5cdFx0XHRjb25zdCBkZWxldGVkID0gdGhpcy4jZGVsZXRlSWZFeHBpcmVkKGtleSwgdmFsdWUpO1xuXHRcdFx0aWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHlpZWxkIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGtleSkge1xuXHRcdGlmICh0aGlzLiNjYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuI2NhY2hlLmdldChrZXkpO1xuXHRcdFx0cmV0dXJuIHRoaXMuI2dldEl0ZW1WYWx1ZShrZXksIGl0ZW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvbGRDYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuI29sZENhY2hlLmdldChrZXkpO1xuXHRcdFx0aWYgKHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLiNtb3ZlVG9SZWNlbnQoa2V5LCBpdGVtKTtcblx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2V0KGtleSwgdmFsdWUsIHttYXhBZ2UgPSB0aGlzLiNtYXhBZ2V9ID0ge30pIHtcblx0XHRjb25zdCBleHBpcnkgPSB0eXBlb2YgbWF4QWdlID09PSAnbnVtYmVyJyAmJiBtYXhBZ2UgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuXHRcdFx0PyAoRGF0ZS5ub3coKSArIG1heEFnZSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHRoaXMuI2NhY2hlLmhhcyhrZXkpKSB7XG5cdFx0XHR0aGlzLiNjYWNoZS5zZXQoa2V5LCB7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRleHBpcnksXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4jc2V0KGtleSwge3ZhbHVlLCBleHBpcnl9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGhhcyhrZXkpIHtcblx0XHRpZiAodGhpcy4jY2FjaGUuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiAhdGhpcy4jZGVsZXRlSWZFeHBpcmVkKGtleSwgdGhpcy4jY2FjaGUuZ2V0KGtleSkpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvbGRDYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0cmV0dXJuICF0aGlzLiNkZWxldGVJZkV4cGlyZWQoa2V5LCB0aGlzLiNvbGRDYWNoZS5nZXQoa2V5KSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cGVlayhrZXkpIHtcblx0XHRpZiAodGhpcy4jY2FjaGUuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiB0aGlzLiNwZWVrKGtleSwgdGhpcy4jY2FjaGUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvbGRDYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuI3BlZWsoa2V5LCB0aGlzLiNvbGRDYWNoZSk7XG5cdFx0fVxuXHR9XG5cblx0ZGVsZXRlKGtleSkge1xuXHRcdGNvbnN0IGRlbGV0ZWQgPSB0aGlzLiNjYWNoZS5kZWxldGUoa2V5KTtcblx0XHRpZiAoZGVsZXRlZCkge1xuXHRcdFx0dGhpcy4jc2l6ZS0tO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLiNvbGRDYWNoZS5kZWxldGUoa2V5KSB8fCBkZWxldGVkO1xuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy4jY2FjaGUuY2xlYXIoKTtcblx0XHR0aGlzLiNvbGRDYWNoZS5jbGVhcigpO1xuXHRcdHRoaXMuI3NpemUgPSAwO1xuXHR9XG5cblx0cmVzaXplKG5ld1NpemUpIHtcblx0XHRpZiAoIShuZXdTaXplICYmIG5ld1NpemUgPiAwKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignYG1heFNpemVgIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAnKTtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtcyA9IFsuLi50aGlzLiNlbnRyaWVzQXNjZW5kaW5nKCldO1xuXHRcdGNvbnN0IHJlbW92ZUNvdW50ID0gaXRlbXMubGVuZ3RoIC0gbmV3U2l6ZTtcblx0XHRpZiAocmVtb3ZlQ291bnQgPCAwKSB7XG5cdFx0XHR0aGlzLiNjYWNoZSA9IG5ldyBNYXAoaXRlbXMpO1xuXHRcdFx0dGhpcy4jb2xkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cdFx0XHR0aGlzLiNzaXplID0gaXRlbXMubGVuZ3RoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAocmVtb3ZlQ291bnQgPiAwKSB7XG5cdFx0XHRcdHRoaXMuI2VtaXRFdmljdGlvbnMoaXRlbXMuc2xpY2UoMCwgcmVtb3ZlQ291bnQpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy4jb2xkQ2FjaGUgPSBuZXcgTWFwKGl0ZW1zLnNsaWNlKHJlbW92ZUNvdW50KSk7XG5cdFx0XHR0aGlzLiNjYWNoZSA9IG5ldyBNYXAoKTtcblx0XHRcdHRoaXMuI3NpemUgPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMuI21heFNpemUgPSBuZXdTaXplO1xuXHR9XG5cblx0KiBrZXlzKCkge1xuXHRcdGZvciAoY29uc3QgW2tleV0gb2YgdGhpcykge1xuXHRcdFx0eWllbGQga2V5O1xuXHRcdH1cblx0fVxuXG5cdCogdmFsdWVzKCkge1xuXHRcdGZvciAoY29uc3QgWywgdmFsdWVdIG9mIHRoaXMpIHtcblx0XHRcdHlpZWxkIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdCogW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMuI2NhY2hlKSB7XG5cdFx0XHRjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtO1xuXHRcdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTtcblx0XHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0XHR5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMuI29sZENhY2hlKSB7XG5cdFx0XHRjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtO1xuXHRcdFx0aWYgKCF0aGlzLiNjYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0XHRjb25zdCBkZWxldGVkID0gdGhpcy4jZGVsZXRlSWZFeHBpcmVkKGtleSwgdmFsdWUpO1xuXHRcdFx0XHRpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHR5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQqIGVudHJpZXNEZXNjZW5kaW5nKCkge1xuXHRcdGxldCBpdGVtcyA9IFsuLi50aGlzLiNjYWNoZV07XG5cdFx0Zm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaV07XG5cdFx0XHRjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtO1xuXHRcdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTtcblx0XHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0XHR5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aXRlbXMgPSBbLi4udGhpcy4jb2xkQ2FjaGVdO1xuXHRcdGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuXHRcdFx0Y29uc3QgW2tleSwgdmFsdWVdID0gaXRlbTtcblx0XHRcdGlmICghdGhpcy4jY2FjaGUuaGFzKGtleSkpIHtcblx0XHRcdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTtcblx0XHRcdFx0aWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0eWllbGQgW2tleSwgdmFsdWUudmFsdWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0KiBlbnRyaWVzQXNjZW5kaW5nKCkge1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuI2VudHJpZXNBc2NlbmRpbmcoKSkge1xuXHRcdFx0eWllbGQgW2tleSwgdmFsdWUudmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdGdldCBzaXplKCkge1xuXHRcdGlmICghdGhpcy4jc2l6ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuI29sZENhY2hlLnNpemU7XG5cdFx0fVxuXG5cdFx0bGV0IG9sZENhY2hlU2l6ZSA9IDA7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgdGhpcy4jb2xkQ2FjaGUua2V5cygpKSB7XG5cdFx0XHRpZiAoIXRoaXMuI2NhY2hlLmhhcyhrZXkpKSB7XG5cdFx0XHRcdG9sZENhY2hlU2l6ZSsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBNYXRoLm1pbih0aGlzLiNzaXplICsgb2xkQ2FjaGVTaXplLCB0aGlzLiNtYXhTaXplKTtcblx0fVxuXG5cdGdldCBtYXhTaXplKCkge1xuXHRcdHJldHVybiB0aGlzLiNtYXhTaXplO1xuXHR9XG5cblx0ZW50cmllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzQXNjZW5kaW5nKCk7XG5cdH1cblxuXHRmb3JFYWNoKGNhbGxiYWNrRnVuY3Rpb24sIHRoaXNBcmd1bWVudCA9IHRoaXMpIHtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmVudHJpZXNBc2NlbmRpbmcoKSkge1xuXHRcdFx0Y2FsbGJhY2tGdW5jdGlvbi5jYWxsKHRoaXNBcmd1bWVudCwgdmFsdWUsIGtleSwgdGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShbLi4udGhpcy5lbnRyaWVzQXNjZW5kaW5nKCldKTtcblx0fVxufVxuIiwgImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gIH1cblxuICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgIGlmIChpID4gMCkge1xuICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICB9XG4gICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICB9XG5cbiAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgfVxuXG4gIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXJsSm9pbigpIHtcbiAgdmFyIGlucHV0O1xuXG4gIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG59XG4iLCAiLy8gc3JjL2luZGV4LnRzXG5pbXBvcnQgeyBQYWNrYWdlSnNvbiBhcyBQYWNrYWdlSnNvbjQgfSBmcm9tIFwiem9kLXBhY2thZ2UtanNvblwiO1xuXG4vLyBzcmMvY2FjaGUudHNcbmltcG9ydCBRdWlja0xSVSBmcm9tIFwicXVpY2stbHJ1XCI7XG52YXIgY2FjaGUgPSBuZXcgUXVpY2tMUlUoe1xuICAvLyAxMDAgaXRlbXMuXG4gIG1heFNpemU6IDEwMCxcbiAgLy8gNSBtaW51dGVzLlxuICBtYXhBZ2U6IDUgKiA2MCAqIDFlM1xufSk7XG5cbi8vIHNyYy9kb3dubG9hZC1wZXJpb2QudHNcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG52YXIgRG93bmxvYWRQZXJpb2QgPSB6LnVuaW9uKFtcbiAgei5saXRlcmFsKFwibGFzdC1kYXlcIiksXG4gIHoubGl0ZXJhbChcImxhc3Qtd2Vla1wiKSxcbiAgei5saXRlcmFsKFwibGFzdC1tb250aFwiKSxcbiAgei5saXRlcmFsKFwibGFzdC15ZWFyXCIpLFxuICB6LnN0cmluZygpLnJlZ2V4KC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oOlxcZHs0fS1cXGR7Mn0tXFxkezJ9KT8kLylcbl0pO1xuXG4vLyBzcmMvZ2V0LWFiYnJldmlhdGVkLXBhY2t1bWVudC50c1xuaW1wb3J0IHVybEpvaW4yIGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6NCB9IGZyb20gXCJ6b2RcIjtcblxuLy8gc3JjL2Fzc2VydC12YWxpZC1wYWNrYWdlLW5hbWUudHNcbmltcG9ydCB2YWxpZGF0ZVBhY2thZ2VOYW1lIGZyb20gXCJ2YWxpZGF0ZS1ucG0tcGFja2FnZS1uYW1lXCI7XG52YXIgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZSA9IChuYW1lKSA9PiB7XG4gIGNvbnN0IHsgdmFsaWRGb3JPbGRQYWNrYWdlcywgdmFsaWRGb3JOZXdQYWNrYWdlcywgd2FybmluZ3MsIGVycm9ycyB9ID0gdmFsaWRhdGVQYWNrYWdlTmFtZShuYW1lKTtcbiAgY29uc3QgaXNWYWxpZCA9IHZhbGlkRm9yT2xkUGFja2FnZXMgfHwgdmFsaWRGb3JOZXdQYWNrYWdlcztcbiAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwYWNrYWdlIG5hbWVcIiwgeyBjYXVzZTogeyBuYW1lLCB3YXJuaW5ncywgZXJyb3JzIH0gfSk7XG4gIH1cbn07XG5cbi8vIHNyYy9kaXN0LXRhZ3MudHNcbmltcG9ydCB7IHogYXMgejIgfSBmcm9tIFwiem9kXCI7XG52YXIgRGlzdFRhZ3MgPSB6Mi5vYmplY3Qoe1xuICAvKiogTGF0ZXN0IHNlbXZlciB2ZXJzaW9uIG51bWJlci4gKi9cbiAgbGF0ZXN0OiB6Mi5zdHJpbmcoKSxcbiAgLy8gVGhlIGZvbGxvd2luZyB0YWdzIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nIGZvciB0aGUgbnBtIHJlZ2lzdHJ5XG4gIC8vIGJ1dCB0aGV5IGFyZSBjb21tb25seSB1c2VkIGJ5IHBhY2thZ2VzLlxuICBuZXh0OiB6Mi5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhbHBoYTogejIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYmV0YTogejIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmM6IHoyLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNhbmFyeTogejIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGV2OiB6Mi5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5jYXRjaGFsbCh6Mi5zdHJpbmcoKSk7XG5cbi8vIHNyYy9mZXRjaC1kYXRhLnRzXG52YXIgZmV0Y2hEYXRhID0gYXN5bmMgKHNjaGVtYSwgdXJsLCBoZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkoeyB1cmwsIGhlYWRlcnMgfSk7XG4gIGNvbnN0IGNhY2hlZEpzb24gPSBjYWNoZS5nZXQoY2FjaGVLZXkpO1xuICBpZiAoY2FjaGVkSnNvbikge1xuICAgIHJldHVybiBzY2hlbWEucGFyc2UoY2FjaGVkSnNvbik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVycyB9KTtcbiAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgY2FjaGUuc2V0KGNhY2hlS2V5LCBqc29uKTtcbiAgcmV0dXJuIHNjaGVtYS5wYXJzZShqc29uKTtcbn07XG5cbi8vIHNyYy9nZXQtcGFja2FnZS1tYW5pZmVzdC50c1xuaW1wb3J0IHVybEpvaW4gZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHozIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiem9kLXBhY2thZ2UtanNvblwiO1xuXG4vLyBzcmMvbnBtLXJlZ2lzdHJ5LnRzXG52YXIgbnBtUmVnaXN0cnlVcmwgPSBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCI7XG52YXIgbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwgPSBcImh0dHBzOi8vYXBpLm5wbWpzLm9yZ1wiO1xuXG4vLyBzcmMvZ2V0LXBhY2thZ2UtbWFuaWZlc3QudHNcbnZhciBEaXN0ID0gejMub2JqZWN0KHtcbiAgLyoqIFRhcmJhbGwgVVJMLiAqL1xuICB0YXJiYWxsOiB6My5zdHJpbmcoKSxcbiAgLyoqIFNIQTEgc3VtIG9mIHRoZSB0YXJiYWxsLiAqL1xuICBzaGFzdW06IHozLnN0cmluZygpLFxuICAvKiogU3RyaW5nIGluIHRoZSBmb3JtYXQgYDxoYXNoQWxnb3JpdGhtPi08YmFzZTY0LWhhc2g+YC4gKi9cbiAgaW50ZWdyaXR5OiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogTnVtYmVyIG9mIGZpbGVzIGluIHRoZSB0YXJiYWxsLiAqL1xuICBmaWxlQ291bnQ6IHozLm51bWJlcigpLm9wdGlvbmFsKCksXG4gIC8qKiBUb3RhbCB1bnBhY2tlZCBzaXplIGluIGJ5dGVzIG9mIHRoZSBmaWxlcyBpbiB0aGUgdGFyYmFsbC4gKi9cbiAgdW5wYWNrZWRTaXplOiB6My5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgIFBHUCBzaWduYXR1cmUgaW4gdGhlIGZvcm1hdCBgPHBhY2thZ2U+QDx2ZXJzaW9uPjo8aW50ZWdyaXR5PmAuXG4gIEBkZXByZWNhdGVkIHtAbGluayBodHRwczovL2RvY3MubnBtanMuY29tL2Fib3V0LXJlZ2lzdHJ5LXNpZ25hdHVyZXMjbWlncmF0aW5nLWZyb20tcGdwLXRvLWVjZHNhLXNpZ25hdHVyZXN9XG4gICovXG4gIFwibnBtLXNpZ25hdHVyZVwiOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgRUNEU0EgcmVnaXN0cnkgc2lnbmF0dXJlcy5cbiAgQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9hYm91dC1yZWdpc3RyeS1zaWduYXR1cmVzfVxuICAgKi9cbiAgc2lnbmF0dXJlczogejMuYXJyYXkoXG4gICAgejMub2JqZWN0KHtcbiAgICAgIGtleWlkOiB6My5zdHJpbmcoKSxcbiAgICAgIHNpZzogejMuc3RyaW5nKClcbiAgICB9KVxuICApLm9wdGlvbmFsKClcbn0pO1xudmFyIFBhY2thZ2VNYW5pZmVzdCA9IFBhY2thZ2VKc29uLmV4dGVuZCh7XG4gIC8qKiBQYWNrYWdlIHZlcnNpb24gSUQgaW4gdGhlIGZvcm1hdCBgPG5hbWU+QDx2ZXJzaW9uPmAgKGUuZy4sIGBmb29AMS4wLjBgKS4gKi9cbiAgX2lkOiB6My5zdHJpbmcoKSxcbiAgLyoqIERpc3RyaWJ1dGlvbiBtZXRhZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIHJlZ2lzdHJ5LiAqL1xuICBkaXN0OiBEaXN0LFxuICAvKiogVGV4dCBleHRyYWN0ZWQgZnJvbSB0aGUgUkVBRE1FIGZpbGUuICovXG4gIHJlYWRtZTogejMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIE5hbWUgb2YgdGhlIFJFQURNRSBmaWxlLiAqL1xuICByZWFkbWVGaWxlbmFtZTogejMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIENvbW1pdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwdWJsaXNoZWQgcGFja2FnZSB2ZXJzaW9uLiAqL1xuICBnaXRIZWFkOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogVHJ1ZSBpZiB0aGUgcGFja2FnZSBjb250YWlucyBhIHNocmlua3dyYXAgZmlsZS4gKi9cbiAgX2hhc1Nocmlua3dyYXA6IHozLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvKiogTm9kZS5qcyB2ZXJzaW9uIHVzZWQgdG8gcHVibGlzaCB0aGUgcGFja2FnZS4gKi9cbiAgX25vZGVWZXJzaW9uOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogbnBtIENMSSB2ZXJzaW9uIHVzZWQgdG8gcHVibGlzaCB0aGUgcGFja2FnZS4gKi9cbiAgX25wbVZlcnNpb246IHozLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBucG0gdXNlciB3aG8gcHVibGlzaGVkIHRoZSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiAqL1xuICBfbnBtVXNlcjogUGFja2FnZUpzb24uc2hhcGUuYXV0aG9yLm9wdGlvbmFsKCksXG4gIC8qKiBJbnRlcm5hbCBucG0gcmVnaXN0cnkgZGF0YS4gKi9cbiAgX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6IHozLm9iamVjdCh7XG4gICAgaG9zdDogejMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0bXA6IHozLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKSxcbiAgLyoqXG4gIFx0UnVudGltZSBzeXN0ZW1zIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS5cbiAgXG4gIFx0QHJlbWFya3NcbiAgXHRJbiBzb21lIG9sZCBwYWNrYWdlcyAobGlrZSBgbG9kYXNoQDAuMS4wYCkgdGhlIGBlbmdpbmVzYCBwcm9wZXJ0eSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gIFx0aW5zdGVhZCBvZiBhbiBvYmplY3QgYW5kIHdpdGggY2F0Y2ggaXQgYmVjb21lcyBgdW5kZWZpbmVkYC5cbiAgXHQqL1xuICBlbmdpbmVzOiB6My5yZWNvcmQoejMuc3RyaW5nKCkpLm9wdGlvbmFsKCkuY2F0Y2godm9pZCAwKSxcbiAgLyoqXG4gIFx0U1BEWCBsaWNlbnNlIGV4cHJlc3Npb24gb3IgYSBjdXN0b20gbGljZW5zZS5cbiAgXG4gIFx0QHJlbWFya3NcbiAgXHRJbiBzb21lIG9sZCBwYWNrYWdlcyAobGlrZSBgZXNsaW50QDAuMC42YCkgdGhlIGBsaWNlbnNlYCBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcbiAgXHRhbmQgd2l0aCBjYXRjaCBgbGljZW5zZWAgYmVjb21lcyBgdW5kZWZpbmVkYC5cbiAgXHQqL1xuICBsaWNlbnNlOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLmNhdGNoKHZvaWQgMCksXG4gIC8qKlxuICBcdFVSTCBvZiB0aGUgcGFja2FnZSdzIGhvbWVwYWdlLlxuICBcbiAgXHRAcmVtYXJrc1xuICBcdEluIHNvbWUgb2xkIHBhY2thZ2VzIChsaWtlIGBmcy1leHRyYUAwLjAuMWApIHRoZSBgaG9tZXBhZ2VgIHByb3BlcnR5IGlzIGFuIGFycmF5XG4gIFx0b2Ygc3RyaW5ncyBhbmQgd2l0aCBjYXRjaCBpdCBiZWNvbWVzIGB1bmRlZmluZWRgLlxuICBcdCovXG4gIGhvbWVwYWdlOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLmNhdGNoKHZvaWQgMCksXG4gIC8qKlxuICBcdERlcHJlY2F0aW9uIHN0YXR1cy9tZXNzYWdlLlxuICBcbiAgXHRAcmVtYXJrc1xuICBcdEluIHNvbWUgcGFja2FnZXMgKGxpa2UgYHJlYWN0QDE2LjE0LjBgKSB0aGUgYGRlcHJlY2F0ZWRgIHByb3BlcnR5IGlzIGEgYm9vbGVhblxuICBcdGluc3RlYWQgb2YgYSBkZXByZWNhdGlvbiBtZXNzYWdlLlxuICBcdCovXG4gIGRlcHJlY2F0ZWQ6IHozLnVuaW9uKFt6My5zdHJpbmcoKSwgejMuYm9vbGVhbigpXSkub3B0aW9uYWwoKVxufSk7XG52YXIgZ2V0UGFja2FnZU1hbmlmZXN0ID0gYXN5bmMgKG5hbWUsIHZlcnNpb25PclRhZyA9IFwibGF0ZXN0XCIsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShQYWNrYWdlTWFuaWZlc3QsIHVybEpvaW4ocmVnaXN0cnksIG5hbWUsIHZlcnNpb25PclRhZykpO1xufTtcblxuLy8gc3JjL2dldC1hYmJyZXZpYXRlZC1wYWNrdW1lbnQudHNcbnZhciBBYmJyZXZpYXRlZFBhY2t1bWVudCA9IHo0Lm9iamVjdCh7XG4gIC8qKiBQYWNrYWdlIG5hbWUuICovXG4gIG5hbWU6IHo0LnN0cmluZygpLFxuICAvKiogVGltZXN0YW1wIG9mIHdoZW4gdGhlIHBhY2thZ2Ugd2FzIGxhc3QgbW9kaWZpZWQgaW4gSVNPIDg2MDEgZm9ybWF0IChlLmcuLCBgMjAyMS0xMS0yM1QxOToxMjoyNC4wMDZaYCkuICovXG4gIG1vZGlmaWVkOiB6NC5zdHJpbmcoKSxcbiAgLyoqIE1hcHBpbmcgb2YgZGlzdHJpYnV0aW9uIHRhZ3MgdG8gc2VtdmVyIHZlcnNpb24gbnVtYmVycyBlLmcuLCBgeyBcImxhdGVzdFwiOiBcIjEuMC4wXCIgfWApLiAqL1xuICBcImRpc3QtdGFnc1wiOiBEaXN0VGFncyxcbiAgLyoqIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byB0aGUgcmVxdWlyZWQgbWV0YWRhdGEgZm9yIGluc3RhbGxpbmcgYSBwYWNrYWdlIHZlcnNpb24uICovXG4gIHZlcnNpb25zOiB6NC5yZWNvcmQoXG4gICAgejQuc3RyaW5nKCksXG4gICAgUGFja2FnZU1hbmlmZXN0LnBpY2soe1xuICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgIHZlcnNpb246IHRydWUsXG4gICAgICBkaXN0OiB0cnVlLFxuICAgICAgZGVwcmVjYXRlZDogdHJ1ZSxcbiAgICAgIGRlcGVuZGVuY2llczogdHJ1ZSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB0cnVlLFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB0cnVlLFxuICAgICAgYnVuZGxlRGVwZW5kZW5jaWVzOiB0cnVlLFxuICAgICAgcGVlckRlcGVuZGVuY2llczogdHJ1ZSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXNNZXRhOiB0cnVlLFxuICAgICAgYmluOiB0cnVlLFxuICAgICAgZGlyZWN0b3JpZXM6IHRydWUsXG4gICAgICBlbmdpbmVzOiB0cnVlLFxuICAgICAgY3B1OiB0cnVlLFxuICAgICAgb3M6IHRydWUsXG4gICAgICBfaGFzU2hyaW5rd3JhcDogdHJ1ZVxuICAgIH0pLmV4dGVuZCh7XG4gICAgICAvKiogVHJ1ZSBpZiB0aGUgcGFja2FnZSBjb250YWlucyBhbiBgaW5zdGFsbGAgc2NyaXB0LiAqL1xuICAgICAgaGFzSW5zdGFsbFNjcmlwdDogejQuYm9vbGVhbigpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnZhciBnZXRBYmJyZXZpYXRlZFBhY2t1bWVudCA9IGFzeW5jIChuYW1lLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5VXJsKSA9PiB7XG4gIGFzc2VydFZhbGlkUGFja2FnZU5hbWUobmFtZSk7XG4gIHJldHVybiBmZXRjaERhdGEoQWJicmV2aWF0ZWRQYWNrdW1lbnQsIHVybEpvaW4yKHJlZ2lzdHJ5LCBuYW1lKSwge1xuICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQubnBtLmluc3RhbGwtdjEranNvblwiXG4gIH0pO1xufTtcblxuLy8gc3JjL2dldC1idWxrLWRhaWx5LXBhY2thZ2UtZG93bmxvYWRzLnRzXG5pbXBvcnQgdXJsSm9pbjUgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHo3IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBzcmMvZ2V0LWRhaWx5LXBhY2thZ2UtZG93bmxvYWRzLnRzXG5pbXBvcnQgdXJsSm9pbjQgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHo2IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBzcmMvZ2V0LWRhaWx5LXJlZ2lzdHJ5LWRvd25sb2Fkcy50c1xuaW1wb3J0IHVybEpvaW4zIGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6NSB9IGZyb20gXCJ6b2RcIjtcbnZhciBEYWlseVJlZ2lzdHJ5RG93bmxvYWRzID0gejUub2JqZWN0KHtcbiAgLyoqIERhdGUgb2YgdGhlIGZpcnN0IGRheSAoaW5jbHVzaXZlKSBpbiB0aGUgZm9ybWF0IGBZWVlZLU1NLUREYC4gKi9cbiAgc3RhcnQ6IHo1LnN0cmluZygpLFxuICAvKiogRGF0ZSBvZiB0aGUgbGFzdCBkYXkgKGluY2x1c2l2ZSkgaW4gdGhlIGZvcm1hdCBgWVlZWS1NTS1ERGAuICovXG4gIGVuZDogejUuc3RyaW5nKCksXG4gIC8qKiBEb3dubG9hZCBjb3VudHMgZm9yIGVhY2ggZGF5LiAqL1xuICBkb3dubG9hZHM6IHo1LmFycmF5KFxuICAgIHo1Lm9iamVjdCh7XG4gICAgICAvKiogVG90YWwgbnVtYmVyIG9mIGRvd25sb2FkcyBmb3IgdGhlIGRheS4gKi9cbiAgICAgIGRvd25sb2FkczogejUubnVtYmVyKCksXG4gICAgICAvKiogRGF0ZSBvZiB0aGUgZGF5IGluIHRoZSBmb3JtYXQgYFlZWVktTU0tRERgLiAqL1xuICAgICAgZGF5OiB6NS5zdHJpbmcoKVxuICAgIH0pXG4gIClcbn0pO1xudmFyIGdldERhaWx5UmVnaXN0cnlEb3dubG9hZHMgPSBhc3luYyAocGVyaW9kLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5RG93bmxvYWRzQXBpVXJsKSA9PiBmZXRjaERhdGEoRGFpbHlSZWdpc3RyeURvd25sb2FkcywgdXJsSm9pbjMocmVnaXN0cnksIGAvZG93bmxvYWRzL3JhbmdlLyR7cGVyaW9kfWApKTtcblxuLy8gc3JjL2dldC1kYWlseS1wYWNrYWdlLWRvd25sb2Fkcy50c1xudmFyIERhaWx5UGFja2FnZURvd25sb2FkcyA9IERhaWx5UmVnaXN0cnlEb3dubG9hZHMuZXh0ZW5kKHtcbiAgLyoqIFBhY2thZ2UgbmFtZS4gKi9cbiAgcGFja2FnZTogejYuc3RyaW5nKClcbn0pO1xudmFyIGdldERhaWx5UGFja2FnZURvd25sb2FkcyA9IGFzeW5jIChuYW1lLCBwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShEYWlseVBhY2thZ2VEb3dubG9hZHMsIHVybEpvaW40KHJlZ2lzdHJ5LCBgL2Rvd25sb2Fkcy9yYW5nZS8ke3BlcmlvZH0vJHtuYW1lfWApKTtcbn07XG5cbi8vIHNyYy9nZXQtYnVsay1kYWlseS1wYWNrYWdlLWRvd25sb2Fkcy50c1xudmFyIEJ1bGtEYWlseVBhY2thZ2VEb3dubG9hZHMgPSB6Ny5yZWNvcmQoejcudW5pb24oW3o3Lm51bGwoKSwgRGFpbHlQYWNrYWdlRG93bmxvYWRzXSkpO1xudmFyIGdldEJ1bGtEYWlseVBhY2thZ2VEb3dubG9hZHMgPSBhc3luYyAobmFtZXMsIHBlcmlvZCwgcmVnaXN0cnkgPSBucG1SZWdpc3RyeURvd25sb2Fkc0FwaVVybCkgPT4ge1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICBhc3NlcnRWYWxpZFBhY2thZ2VOYW1lKG5hbWUpO1xuICB9XG4gIHJldHVybiBmZXRjaERhdGEoXG4gICAgQnVsa0RhaWx5UGFja2FnZURvd25sb2FkcyxcbiAgICB1cmxKb2luNShyZWdpc3RyeSwgYC9kb3dubG9hZHMvcmFuZ2UvJHtwZXJpb2R9LyR7bmFtZXMuam9pbihcIixcIil9YClcbiAgKTtcbn07XG5cbi8vIHNyYy9nZXQtYnVsay1wYWNrYWdlLWRvd25sb2Fkcy50c1xuaW1wb3J0IHVybEpvaW44IGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6MTAgfSBmcm9tIFwiem9kXCI7XG5cbi8vIHNyYy9nZXQtcGFja2FnZS1kb3dubG9hZHMudHNcbmltcG9ydCB1cmxKb2luNyBmcm9tIFwidXJsLWpvaW5cIjtcbmltcG9ydCB7IHogYXMgejkgfSBmcm9tIFwiem9kXCI7XG5cbi8vIHNyYy9nZXQtcmVnaXN0cnktZG93bmxvYWRzLnRzXG5pbXBvcnQgdXJsSm9pbjYgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHo4IH0gZnJvbSBcInpvZFwiO1xudmFyIFJlZ2lzdHJ5RG93bmxvYWRzID0gejgub2JqZWN0KHtcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBkb3dubG9hZHMuICovXG4gIGRvd25sb2FkczogejgubnVtYmVyKCksXG4gIC8qKiBEYXRlIG9mIHRoZSBmaXJzdCBkYXkgKGluY2x1c2l2ZSkgaW4gdGhlIGZvcm1hdCBgWVlZWS1NTS1ERGAuICovXG4gIHN0YXJ0OiB6OC5zdHJpbmcoKSxcbiAgLyoqIERhdGUgb2YgdGhlIGxhc3QgZGF5IChpbmNsdXNpdmUpIGluIHRoZSBmb3JtYXQgYFlZWVktTU0tRERgLiAqL1xuICBlbmQ6IHo4LnN0cmluZygpXG59KTtcbnZhciBnZXRSZWdpc3RyeURvd25sb2FkcyA9IGFzeW5jIChwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IGZldGNoRGF0YShSZWdpc3RyeURvd25sb2FkcywgdXJsSm9pbjYocmVnaXN0cnksIGAvZG93bmxvYWRzL3BvaW50LyR7cGVyaW9kfWApKTtcblxuLy8gc3JjL2dldC1wYWNrYWdlLWRvd25sb2Fkcy50c1xudmFyIFBhY2thZ2VEb3dubG9hZHMgPSBSZWdpc3RyeURvd25sb2Fkcy5leHRlbmQoe1xuICAvKiogUGFja2FnZSBuYW1lLiAqL1xuICBwYWNrYWdlOiB6OS5zdHJpbmcoKVxufSk7XG52YXIgZ2V0UGFja2FnZURvd25sb2FkcyA9IGFzeW5jIChuYW1lLCBwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShQYWNrYWdlRG93bmxvYWRzLCB1cmxKb2luNyhyZWdpc3RyeSwgYC9kb3dubG9hZHMvcG9pbnQvJHtwZXJpb2R9LyR7bmFtZX1gKSk7XG59O1xuXG4vLyBzcmMvZ2V0LWJ1bGstcGFja2FnZS1kb3dubG9hZHMudHNcbnZhciBCdWxrUGFja2FnZURvd25sb2FkcyA9IHoxMC5yZWNvcmQoejEwLnVuaW9uKFt6MTAubnVsbCgpLCBQYWNrYWdlRG93bmxvYWRzXSkpO1xudmFyIGdldEJ1bGtQYWNrYWdlRG93bmxvYWRzID0gYXN5bmMgKG5hbWVzLCBwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgfVxuICByZXR1cm4gZmV0Y2hEYXRhKFxuICAgIEJ1bGtQYWNrYWdlRG93bmxvYWRzLFxuICAgIHVybEpvaW44KHJlZ2lzdHJ5LCBgL2Rvd25sb2Fkcy9wb2ludC8ke3BlcmlvZH0vJHtuYW1lcy5qb2luKFwiLFwiKX1gKVxuICApO1xufTtcblxuLy8gc3JjL2dldC1wYWNrYWdlLXZlcnNpb25zLWRvd25sb2Fkcy50c1xuaW1wb3J0IHVybEpvaW45IGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6MTEgfSBmcm9tIFwiem9kXCI7XG52YXIgUGFja2FnZVZlcnNpb25zRG93bmxvYWRzID0gejExLm9iamVjdCh7XG4gIC8qKiBQYWNrYWdlIG5hbWUuICovXG4gIHBhY2thZ2U6IHoxMS5zdHJpbmcoKSxcbiAgLyoqIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byB0b3RhbCBudW1iZXIgb2YgZG93bmxvYWRzLiAqL1xuICBkb3dubG9hZHM6IHoxMS5yZWNvcmQoejExLm51bWJlcigpKVxufSk7XG52YXIgZ2V0UGFja2FnZVZlcnNpb25zRG93bmxvYWRzID0gYXN5bmMgKG5hbWUsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShcbiAgICBQYWNrYWdlVmVyc2lvbnNEb3dubG9hZHMsXG4gICAgdXJsSm9pbjkocmVnaXN0cnksIGAvdmVyc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9L2xhc3Qtd2Vla2ApXG4gICk7XG59O1xuXG4vLyBzcmMvZ2V0LXBhY2t1bWVudC50c1xuaW1wb3J0IHVybEpvaW4xMCBmcm9tIFwidXJsLWpvaW5cIjtcbmltcG9ydCB7IHogYXMgejEyIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gYXMgUGFja2FnZUpzb24yIH0gZnJvbSBcInpvZC1wYWNrYWdlLWpzb25cIjtcbnZhciBUaW1lID0gejEyLm9iamVjdCh7XG4gIC8qKiBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcGFja2FnZSB3YXMgY3JlYXRlZCBpbiBJU08gODYwMSBmb3JtYXQgKGUuZy4sIGAyMDIxLTExLTIzVDE5OjEyOjI0LjAwNlpgKS4gKi9cbiAgY3JlYXRlZDogejEyLnN0cmluZygpLFxuICAvKiogVGltZXN0YW1wIG9mIHdoZW4gdGhlIHBhY2thZ2Ugd2FzIGxhc3QgbW9kaWZpZWQgaW4gSVNPIDg2MDEgZm9ybWF0IChlLmcuLCBgMjAyMS0xMS0yM1QxOToxMjoyNC4wMDZaYCkuICovXG4gIG1vZGlmaWVkOiB6MTIuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHoxMi5zdHJpbmcoKSk7XG52YXIgUGFja3VtZW50ID0gUGFja2FnZUpzb24yLnBpY2soe1xuICBhdXRob3I6IHRydWUsXG4gIGJ1Z3M6IHRydWUsXG4gIGNvbnRyaWJ1dG9yczogdHJ1ZSxcbiAgZGVzY3JpcHRpb246IHRydWUsXG4gIGhvbWVwYWdlOiB0cnVlLFxuICBrZXl3b3JkczogdHJ1ZSxcbiAgbGljZW5zZTogdHJ1ZSxcbiAgbWFpbnRhaW5lcnM6IHRydWUsXG4gIHJlcG9zaXRvcnk6IHRydWVcbn0pLmV4dGVuZCh7XG4gIC8qKiBQYWNrYWdlIG5hbWUgdXNlZCBhcyB0aGUgSUQgaW4gQ291Y2hEQi4gKi9cbiAgX2lkOiB6MTIuc3RyaW5nKCksXG4gIC8qKiBQYWNrYWdlIG5hbWUuICovXG4gIG5hbWU6IHoxMi5zdHJpbmcoKSxcbiAgLyoqIE1hcHBpbmcgb2YgZGlzdHJpYnV0aW9uIHRhZ3MgdG8gc2VtdmVyIHZlcnNpb24gbnVtYmVycyBlLmcuLCBgeyBcImxhdGVzdFwiOiBcIjEuMC4wXCIgfWApLiAqL1xuICBcImRpc3QtdGFnc1wiOiBEaXN0VGFncyxcbiAgLyoqXG4gIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byB0aW1lc3RhbXBzIGluIElTTyA4NjAxIGZvcm1hdCByZXByZXNlbnRpbmdcbiAgdGhlIHB1Ymxpc2hpbmcgdGltZSAoZS5nLiwgYHsgXCIxLjAuMFwiOiBcIjIwMjEtMTEtMjNUMTk6MTI6MjQuMDA2WlwiIH1gKS5cbiAgQWxzbyBpbmNsdWRlcyB0aGUgdGltZXN0YW1wcyBvZiB3aGVuIHRoZSBwYWNrYWdlIHdhcyBgY3JlYXRlZGAgYW5kIGxhc3QgYG1vZGlmaWVkYC5cbiAgKi9cbiAgdGltZTogVGltZSxcbiAgLyoqXG4gIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byBwYWNrYWdlIG1hbmlmZXN0cy5cbiAgQHNlZSB7QGxpbmsgUGFja2FnZU1hbmlmZXN0fVxuICAqL1xuICB2ZXJzaW9uczogejEyLnJlY29yZChQYWNrYWdlTWFuaWZlc3QpLFxuICAvKiogUmV2aXNpb24gSUQgb2YgdGhlIGRvY3VtZW50IGluIENvdWNoREIuICovXG4gIF9yZXY6IHoxMi5jb2VyY2Uuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIE1hcHBpbmcgb2YgbnBtIHVzZXJuYW1lcyBvZiB1c2VycyB3aG8gc3RhcnJlZCB0aGUgcGFja2FnZSB0byBgdHJ1ZWAuICovXG4gIHVzZXJzOiB6MTIucmVjb3JkKHoxMi5ib29sZWFuKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBUZXh0IGV4dHJhY3RlZCBmcm9tIHRoZSBSRUFETUUgZmlsZS4gKi9cbiAgcmVhZG1lOiB6MTIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIE5hbWUgb2YgdGhlIFJFQURNRSBmaWxlLiAqL1xuICByZWFkbWVGaWxlbmFtZTogejEyLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xudmFyIGdldFBhY2t1bWVudCA9IGFzeW5jIChuYW1lLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5VXJsKSA9PiB7XG4gIGFzc2VydFZhbGlkUGFja2FnZU5hbWUobmFtZSk7XG4gIHJldHVybiBmZXRjaERhdGEoUGFja3VtZW50LCB1cmxKb2luMTAocmVnaXN0cnksIG5hbWUpKTtcbn07XG5cbi8vIHNyYy9nZXQtcmVnaXN0cnktbWV0YWRhdGEudHNcbmltcG9ydCB7IHogYXMgejEzIH0gZnJvbSBcInpvZFwiO1xudmFyIFJlZ2lzdHJ5TWV0YWRhdGEgPSB6MTMub2JqZWN0KHtcbiAgLyoqIERhdGFiYXNlIG5hbWUsIHVzdWFsbHkgYHJlZ2lzdHJ5YCAqL1xuICBkYl9uYW1lOiB6MTMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9jX2NvdW50OiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgZG9jX2RlbF9jb3VudDogejEzLm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHVwZGF0ZV9zZXE6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBwdXJnZV9zZXE6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb21wYWN0X3J1bm5pbmc6IHoxMy5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZGlza19zaXplOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgZGF0YV9zaXplOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5zdGFuY2Vfc3RhcnRfdGltZTogejEzLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc2tfZm9ybWF0X3ZlcnNpb246IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb21taXR0ZWRfdXBkYXRlX3NlcTogejEzLm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvbXBhY3RlZF9zZXE6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB1dWlkOiB6MTMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3RoZXI6IHoxMy5vYmplY3QoeyBkYXRhX3NpemU6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG4gIHNpemVzOiB6MTMub2JqZWN0KHtcbiAgICBmaWxlOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBhY3RpdmU6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGV4dGVybmFsOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKVxuICB9KS5vcHRpb25hbCgpXG59KTtcbnZhciBnZXRSZWdpc3RyeU1ldGFkYXRhID0gYXN5bmMgKHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlVcmwpID0+IGZldGNoRGF0YShSZWdpc3RyeU1ldGFkYXRhLCByZWdpc3RyeSk7XG5cbi8vIHNyYy9nZXQtcmVnaXN0cnktc2lnbmluZy1rZXlzLnRzXG5pbXBvcnQgdXJsSm9pbjExIGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6MTQgfSBmcm9tIFwiem9kXCI7XG52YXIgUmVnaXN0cnlTaWduaW5nS2V5cyA9IHoxNC5vYmplY3Qoe1xuICBrZXlzOiB6MTQuYXJyYXkoXG4gICAgejE0Lm9iamVjdCh7XG4gICAgICAvKipcbiAgICAgICAgIFN0cmluZyBpbiB0aGUgc2ltcGxpZmllZCBleHRlbmRlZCBJU08gODYwMSBmb3JtYXRcbiAgICAgIChlLmcuLCBgWVlZWS1NTS1ERFRISDptbTpzcy5zc3NaYCkgb3IgYG51bGxgLlxuICAgICAgICAgKi9cbiAgICAgIGV4cGlyZXM6IHoxNC5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgLyoqIFNIQTI1NiBmaW5nZXJwcmludCBvZiB0aGUgcHVibGljIGtleS4gKi9cbiAgICAgIGtleWlkOiB6MTQuc3RyaW5nKCksXG4gICAgICAvKiogS2V5IHR5cGU7IG9ubHkgYGVjZHNhLXNoYTItbmlzdHAyNTZgIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIG5wbSBDTEkuICovXG4gICAgICBrZXl0eXBlOiB6MTQuc3RyaW5nKCksXG4gICAgICAvKiogS2V5IHNjaGVtZTsgb25seSBgZWNkc2Etc2hhMi1uaXN0cDI1NmAgaXMgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgbnBtIENMSS4gKi9cbiAgICAgIHNjaGVtZTogejE0LnN0cmluZygpLFxuICAgICAgLyoqIFB1YmxpYyBrZXkgZW5jb2RlZCBpbiBiYXNlNjQuICovXG4gICAgICBrZXk6IHoxNC5zdHJpbmcoKVxuICAgIH0pXG4gIClcbn0pO1xudmFyIGdldFJlZ2lzdHJ5U2lnbmluZ0tleXMgPSBhc3luYyAocmVnaXN0cnkgPSBucG1SZWdpc3RyeVVybCkgPT4gZmV0Y2hEYXRhKFJlZ2lzdHJ5U2lnbmluZ0tleXMsIHVybEpvaW4xMShyZWdpc3RyeSwgXCItL25wbS92MS9rZXlzXCIpKTtcblxuLy8gc3JjL3NlYXJjaC1wYWNrYWdlcy50c1xuaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gXCJxdWVyeS1zdHJpbmdcIjtcbmltcG9ydCB1cmxKb2luMTIgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHoxNSB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IFBhY2thZ2VKc29uIGFzIFBhY2thZ2VKc29uMyB9IGZyb20gXCJ6b2QtcGFja2FnZS1qc29uXCI7XG52YXIgU2VhcmNoQ3JpdGVyaWEgPSB6MTUub2JqZWN0KHtcbiAgLyoqXG4gIFx0UXVlcnkgdGV4dC5cbiAgXG4gIFx0QHJlbWFya3NcbiAgXHRUaGUgZm9sbG93aW5nIHNwZWNpYWwgdGV4dCBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIHRvIHJlZmluZSByZXN1bHRzOlxuICBcdCAtIGBhdXRob3I6PG5hbWU+YDogc2hvdyBwYWNrYWdlcyBmcm9tIHRoZSBnaXZlbiBhdXRob3IgKGUuZy4sIGBhdXRob3I6c29tZW9uZWApXG4gICAgIC0gYG1haW50YWluZXI6PG5hbWU+YDogc2hvdyBwYWNrYWdlcyB3aXRoIHRoZSBnaXZlbiBtYWludGFpbmVyIChlLmcuLCBgbWFpbnRhaW5lcjpzb21lb25lYClcbiAgXHQgLSBga2V5d29yZHM6PGtleXdvcmQgbGlzdD5gOiBzaG93IHBhY2thZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXl3b3JkKHMpO1xuICAgICBzZXBhcmF0b3JzIGAsYCwgYCtgIGFuZCBgLC1gIGFjdCByZXNwZWN0aXZlbHkgYXMgYE9SYCwgYEFORGAgYW5kIGBOT1RgXG4gICAgIChlLmcuLCB1c2UgYGtleXdvcmRzOmZvbyxiYXIrYmF6LC1xdXV4YCB0byBpbmNsdWRlIGtleXdvcmRzIGBmb29gIE9SIChgYmFyYCBBTkQgYGJhemApIGJ1dCBOT1QgYHF1dXhgKVxuICBcdCAtIGBub3Q6dW5zdGFibGVgOiBleGNsdWRlIHVuc3RhYmxlIHBhY2thZ2VzIChzZW12ZXIgdmVyc2lvbiBgPDEuMC4wYClcbiAgXHQgLSBgbm90Omluc2VjdXJlYDogZXhjbHVkZSBpbnNlY3VyZSBwYWNrYWdlc1xuICBcdCAtIGBpczp1bnN0YWJsZWA6IGluY2x1ZGUgb25seSB1bnN0YWJsZSBwYWNrYWdlcyAoc2VtdmVyIHZlcnNpb24gYDwxLjAuMGApXG4gIFx0IC0gYGlzOmluc2VjdXJlYDogaW5jbHVkZSBvbmx5IGluc2VjdXJlIHBhY2thZ2VzXG4gIFx0IC0gYGJvb3N0LWV4YWN0Ojx0cnVlL2ZhbHNlPmA6IGJvb3N0IHBhY2thZ2VzIHdpdGggZXhhY3QgbmFtZSBtYXRjaCAoZGVmYXVsdDogYHRydWVgKVxuICBcdCovXG4gIHRleHQ6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogTnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuICh0aGUgbnBtIHJlZ2lzdHJ5IGFjY2VwdHMgYSBtYXhpbXVtIG9mIGAyNTBgIHdpdGggYSBkZWZhdWx0IG9mIGAyMGApLiAqL1xuICBzaXplOiB6MTUubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgLyoqIFJldHVybiByZXN1bHRzIGZyb20gdGhpcyBvZmZzZXQuICovXG4gIGZyb206IHoxNS5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKiogUGFja2FnZSBxdWFsaXR5IHdlaWdodCAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gIHF1YWxpdHk6IHoxNS5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKiogUGFja2FnZSBwb3B1bGFyaXR5IHdlaWdodCAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gIHBvcHVsYXJpdHk6IHoxNS5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKiogUGFja2FnZSBtYWludGVuYW5jZSB3ZWlnaHQgKGZyb20gYDAuMGAgdG8gYDEuMGApLiAqL1xuICBtYWludGVuYW5jZTogejE1Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pO1xudmFyIFNlYXJjaFJlc3VsdCA9IHoxNS5vYmplY3Qoe1xuICAvKiogUGFja2FnZSBtZXRhZGF0YS4gKi9cbiAgcGFja2FnZTogUGFja2FnZUpzb24zLnBpY2soe1xuICAgIG5hbWU6IHRydWUsXG4gICAgdmVyc2lvbjogdHJ1ZSxcbiAgICBkZXNjcmlwdGlvbjogdHJ1ZSxcbiAgICBrZXl3b3JkczogdHJ1ZVxuICB9KS5leHRlbmQoe1xuICAgIC8qKlxuICAgIEVpdGhlciBgdW5zY29wZWRgIGZvciB1bnNjb3BlZCBwYWNrYWdlcyAoZS5nLiwgYGZvb2AgLT4gYHVuc2NvcGVkYCkgb3JcbiAgICB0aGUgcGFja2FnZSdzIHNjb3BlIGZvciBzY29wZWQgcGFja2FnZXMgKGUuZy4sIGBAZm9vL2JhcmAgLT4gYGZvb2ApLlxuICAgICovXG4gICAgc2NvcGU6IHoxNS5zdHJpbmcoKSxcbiAgICAvKipcbiAgICBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgYGxhdGVzdGAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSB3YXMgcHVibGlzaGVkXG4gICAgaW4gSVNPIDg2MDEgZm9ybWF0IChlLmcuLCBgMjAyMS0xMS0yM1QxOToxMjoyNC4wMDZaYCkuXG4gICAgKi9cbiAgICBkYXRlOiB6MTUuc3RyaW5nKCksXG4gICAgLyoqIEF1dGhvciBvZiB0aGUgcGFja2FnZS4gKi9cbiAgICBhdXRob3I6IHoxNS5vYmplY3Qoe1xuICAgICAgdXNlcm5hbWU6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbmFtZTogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBlbWFpbDogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICB1cmw6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gICAgfSkub3B0aW9uYWwoKSxcbiAgICAvKiogVXNlciB3aG8gcHVibGlzaGVkIHRoZSBgbGF0ZXN0YCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiAqL1xuICAgIHB1Ymxpc2hlcjogejE1Lm9iamVjdCh7XG4gICAgICB1c2VybmFtZTogejE1LnN0cmluZygpLFxuICAgICAgZW1haWw6IHoxNS5zdHJpbmcoKVxuICAgIH0pLFxuICAgIC8qKiBNYWludGFpbmVycyBvZiB0aGUgYGxhdGVzdGAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gKi9cbiAgICBtYWludGFpbmVyczogejE1LmFycmF5KFxuICAgICAgejE1Lm9iamVjdCh7XG4gICAgICAgIHVzZXJuYW1lOiB6MTUuc3RyaW5nKCksXG4gICAgICAgIGVtYWlsOiB6MTUuc3RyaW5nKClcbiAgICAgIH0pXG4gICAgKSxcbiAgICAvKiogTGlua3MgdG8gcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIHBhY2thZ2UuICovXG4gICAgbGlua3M6IHoxNS5vYmplY3Qoe1xuICAgICAgLyoqIFBhZ2UgZm9yIHRoZSBwYWNrYWdlIG9uIG5wbWpzLmNvbS4gKi9cbiAgICAgIG5wbTogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAvKiogSG9tZXBhZ2UgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICAgICAgaG9tZXBhZ2U6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgLyoqIFJlcG9zaXRvcnkgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICAgICAgcmVwb3NpdG9yeTogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAvKiogSXNzdWUgdHJhY2tlciBmb3IgdGhlIHBhY2thZ2UuICovXG4gICAgICBidWdzOiB6MTUuc3RyaW5nKCkub3B0aW9uYWwoKVxuICAgIH0pXG4gIH0pLFxuICAvKiogRmluYWwgYW5kIGRldGFpbGVkIHNlYXJjaCBzY29yZSB2YWx1ZXMuICovXG4gIHNjb3JlOiB6MTUub2JqZWN0KHtcbiAgICAvKiogRmluYWwgc2VhcmNoIHNjb3JlIHZhbHVlIChmcm9tIGAwLjBgIHRvIGAxLjBgKSwgY29tcHV0ZWQgZnJvbSB0aGUgZGV0YWlsZWQgc2NvcmVzLiAqL1xuICAgIGZpbmFsOiB6MTUubnVtYmVyKCksXG4gICAgLyoqIERldGFpbGVkIHNlYXJjaCBzY29yZSB2YWx1ZXMuICovXG4gICAgZGV0YWlsOiB6MTUub2JqZWN0KHtcbiAgICAgIC8qKiBRdWFsaXR5IHNlYXJjaCBzY29yZSB2YWx1ZSAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gICAgICBxdWFsaXR5OiB6MTUubnVtYmVyKCksXG4gICAgICAvKiogUG9wdWxhcml0eSBzZWFyY2ggc2NvcmUgdmFsdWUgKGZyb20gYDAuMGAgdG8gYDEuMGApLiAqL1xuICAgICAgcG9wdWxhcml0eTogejE1Lm51bWJlcigpLFxuICAgICAgLyoqIE1haW50ZW5hbmNlIHNlYXJjaCBzY29yZSB2YWx1ZSAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gICAgICBtYWludGVuYW5jZTogejE1Lm51bWJlcigpXG4gICAgfSlcbiAgfSksXG4gIC8qKiBTZWFyY2ggc2NvcmUgdmFsdWU7IG1heSBiZSBkaWZmZXJlbnQgZnJvbSBgc2NvcmUuZmluYWxgLiAqL1xuICBzZWFyY2hTY29yZTogejE1Lm51bWJlcigpLFxuICAvKiogRmxhZyBhdHRyaWJ1dGVzIGZvciB0aGUgcGFja2FnZS4gKi9cbiAgZmxhZ3M6IHoxNS5vYmplY3Qoe1xuICAgIC8qKiBUcnVlIGlmIHRoZSBwYWNrYWdlIHNlbXZlciB2ZXJzaW9uIG51bWJlciBpcyBgPDEuMC4wYC4gKi9cbiAgICB1bnN0YWJsZTogejE1LmNvZXJjZS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICAvKiogVHJ1ZSBpZiB0aGUgcGFja2FnZSBpcyBpbnNlY3VyZSBvciBoYXMgdnVsbmVyYWJsZSBkZXBlbmRlbmNpZXMuICovXG4gICAgaW5zZWN1cmU6IHoxNS5jb2VyY2UuYm9vbGVhbigpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG52YXIgU2VhcmNoUmVzdWx0cyA9IHoxNS5vYmplY3Qoe1xuICBvYmplY3RzOiB6MTUuYXJyYXkoU2VhcmNoUmVzdWx0KSxcbiAgLyoqXG4gIFRvdGFsIG51bWJlciBvZiBjb3JyZXNwb25kaW5nIHNlYXJjaCByZXN1bHRzIGF2YWlsYWJsZTtcbiAgbWF5IGJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YgYG9iamVjdHNgIHJldHVybmVkLlxuICAqL1xuICB0b3RhbDogejE1Lm51bWJlcigpLFxuICAvKiogRGF0ZSBhdCB3aGljaCB0aGUgc2VhcmNoIGhhcHBlbmVkLiAqL1xuICB0aW1lOiB6MTUuc3RyaW5nKClcbn0pO1xudmFyIHNlYXJjaFBhY2thZ2VzID0gYXN5bmMgKGNyaXRlcmlhLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5VXJsKSA9PiBmZXRjaERhdGEoU2VhcmNoUmVzdWx0cywgdXJsSm9pbjEyKHJlZ2lzdHJ5LCBcIi0vdjEvc2VhcmNoXCIsIGA/JHtxdWVyeVN0cmluZy5zdHJpbmdpZnkoY3JpdGVyaWEpfWApKTtcbmV4cG9ydCB7XG4gIEFiYnJldmlhdGVkUGFja3VtZW50LFxuICBCdWxrRGFpbHlQYWNrYWdlRG93bmxvYWRzLFxuICBCdWxrUGFja2FnZURvd25sb2FkcyxcbiAgRGFpbHlQYWNrYWdlRG93bmxvYWRzLFxuICBEYWlseVJlZ2lzdHJ5RG93bmxvYWRzLFxuICBEb3dubG9hZFBlcmlvZCxcbiAgUGFja2FnZURvd25sb2FkcyxcbiAgUGFja2FnZUpzb240IGFzIFBhY2thZ2VKc29uLFxuICBQYWNrYWdlTWFuaWZlc3QsXG4gIFBhY2thZ2VWZXJzaW9uc0Rvd25sb2FkcyxcbiAgUGFja3VtZW50LFxuICBSZWdpc3RyeURvd25sb2FkcyxcbiAgUmVnaXN0cnlNZXRhZGF0YSxcbiAgUmVnaXN0cnlTaWduaW5nS2V5cyxcbiAgU2VhcmNoQ3JpdGVyaWEsXG4gIFNlYXJjaFJlc3VsdHMsXG4gIGNhY2hlLFxuICBnZXRBYmJyZXZpYXRlZFBhY2t1bWVudCxcbiAgZ2V0QnVsa0RhaWx5UGFja2FnZURvd25sb2FkcyxcbiAgZ2V0QnVsa1BhY2thZ2VEb3dubG9hZHMsXG4gIGdldERhaWx5UGFja2FnZURvd25sb2FkcyxcbiAgZ2V0RGFpbHlSZWdpc3RyeURvd25sb2FkcyxcbiAgZ2V0UGFja2FnZURvd25sb2FkcyxcbiAgZ2V0UGFja2FnZU1hbmlmZXN0LFxuICBnZXRQYWNrYWdlVmVyc2lvbnNEb3dubG9hZHMsXG4gIGdldFBhY2t1bWVudCxcbiAgZ2V0UmVnaXN0cnlEb3dubG9hZHMsXG4gIGdldFJlZ2lzdHJ5TWV0YWRhdGEsXG4gIGdldFJlZ2lzdHJ5U2lnbmluZ0tleXMsXG4gIG5wbVJlZ2lzdHJ5RG93bmxvYWRzQXBpVXJsLFxuICBucG1SZWdpc3RyeVVybCxcbiAgc2VhcmNoUGFja2FnZXNcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuaWZlc3QgfSBmcm9tIFwicXVlcnktcmVnaXN0cnlcIjtcblxuY29uc3QgZ2l0aHViVXJsUmVnZXggPVxuICAvKD86Z2l0XFwrKT9odHRwcz86XFwvXFwvZ2l0aHViXFwuY29tXFwvKFteXFwvXStcXC9bXlxcL10rKVxcLmdpdC87IC8vIFRPRE86IERvbid0IHRydXN0IHRoaXMsIGl0J3MgY2hhdGdiZCA6KVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE93bmVyQW5kUmVwbyhcbiAgcmVwb3NpdG9yeVVybDogc3RyaW5nLFxuKTogW3N0cmluZywgc3RyaW5nXSB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IHJlcG9zaXRvcnlVcmwubWF0Y2goZ2l0aHViVXJsUmVnZXgpO1xuXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFtvd25lciwgcmVwb10gPSBtYXRjaFsxXS5zcGxpdChcIi9cIik7XG4gICAgcmV0dXJuIFtvd25lciwgcmVwb107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSZXBvc2l0b3J5KG1hbmlmZXN0OiBQYWNrYWdlTWFuaWZlc3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYW5pZmVzdC5yZXBvc2l0b3J5ID09PSBcInN0cmluZ1wiXG4gICAgPyBtYW5pZmVzdC5yZXBvc2l0b3J5XG4gICAgOiBtYW5pZmVzdC5yZXBvc2l0b3J5Py51cmw7XG59XG5cbmNvbnN0IGNvbW1pdExlbmd0aCA9IDc7XG5cbi8qXG4gKiBcIjA5ZWZkMDU1MzM3NGZmN2QzZTYyYjc5Mzc4ZTMxODRmNWViNTc1NzFcIiA9PiBcIjA5ZWZkMDVcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJicmV2aWF0ZUNvbW1pdEhhc2goZnVsbEhhc2g6IHN0cmluZykge1xuICByZXR1cm4gZnVsbEhhc2guc3Vic3RyaW5nKDAsIGNvbW1pdExlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1B1bGxSZXF1ZXN0KHJlZjogc3RyaW5nKSB7XG4gIHJldHVybiAhTnVtYmVyLmlzTmFOKE51bWJlcihyZWYpKVxufVxuIiwgIntcbiAgXCJuYW1lXCI6IFwicGtnLXByLW5ld1wiLFxuICBcInZlcnNpb25cIjogXCIwLjAuM1wiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gIFwibWFpblwiOiBcImluZGV4LmpzXCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcImJpblwiOiB7XG4gICAgXCJwa2ctcHItbmV3XCI6IFwiYmluL2NsaS5qc1wiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJkZXZcIjogXCJ0c3VwIC0td2F0Y2hcIixcbiAgICBcImJ1aWxkXCI6IFwidHN1cFwiLFxuICAgIFwiYnVpbGQ6cHVibGlzaFwiOiBcIkFQSV9VUkw9aHR0cHM6Ly9wa2cucHIubmV3LyB0c3VwXCJcbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXSxcbiAgXCJhdXRob3JcIjogXCJcIixcbiAgXCJsaWNlbnNlXCI6IFwiSVNDXCIsXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBqc2RldnRvb2xzL2V6LXNwYXduXCI6IFwiXjMuMC40XCIsXG4gICAgXCJAb2N0b2tpdC9hY3Rpb25cIjogXCJeNi4wLjdcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAcGtnLXByLW5ldy91dGlsc1wiOiBcIndvcmtzcGFjZTpeXCIsXG4gICAgXCJjaXR0eVwiOiBcIl4wLjEuNlwiLFxuICAgIFwicXVlcnktcmVnaXN0cnlcIjogXCJeMy4wLjBcIixcbiAgICBcInRzdXBcIjogXCJeOC4wLjJcIlxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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TyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFVBQVEsVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFVBQVEsVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFNBQU8sTUFBSSxNQUFJLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsUUFBTSxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFNBQU8sS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxLQUFHLFNBQU8sVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFVBQVEsVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFdBQVMsV0FBUyxLQUFHLEtBQUcsVUFBUSxNQUFJO0FBQUEsTUFBRyxHQUFFLEVBQUUsa0JBQWdCLFNBQVMsR0FBRTtBQUFDLFlBQUlBLEtBQUUsS0FBSyxlQUFlLENBQUM7QUFBRSxlQUFPQSxNQUFHLE9BQUtBLE1BQUcsT0FBS0EsTUFBRyxNQUFJLElBQUU7QUFBQSxNQUFDO0FBQUUsZUFBUyxFQUFFLEdBQUU7QUFBQyxlQUFPLEVBQUUsTUFBTSxrREFBa0QsS0FBRyxDQUFDO0FBQUEsTUFBQztBQUFDLFFBQUUsU0FBTyxTQUFTLEdBQUU7QUFBQyxpQkFBUUEsS0FBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUVBLEdBQUUsUUFBTztBQUFJLGNBQUUsSUFBRSxLQUFLLGdCQUFnQkEsR0FBRSxDQUFDLENBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQyxHQUFFLEVBQUUsUUFBTSxTQUFTLEdBQUVBLElBQUUsR0FBRTtBQUFDLGtCQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUVBLEtBQUVBLE1BQUcsR0FBRSxJQUFFLEtBQUcsR0FBRUEsS0FBRSxNQUFJQSxLQUFFLFVBQVFBLEtBQUcsSUFBRSxNQUFJLElBQUUsVUFBUTtBQUFHLGlCQUFRLElBQUUsSUFBRyxJQUFFLEdBQUUsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sS0FBSTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsT0FBTyxDQUFDO0FBQUUsY0FBRyxLQUFHQSxNQUFHLEtBQUcsSUFBRSxJQUFFO0FBQUcsZ0JBQUcsSUFBRSxLQUFHO0FBQUUsbUJBQUc7QUFBQTtBQUFPO0FBQU0sZUFBRztBQUFBLFFBQUU7QUFBQyxlQUFPO0FBQUEsTUFBQztBQUFBLElBQUUsR0FBRyxDQUFDO0FBQUUsSUFBTSxJQUFFO0FBQUUsSUFBSSxJQUFFLFdBQVU7QUFBQyxhQUFPO0FBQUEsSUFBZ3llO0FBQW9YLElBQU0sSUFBRTtBQUFSLElBQVcsSUFBRSxDQUFDLElBQUUsTUFBSSxPQUFHLFFBQVEsSUFBRSxDQUFDO0FBQWxDLElBQXNDLElBQUUsQ0FBQyxJQUFFLE1BQUksT0FBRyxRQUFRLEtBQUcsQ0FBQyxNQUFNLENBQUM7QUFBckUsSUFBeUUsSUFBRSxDQUFDLElBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLFFBQVEsS0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQXhILElBQTRILElBQUUsRUFBQyxVQUFTLEVBQUMsT0FBTSxDQUFDLEdBQUUsQ0FBQyxHQUFFLE1BQUssQ0FBQyxHQUFFLEVBQUUsR0FBRSxLQUFJLENBQUMsR0FBRSxFQUFFLEdBQUUsUUFBTyxDQUFDLEdBQUUsRUFBRSxHQUFFLFdBQVUsQ0FBQyxHQUFFLEVBQUUsR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLEdBQUUsU0FBUSxDQUFDLEdBQUUsRUFBRSxHQUFFLFFBQU8sQ0FBQyxHQUFFLEVBQUUsR0FBRSxlQUFjLENBQUMsR0FBRSxFQUFFLEVBQUMsR0FBRSxPQUFNLEVBQUMsT0FBTSxDQUFDLElBQUcsRUFBRSxHQUFFLEtBQUksQ0FBQyxJQUFHLEVBQUUsR0FBRSxPQUFNLENBQUMsSUFBRyxFQUFFLEdBQUUsUUFBTyxDQUFDLElBQUcsRUFBRSxHQUFFLE1BQUssQ0FBQyxJQUFHLEVBQUUsR0FBRSxTQUFRLENBQUMsSUFBRyxFQUFFLEdBQUUsTUFBSyxDQUFDLElBQUcsRUFBRSxHQUFFLE9BQU0sQ0FBQyxJQUFHLEVBQUUsR0FBRSxhQUFZLENBQUMsSUFBRyxFQUFFLEdBQUUsTUFBSyxDQUFDLElBQUcsRUFBRSxHQUFFLE1BQUssQ0FBQyxJQUFHLEVBQUUsR0FBRSxXQUFVLENBQUMsSUFBRyxFQUFFLEdBQUUsYUFBWSxDQUFDLElBQUcsRUFBRSxHQUFFLGNBQWEsQ0FBQyxJQUFHLEVBQUUsR0FBRSxZQUFXLENBQUMsSUFBRyxFQUFFLEdBQUUsZUFBYyxDQUFDLElBQUcsRUFBRSxHQUFFLFlBQVcsQ0FBQyxJQUFHLEVBQUUsR0FBRSxhQUFZLENBQUMsSUFBRyxFQUFFLEVBQUMsR0FBRSxTQUFRLEVBQUMsU0FBUSxDQUFDLElBQUcsRUFBRSxHQUFFLE9BQU0sQ0FBQyxJQUFHLEVBQUUsR0FBRSxTQUFRLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxHQUFFLFFBQU8sQ0FBQyxJQUFHLEVBQUUsR0FBRSxXQUFVLENBQUMsSUFBRyxFQUFFLEdBQUUsUUFBTyxDQUFDLElBQUcsRUFBRSxHQUFFLFNBQVEsQ0FBQyxJQUFHLEVBQUUsR0FBRSxlQUFjLENBQUMsS0FBSSxFQUFFLEdBQUUsUUFBTyxDQUFDLEtBQUksRUFBRSxHQUFFLFFBQU8sQ0FBQyxLQUFJLEVBQUUsR0FBRSxhQUFZ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QUFFO0FBQUUsaUJBQVMsQ0FBQyxHQUFFLENBQUMsS0FBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLFFBQVEsR0FBRTtBQUFDLFVBQUUsU0FBTyxVQUFLLEVBQUUsRUFBRSxTQUFPLENBQUMsSUFBRSxFQUFFLEVBQUUsU0FBTyxDQUFDLEVBQUUsVUFBVTtBQUFHLFlBQUksSUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFPLENBQUMsQ0FBQztBQUFFLFlBQUcsTUFBSSxNQUFJLEtBQUcsTUFBSSxFQUFFLGFBQVcsU0FBSSxFQUFFLFNBQU8sV0FBTSxFQUFFLEtBQUssRUFBRSxHQUFFLElBQUUsS0FBSSxJQUFFLEtBQUcsRUFBRSxTQUFPLFdBQU0sRUFBRSxFQUFFLFNBQU8sQ0FBQyxLQUFHLEtBQUksT0FBTSxFQUFFLFFBQU0sRUFBRSxDQUFDLElBQUUsR0FBRTtBQUFDLGdCQUFNLElBQUUsSUFBRSxHQUFFLElBQUUsSUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLElBQUUsSUFBRSxLQUFHLENBQUM7QUFBRSxlQUFLLE9BQU8sRUFBRSxDQUFDLElBQUUsS0FBRyxDQUFDLElBQUUsS0FBRyxFQUFFLEtBQUssRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBRTtBQUFBLFFBQVE7QUFBQyxZQUFHLElBQUUsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLEtBQUcsRUFBRSxDQUFDLElBQUUsR0FBRTtBQUFDLGNBQUcsRUFBRSxhQUFXLFNBQUksSUFBRSxHQUFFO0FBQUMsY0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFFO0FBQUEsVUFBUTtBQUFDLFlBQUUsS0FBSyxFQUFFO0FBQUEsUUFBRTtBQUFDLFlBQUcsSUFBRSxFQUFFLENBQUMsSUFBRSxLQUFHLEVBQUUsYUFBVyxPQUFHO0FBQUMsWUFBRSxHQUFFLEdBQUUsQ0FBQztBQUFFO0FBQUEsUUFBUTtBQUFDLFVBQUUsRUFBRSxTQUFPLENBQUMsS0FBRztBQUFBLE1BQUU7QUFBQyxRQUFFLFNBQU8sVUFBSyxJQUFFLEVBQUUsSUFBSSxPQUFHLEdBQUcsQ0FBQyxDQUFD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QUFVLEdBQUUsRUFBRSxLQUFLLE9BQU0sSUFBRSxHQUFFLEtBQUssT0FBTyxHQUFHLFVBQVMsS0FBSyxNQUFNLEdBQUUsS0FBSyxPQUFPLEdBQUUsSUFBSSxRQUFRLENBQUMsR0FBRSxNQUFJO0FBQUMsZUFBSyxLQUFLLFVBQVMsTUFBSTtBQUFDLGlCQUFLLE9BQU8sTUFBTSxJQUFJLE9BQU8sSUFBSSxHQUFFLEtBQUssT0FBTyxJQUFJLFVBQVMsS0FBSyxNQUFNLEdBQUUsRUFBRSxLQUFLLE9BQU0sS0FBRSxHQUFFLEVBQUUsS0FBSyxLQUFLO0FBQUEsVUFBRSxDQUFDLEdBQUUsS0FBSyxLQUFLLFVBQVMsTUFBSTtBQUFDLGlCQUFLLE9BQU8sTUFBTSxJQUFJLE9BQU8sSUFBSSxHQUFFLEtBQUssT0FBTyxJQUFJLFVBQVMsS0FBSyxNQUFNLEdBQUUsRUFBRSxLQUFLLE9BQU0sS0FBRSxHQUFFLEVBQUUsQ0FBQztBQUFBLFVBQUUsQ0FBQztBQUFBLFFBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQSxNQUFDLEdBQUcsR0FBRSxHQUFFO0FBQUMsY0FBTSxJQUFFLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBRyxDQUFDO0FBQUUsVUFBRSxLQUFLLEVBQUMsSUFBRyxFQUFDLENBQUMsR0FBRSxLQUFLLFlBQVksSUFBSSxHQUFFLENBQUM7QUFBQSxNQUFFO0FBQUEsTUFBQyxLQUFLLEdBQUUsR0FBRTtBQUFDLGNBQU0sSUFBRSxLQUFLLFlBQVksSUFBSSxDQUFDLEtBQUcsQ0FBQztBQUFFLFVBQUUsS0FBSyxFQUFDLElBQUcsR0FBRSxNQUFLLEtBQUUsQ0FBQyxHQUFFLEtBQUssWUFBWSxJQUFJLEdBQUUsQ0FBQztBQUFBLE1BQUU7QUFBQSxNQUFDLEtBQUssTUFBSyxHQUFFO0FBQUMsY0FBTSxJQUFFLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBRyxDQUFDLEdBQUVBLEtBQUUsQ0FBQztBQUFFLG1CQUFVLEtBQUs7QUFBRSxZQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUUsRUFBRSxRQUFNQSxHQUFFLEtBQUssTUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRSxDQUFDLENBQUM7QUFBRSxtQkFBVSxLQUFLQTtBQUFFLFlBQUU7QUFBQSxNQUFFO0FBQUEsTUFBQyxjQUFhO0FBQUMsYUFBSyxZQUFZLE1BQU07QUFBQSxNQUFFO0FBQUEsTUFBQyxXQUFXLEdBQUUsR0FBRTtBQUFDLFlBQUcsS0FBSyxVQUFRLFlBQVUsS0FBSyxRQUFNLFdBQVUsR0FBRyxRQUFNLENBQUMsS0FBSyxVQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksS0FBRyxLQUFLLEtBQUssVUFBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRSxHQUFHLFFBQU0sR0FBRyxJQUFJLEVBQUUsSUFBSSxLQUFHLEtBQUssS0FBSyxVQUFTLEVBQUUsSUFBSSxHQUFFLE1BQUksRUFBRSxZQUFZLE1BQUksT0FBSyxFQUFFLFlBQVksTUFBSSxRQUFNLEtBQUssS0FBSyxXQUFVLEVBQUUsWUFBWSxNQUFJLEdBQUcsR0FBRSxLQUFHLEtBQUssS0FBSyxPQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUUsR0FBRyxTQUFPLFVBQVM7QUFBQyxjQUFHLEtBQUssS0FBSyxVQUFTO0FBQUMsa0JBQU0sSUFBRSxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUs7QUFBRSxrQkFBSSxLQUFLLFFBQU0sR0FBRSxLQUFLLFFBQU0sU0FBUSxLQUFLLEdBQUcsTUFBTSxLQUFLLEtBQUs7QUFBQSxVQUFHO0FBQUMsZUFBSyxVQUFRLFlBQVUsS0FBSyxRQUFNO0FBQUEsUUFBVTtBQUFDLGNBQUksUUFBTSxLQUFLLFFBQU0sWUFBVyxLQUFLLFVBQVEsWUFBVSxLQUFLLFVBQVEsYUFBVyxLQUFLLEtBQUssVUFBVSxHQUFFLEtBQUssT0FBTyxJQUFHLEtBQUssVUFBUSxZQUFVLEtBQUssVUFBUSxhQUFXLEtBQUssTUFBTTtBQUFBLE1BQUU7QUFBQSxNQUFDLFFBQU87QUFBQyxhQUFLLE1BQU0sT0FBTyxHQUFFLEtBQUssTUFBTSxlQUFlLFlBQVcsS0FBSyxVQUFVLEdBQUUsS0FBSyxPQUFPLE1B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QSxNQUFDLFlBQVksR0FBRTtBQUFDLGNBQU0sR0FBRSxLQUFFLEdBQUUsS0FBSyxTQUFPLEdBQUUsS0FBSyxVQUFRLEVBQUUsU0FBUSxLQUFLLFFBQU0sQ0FBQyxHQUFHLEVBQUUsaUJBQWUsQ0FBQyxDQUFDLEdBQUUsS0FBSyxTQUFPLEtBQUssSUFBSSxLQUFLLFFBQVEsVUFBVSxDQUFDLEVBQUMsT0FBTSxFQUFDLE1BQUksTUFBSSxFQUFFLFFBQVEsR0FBRSxDQUFDLEdBQUUsS0FBSyxHQUFHLE9BQU0sT0FBRztBQUFDLGdCQUFJLE9BQUssS0FBSyxVQUFVO0FBQUEsUUFBRSxDQUFDLEdBQUUsS0FBSyxHQUFHLFVBQVMsT0FBRztBQUFDLGtCQUFPLEdBQUU7QUFBQSxZQUFDLEtBQUk7QUFBQSxZQUFPLEtBQUk7QUFBSyxtQkFBSyxTQUFPLEtBQUssV0FBUyxJQUFFLEtBQUssUUFBUSxTQUFPLElBQUUsS0FBSyxTQUFPO0FBQUU7QUFBQSxZQUFNLEtBQUk7QUFBQSxZQUFPLEtBQUk7QUFBUSxtQkFBSyxTQUFPLEtBQUssV0FBUyxLQUFLLFFBQVEsU0FBTyxJQUFFLElBQUUsS0FBSyxTQUFPO0FBQUU7QUFBQSxZQUFNLEtBQUk7QUFBUSxtQkFBSyxZQUFZO0FBQUU7QUFBQSxVQUFLO0FBQUEsUUFBQyxDQUFDO0FBQUEsTUFBRTtBQUFBLE1BQUMsSUFBSSxTQUFRO0FBQUMsZUFBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFBQSxNQUFLO0FBQUEsTUFBQyxZQUFXO0FBQUMsY0FBTSxJQUFFLEtBQUssTUFBTSxXQUFTLEtBQUssUUFBUTtBQUFPLGFBQUssUUFBTSxJQUFFLENBQUMsSUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFHLEVBQUUsS0FBSztBQUFBLE1BQUU7QUFBQSxNQUFDLGNBQWE7QUFBQyxjQUFNLElBQUUsS0FBSyxNQUFNLFNBQVMsS0FBSyxNQUFNO0FBQUUsYUFBSyxRQUFNLElBQUUsS0FBSyxNQUFNLE9BQU8sT0FBRyxNQUFJLEtBQUssTUFBTSxJQUFFLENBQUMsR0FBRyxLQUFLLE9B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LGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsUUFBVTtBQUNsRCxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxZQUFLLE1BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsT0FBUztBQUNoRCxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxZQUFLLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFNBQVUsYUFDVixTQUFVLGFBQ1YsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUNWLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFdBQ3JDLFdBQVksYUFBYSxhQUFhLFNBQVc7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Q0FBQztBQUFBLEVBQzNFO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sT0FBTyxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQ3pFO0FBQUEsRUFDQSxNQUFNLFNBQVM7QUFDWCxXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sU0FBUyxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzNFO0FBQUEsRUFDQSxLQUFLLFNBQVM7QUFDVixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzFFO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDWixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzVFO0FBQUEsRUFDQSxLQUFLLFNBQVM7QUFDVixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzFFO0FBQUEsRUFDQSxNQUFNLFNBQVM7QUFDWCxXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sU0FBUyxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzNFO0FBQUEsRUFDQSxLQUFLLFNBQVM7QUFDVixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzFFO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDWixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzVFO0FBQUEsRUFDQSxHQUFHLFNBQVM7QUFDUixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sTUFBTSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQ3hFO0FBQUEsRUFDQSxTQUFTLFNBQVM7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LENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLGFBQWE7QUFDYixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsVUFBVTtBQUFBLEVBQ2pFO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDVixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsT0FBTztBQUFBLEVBQzlEO0FBQUEsRUFDQSxJQUFJLFFBQVE7QUFDUixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsS0FBSztBQUFBLEVBQzVEO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDVixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsT0FBTztBQUFBLEVBQzlEO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLFdBQVc7QUFDWCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsUUFBUTtBQUFBLEVBQy9EO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDVixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMs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dWx0cyIsICJrZXkiLCAicCIsICJjIiwgImwiLCAia2V5IiwgInRleHQiLCAicyIsICJ0dHkiLCAiaXNDb2xvclN1cHBvcnRlZCIsICJyZXBsYWNlQ2xvc2UiLCAiY3JlYXRlQ29sb3JzIiwgImMiLCAiZW52IiwgImFuc2lSZWdleCIsICJzdHJpcEFuc2kiLCAiXyIsICJtIiwgImdldENvbG9yIiwgImNyZWF0ZUNvbnNvbGEiLCAiaXNDSSIsICJ1bmljb2RlIiwgInMiLCAidGV4dCIsICJjIiwgInNyYyIsICJSIiwgImIiLCAibSIsICJiIiwgInYiLCAicyIsICJiIiwgImIiLCAiYiIsICJiIiwgImIiLCAiYiIsICJiIiwgImIiLCAiYiIsICJiIiwgImIiLCAiYiIsICJiIiwgImNvZXJjZSIsICJsIiwgInAiLCAiaCIsICJrZXkiLCAibCIsICJyIiwgImMiLCAiY2FjaGUiLCAiXyIsICJNIiwgIm0iLCAicCIsICJ6IiwgInIiLCAibSIsICJjIiwgInYiLCAidiIsICJyZXF1aXJlX3ZhbGlkIiwgInYiLCAiYiIsICJjIiwgImIiLCAicmVxdWlyZV9zZW12ZXIiLCAiY29lcmNlIiwgImwiLCAiYyIsICJwIiwgImtleSIsICJqIiwgImRlZmF1bHRzIiwgImtleSIsICJyZWdleCIsICJ1cmwiLCAiZiIsICJqIiwgIkgiLCAiSyIsICJXIiwgIk0iLCAiSDIiLCAiYiIsICJjIiwgImciLCAiaCIsICJ1dGlsIiwgImtleSIsICJfIiwgIm9iamVjdFV0aWwiLCAicGF0aCIsICJtIiwgInMiLCAiZiIsICJlcnJvclV0aWwiLCAicGF0aCIsICJrZXkiLCAiZXJyb3JNYXAiLCAiZW1vamlSZWdleCIsICJyZWdleCIsICJjdHgiLCAicmVzdWx0IiwgImlzc3VlcyIsICJiIiwgImVsZW1lbnRzIiwgInByb2Nlc3NlZCIsICJwIiwgInAyIiwgIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsICJ6IiwgInoiLCAiY2FjaGUiLCAia2V5IiwgInoiLCAidmFsaWRhdGVQYWNrYWdlTmFtZSIsICJpc1ZhbGlkIiwgInVybCIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJvd25lciIsICJyZXBvIiwgInAiLCAidXJsIl0KfQo=
10591
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbnNvbGFAMy4yLjMvbm9kZV9tb2R1bGVzL2NvbnNvbGEvZGlzdC9jb3JlLm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY29uc29sYUAzLjIuMy9ub2RlX21vZHVsZXMvY29uc29sYS9kaXN0L3NoYXJlZC9jb25zb2xhLjA2YWQ4YTY0Lm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY29uc29sYUAzLjIuMy9ub2RlX21vZHVsZXMvY29uc29sYS9kaXN0L3V0aWxzLm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY29uc29sYUAzLjIuMy9ub2RlX21vZHVsZXMvY29uc29sYS9kaXN0L2NodW5rcy9wcm9tcHQubWpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb25zb2xhQDMuMi4zL25vZGVfbW9kdWxlcy9jb25zb2xhL2Rpc3Qvc2hhcmVkL2NvbnNvbGEuMzZjMDAzNGYubWpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2ludGVybmFsL2RlYnVnLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9pbnRlcm5hbC9yZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvcGFyc2Utb3B0aW9ucy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvaW50ZXJuYWwvaWRlbnRpZmllcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2NsYXNzZXMvc2VtdmVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcGFyc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy92YWxpZC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NsZWFuLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvaW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvZGlmZi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL21ham9yLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbWlub3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9wYXRjaC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3ByZXJlbGVhc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvcmNvbXBhcmUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9jb21wYXJlLWxvb3NlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvY29tcGFyZS1idWlsZC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL3NvcnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9yc29ydC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvbHQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2Z1bmN0aW9ucy9lcS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL25lcS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2d0ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2x0ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NtcC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvZnVuY3Rpb25zL2NvZXJjZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0veWFsbGlzdEA0LjAuMC9ub2RlX21vZHVsZXMveWFsbGlzdC9pdGVyYXRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0veWFsbGlzdEA0LjAuMC9ub2RlX21vZHVsZXMveWFsbGlzdC95YWxsaXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9scnUtY2FjaGVANi4wLjAvbm9kZV9tb2R1bGVzL2xydS1jYWNoZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9yYW5nZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvY2xhc3Nlcy9jb21wYXJhdG9yLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9mdW5jdGlvbnMvc2F0aXNmaWVzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvdG8tY29tcGFyYXRvcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9tYXgtc2F0aXNmeWluZy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL21pbi1zYXRpc2Z5aW5nLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvbWluLXZlcnNpb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy92YWxpZC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2VtdmVyQDcuNi4wL25vZGVfbW9kdWxlcy9zZW12ZXIvcmFuZ2VzL291dHNpZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9ndHIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9sdHIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9pbnRlcnNlY3RzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zZW12ZXJANy42LjAvbm9kZV9tb2R1bGVzL3NlbXZlci9yYW5nZXMvc2ltcGxpZnkuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL3Jhbmdlcy9zdWJzZXQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NlbXZlckA3LjYuMC9ub2RlX21vZHVsZXMvc2VtdmVyL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9idWlsdGluc0A1LjAuMS9ub2RlX21vZHVsZXMvYnVpbHRpbnMvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLW5hbWVANS4wLjAvbm9kZV9tb2R1bGVzL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLW5hbWUvbGliL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb25zb2xhQDMuMi4zL25vZGVfbW9kdWxlcy9jb25zb2xhL2Rpc3QvaW5kZXgubWpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaXR0eUAwLjEuNi9ub2RlX21vZHVsZXMvY2l0dHkvZGlzdC9pbmRleC5tanMiLCAiLi4vaW5kZXgudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL29oYXNoQDEuMS4zL25vZGVfbW9kdWxlcy9vaGFzaC9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDMuMjMuNi9ub2RlX21vZHVsZXMvem9kL2xpYi9pbmRleC5tanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3pvZC1wYWNrYWdlLWpzb25AMS4wLjIvbm9kZV9tb2R1bGVzL3pvZC1wYWNrYWdlLWpzb24vZGlzdC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcXVpY2stbHJ1QDcuMC4wL25vZGVfbW9kdWxlcy9xdWljay1scnUvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VybC1qb2luQDUuMC4wL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3F1ZXJ5LXJlZ2lzdHJ5QDMuMC4wL25vZGVfbW9kdWxlcy9xdWVyeS1yZWdpc3RyeS9kaXN0L2luZGV4LmpzIiwgIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwgIi4uL3BhY2thZ2UuanNvbiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgTG9nTGV2ZWxzID0ge1xuICBzaWxlbnQ6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxcbiAgZmF0YWw6IDAsXG4gIGVycm9yOiAwLFxuICB3YXJuOiAxLFxuICBsb2c6IDIsXG4gIGluZm86IDMsXG4gIHN1Y2Nlc3M6IDMsXG4gIGZhaWw6IDMsXG4gIHJlYWR5OiAzLFxuICBzdGFydDogMyxcbiAgYm94OiAzLFxuICBkZWJ1ZzogNCxcbiAgdHJhY2U6IDUsXG4gIHZlcmJvc2U6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxufTtcbmNvbnN0IExvZ1R5cGVzID0ge1xuICAvLyBTaWxlbnRcbiAgc2lsZW50OiB7XG4gICAgbGV2ZWw6IC0xXG4gIH0sXG4gIC8vIExldmVsIDBcbiAgZmF0YWw6IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLmZhdGFsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5lcnJvclxuICB9LFxuICAvLyBMZXZlbCAxXG4gIHdhcm46IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLndhcm5cbiAgfSxcbiAgLy8gTGV2ZWwgMlxuICBsb2c6IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLmxvZ1xuICB9LFxuICAvLyBMZXZlbCAzXG4gIGluZm86IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLmluZm9cbiAgfSxcbiAgc3VjY2Vzczoge1xuICAgIGxldmVsOiBMb2dMZXZlbHMuc3VjY2Vzc1xuICB9LFxuICBmYWlsOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5mYWlsXG4gIH0sXG4gIHJlYWR5OiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5pbmZvXG4gIH0sXG4gIHN0YXJ0OiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5pbmZvXG4gIH0sXG4gIGJveDoge1xuICAgIGxldmVsOiBMb2dMZXZlbHMuaW5mb1xuICB9LFxuICAvLyBMZXZlbCA0XG4gIGRlYnVnOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy5kZWJ1Z1xuICB9LFxuICAvLyBMZXZlbCA1XG4gIHRyYWNlOiB7XG4gICAgbGV2ZWw6IExvZ0xldmVscy50cmFjZVxuICB9LFxuICAvLyBWZXJib3NlXG4gIHZlcmJvc2U6IHtcbiAgICBsZXZlbDogTG9nTGV2ZWxzLnZlcmJvc2VcbiAgfVxufTtcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn1cbmZ1bmN0aW9uIF9kZWZ1KGJhc2VPYmplY3QsIGRlZmF1bHRzLCBuYW1lc3BhY2UgPSBcIi5cIiwgbWVyZ2VyKSB7XG4gIGlmICghaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgcmV0dXJuIF9kZWZ1KGJhc2VPYmplY3QsIHt9LCBuYW1lc3BhY2UsIG1lcmdlcik7XG4gIH1cbiAgY29uc3Qgb2JqZWN0ID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMpO1xuICBmb3IgKGNvbnN0IGtleSBpbiBiYXNlT2JqZWN0KSB7XG4gICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIiB8fCBrZXkgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gYmFzZU9iamVjdFtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG1lcmdlciAmJiBtZXJnZXIob2JqZWN0LCBrZXksIHZhbHVlLCBuYW1lc3BhY2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkob2JqZWN0W2tleV0pKSB7XG4gICAgICBvYmplY3Rba2V5XSA9IFsuLi52YWx1ZSwgLi4ub2JqZWN0W2tleV1dO1xuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIGlzT2JqZWN0KG9iamVjdFtrZXldKSkge1xuICAgICAgb2JqZWN0W2tleV0gPSBfZGVmdShcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG9iamVjdFtrZXldLFxuICAgICAgICAobmFtZXNwYWNlID8gYCR7bmFtZXNwYWNlfS5gIDogXCJcIikgKyBrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgbWVyZ2VyXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuZnVuY3Rpb24gY3JlYXRlRGVmdShtZXJnZXIpIHtcbiAgcmV0dXJuICguLi5hcmd1bWVudHNfKSA9PiAoXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tYXJyYXktcmVkdWNlXG4gICAgYXJndW1lbnRzXy5yZWR1Y2UoKHAsIGMpID0+IF9kZWZ1KHAsIGMsIFwiXCIsIG1lcmdlciksIHt9KVxuICApO1xufVxuY29uc3QgZGVmdSA9IGNyZWF0ZURlZnUoKTtcblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgT2JqZWN0XVwiO1xufVxuZnVuY3Rpb24gaXNMb2dPYmooYXJnKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChhcmcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghYXJnLm1lc3NhZ2UgJiYgIWFyZy5hcmdzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChhcmcuc3RhY2spIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmxldCBwYXVzZWQgPSBmYWxzZTtcbmNvbnN0IHF1ZXVlID0gW107XG5jbGFzcyBDb25zb2xhIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdHlwZXMgPSBvcHRpb25zLnR5cGVzIHx8IExvZ1R5cGVzO1xuICAgIHRoaXMub3B0aW9ucyA9IGRlZnUoXG4gICAgICB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGRlZmF1bHRzOiB7IC4uLm9wdGlvbnMuZGVmYXVsdHMgfSxcbiAgICAgICAgbGV2ZWw6IF9ub3JtYWxpemVMb2dMZXZlbChvcHRpb25zLmxldmVsLCB0eXBlcyksXG4gICAgICAgIHJlcG9ydGVyczogWy4uLm9wdGlvbnMucmVwb3J0ZXJzIHx8IFtdXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZXM6IExvZ1R5cGVzLFxuICAgICAgICB0aHJvdHRsZTogMWUzLFxuICAgICAgICB0aHJvdHRsZU1pbjogNSxcbiAgICAgICAgZm9ybWF0T3B0aW9uczoge1xuICAgICAgICAgIGRhdGU6IHRydWUsXG4gICAgICAgICAgY29sb3JzOiBmYWxzZSxcbiAgICAgICAgICBjb21wYWN0OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIGZvciAoY29uc3QgdHlwZSBpbiB0eXBlcykge1xuICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIC4uLnRoaXMub3B0aW9ucy5kZWZhdWx0cyxcbiAgICAgICAgLi4udHlwZXNbdHlwZV1cbiAgICAgIH07XG4gICAgICB0aGlzW3R5cGVdID0gdGhpcy5fd3JhcExvZ0ZuKGRlZmF1bHRzKTtcbiAgICAgIHRoaXNbdHlwZV0ucmF3ID0gdGhpcy5fd3JhcExvZ0ZuKFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tb2NrRm4pIHtcbiAgICAgIHRoaXMubW9ja1R5cGVzKCk7XG4gICAgfVxuICAgIHRoaXMuX2xhc3RMb2cgPSB7fTtcbiAgfVxuICBnZXQgbGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZXZlbDtcbiAgfVxuICBzZXQgbGV2ZWwobGV2ZWwpIHtcbiAgICB0aGlzLm9wdGlvbnMubGV2ZWwgPSBfbm9ybWFsaXplTG9nTGV2ZWwoXG4gICAgICBsZXZlbCxcbiAgICAgIHRoaXMub3B0aW9ucy50eXBlcyxcbiAgICAgIHRoaXMub3B0aW9ucy5sZXZlbFxuICAgICk7XG4gIH1cbiAgcHJvbXB0KG1lc3NhZ2UsIG9wdHMpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByb21wdCBpcyBub3Qgc3VwcG9ydGVkIVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wcm9tcHQobWVzc2FnZSwgb3B0cyk7XG4gIH1cbiAgY3JlYXRlKG9wdGlvbnMpIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBDb25zb2xhKHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KTtcbiAgICBpZiAodGhpcy5fbW9ja0ZuKSB7XG4gICAgICBpbnN0YW5jZS5tb2NrVHlwZXModGhpcy5fbW9ja0ZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG4gIHdpdGhEZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBkZWZhdWx0czoge1xuICAgICAgICAuLi50aGlzLm9wdGlvbnMuZGVmYXVsdHMsXG4gICAgICAgIC4uLmRlZmF1bHRzXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgd2l0aFRhZyh0YWcpIHtcbiAgICByZXR1cm4gdGhpcy53aXRoRGVmYXVsdHMoe1xuICAgICAgdGFnOiB0aGlzLm9wdGlvbnMuZGVmYXVsdHMudGFnID8gdGhpcy5vcHRpb25zLmRlZmF1bHRzLnRhZyArIFwiOlwiICsgdGFnIDogdGFnXG4gICAgfSk7XG4gIH1cbiAgYWRkUmVwb3J0ZXIocmVwb3J0ZXIpIHtcbiAgICB0aGlzLm9wdGlvbnMucmVwb3J0ZXJzLnB1c2gocmVwb3J0ZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHJlbW92ZVJlcG9ydGVyKHJlcG9ydGVyKSB7XG4gICAgaWYgKHJlcG9ydGVyKSB7XG4gICAgICBjb25zdCBpID0gdGhpcy5vcHRpb25zLnJlcG9ydGVycy5pbmRleE9mKHJlcG9ydGVyKTtcbiAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZXBvcnRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMucmVwb3J0ZXJzLnNwbGljZSgwKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgc2V0UmVwb3J0ZXJzKHJlcG9ydGVycykge1xuICAgIHRoaXMub3B0aW9ucy5yZXBvcnRlcnMgPSBBcnJheS5pc0FycmF5KHJlcG9ydGVycykgPyByZXBvcnRlcnMgOiBbcmVwb3J0ZXJzXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB3cmFwQWxsKCkge1xuICAgIHRoaXMud3JhcENvbnNvbGUoKTtcbiAgICB0aGlzLndyYXBTdGQoKTtcbiAgfVxuICByZXN0b3JlQWxsKCkge1xuICAgIHRoaXMucmVzdG9yZUNvbnNvbGUoKTtcbiAgICB0aGlzLnJlc3RvcmVTdGQoKTtcbiAgfVxuICB3cmFwQ29uc29sZSgpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgaW4gdGhpcy5vcHRpb25zLnR5cGVzKSB7XG4gICAgICBpZiAoIWNvbnNvbGVbXCJfX1wiICsgdHlwZV0pIHtcbiAgICAgICAgY29uc29sZVtcIl9fXCIgKyB0eXBlXSA9IGNvbnNvbGVbdHlwZV07XG4gICAgICB9XG4gICAgICBjb25zb2xlW3R5cGVdID0gdGhpc1t0eXBlXS5yYXc7XG4gICAgfVxuICB9XG4gIHJlc3RvcmVDb25zb2xlKCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBpbiB0aGlzLm9wdGlvbnMudHlwZXMpIHtcbiAgICAgIGlmIChjb25zb2xlW1wiX19cIiArIHR5cGVdKSB7XG4gICAgICAgIGNvbnNvbGVbdHlwZV0gPSBjb25zb2xlW1wiX19cIiArIHR5cGVdO1xuICAgICAgICBkZWxldGUgY29uc29sZVtcIl9fXCIgKyB0eXBlXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgd3JhcFN0ZCgpIHtcbiAgICB0aGlzLl93cmFwU3RyZWFtKHRoaXMub3B0aW9ucy5zdGRvdXQsIFwibG9nXCIpO1xuICAgIHRoaXMuX3dyYXBTdHJlYW0odGhpcy5vcHRpb25zLnN0ZGVyciwgXCJsb2dcIik7XG4gIH1cbiAgX3dyYXBTdHJlYW0oc3RyZWFtLCB0eXBlKSB7XG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzdHJlYW0uX193cml0ZSkge1xuICAgICAgc3RyZWFtLl9fd3JpdGUgPSBzdHJlYW0ud3JpdGU7XG4gICAgfVxuICAgIHN0cmVhbS53cml0ZSA9IChkYXRhKSA9PiB7XG4gICAgICB0aGlzW3R5cGVdLnJhdyhTdHJpbmcoZGF0YSkudHJpbSgpKTtcbiAgICB9O1xuICB9XG4gIHJlc3RvcmVTdGQoKSB7XG4gICAgdGhpcy5fcmVzdG9yZVN0cmVhbSh0aGlzLm9wdGlvbnMuc3Rkb3V0KTtcbiAgICB0aGlzLl9yZXN0b3JlU3RyZWFtKHRoaXMub3B0aW9ucy5zdGRlcnIpO1xuICB9XG4gIF9yZXN0b3JlU3RyZWFtKHN0cmVhbSkge1xuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdHJlYW0uX193cml0ZSkge1xuICAgICAgc3RyZWFtLndyaXRlID0gc3RyZWFtLl9fd3JpdGU7XG4gICAgICBkZWxldGUgc3RyZWFtLl9fd3JpdGU7XG4gICAgfVxuICB9XG4gIHBhdXNlTG9ncygpIHtcbiAgICBwYXVzZWQgPSB0cnVlO1xuICB9XG4gIHJlc3VtZUxvZ3MoKSB7XG4gICAgcGF1c2VkID0gZmFsc2U7XG4gICAgY29uc3QgX3F1ZXVlID0gcXVldWUuc3BsaWNlKDApO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBfcXVldWUpIHtcbiAgICAgIGl0ZW1bMF0uX2xvZ0ZuKGl0ZW1bMV0sIGl0ZW1bMl0pO1xuICAgIH1cbiAgfVxuICBtb2NrVHlwZXMobW9ja0ZuKSB7XG4gICAgY29uc3QgX21vY2tGbiA9IG1vY2tGbiB8fCB0aGlzLm9wdGlvbnMubW9ja0ZuO1xuICAgIHRoaXMuX21vY2tGbiA9IF9tb2NrRm47XG4gICAgaWYgKHR5cGVvZiBfbW9ja0ZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0eXBlIGluIHRoaXMub3B0aW9ucy50eXBlcykge1xuICAgICAgdGhpc1t0eXBlXSA9IF9tb2NrRm4odHlwZSwgdGhpcy5vcHRpb25zLnR5cGVzW3R5cGVdKSB8fCB0aGlzW3R5cGVdO1xuICAgICAgdGhpc1t0eXBlXS5yYXcgPSB0aGlzW3R5cGVdO1xuICAgIH1cbiAgfVxuICBfd3JhcExvZ0ZuKGRlZmF1bHRzLCBpc1Jhdykge1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKHBhdXNlZCkge1xuICAgICAgICBxdWV1ZS5wdXNoKFt0aGlzLCBkZWZhdWx0cywgYXJncywgaXNSYXddKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2xvZ0ZuKGRlZmF1bHRzLCBhcmdzLCBpc1Jhdyk7XG4gICAgfTtcbiAgfVxuICBfbG9nRm4oZGVmYXVsdHMsIGFyZ3MsIGlzUmF3KSB7XG4gICAgaWYgKChkZWZhdWx0cy5sZXZlbCB8fCAwKSA+IHRoaXMubGV2ZWwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbG9nT2JqID0ge1xuICAgICAgZGF0ZTogLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCksXG4gICAgICBhcmdzOiBbXSxcbiAgICAgIC4uLmRlZmF1bHRzLFxuICAgICAgbGV2ZWw6IF9ub3JtYWxpemVMb2dMZXZlbChkZWZhdWx0cy5sZXZlbCwgdGhpcy5vcHRpb25zLnR5cGVzKVxuICAgIH07XG4gICAgaWYgKCFpc1JhdyAmJiBhcmdzLmxlbmd0aCA9PT0gMSAmJiBpc0xvZ09iaihhcmdzWzBdKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihsb2dPYmosIGFyZ3NbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dPYmouYXJncyA9IFsuLi5hcmdzXTtcbiAgICB9XG4gICAgaWYgKGxvZ09iai5tZXNzYWdlKSB7XG4gICAgICBsb2dPYmouYXJncy51bnNoaWZ0KGxvZ09iai5tZXNzYWdlKTtcbiAgICAgIGRlbGV0ZSBsb2dPYmoubWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKGxvZ09iai5hZGRpdGlvbmFsKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobG9nT2JqLmFkZGl0aW9uYWwpKSB7XG4gICAgICAgIGxvZ09iai5hZGRpdGlvbmFsID0gbG9nT2JqLmFkZGl0aW9uYWwuc3BsaXQoXCJcXG5cIik7XG4gICAgICB9XG4gICAgICBsb2dPYmouYXJncy5wdXNoKFwiXFxuXCIgKyBsb2dPYmouYWRkaXRpb25hbC5qb2luKFwiXFxuXCIpKTtcbiAgICAgIGRlbGV0ZSBsb2dPYmouYWRkaXRpb25hbDtcbiAgICB9XG4gICAgbG9nT2JqLnR5cGUgPSB0eXBlb2YgbG9nT2JqLnR5cGUgPT09IFwic3RyaW5nXCIgPyBsb2dPYmoudHlwZS50b0xvd2VyQ2FzZSgpIDogXCJsb2dcIjtcbiAgICBsb2dPYmoudGFnID0gdHlwZW9mIGxvZ09iai50YWcgPT09IFwic3RyaW5nXCIgPyBsb2dPYmoudGFnIDogXCJcIjtcbiAgICBjb25zdCByZXNvbHZlTG9nID0gKG5ld0xvZyA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCByZXBlYXRlZCA9ICh0aGlzLl9sYXN0TG9nLmNvdW50IHx8IDApIC0gdGhpcy5vcHRpb25zLnRocm90dGxlTWluO1xuICAgICAgaWYgKHRoaXMuX2xhc3RMb2cub2JqZWN0ICYmIHJlcGVhdGVkID4gMCkge1xuICAgICAgICBjb25zdCBhcmdzMiA9IFsuLi50aGlzLl9sYXN0TG9nLm9iamVjdC5hcmdzXTtcbiAgICAgICAgaWYgKHJlcGVhdGVkID4gMSkge1xuICAgICAgICAgIGFyZ3MyLnB1c2goYChyZXBlYXRlZCAke3JlcGVhdGVkfSB0aW1lcylgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sb2coeyAuLi50aGlzLl9sYXN0TG9nLm9iamVjdCwgYXJnczogYXJnczIgfSk7XG4gICAgICAgIHRoaXMuX2xhc3RMb2cuY291bnQgPSAxO1xuICAgICAgfVxuICAgICAgaWYgKG5ld0xvZykge1xuICAgICAgICB0aGlzLl9sYXN0TG9nLm9iamVjdCA9IGxvZ09iajtcbiAgICAgICAgdGhpcy5fbG9nKGxvZ09iaik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fbGFzdExvZy50aW1lb3V0KTtcbiAgICBjb25zdCBkaWZmVGltZSA9IHRoaXMuX2xhc3RMb2cudGltZSAmJiBsb2dPYmouZGF0ZSA/IGxvZ09iai5kYXRlLmdldFRpbWUoKSAtIHRoaXMuX2xhc3RMb2cudGltZS5nZXRUaW1lKCkgOiAwO1xuICAgIHRoaXMuX2xhc3RMb2cudGltZSA9IGxvZ09iai5kYXRlO1xuICAgIGlmIChkaWZmVGltZSA8IHRoaXMub3B0aW9ucy50aHJvdHRsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZExvZyA9IEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICBsb2dPYmoudHlwZSxcbiAgICAgICAgICBsb2dPYmoudGFnLFxuICAgICAgICAgIGxvZ09iai5hcmdzXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBpc1NhbWVMb2cgPSB0aGlzLl9sYXN0TG9nLnNlcmlhbGl6ZWQgPT09IHNlcmlhbGl6ZWRMb2c7XG4gICAgICAgIHRoaXMuX2xhc3RMb2cuc2VyaWFsaXplZCA9IHNlcmlhbGl6ZWRMb2c7XG4gICAgICAgIGlmIChpc1NhbWVMb2cpIHtcbiAgICAgICAgICB0aGlzLl9sYXN0TG9nLmNvdW50ID0gKHRoaXMuX2xhc3RMb2cuY291bnQgfHwgMCkgKyAxO1xuICAgICAgICAgIGlmICh0aGlzLl9sYXN0TG9nLmNvdW50ID4gdGhpcy5vcHRpb25zLnRocm90dGxlTWluKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0TG9nLnRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICByZXNvbHZlTG9nLFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMudGhyb3R0bGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzb2x2ZUxvZyh0cnVlKTtcbiAgfVxuICBfbG9nKGxvZ09iaikge1xuICAgIGZvciAoY29uc3QgcmVwb3J0ZXIgb2YgdGhpcy5vcHRpb25zLnJlcG9ydGVycykge1xuICAgICAgcmVwb3J0ZXIubG9nKGxvZ09iaiwge1xuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gX25vcm1hbGl6ZUxvZ0xldmVsKGlucHV0LCB0eXBlcyA9IHt9LCBkZWZhdWx0TGV2ZWwgPSAzKSB7XG4gIGlmIChpbnB1dCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMZXZlbDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGlmICh0eXBlc1tpbnB1dF0gJiYgdHlwZXNbaW5wdXRdLmxldmVsICE9PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdHlwZXNbaW5wdXRdLmxldmVsO1xuICB9XG4gIHJldHVybiBkZWZhdWx0TGV2ZWw7XG59XG5Db25zb2xhLnByb3RvdHlwZS5hZGQgPSBDb25zb2xhLnByb3RvdHlwZS5hZGRSZXBvcnRlcjtcbkNvbnNvbGEucHJvdG90eXBlLnJlbW92ZSA9IENvbnNvbGEucHJvdG90eXBlLnJlbW92ZVJlcG9ydGVyO1xuQ29uc29sYS5wcm90b3R5cGUuY2xlYXIgPSBDb25zb2xhLnByb3RvdHlwZS5yZW1vdmVSZXBvcnRlcjtcbkNvbnNvbGEucHJvdG90eXBlLndpdGhTY29wZSA9IENvbnNvbGEucHJvdG90eXBlLndpdGhUYWc7XG5Db25zb2xhLnByb3RvdHlwZS5tb2NrID0gQ29uc29sYS5wcm90b3R5cGUubW9ja1R5cGVzO1xuQ29uc29sYS5wcm90b3R5cGUucGF1c2UgPSBDb25zb2xhLnByb3RvdHlwZS5wYXVzZUxvZ3M7XG5Db25zb2xhLnByb3RvdHlwZS5yZXN1bWUgPSBDb25zb2xhLnByb3RvdHlwZS5yZXN1bWVMb2dzO1xuZnVuY3Rpb24gY3JlYXRlQ29uc29sYShvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIG5ldyBDb25zb2xhKG9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBDb25zb2xhLCBMb2dMZXZlbHMsIExvZ1R5cGVzLCBjcmVhdGVDb25zb2xhIH07XG4iLCAiaW1wb3J0IHsgZm9ybWF0V2l0aE9wdGlvbnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgc2VwIH0gZnJvbSAnbm9kZTpwYXRoJztcblxuZnVuY3Rpb24gcGFyc2VTdGFjayhzdGFjaykge1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpICsgc2VwO1xuICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KFwiXFxuXCIpLnNwbGljZSgxKS5tYXAoKGwpID0+IGwudHJpbSgpLnJlcGxhY2UoXCJmaWxlOi8vXCIsIFwiXCIpLnJlcGxhY2UoY3dkLCBcIlwiKSk7XG4gIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJlYW0oZGF0YSwgc3RyZWFtKSB7XG4gIGNvbnN0IHdyaXRlID0gc3RyZWFtLl9fd3JpdGUgfHwgc3RyZWFtLndyaXRlO1xuICByZXR1cm4gd3JpdGUuY2FsbChzdHJlYW0sIGRhdGEpO1xufVxuXG5jb25zdCBicmFja2V0ID0gKHgpID0+IHggPyBgWyR7eH1dYCA6IFwiXCI7XG5jbGFzcyBCYXNpY1JlcG9ydGVyIHtcbiAgZm9ybWF0U3RhY2soc3RhY2ssIG9wdHMpIHtcbiAgICByZXR1cm4gXCIgIFwiICsgcGFyc2VTdGFjayhzdGFjaykuam9pbihcIlxcbiAgXCIpO1xuICB9XG4gIGZvcm1hdEFyZ3MoYXJncywgb3B0cykge1xuICAgIGNvbnN0IF9hcmdzID0gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnLnN0YWNrID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBhcmcubWVzc2FnZSArIFwiXFxuXCIgKyB0aGlzLmZvcm1hdFN0YWNrKGFyZy5zdGFjaywgb3B0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtYXRXaXRoT3B0aW9ucyhvcHRzLCAuLi5fYXJncyk7XG4gIH1cbiAgZm9ybWF0RGF0ZShkYXRlLCBvcHRzKSB7XG4gICAgcmV0dXJuIG9wdHMuZGF0ZSA/IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCkgOiBcIlwiO1xuICB9XG4gIGZpbHRlckFuZEpvaW4oYXJyKSB7XG4gICAgcmV0dXJuIGFyci5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIH1cbiAgZm9ybWF0TG9nT2JqKGxvZ09iaiwgb3B0cykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmZvcm1hdEFyZ3MobG9nT2JqLmFyZ3MsIG9wdHMpO1xuICAgIGlmIChsb2dPYmoudHlwZSA9PT0gXCJib3hcIikge1xuICAgICAgcmV0dXJuIFwiXFxuXCIgKyBbXG4gICAgICAgIGJyYWNrZXQobG9nT2JqLnRhZyksXG4gICAgICAgIGxvZ09iai50aXRsZSAmJiBsb2dPYmoudGl0bGUsXG4gICAgICAgIC4uLm1lc3NhZ2Uuc3BsaXQoXCJcXG5cIilcbiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLm1hcCgobCkgPT4gXCIgPiBcIiArIGwpLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJBbmRKb2luKFtcbiAgICAgIGJyYWNrZXQobG9nT2JqLnR5cGUpLFxuICAgICAgYnJhY2tldChsb2dPYmoudGFnKSxcbiAgICAgIG1lc3NhZ2VcbiAgICBdKTtcbiAgfVxuICBsb2cobG9nT2JqLCBjdHgpIHtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5mb3JtYXRMb2dPYmoobG9nT2JqLCB7XG4gICAgICBjb2x1bW5zOiBjdHgub3B0aW9ucy5zdGRvdXQuY29sdW1ucyB8fCAwLFxuICAgICAgLi4uY3R4Lm9wdGlvbnMuZm9ybWF0T3B0aW9uc1xuICAgIH0pO1xuICAgIHJldHVybiB3cml0ZVN0cmVhbShcbiAgICAgIGxpbmUgKyBcIlxcblwiLFxuICAgICAgbG9nT2JqLmxldmVsIDwgMiA/IGN0eC5vcHRpb25zLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyciA6IGN0eC5vcHRpb25zLnN0ZG91dCB8fCBwcm9jZXNzLnN0ZG91dFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQmFzaWNSZXBvcnRlciBhcyBCLCBwYXJzZVN0YWNrIGFzIHAgfTtcbiIsICJpbXBvcnQgKiBhcyB0dHkgZnJvbSAnbm9kZTp0dHknO1xuXG5jb25zdCB7XG4gIGVudiA9IHt9LFxuICBhcmd2ID0gW10sXG4gIHBsYXRmb3JtID0gXCJcIlxufSA9IHR5cGVvZiBwcm9jZXNzID09PSBcInVuZGVmaW5lZFwiID8ge30gOiBwcm9jZXNzO1xuY29uc3QgaXNEaXNhYmxlZCA9IFwiTk9fQ09MT1JcIiBpbiBlbnYgfHwgYXJndi5pbmNsdWRlcyhcIi0tbm8tY29sb3JcIik7XG5jb25zdCBpc0ZvcmNlZCA9IFwiRk9SQ0VfQ09MT1JcIiBpbiBlbnYgfHwgYXJndi5pbmNsdWRlcyhcIi0tY29sb3JcIik7XG5jb25zdCBpc1dpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiO1xuY29uc3QgaXNEdW1iVGVybWluYWwgPSBlbnYuVEVSTSA9PT0gXCJkdW1iXCI7XG5jb25zdCBpc0NvbXBhdGlibGVUZXJtaW5hbCA9IHR0eSAmJiB0dHkuaXNhdHR5ICYmIHR0eS5pc2F0dHkoMSkgJiYgZW52LlRFUk0gJiYgIWlzRHVtYlRlcm1pbmFsO1xuY29uc3QgaXNDSSA9IFwiQ0lcIiBpbiBlbnYgJiYgKFwiR0lUSFVCX0FDVElPTlNcIiBpbiBlbnYgfHwgXCJHSVRMQUJfQ0lcIiBpbiBlbnYgfHwgXCJDSVJDTEVDSVwiIGluIGVudik7XG5jb25zdCBpc0NvbG9yU3VwcG9ydGVkID0gIWlzRGlzYWJsZWQgJiYgKGlzRm9yY2VkIHx8IGlzV2luZG93cyAmJiAhaXNEdW1iVGVybWluYWwgfHwgaXNDb21wYXRpYmxlVGVybWluYWwgfHwgaXNDSSk7XG5mdW5jdGlvbiByZXBsYWNlQ2xvc2UoaW5kZXgsIHN0cmluZywgY2xvc2UsIHJlcGxhY2UsIGhlYWQgPSBzdHJpbmcuc2xpY2UoMCwgTWF0aC5tYXgoMCwgaW5kZXgpKSArIHJlcGxhY2UsIHRhaWwgPSBzdHJpbmcuc2xpY2UoTWF0aC5tYXgoMCwgaW5kZXggKyBjbG9zZS5sZW5ndGgpKSwgbmV4dCA9IHRhaWwuaW5kZXhPZihjbG9zZSkpIHtcbiAgcmV0dXJuIGhlYWQgKyAobmV4dCA8IDAgPyB0YWlsIDogcmVwbGFjZUNsb3NlKG5leHQsIHRhaWwsIGNsb3NlLCByZXBsYWNlKSk7XG59XG5mdW5jdGlvbiBjbGVhckJsZWVkKGluZGV4LCBzdHJpbmcsIG9wZW4sIGNsb3NlLCByZXBsYWNlKSB7XG4gIHJldHVybiBpbmRleCA8IDAgPyBvcGVuICsgc3RyaW5nICsgY2xvc2UgOiBvcGVuICsgcmVwbGFjZUNsb3NlKGluZGV4LCBzdHJpbmcsIGNsb3NlLCByZXBsYWNlKSArIGNsb3NlO1xufVxuZnVuY3Rpb24gZmlsdGVyRW1wdHkob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuLCBhdCA9IG9wZW4ubGVuZ3RoICsgMSkge1xuICByZXR1cm4gKHN0cmluZykgPT4gc3RyaW5nIHx8ICEoc3RyaW5nID09PSBcIlwiIHx8IHN0cmluZyA9PT0gdm9pZCAwKSA/IGNsZWFyQmxlZWQoXG4gICAgKFwiXCIgKyBzdHJpbmcpLmluZGV4T2YoY2xvc2UsIGF0KSxcbiAgICBzdHJpbmcsXG4gICAgb3BlbixcbiAgICBjbG9zZSxcbiAgICByZXBsYWNlXG4gICkgOiBcIlwiO1xufVxuZnVuY3Rpb24gaW5pdChvcGVuLCBjbG9zZSwgcmVwbGFjZSkge1xuICByZXR1cm4gZmlsdGVyRW1wdHkoYFxceDFCWyR7b3Blbn1tYCwgYFxceDFCWyR7Y2xvc2V9bWAsIHJlcGxhY2UpO1xufVxuY29uc3QgY29sb3JEZWZzID0ge1xuICByZXNldDogaW5pdCgwLCAwKSxcbiAgYm9sZDogaW5pdCgxLCAyMiwgXCJcXHgxQlsyMm1cXHgxQlsxbVwiKSxcbiAgZGltOiBpbml0KDIsIDIyLCBcIlxceDFCWzIybVxceDFCWzJtXCIpLFxuICBpdGFsaWM6IGluaXQoMywgMjMpLFxuICB1bmRlcmxpbmU6IGluaXQoNCwgMjQpLFxuICBpbnZlcnNlOiBpbml0KDcsIDI3KSxcbiAgaGlkZGVuOiBpbml0KDgsIDI4KSxcbiAgc3RyaWtldGhyb3VnaDogaW5pdCg5LCAyOSksXG4gIGJsYWNrOiBpbml0KDMwLCAzOSksXG4gIHJlZDogaW5pdCgzMSwgMzkpLFxuICBncmVlbjogaW5pdCgzMiwgMzkpLFxuICB5ZWxsb3c6IGluaXQoMzMsIDM5KSxcbiAgYmx1ZTogaW5pdCgzNCwgMzkpLFxuICBtYWdlbnRhOiBpbml0KDM1LCAzOSksXG4gIGN5YW46IGluaXQoMzYsIDM5KSxcbiAgd2hpdGU6IGluaXQoMzcsIDM5KSxcbiAgZ3JheTogaW5pdCg5MCwgMzkpLFxuICBiZ0JsYWNrOiBpbml0KDQwLCA0OSksXG4gIGJnUmVkOiBpbml0KDQxLCA0OSksXG4gIGJnR3JlZW46IGluaXQoNDIsIDQ5KSxcbiAgYmdZZWxsb3c6IGluaXQoNDMsIDQ5KSxcbiAgYmdCbHVlOiBpbml0KDQ0LCA0OSksXG4gIGJnTWFnZW50YTogaW5pdCg0NSwgNDkpLFxuICBiZ0N5YW46IGluaXQoNDYsIDQ5KSxcbiAgYmdXaGl0ZTogaW5pdCg0NywgNDkpLFxuICBibGFja0JyaWdodDogaW5pdCg5MCwgMzkpLFxuICByZWRCcmlnaHQ6IGluaXQoOTEsIDM5KSxcbiAgZ3JlZW5CcmlnaHQ6IGluaXQoOTIsIDM5KSxcbiAgeWVsbG93QnJpZ2h0OiBpbml0KDkzLCAzOSksXG4gIGJsdWVCcmlnaHQ6IGluaXQoOTQsIDM5KSxcbiAgbWFnZW50YUJyaWdodDogaW5pdCg5NSwgMzkpLFxuICBjeWFuQnJpZ2h0OiBpbml0KDk2LCAzOSksXG4gIHdoaXRlQnJpZ2h0OiBpbml0KDk3LCAzOSksXG4gIGJnQmxhY2tCcmlnaHQ6IGluaXQoMTAwLCA0OSksXG4gIGJnUmVkQnJpZ2h0OiBpbml0KDEwMSwgNDkpLFxuICBiZ0dyZWVuQnJpZ2h0OiBpbml0KDEwMiwgNDkpLFxuICBiZ1llbGxvd0JyaWdodDogaW5pdCgxMDMsIDQ5KSxcbiAgYmdCbHVlQnJpZ2h0OiBpbml0KDEwNCwgNDkpLFxuICBiZ01hZ2VudGFCcmlnaHQ6IGluaXQoMTA1LCA0OSksXG4gIGJnQ3lhbkJyaWdodDogaW5pdCgxMDYsIDQ5KSxcbiAgYmdXaGl0ZUJyaWdodDogaW5pdCgxMDcsIDQ5KVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUNvbG9ycyh1c2VDb2xvciA9IGlzQ29sb3JTdXBwb3J0ZWQpIHtcbiAgcmV0dXJuIHVzZUNvbG9yID8gY29sb3JEZWZzIDogT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKGNvbG9yRGVmcykubWFwKChrZXkpID0+IFtrZXksIFN0cmluZ10pKTtcbn1cbmNvbnN0IGNvbG9ycyA9IGNyZWF0ZUNvbG9ycygpO1xuZnVuY3Rpb24gZ2V0Q29sb3IoY29sb3IsIGZhbGxiYWNrID0gXCJyZXNldFwiKSB7XG4gIHJldHVybiBjb2xvcnNbY29sb3JdIHx8IGNvbG9yc1tmYWxsYmFja107XG59XG5mdW5jdGlvbiBjb2xvcml6ZShjb2xvciwgdGV4dCkge1xuICByZXR1cm4gZ2V0Q29sb3IoY29sb3IpKHRleHQpO1xufVxuXG5jb25zdCBhbnNpUmVnZXggPSBbXG4gIFwiW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KVwiLFxuICBcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpXCJcbl0uam9pbihcInxcIik7XG5mdW5jdGlvbiBzdHJpcEFuc2kodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoYW5zaVJlZ2V4LCBcImdcIiksIFwiXCIpO1xufVxuZnVuY3Rpb24gY2VudGVyQWxpZ24oc3RyLCBsZW4sIHNwYWNlID0gXCIgXCIpIHtcbiAgY29uc3QgZnJlZSA9IGxlbiAtIHN0ci5sZW5ndGg7XG4gIGlmIChmcmVlIDw9IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGNvbnN0IGZyZWVMZWZ0ID0gTWF0aC5mbG9vcihmcmVlIC8gMik7XG4gIGxldCBfc3RyID0gXCJcIjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIF9zdHIgKz0gaSA8IGZyZWVMZWZ0IHx8IGkgPj0gZnJlZUxlZnQgKyBzdHIubGVuZ3RoID8gc3BhY2UgOiBzdHJbaSAtIGZyZWVMZWZ0XTtcbiAgfVxuICByZXR1cm4gX3N0cjtcbn1cbmZ1bmN0aW9uIHJpZ2h0QWxpZ24oc3RyLCBsZW4sIHNwYWNlID0gXCIgXCIpIHtcbiAgY29uc3QgZnJlZSA9IGxlbiAtIHN0ci5sZW5ndGg7XG4gIGlmIChmcmVlIDw9IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGxldCBfc3RyID0gXCJcIjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIF9zdHIgKz0gaSA8IGZyZWUgPyBzcGFjZSA6IHN0cltpIC0gZnJlZV07XG4gIH1cbiAgcmV0dXJuIF9zdHI7XG59XG5mdW5jdGlvbiBsZWZ0QWxpZ24oc3RyLCBsZW4sIHNwYWNlID0gXCIgXCIpIHtcbiAgbGV0IF9zdHIgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgX3N0ciArPSBpIDwgc3RyLmxlbmd0aCA/IHN0cltpXSA6IHNwYWNlO1xuICB9XG4gIHJldHVybiBfc3RyO1xufVxuZnVuY3Rpb24gYWxpZ24oYWxpZ25tZW50LCBzdHIsIGxlbiwgc3BhY2UgPSBcIiBcIikge1xuICBzd2l0Y2ggKGFsaWdubWVudCkge1xuICAgIGNhc2UgXCJsZWZ0XCI6IHtcbiAgICAgIHJldHVybiBsZWZ0QWxpZ24oc3RyLCBsZW4sIHNwYWNlKTtcbiAgICB9XG4gICAgY2FzZSBcInJpZ2h0XCI6IHtcbiAgICAgIHJldHVybiByaWdodEFsaWduKHN0ciwgbGVuLCBzcGFjZSk7XG4gICAgfVxuICAgIGNhc2UgXCJjZW50ZXJcIjoge1xuICAgICAgcmV0dXJuIGNlbnRlckFsaWduKHN0ciwgbGVuLCBzcGFjZSk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGJveFN0eWxlUHJlc2V0cyA9IHtcbiAgc29saWQ6IHtcbiAgICB0bDogXCJcXHUyNTBDXCIsXG4gICAgdHI6IFwiXFx1MjUxMFwiLFxuICAgIGJsOiBcIlxcdTI1MTRcIixcbiAgICBicjogXCJcXHUyNTE4XCIsXG4gICAgaDogXCJcXHUyNTAwXCIsXG4gICAgdjogXCJcXHUyNTAyXCJcbiAgfSxcbiAgZG91YmxlOiB7XG4gICAgdGw6IFwiXFx1MjU1NFwiLFxuICAgIHRyOiBcIlxcdTI1NTdcIixcbiAgICBibDogXCJcXHUyNTVBXCIsXG4gICAgYnI6IFwiXFx1MjU1RFwiLFxuICAgIGg6IFwiXFx1MjU1MFwiLFxuICAgIHY6IFwiXFx1MjU1MVwiXG4gIH0sXG4gIGRvdWJsZVNpbmdsZToge1xuICAgIHRsOiBcIlxcdTI1NTNcIixcbiAgICB0cjogXCJcXHUyNTU2XCIsXG4gICAgYmw6IFwiXFx1MjU1OVwiLFxuICAgIGJyOiBcIlxcdTI1NUNcIixcbiAgICBoOiBcIlxcdTI1MDBcIixcbiAgICB2OiBcIlxcdTI1NTFcIlxuICB9LFxuICBkb3VibGVTaW5nbGVSb3VuZGVkOiB7XG4gICAgdGw6IFwiXFx1MjU2RFwiLFxuICAgIHRyOiBcIlxcdTI1NkVcIixcbiAgICBibDogXCJcXHUyNTcwXCIsXG4gICAgYnI6IFwiXFx1MjU2RlwiLFxuICAgIGg6IFwiXFx1MjUwMFwiLFxuICAgIHY6IFwiXFx1MjU1MVwiXG4gIH0sXG4gIHNpbmdsZVRoaWNrOiB7XG4gICAgdGw6IFwiXFx1MjUwRlwiLFxuICAgIHRyOiBcIlxcdTI1MTNcIixcbiAgICBibDogXCJcXHUyNTE3XCIsXG4gICAgYnI6IFwiXFx1MjUxQlwiLFxuICAgIGg6IFwiXFx1MjUwMVwiLFxuICAgIHY6IFwiXFx1MjUwM1wiXG4gIH0sXG4gIHNpbmdsZURvdWJsZToge1xuICAgIHRsOiBcIlxcdTI1NTJcIixcbiAgICB0cjogXCJcXHUyNTU1XCIsXG4gICAgYmw6IFwiXFx1MjU1OFwiLFxuICAgIGJyOiBcIlxcdTI1NUJcIixcbiAgICBoOiBcIlxcdTI1NTBcIixcbiAgICB2OiBcIlxcdTI1MDJcIlxuICB9LFxuICBzaW5nbGVEb3VibGVSb3VuZGVkOiB7XG4gICAgdGw6IFwiXFx1MjU2RFwiLFxuICAgIHRyOiBcIlxcdTI1NkVcIixcbiAgICBibDogXCJcXHUyNTcwXCIsXG4gICAgYnI6IFwiXFx1MjU2RlwiLFxuICAgIGg6IFwiXFx1MjU1MFwiLFxuICAgIHY6IFwiXFx1MjUwMlwiXG4gIH0sXG4gIHJvdW5kZWQ6IHtcbiAgICB0bDogXCJcXHUyNTZEXCIsXG4gICAgdHI6IFwiXFx1MjU2RVwiLFxuICAgIGJsOiBcIlxcdTI1NzBcIixcbiAgICBicjogXCJcXHUyNTZGXCIsXG4gICAgaDogXCJcXHUyNTAwXCIsXG4gICAgdjogXCJcXHUyNTAyXCJcbiAgfVxufTtcbmNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgYm9yZGVyQ29sb3I6IFwid2hpdGVcIixcbiAgYm9yZGVyU3R5bGU6IFwicm91bmRlZFwiLFxuICB2YWxpZ246IFwiY2VudGVyXCIsXG4gIHBhZGRpbmc6IDIsXG4gIG1hcmdpbkxlZnQ6IDEsXG4gIG1hcmdpblRvcDogMSxcbiAgbWFyZ2luQm90dG9tOiAxXG59O1xuZnVuY3Rpb24gYm94KHRleHQsIF9vcHRzID0ge30pIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICAuLi5fb3B0cyxcbiAgICBzdHlsZToge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4uX29wdHMuc3R5bGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IHRleHRMaW5lcyA9IHRleHQuc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IGJveExpbmVzID0gW107XG4gIGNvbnN0IF9jb2xvciA9IGdldENvbG9yKG9wdHMuc3R5bGUuYm9yZGVyQ29sb3IpO1xuICBjb25zdCBib3JkZXJTdHlsZSA9IHtcbiAgICAuLi50eXBlb2Ygb3B0cy5zdHlsZS5ib3JkZXJTdHlsZSA9PT0gXCJzdHJpbmdcIiA/IGJveFN0eWxlUHJlc2V0c1tvcHRzLnN0eWxlLmJvcmRlclN0eWxlXSB8fCBib3hTdHlsZVByZXNldHMuc29saWQgOiBvcHRzLnN0eWxlLmJvcmRlclN0eWxlXG4gIH07XG4gIGlmIChfY29sb3IpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBib3JkZXJTdHlsZSkge1xuICAgICAgYm9yZGVyU3R5bGVba2V5XSA9IF9jb2xvcihcbiAgICAgICAgYm9yZGVyU3R5bGVba2V5XVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFkZGluZ09mZnNldCA9IG9wdHMuc3R5bGUucGFkZGluZyAlIDIgPT09IDAgPyBvcHRzLnN0eWxlLnBhZGRpbmcgOiBvcHRzLnN0eWxlLnBhZGRpbmcgKyAxO1xuICBjb25zdCBoZWlnaHQgPSB0ZXh0TGluZXMubGVuZ3RoICsgcGFkZGluZ09mZnNldDtcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCguLi50ZXh0TGluZXMubWFwKChsaW5lKSA9PiBsaW5lLmxlbmd0aCkpICsgcGFkZGluZ09mZnNldDtcbiAgY29uc3Qgd2lkdGhPZmZzZXQgPSB3aWR0aCArIHBhZGRpbmdPZmZzZXQ7XG4gIGNvbnN0IGxlZnRTcGFjZSA9IG9wdHMuc3R5bGUubWFyZ2luTGVmdCA+IDAgPyBcIiBcIi5yZXBlYXQob3B0cy5zdHlsZS5tYXJnaW5MZWZ0KSA6IFwiXCI7XG4gIGlmIChvcHRzLnN0eWxlLm1hcmdpblRvcCA+IDApIHtcbiAgICBib3hMaW5lcy5wdXNoKFwiXCIucmVwZWF0KG9wdHMuc3R5bGUubWFyZ2luVG9wKSk7XG4gIH1cbiAgaWYgKG9wdHMudGl0bGUpIHtcbiAgICBjb25zdCBsZWZ0ID0gYm9yZGVyU3R5bGUuaC5yZXBlYXQoXG4gICAgICBNYXRoLmZsb29yKCh3aWR0aCAtIHN0cmlwQW5zaShvcHRzLnRpdGxlKS5sZW5ndGgpIC8gMilcbiAgICApO1xuICAgIGNvbnN0IHJpZ2h0ID0gYm9yZGVyU3R5bGUuaC5yZXBlYXQoXG4gICAgICB3aWR0aCAtIHN0cmlwQW5zaShvcHRzLnRpdGxlKS5sZW5ndGggLSBzdHJpcEFuc2kobGVmdCkubGVuZ3RoICsgcGFkZGluZ09mZnNldFxuICAgICk7XG4gICAgYm94TGluZXMucHVzaChcbiAgICAgIGAke2xlZnRTcGFjZX0ke2JvcmRlclN0eWxlLnRsfSR7bGVmdH0ke29wdHMudGl0bGV9JHtyaWdodH0ke2JvcmRlclN0eWxlLnRyfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGJveExpbmVzLnB1c2goXG4gICAgICBgJHtsZWZ0U3BhY2V9JHtib3JkZXJTdHlsZS50bH0ke2JvcmRlclN0eWxlLmgucmVwZWF0KHdpZHRoT2Zmc2V0KX0ke2JvcmRlclN0eWxlLnRyfWBcbiAgICApO1xuICB9XG4gIGNvbnN0IHZhbGlnbk9mZnNldCA9IG9wdHMuc3R5bGUudmFsaWduID09PSBcImNlbnRlclwiID8gTWF0aC5mbG9vcigoaGVpZ2h0IC0gdGV4dExpbmVzLmxlbmd0aCkgLyAyKSA6IG9wdHMuc3R5bGUudmFsaWduID09PSBcInRvcFwiID8gaGVpZ2h0IC0gdGV4dExpbmVzLmxlbmd0aCAtIHBhZGRpbmdPZmZzZXQgOiBoZWlnaHQgLSB0ZXh0TGluZXMubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgaWYgKGkgPCB2YWxpZ25PZmZzZXQgfHwgaSA+PSB2YWxpZ25PZmZzZXQgKyB0ZXh0TGluZXMubGVuZ3RoKSB7XG4gICAgICBib3hMaW5lcy5wdXNoKFxuICAgICAgICBgJHtsZWZ0U3BhY2V9JHtib3JkZXJTdHlsZS52fSR7XCIgXCIucmVwZWF0KHdpZHRoT2Zmc2V0KX0ke2JvcmRlclN0eWxlLnZ9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGluZSA9IHRleHRMaW5lc1tpIC0gdmFsaWduT2Zmc2V0XTtcbiAgICAgIGNvbnN0IGxlZnQgPSBcIiBcIi5yZXBlYXQocGFkZGluZ09mZnNldCk7XG4gICAgICBjb25zdCByaWdodCA9IFwiIFwiLnJlcGVhdCh3aWR0aCAtIHN0cmlwQW5zaShsaW5lKS5sZW5ndGgpO1xuICAgICAgYm94TGluZXMucHVzaChcbiAgICAgICAgYCR7bGVmdFNwYWNlfSR7Ym9yZGVyU3R5bGUudn0ke2xlZnR9JHtsaW5lfSR7cmlnaHR9JHtib3JkZXJTdHlsZS52fWBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGJveExpbmVzLnB1c2goXG4gICAgYCR7bGVmdFNwYWNlfSR7Ym9yZGVyU3R5bGUuYmx9JHtib3JkZXJTdHlsZS5oLnJlcGVhdCh3aWR0aE9mZnNldCl9JHtib3JkZXJTdHlsZS5icn1gXG4gICk7XG4gIGlmIChvcHRzLnN0eWxlLm1hcmdpbkJvdHRvbSA+IDApIHtcbiAgICBib3hMaW5lcy5wdXNoKFwiXCIucmVwZWF0KG9wdHMuc3R5bGUubWFyZ2luQm90dG9tKSk7XG4gIH1cbiAgcmV0dXJuIGJveExpbmVzLmpvaW4oXCJcXG5cIik7XG59XG5cbmV4cG9ydCB7IGFsaWduLCBib3gsIGNlbnRlckFsaWduLCBjb2xvcml6ZSwgY29sb3JzLCBnZXRDb2xvciwgbGVmdEFsaWduLCByaWdodEFsaWduLCBzdHJpcEFuc2kgfTtcbiIsICJpbXBvcnQgeyBzdGRpbiwgc3Rkb3V0IH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCBmIGZyb20gJ25vZGU6cmVhZGxpbmUnO1xuaW1wb3J0IHsgV3JpdGVTdHJlYW0gfSBmcm9tICdub2RlOnR0eSc7XG5pbXBvcnQgeyBnIGFzIGdldERlZmF1bHRFeHBvcnRGcm9tQ2pzLCBpIGFzIGlzVW5pY29kZVN1cHBvcnRlZCB9IGZyb20gJy4uL3NoYXJlZC9jb25zb2xhLjM2YzAwMzRmLm1qcyc7XG5pbXBvcnQgcmVxdWlyZSQkMCBmcm9tICd0dHknO1xuaW1wb3J0IHsgY29sb3JzIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcbmltcG9ydCAnLi4vY29yZS5tanMnO1xuaW1wb3J0ICcuLi9zaGFyZWQvY29uc29sYS4wNmFkOGE2NC5tanMnO1xuaW1wb3J0ICdub2RlOnV0aWwnO1xuaW1wb3J0ICdub2RlOnBhdGgnO1xuXG5jb25zdCBFU0MgPSAnXFx4MUInO1xuY29uc3QgQ1NJID0gYCR7RVNDfVtgO1xuY29uc3QgYmVlcCA9ICdcXHUwMDA3JztcblxuY29uc3QgY3Vyc29yID0ge1xuICB0byh4LCB5KSB7XG4gICAgaWYgKCF5KSByZXR1cm4gYCR7Q1NJfSR7eCArIDF9R2A7XG4gICAgcmV0dXJuIGAke0NTSX0ke3kgKyAxfTske3ggKyAxfUhgO1xuICB9LFxuICBtb3ZlKHgsIHkpIHtcbiAgICBsZXQgcmV0ID0gJyc7XG5cbiAgICBpZiAoeCA8IDApIHJldCArPSBgJHtDU0l9JHsteH1EYDtcbiAgICBlbHNlIGlmICh4ID4gMCkgcmV0ICs9IGAke0NTSX0ke3h9Q2A7XG5cbiAgICBpZiAoeSA8IDApIHJldCArPSBgJHtDU0l9JHsteX1BYDtcbiAgICBlbHNlIGlmICh5ID4gMCkgcmV0ICs9IGAke0NTSX0ke3l9QmA7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9LFxuICB1cDogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfSR7Y291bnR9QWAsXG4gIGRvd246IChjb3VudCA9IDEpID0+IGAke0NTSX0ke2NvdW50fUJgLFxuICBmb3J3YXJkOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9JHtjb3VudH1DYCxcbiAgYmFja3dhcmQ6IChjb3VudCA9IDEpID0+IGAke0NTSX0ke2NvdW50fURgLFxuICBuZXh0TGluZTogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfUVgLnJlcGVhdChjb3VudCksXG4gIHByZXZMaW5lOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9RmAucmVwZWF0KGNvdW50KSxcbiAgbGVmdDogYCR7Q1NJfUdgLFxuICBoaWRlOiBgJHtDU0l9PzI1bGAsXG4gIHNob3c6IGAke0NTSX0/MjVoYCxcbiAgc2F2ZTogYCR7RVNDfTdgLFxuICByZXN0b3JlOiBgJHtFU0N9OGBcbn07XG5cbmNvbnN0IHNjcm9sbCA9IHtcbiAgdXA6IChjb3VudCA9IDEpID0+IGAke0NTSX1TYC5yZXBlYXQoY291bnQpLFxuICBkb3duOiAoY291bnQgPSAxKSA9PiBgJHtDU0l9VGAucmVwZWF0KGNvdW50KVxufTtcblxuY29uc3QgZXJhc2UgPSB7XG4gIHNjcmVlbjogYCR7Q1NJfTJKYCxcbiAgdXA6IChjb3VudCA9IDEpID0+IGAke0NTSX0xSmAucmVwZWF0KGNvdW50KSxcbiAgZG93bjogKGNvdW50ID0gMSkgPT4gYCR7Q1NJfUpgLnJlcGVhdChjb3VudCksXG4gIGxpbmU6IGAke0NTSX0yS2AsXG4gIGxpbmVFbmQ6IGAke0NTSX1LYCxcbiAgbGluZVN0YXJ0OiBgJHtDU0l9MUtgLFxuICBsaW5lcyhjb3VudCkge1xuICAgIGxldCBjbGVhciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKylcbiAgICAgIGNsZWFyICs9IHRoaXMubGluZSArIChpIDwgY291bnQgLSAxID8gY3Vyc29yLnVwKCkgOiAnJyk7XG4gICAgaWYgKGNvdW50KVxuICAgICAgY2xlYXIgKz0gY3Vyc29yLmxlZnQ7XG4gICAgcmV0dXJuIGNsZWFyO1xuICB9XG59O1xuXG52YXIgc3JjID0geyBjdXJzb3IsIHNjcm9sbCwgZXJhc2UsIGJlZXAgfTtcblxudmFyIHBpY29jb2xvcnMgPSB7ZXhwb3J0czoge319O1xuXG5sZXQgdHR5ID0gcmVxdWlyZSQkMDtcblxubGV0IGlzQ29sb3JTdXBwb3J0ZWQgPVxuXHQhKFwiTk9fQ09MT1JcIiBpbiBwcm9jZXNzLmVudiB8fCBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoXCItLW5vLWNvbG9yXCIpKSAmJlxuXHQoXCJGT1JDRV9DT0xPUlwiIGluIHByb2Nlc3MuZW52IHx8XG5cdFx0cHJvY2Vzcy5hcmd2LmluY2x1ZGVzKFwiLS1jb2xvclwiKSB8fFxuXHRcdHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiB8fFxuXHRcdCh0dHkuaXNhdHR5KDEpICYmIHByb2Nlc3MuZW52LlRFUk0gIT09IFwiZHVtYlwiKSB8fFxuXHRcdFwiQ0lcIiBpbiBwcm9jZXNzLmVudik7XG5cbmxldCBmb3JtYXR0ZXIgPVxuXHQob3BlbiwgY2xvc2UsIHJlcGxhY2UgPSBvcGVuKSA9PlxuXHRpbnB1dCA9PiB7XG5cdFx0bGV0IHN0cmluZyA9IFwiXCIgKyBpbnB1dDtcblx0XHRsZXQgaW5kZXggPSBzdHJpbmcuaW5kZXhPZihjbG9zZSwgb3Blbi5sZW5ndGgpO1xuXHRcdHJldHVybiB+aW5kZXhcblx0XHRcdD8gb3BlbiArIHJlcGxhY2VDbG9zZShzdHJpbmcsIGNsb3NlLCByZXBsYWNlLCBpbmRleCkgKyBjbG9zZVxuXHRcdFx0OiBvcGVuICsgc3RyaW5nICsgY2xvc2Vcblx0fTtcblxubGV0IHJlcGxhY2VDbG9zZSA9IChzdHJpbmcsIGNsb3NlLCByZXBsYWNlLCBpbmRleCkgPT4ge1xuXHRsZXQgc3RhcnQgPSBzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2U7XG5cdGxldCBlbmQgPSBzdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgY2xvc2UubGVuZ3RoKTtcblx0bGV0IG5leHRJbmRleCA9IGVuZC5pbmRleE9mKGNsb3NlKTtcblx0cmV0dXJuIH5uZXh0SW5kZXggPyBzdGFydCArIHJlcGxhY2VDbG9zZShlbmQsIGNsb3NlLCByZXBsYWNlLCBuZXh0SW5kZXgpIDogc3RhcnQgKyBlbmRcbn07XG5cbmxldCBjcmVhdGVDb2xvcnMgPSAoZW5hYmxlZCA9IGlzQ29sb3JTdXBwb3J0ZWQpID0+ICh7XG5cdGlzQ29sb3JTdXBwb3J0ZWQ6IGVuYWJsZWQsXG5cdHJlc2V0OiBlbmFibGVkID8gcyA9PiBgXFx4MWJbMG0ke3N9XFx4MWJbMG1gIDogU3RyaW5nLFxuXHRib2xkOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMW1cIiwgXCJcXHgxYlsyMm1cIiwgXCJcXHgxYlsyMm1cXHgxYlsxbVwiKSA6IFN0cmluZyxcblx0ZGltOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMm1cIiwgXCJcXHgxYlsyMm1cIiwgXCJcXHgxYlsyMm1cXHgxYlsybVwiKSA6IFN0cmluZyxcblx0aXRhbGljOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbM21cIiwgXCJcXHgxYlsyM21cIikgOiBTdHJpbmcsXG5cdHVuZGVybGluZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzRtXCIsIFwiXFx4MWJbMjRtXCIpIDogU3RyaW5nLFxuXHRpbnZlcnNlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbN21cIiwgXCJcXHgxYlsyN21cIikgOiBTdHJpbmcsXG5cdGhpZGRlbjogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzhtXCIsIFwiXFx4MWJbMjhtXCIpIDogU3RyaW5nLFxuXHRzdHJpa2V0aHJvdWdoOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbOW1cIiwgXCJcXHgxYlsyOW1cIikgOiBTdHJpbmcsXG5cdGJsYWNrOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzBtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRyZWQ6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszMW1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdGdyZWVuOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzJtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHR5ZWxsb3c6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszM21cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdGJsdWU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszNG1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdG1hZ2VudGE6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszNW1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdGN5YW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYlszNm1cIiwgXCJcXHgxYlszOW1cIikgOiBTdHJpbmcsXG5cdHdoaXRlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzdtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRncmF5OiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbOTBtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRiZ0JsYWNrOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDBtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ1JlZDogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQxbVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdHcmVlbjogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQybVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdZZWxsb3c6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0M21cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnQmx1ZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQ0bVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdNYWdlbnRhOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDVtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ0N5YW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0Nm1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnV2hpdGU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0N21cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG59KTtcblxucGljb2NvbG9ycy5leHBvcnRzID0gY3JlYXRlQ29sb3JzKCk7XG5waWNvY29sb3JzLmV4cG9ydHMuY3JlYXRlQ29sb3JzID0gY3JlYXRlQ29sb3JzO1xuXG52YXIgcGljb2NvbG9yc0V4cG9ydHMgPSBwaWNvY29sb3JzLmV4cG9ydHM7XG5jb25zdCBsID0gLypAX19QVVJFX18qL2dldERlZmF1bHRFeHBvcnRGcm9tQ2pzKHBpY29jb2xvcnNFeHBvcnRzKTtcblxuZnVuY3Rpb24geih7b25seUZpcnN0OnQ9ITF9PXt9KXtjb25zdCB1PVtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpO3JldHVybiBuZXcgUmVnRXhwKHUsdD92b2lkIDA6XCJnXCIpfWZ1bmN0aW9uICQodCl7aWYodHlwZW9mIHQhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiB0fVxcYGApO3JldHVybiB0LnJlcGxhY2UoeigpLFwiXCIpfXZhciBtPXt9LEc9e2dldCBleHBvcnRzKCl7cmV0dXJuIG19LHNldCBleHBvcnRzKHQpe209dDt9fTsoZnVuY3Rpb24odCl7dmFyIHU9e307dC5leHBvcnRzPXUsdS5lYXN0QXNpYW5XaWR0aD1mdW5jdGlvbihlKXt2YXIgcz1lLmNoYXJDb2RlQXQoMCksQz1lLmxlbmd0aD09Mj9lLmNoYXJDb2RlQXQoMSk6MCxEPXM7cmV0dXJuIDU1Mjk2PD1zJiZzPD01NjMxOSYmNTYzMjA8PUMmJkM8PTU3MzQzJiYocyY9MTAyMyxDJj0xMDIzLEQ9czw8MTB8QyxEKz02NTUzNiksRD09MTIyODh8fDY1MjgxPD1EJiZEPD02NTM3Nnx8NjU1MDQ8PUQmJkQ8PTY1NTEwP1wiRlwiOkQ9PTgzNjF8fDY1Mzc3PD1EJiZEPD02NTQ3MHx8NjU0NzQ8PUQmJkQ8PTY1NDc5fHw2NTQ4Mjw9RCYmRDw9NjU0ODd8fDY1NDkwPD1EJiZEPD02NTQ5NXx8NjU0OTg8PUQmJkQ8PTY1NTAwfHw2NTUxMjw9RCYmRDw9NjU1MTg/XCJIXCI6NDM1Mjw9RCYmRDw9NDQ0N3x8NDUxNTw9RCYmRDw9NDUxOXx8NDYwMjw9RCYmRDw9NDYwN3x8OTAwMTw9RCYmRDw9OTAwMnx8MTE5MDQ8PUQmJkQ8PTExOTI5fHwxMTkzMTw9RCYmRDw9MTIwMTl8fDEyMDMyPD1EJiZEPD0xMjI0NXx8MTIyNzI8PUQmJkQ8PTEyMjgzfHwxMjI4OTw9RCYmRDw9MTIzNTB8fDEyMzUzPD1EJiZEPD0xMjQzOHx8MTI0NDE8PUQmJkQ8PTEyNTQzfHwxMjU0OTw9RCYmRDw9MTI1ODl8fDEyNTkzPD1EJiZEPD0xMjY4Nnx8MTI2ODg8PUQmJkQ8PTEyNzMwfHwxMjczNjw9RCYmRDw9MTI3NzF8fDEyNzg0PD1EJiZEPD0xMjgzMHx8MTI4MzI8PUQmJkQ8PTEyODcxfHwxMjg4MDw9RCYmRDw9MTMwNTR8fDEzMDU2PD1EJiZEPD0xOTkwM3x8MTk5Njg8PUQmJkQ8PTQyMTI0fHw0MjEyODw9RCYmRDw9NDIxODJ8fDQzMzYwPD1EJiZEPD00MzM4OHx8NDQwMzI8PUQmJkQ8PTU1MjAzfHw1NTIxNjw9RCYmRDw9NTUyMzh8fDU1MjQzPD1EJiZEPD01NTI5MXx8NjM3NDQ8PUQmJkQ8PTY0MjU1fHw2NTA0MDw9RCYmRDw9NjUwNDl8fDY1MDcyPD1EJiZEPD02NTEwNnx8NjUxMDg8PUQmJkQ8PTY1MTI2fHw2NTEyODw9RCYmRDw9NjUxMzF8fDExMDU5Mjw9RCYmRDw9MTEwNTkzfHwxMjc0ODg8PUQmJkQ8PTEyNzQ5MHx8MTI3NTA0PD1EJiZEPD0xMjc1NDZ8fDEyNzU1Mjw9RCYmRDw9MTI3NTYwfHwxMjc1Njg8PUQmJkQ8PTEyNzU2OXx8MTMxMDcyPD1EJiZEPD0xOTQzNjd8fDE3Nzk4NDw9RCYmRDw9MTk2NjA1fHwxOTY2MDg8PUQmJkQ8PTI2MjE0MT9cIldcIjozMjw9RCYmRDw9MTI2fHwxNjI8PUQmJkQ8PTE2M3x8MTY1PD1EJiZEPD0xNjZ8fEQ9PTE3Mnx8RD09MTc1fHwxMDIxNDw9RCYmRDw9MTAyMjF8fDEwNjI5PD1EJiZEPD0xMDYzMD9cIk5hXCI6RD09MTYxfHxEPT0xNjR8fDE2Nzw9RCYmRDw9MTY4fHxEPT0xNzB8fDE3Mzw9RCYmRDw9MTc0fHwxNzY8PUQmJkQ8PTE4MHx8MTgyPD1EJiZEPD0xODZ8fDE4ODw9RCYmRDw9MTkxfHxEPT0xOTh8fEQ9PTIwOHx8MjE1PD1EJiZEPD0yMTZ8fDIyMjw9RCYmRDw9MjI1fHxEPT0yMzB8fDIzMjw9RCYmRDw9MjM0fHwyMzY8PUQmJkQ8PTIzN3x8RD09MjQwfHwyNDI8PUQmJkQ8PTI0M3x8MjQ3PD1EJiZEPD0yNTB8fEQ9PTI1Mnx8RD09MjU0fHxEPT0yNTd8fEQ9PTI3M3x8RD09Mjc1fHxEPT0yODN8fDI5NDw9RCYmRDw9Mjk1fHxEPT0yOTl8fDMwNTw9RCYmRDw9MzA3fHxEPT0zMTJ8fDMxOTw9RCYmRDw9MzIyfHxEPT0zMjR8fDMyODw9RCYmRDw9MzMxfHxEPT0zMzN8fDMzODw9RCYmRDw9MzM5fHwzNTg8PUQmJkQ8PTM1OXx8RD09MzYzfHxEPT00NjJ8fEQ9PTQ2NHx8RD09NDY2fHxEPT00Njh8fEQ9PTQ3MHx8RD09NDcyfHxEPT00NzR8fEQ9PTQ3Nnx8RD09NTkzfHxEPT02MDl8fEQ9PTcwOHx8RD09NzExfHw3MTM8PUQmJkQ8PTcxNXx8RD09NzE3fHxEPT03MjB8fDcyODw9RCYmRDw9NzMxfHxEPT03MzN8fEQ9PTczNXx8NzY4PD1EJiZEPD04Nzl8fDkxMzw9RCYmRDw9OTI5fHw5MzE8PUQmJkQ8PTkzN3x8OTQ1PD1EJiZEPD05NjF8fDk2Mzw9RCYmRDw9OTY5fHxEPT0xMDI1fHwxMDQwPD1EJiZEPD0xMTAzfHxEPT0xMTA1fHxEPT04MjA4fHw4MjExPD1EJiZEPD04MjE0fHw4MjE2PD1EJiZEPD04MjE3fHw4MjIwPD1EJiZEPD04MjIxfHw4MjI0PD1EJiZEPD04MjI2fHw4MjI4PD1EJiZEPD04MjMxfHxEPT04MjQwfHw4MjQyPD1EJiZEPD04MjQzfHxEPT04MjQ1fHxEPT04MjUxfHxEPT04MjU0fHxEPT04MzA4fHxEPT04MzE5fHw4MzIxPD1EJiZEPD04MzI0fHxEPT04MzY0fHxEPT04NDUxfHxEPT04NDUzfHxEPT04NDU3fHxEPT04NDY3fHxEPT04NDcwfHw4NDgxPD1EJiZEPD04NDgyfHxEPT04NDg2fHxEPT04NDkxfHw4NTMxPD1EJiZEPD04NTMyfHw4NTM5PD1EJiZEPD04NTQyfHw4NTQ0PD1EJiZEPD04NTU1fHw4NTYwPD1EJiZEPD04NTY5fHxEPT04NTg1fHw4NTkyPD1EJiZEPD04NjAxfHw4NjMyPD1EJiZEPD04NjMzfHxEPT04NjU4fHxEPT04NjYwfHxEPT04Njc5fHxEPT04NzA0fHw4NzA2PD1EJiZEPD04NzA3fHw4NzExPD1EJiZEPD04NzEyfHxEPT04NzE1fHxEPT04NzE5fHxEPT04NzIxfHxEPT04NzI1fHxEPT04NzMwfHw4NzMzPD1EJiZEPD04NzM2fHxEPT04NzM5fHxEPT04NzQxfHw4NzQzPD1EJiZEPD04NzQ4fHxEPT04NzUwfHw4NzU2PD1EJiZEPD04NzU5fHw4NzY0PD1EJiZEPD04NzY1fHxEPT04Nzc2fHxEPT04NzgwfHxEPT04Nzg2fHw4ODAwPD1EJiZEPD04ODAxfHw4ODA0PD1EJiZEPD04ODA3fHw4ODEwPD1EJiZEPD04ODExfHw4ODE0PD1EJiZEPD04ODE1fHw4ODM0PD1EJiZEPD04ODM1fHw4ODM4PD1EJiZEPD04ODM5fHxEPT04ODUzfHxEPT04ODU3fHxEPT04ODY5fHxEPT04ODk1fHxEPT04OTc4fHw5MzEyPD1EJiZEPD05NDQ5fHw5NDUxPD1EJiZEPD05NTQ3fHw5NTUyPD1EJiZEPD05NTg3fHw5NjAwPD1EJiZEPD05NjE1fHw5NjE4PD1EJiZEPD05NjIxfHw5NjMyPD1EJiZEPD05NjMzfHw5NjM1PD1EJiZEPD05NjQxfHw5NjUwPD1EJiZEPD05NjUxfHw5NjU0PD1EJiZEPD05NjU1fHw5NjYwPD1EJiZEPD05NjYxfHw5NjY0PD1EJiZEPD05NjY1fHw5NjcwPD1EJiZEPD05NjcyfHxEPT05Njc1fHw5Njc4PD1EJiZEPD05NjgxfHw5Njk4PD1EJiZEPD05NzAxfHxEPT05NzExfHw5NzMzPD1EJiZEPD05NzM0fHxEPT05NzM3fHw5NzQyPD1EJiZEPD05NzQzfHw5NzQ4PD1EJiZEPD05NzQ5fHxEPT05NzU2fHxEPT05NzU4fHxEPT05NzkyfHxEPT05Nzk0fHw5ODI0PD1EJiZEPD05ODI1fHw5ODI3PD1EJiZEPD05ODI5fHw5ODMxPD1EJiZEPD05ODM0fHw5ODM2PD1EJiZEPD05ODM3fHxEPT05ODM5fHw5ODg2PD1EJiZEPD05ODg3fHw5OTE4PD1EJiZEPD05OTE5fHw5OTI0PD1EJiZEPD05OTMzfHw5OTM1PD1EJiZEPD05OTUzfHxEPT05OTU1fHw5OTYwPD1EJiZEPD05OTgzfHxEPT0xMDA0NXx8RD09MTAwNzF8fDEwMTAyPD1EJiZEPD0xMDExMXx8MTEwOTM8PUQmJkQ8PTExMDk3fHwxMjg3Mjw9RCYmRDw9MTI4Nzl8fDU3MzQ0PD1EJiZEPD02Mzc0M3x8NjUwMjQ8PUQmJkQ8PTY1MDM5fHxEPT02NTUzM3x8MTI3MjMyPD1EJiZEPD0xMjcyNDJ8fDEyNzI0ODw9RCYmRDw9MTI3Mjc3fHwxMjcyODA8PUQmJkQ8PTEyNzMzN3x8MTI3MzQ0PD1EJiZEPD0xMjczODZ8fDkxNzc2MDw9RCYmRDw9OTE3OTk5fHw5ODMwNDA8PUQmJkQ8PTEwNDg1NzN8fDEwNDg1NzY8PUQmJkQ8PTExMTQxMDk/XCJBXCI6XCJOXCJ9LHUuY2hhcmFjdGVyTGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciBzPXRoaXMuZWFzdEFzaWFuV2lkdGgoZSk7cmV0dXJuIHM9PVwiRlwifHxzPT1cIldcInx8cz09XCJBXCI/MjoxfTtmdW5jdGlvbiBGKGUpe3JldHVybiBlLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFteXFx1RDgwMC1cXHVERkZGXS9nKXx8W119dS5sZW5ndGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciBzPUYoZSksQz0wLEQ9MDtEPHMubGVuZ3RoO0QrKylDPUMrdGhpcy5jaGFyYWN0ZXJMZW5ndGgoc1tEXSk7cmV0dXJuIEN9LHUuc2xpY2U9ZnVuY3Rpb24oZSxzLEMpe3RleHRMZW49dS5sZW5ndGgoZSkscz1zfHwwLEM9Q3x8MSxzPDAmJihzPXRleHRMZW4rcyksQzwwJiYoQz10ZXh0TGVuK0MpO2Zvcih2YXIgRD1cIlwiLGk9MCxvPUYoZSksRT0wO0U8by5sZW5ndGg7RSsrKXt2YXIgYT1vW0VdLG49dS5sZW5ndGgoYSk7aWYoaT49cy0obj09Mj8xOjApKWlmKGkrbjw9QylEKz1hO2Vsc2UgYnJlYWs7aSs9bjt9cmV0dXJuIER9O30pKEcpO2NvbnN0IEs9bTt2YXIgWT1mdW5jdGlvbigpe3JldHVybiAvXFx1RDgzQ1xcdURGRjRcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyKD86XFx1REI0MFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczfFxcdURCNDBcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQjQwXFx1REM2NVxcdURCNDBcXHVEQzZFXFx1REI0MFxcdURDNjcpXFx1REI0MFxcdURDN0Z8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGRlxcdTIwMERcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkZcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGRVxcdTIwMERcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkVcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pfCg/OlxcdUQ4M0VcXHVEREQxXFx1RDgzQ1xcdURGRkRcXHUyMDBEXFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMXxcXHVEODNEXFx1REM2OVxcdUQ4M0NcXHVERkZEXFx1MjAwRFxcdUQ4M0VcXHVERDFEXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKSkoPzpcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKXwoPzpcXHVEODNFXFx1REREMVxcdUQ4M0NcXHVERkZDXFx1MjAwRFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDF8XFx1RDgzRFxcdURDNjlcXHVEODNDXFx1REZGQ1xcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMEQoPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpKD86XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8KD86XFx1RDgzRVxcdURERDFcXHVEODNDXFx1REZGQlxcdTIwMERcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxfFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1RDgzRVxcdUREMURcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pKSg/OlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSl8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDXFx1REZGQig/OlxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKXxcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSl8W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSkpP3woPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pXFx1MjAwRFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpfFxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQoPzpcXHVEODNEXFx1REM2NlxcdTIwMERcXHVEODNEXFx1REM2NnxcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSkpfFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZFXFx1MjAwRCg/OlxcdUQ4M0VcXHVERDFEXFx1MjAwRFxcdUQ4M0RcXHVEQzY4KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OCg/OlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjgoPzpcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfCg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZFXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZEXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZDXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSlcXHVGRTBGfFxcdTIwMEQoPzooPzpcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNDXFx1REZGRnxcXHVEODNDXFx1REZGRXxcXHVEODNDXFx1REZGRHxcXHVEODNDXFx1REZGQyk/fCg/OlxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkJcXHUyMDBEXFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXwoPzpcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pXFx1MjAwRFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpfFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMERcXHVEODNFXFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKSl8XFx1RDgzRFxcdURDNjkoPzpcXHUyMDBEKD86XFx1Mjc2NFxcdUZFMEZcXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pfFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZGXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKXxcXHVEODNDXFx1REZGRFxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0NcXHVERkZDXFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0VbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdKSl8XFx1RDgzRVxcdURERDEoPzpcXHUyMDBEKD86XFx1RDgzRVxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkZcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkVcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkRcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkNcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQ1xcdURGRkJcXHUyMDBEKD86XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSkpfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNEXFx1REM2OVxcdTIwMERcXHVEODNEXFx1REM2N1xcdTIwMEQoPzpcXHVEODNEW1xcdURDNjZcXHVEQzY3XSl8KD86XFx1RDgzRFxcdURDNDFcXHVGRTBGXFx1MjAwRFxcdUQ4M0RcXHVEREU4fFxcdUQ4M0VcXHVEREQxKD86XFx1RDgzQ1xcdURGRkZcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkVcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkRcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkNcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzQ1xcdURGRkJcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdKXxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NcXHVERkZGXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZFXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZEXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZDXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdUQ4M0NcXHVERkZCXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSl8XFx1RDgzRFxcdURFMzZcXHUyMDBEXFx1RDgzQ1xcdURGMkJ8XFx1RDgzQ1xcdURGRjNcXHVGRTBGXFx1MjAwRFxcdTI2QTd8XFx1RDgzRFxcdURDM0JcXHUyMDBEXFx1Mjc0NHwoPzooPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml18XFx1RDgzQ1xcdURGRjRcXHUyMDBEXFx1MjYyMHwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzRFxcdUREM0VcXHVEREI4XFx1RERCOVxcdUREQ0QtXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKVxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfFtcXHhBOVxceEFFXFx1MjAzQ1xcdTIwNDlcXHUyMTIyXFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxQTlcXHUyMUFBXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2OTJcXHUyNjk0LVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBN1xcdTI2QjBcXHUyNkIxXFx1MjZDOFxcdTI2Q0ZcXHUyNkQxXFx1MjZEM1xcdTI2RTlcXHUyNkYwXFx1MjZGMVxcdTI2RjRcXHUyNkY3XFx1MjZGOFxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzYzXFx1MjdBMVxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MzAzMFxcdTMwM0RcXHUzMjk3XFx1MzI5OV18XFx1RDgzQ1tcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REUwMlxcdURFMzdcXHVERjIxXFx1REYyNC1cXHVERjJDXFx1REYzNlxcdURGN0RcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUVcXHVERjlGXFx1REZDRFxcdURGQ0VcXHVERkQ0LVxcdURGREZcXHVERkY1XFx1REZGN118XFx1RDgzRFtcXHVEQzNGXFx1RENGRFxcdURENDlcXHVERDRBXFx1REQ2RlxcdURENzBcXHVERDczXFx1REQ3Ni1cXHVERDc5XFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREQTVcXHVEREE4XFx1RERCMVxcdUREQjJcXHVEREJDXFx1RERDMi1cXHVEREM0XFx1REREMS1cXHVEREQzXFx1REREQy1cXHVERERFXFx1RERFMVxcdURERTNcXHVEREU4XFx1RERFRlxcdURERjNcXHVEREZBXFx1REVDQlxcdURFQ0QtXFx1REVDRlxcdURFRTAtXFx1REVFNVxcdURFRTlcXHVERUYwXFx1REVGM10pXFx1RkUwRnxcXHVEODNDXFx1REZGM1xcdUZFMEZcXHUyMDBEXFx1RDgzQ1xcdURGMDh8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjd8XFx1RDgzRFxcdURDNjlcXHUyMDBEXFx1RDgzRFxcdURDNjZ8XFx1RDgzRFxcdURFMzVcXHUyMDBEXFx1RDgzRFxcdURDQUJ8XFx1RDgzRFxcdURFMkVcXHUyMDBEXFx1RDgzRFxcdURDQTh8XFx1RDgzRFxcdURDMTVcXHUyMDBEXFx1RDgzRVxcdUREQkF8XFx1RDgzRVxcdURERDEoPzpcXHVEODNDXFx1REZGRnxcXHVEODNDXFx1REZGRXxcXHVEODNDXFx1REZGRHxcXHVEODNDXFx1REZGQ3xcXHVEODNDXFx1REZGQik/fFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1xcdURGRkZ8XFx1RDgzQ1xcdURGRkV8XFx1RDgzQ1xcdURGRkR8XFx1RDgzQ1xcdURGRkN8XFx1RDgzQ1xcdURGRkIpP3xcXHVEODNDXFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdUQ4M0NcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RDgzQ1xcdURERjRcXHVEODNDXFx1RERGMnxcXHVEODNEXFx1REMwOFxcdTIwMERcXHUyQjFCfFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVERDI1fFxcdUQ4M0VcXHVERTc5KXxcXHVEODNEXFx1REM0MVxcdUZFMEZ8XFx1RDgzQ1xcdURGRjNcXHVGRTBGfFxcdUQ4M0NcXHVEREZGKD86XFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdKXxcXHVEODNDXFx1RERGRSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjldKXxcXHVEODNDXFx1RERGQyg/OlxcdUQ4M0NbXFx1RERFQlxcdURERjhdKXxcXHVEODNDXFx1RERGQig/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV0pfFxcdUQ4M0NcXHVEREZBKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERjkoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXSl8XFx1RDgzQ1xcdURERjgoPzpcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdKXxcXHVEODNDXFx1RERGNyg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdKXxcXHVEODNDXFx1RERGNSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERjMoPzpcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFQS1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREY0XFx1RERGNVxcdURERjdcXHVEREZBXFx1RERGRl0pfFxcdUQ4M0NcXHVEREYyKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOC1cXHVEREVEXFx1RERGMC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERjEoPzpcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV0pfFxcdUQ4M0NcXHVEREYwKD86XFx1RDgzQ1tcXHVEREVBXFx1RERFQy1cXHVEREVFXFx1RERGMlxcdURERjNcXHVEREY1XFx1RERGN1xcdURERkNcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVGKD86XFx1RDgzQ1tcXHVEREVBXFx1RERGMlxcdURERjRcXHVEREY1XSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREVEKD86XFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdKXxcXHVEODNDXFx1RERFQyg/OlxcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUVcXHVEREYxLVxcdURERjNcXHVEREY1LVxcdURERkFcXHVEREZDXFx1RERGRV0pfFxcdUQ4M0NcXHVEREVCKD86XFx1RDgzQ1tcXHVEREVFLVxcdURERjBcXHVEREYyXFx1RERGNFxcdURERjddKXxcXHVEODNDXFx1RERFQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdKXxcXHVEODNDXFx1RERFOSg/OlxcdUQ4M0NbXFx1RERFQVxcdURERUNcXHVEREVGXFx1RERGMFxcdURERjJcXHVEREY0XFx1RERGRl0pfFxcdUQ4M0NcXHVEREU4KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXSl8XFx1RDgzQ1xcdURERTcoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8WyNcXCowLTldXFx1RkUwRlxcdTIwRTN8XFx1Mjc2NFxcdUZFMEZ8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzBcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNVxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENELVxcdUREQ0ZcXHVEREQ0XFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFxcdUQ4M0NcXHVERkY0fCg/OltcXHUyNzBBXFx1MjcwQl18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM0XFx1REQzNlxcdURENzdcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyXFx1REREM1xcdURERDVdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTI2MURcXHUyNzBDXFx1MjcwRF18XFx1RDgzRFtcXHVERDc0XFx1REQ5MF0pKD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pfFtcXHUyNzBBXFx1MjcwQl18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REMwOFxcdURDMTVcXHVEQzNCXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNkItXFx1REM2RFxcdURDNzJcXHVEQzc0LVxcdURDNzZcXHVEQzc4XFx1REM3Q1xcdURDODNcXHVEQzg1XFx1REM4RlxcdURDOTFcXHVEQ0FBXFx1REQ3QVxcdUREOTVcXHVERDk2XFx1REUyRVxcdURFMzVcXHVERTM2XFx1REU0Q1xcdURFNEZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQzMC1cXHVERDM0XFx1REQzNlxcdURENzdcXHVEREI1XFx1RERCNlxcdUREQkJcXHVEREQyXFx1REREM1xcdURERDVdfFxcdUQ4M0NbXFx1REZDM1xcdURGQzRcXHVERkNBXXxcXHVEODNEW1xcdURDNkVcXHVEQzcwXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF18XFx1RDgzRFxcdURDNkZ8XFx1RDgzRVtcXHVERDNDXFx1RERERVxcdUREREZdfFtcXHUyMzFBXFx1MjMxQlxcdTIzRTktXFx1MjNFQ1xcdTIzRjBcXHUyM0YzXFx1MjVGRFxcdTI1RkVcXHUyNjE0XFx1MjYxNVxcdTI2NDgtXFx1MjY1M1xcdTI2N0ZcXHUyNjkzXFx1MjZBMVxcdTI2QUFcXHUyNkFCXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RjJcXHUyNkYzXFx1MjZGNVxcdTI2RkFcXHUyNkZEXFx1MjcwNVxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVdfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGN0NcXHVERjdFLVxcdURGODRcXHVERjg2LVxcdURGOTNcXHVERkEwLVxcdURGQzFcXHVERkM1XFx1REZDNlxcdURGQzhcXHVERkM5XFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGOC1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1REMwN1xcdURDMDktXFx1REMxNFxcdURDMTYtXFx1REMzQVxcdURDM0MtXFx1REMzRVxcdURDNDBcXHVEQzQ0XFx1REM0NVxcdURDNTEtXFx1REM2NVxcdURDNkFcXHVEQzc5LVxcdURDN0JcXHVEQzdELVxcdURDODBcXHVEQzg0XFx1REM4OC1cXHVEQzhFXFx1REM5MFxcdURDOTItXFx1RENBOVxcdURDQUItXFx1RENGQ1xcdURDRkYtXFx1REQzRFxcdURENEItXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdUREQTRcXHVEREZCLVxcdURFMkRcXHVERTJGLVxcdURFMzRcXHVERTM3LVxcdURFNDRcXHVERTQ4LVxcdURFNEFcXHVERTgwLVxcdURFQTJcXHVERUE0LVxcdURFQjNcXHVERUI3LVxcdURFQkZcXHVERUMxLVxcdURFQzVcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMURcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OFxcdUREN0EtXFx1RERCNFxcdUREQjdcXHVEREJBXFx1RERCQy1cXHVERENCXFx1REREMFxcdURERTAtXFx1RERGRlxcdURFNzAtXFx1REU3NFxcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4NlxcdURFOTAtXFx1REVBOFxcdURFQjAtXFx1REVCNlxcdURFQzAtXFx1REVDMlxcdURFRDAtXFx1REVENl18KD86W1xcdTIzMUFcXHUyMzFCXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjVGRVxcdTI2MTRcXHUyNjE1XFx1MjY0OC1cXHUyNjUzXFx1MjY3RlxcdTI2OTNcXHUyNkExXFx1MjZBQVxcdTI2QUJcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGMlxcdTI2RjNcXHUyNkY1XFx1MjZGQVxcdTI2RkRcXHUyNzA1XFx1MjcwQVxcdTI3MEJcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzU3XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjFCXFx1MkIxQ1xcdTJCNTBcXHUyQjU1XXxcXHVEODNDW1xcdURDMDRcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjkzXFx1REZBMC1cXHVERkNBXFx1REZDRi1cXHVERkQzXFx1REZFMC1cXHVERkYwXFx1REZGNFxcdURGRjgtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURDM0VcXHVEQzQwXFx1REM0Mi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1REQ3QVxcdUREOTVcXHVERDk2XFx1RERBNFxcdURERkItXFx1REU0RlxcdURFODAtXFx1REVDNVxcdURFQ0NcXHVERUQwLVxcdURFRDJcXHVERUQ1LVxcdURFRDdcXHVERUVCXFx1REVFQ1xcdURFRjQtXFx1REVGQ1xcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBDLVxcdUREM0FcXHVERDNDLVxcdURENDVcXHVERDQ3LVxcdURENzhcXHVERDdBLVxcdUREQ0JcXHVERENELVxcdURERkZcXHVERTcwLVxcdURFNzRcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODZcXHVERTkwLVxcdURFQThcXHVERUIwLVxcdURFQjZcXHVERUMwLVxcdURFQzJcXHVERUQwLVxcdURFRDZdKXwoPzpbI1xcKjAtOVxceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFOS1cXHUyM0YzXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCLVxcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MURcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyLVxcdTI2OTdcXHUyNjk5XFx1MjY5QlxcdTI2OUNcXHUyNkEwXFx1MjZBMVxcdTI2QTdcXHUyNkFBXFx1MjZBQlxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2QzhcXHUyNkNFXFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZENFxcdTI2RTlcXHUyNkVBXFx1MjZGMC1cXHUyNkY1XFx1MjZGNy1cXHUyNkZBXFx1MjZGRFxcdTI3MDJcXHUyNzA1XFx1MjcwOC1cXHUyNzBEXFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzXFx1Mjc2NFxcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTAyXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMVxcdURGMjQtXFx1REY5M1xcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RS1cXHVERkYwXFx1REZGMy1cXHVERkY1XFx1REZGNy1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1RENGRFxcdURDRkYtXFx1REQzRFxcdURENDktXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdURENkZcXHVERDcwXFx1REQ3My1cXHVERDdBXFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREOTBcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQS1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQi1cXHVERUQyXFx1REVENS1cXHVERUQ3XFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRUJcXHVERUVDXFx1REVGMFxcdURFRjMtXFx1REVGQ1xcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVERDBDLVxcdUREM0FcXHVERDNDLVxcdURENDVcXHVERDQ3LVxcdURENzhcXHVERDdBLVxcdUREQ0JcXHVERENELVxcdURERkZcXHVERTcwLVxcdURFNzRcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODZcXHVERTkwLVxcdURFQThcXHVERUIwLVxcdURFQjZcXHVERUMwLVxcdURFQzJcXHVERUQwLVxcdURFRDZdKVxcdUZFMEZ8KD86W1xcdTI2MURcXHUyNkY5XFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyLVxcdURGQzRcXHVERkM3XFx1REZDQS1cXHVERkNDXXxcXHVEODNEW1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2Ni1cXHVEQzc4XFx1REM3Q1xcdURDODEtXFx1REM4M1xcdURDODUtXFx1REM4N1xcdURDOEZcXHVEQzkxXFx1RENBQVxcdURENzRcXHVERDc1XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNDUtXFx1REU0N1xcdURFNEItXFx1REU0RlxcdURFQTNcXHVERUI0LVxcdURFQjZcXHVERUMwXFx1REVDQ118XFx1RDgzRVtcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMjZcXHVERDMwLVxcdUREMzlcXHVERDNDLVxcdUREM0VcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREI4XFx1RERCOVxcdUREQkJcXHVERENELVxcdUREQ0ZcXHVEREQxLVxcdURERERdKS9nfTtmdW5jdGlvbiBjKHQsdT17fSl7aWYodHlwZW9mIHQhPVwic3RyaW5nXCJ8fHQubGVuZ3RoPT09MHx8KHU9e2FtYmlndW91c0lzTmFycm93OiEwLC4uLnV9LHQ9JCh0KSx0Lmxlbmd0aD09PTApKXJldHVybiAwO3Q9dC5yZXBsYWNlKFkoKSxcIiAgXCIpO2NvbnN0IEY9dS5hbWJpZ3VvdXNJc05hcnJvdz8xOjI7bGV0IGU9MDtmb3IoY29uc3QgcyBvZiB0KXtjb25zdCBDPXMuY29kZVBvaW50QXQoMCk7aWYoQzw9MzF8fEM+PTEyNyYmQzw9MTU5fHxDPj03NjgmJkM8PTg3OSljb250aW51ZTtzd2l0Y2goSy5lYXN0QXNpYW5XaWR0aChzKSl7Y2FzZVwiRlwiOmNhc2VcIldcIjplKz0yO2JyZWFrO2Nhc2VcIkFcIjplKz1GO2JyZWFrO2RlZmF1bHQ6ZSs9MTt9fXJldHVybiBlfWNvbnN0IHY9MTAsTD0odD0wKT0+dT0+YFxceDFCWyR7dSt0fW1gLE09KHQ9MCk9PnU9PmBcXHgxQlskezM4K3R9OzU7JHt1fW1gLFQ9KHQ9MCk9Pih1LEYsZSk9PmBcXHgxQlskezM4K3R9OzI7JHt1fTske0Z9OyR7ZX1tYCxyPXttb2RpZmllcjp7cmVzZXQ6WzAsMF0sYm9sZDpbMSwyMl0sZGltOlsyLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0sb3ZlcmxpbmU6WzUzLDU1XSxpbnZlcnNlOls3LDI3XSxoaWRkZW46WzgsMjhdLHN0cmlrZXRocm91Z2g6WzksMjldfSxjb2xvcjp7YmxhY2s6WzMwLDM5XSxyZWQ6WzMxLDM5XSxncmVlbjpbMzIsMzldLHllbGxvdzpbMzMsMzldLGJsdWU6WzM0LDM5XSxtYWdlbnRhOlszNSwzOV0sY3lhbjpbMzYsMzldLHdoaXRlOlszNywzOV0sYmxhY2tCcmlnaHQ6WzkwLDM5XSxncmF5Ols5MCwzOV0sZ3JleTpbOTAsMzldLHJlZEJyaWdodDpbOTEsMzldLGdyZWVuQnJpZ2h0Ols5MiwzOV0seWVsbG93QnJpZ2h0Ols5MywzOV0sYmx1ZUJyaWdodDpbOTQsMzldLG1hZ2VudGFCcmlnaHQ6Wzk1LDM5XSxjeWFuQnJpZ2h0Ols5NiwzOV0sd2hpdGVCcmlnaHQ6Wzk3LDM5XX0sYmdDb2xvcjp7YmdCbGFjazpbNDAsNDldLGJnUmVkOls0MSw0OV0sYmdHcmVlbjpbNDIsNDldLGJnWWVsbG93Ols0Myw0OV0sYmdCbHVlOls0NCw0OV0sYmdNYWdlbnRhOls0NSw0OV0sYmdDeWFuOls0Niw0OV0sYmdXaGl0ZTpbNDcsNDldLGJnQmxhY2tCcmlnaHQ6WzEwMCw0OV0sYmdHcmF5OlsxMDAsNDldLGJnR3JleTpbMTAwLDQ5XSxiZ1JlZEJyaWdodDpbMTAxLDQ5XSxiZ0dyZWVuQnJpZ2h0OlsxMDIsNDldLGJnWWVsbG93QnJpZ2h0OlsxMDMsNDldLGJnQmx1ZUJyaWdodDpbMTA0LDQ5XSxiZ01hZ2VudGFCcmlnaHQ6WzEwNSw0OV0sYmdDeWFuQnJpZ2h0OlsxMDYsNDldLGJnV2hpdGVCcmlnaHQ6WzEwNyw0OV19fTtPYmplY3Qua2V5cyhyLm1vZGlmaWVyKTtjb25zdCBaPU9iamVjdC5rZXlzKHIuY29sb3IpLEg9T2JqZWN0LmtleXMoci5iZ0NvbG9yKTtbLi4uWiwuLi5IXTtmdW5jdGlvbiBVKCl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdFt1LEZdb2YgT2JqZWN0LmVudHJpZXMocikpe2Zvcihjb25zdFtlLHNdb2YgT2JqZWN0LmVudHJpZXMoRikpcltlXT17b3BlbjpgXFx4MUJbJHtzWzBdfW1gLGNsb3NlOmBcXHgxQlske3NbMV19bWB9LEZbZV09cltlXSx0LnNldChzWzBdLHNbMV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHUse3ZhbHVlOkYsZW51bWVyYWJsZTohMX0pO31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJjb2Rlc1wiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITF9KSxyLmNvbG9yLmNsb3NlPVwiXFx4MUJbMzltXCIsci5iZ0NvbG9yLmNsb3NlPVwiXFx4MUJbNDltXCIsci5jb2xvci5hbnNpPUwoKSxyLmNvbG9yLmFuc2kyNTY9TSgpLHIuY29sb3IuYW5zaTE2bT1UKCksci5iZ0NvbG9yLmFuc2k9TCh2KSxyLmJnQ29sb3IuYW5zaTI1Nj1NKHYpLHIuYmdDb2xvci5hbnNpMTZtPVQodiksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocix7cmdiVG9BbnNpMjU2Ont2YWx1ZToodSxGLGUpPT51PT09RiYmRj09PWU/dTw4PzE2OnU+MjQ4PzIzMTpNYXRoLnJvdW5kKCh1LTgpLzI0NyoyNCkrMjMyOjE2KzM2Kk1hdGgucm91bmQodS8yNTUqNSkrNipNYXRoLnJvdW5kKEYvMjU1KjUpK01hdGgucm91bmQoZS8yNTUqNSksZW51bWVyYWJsZTohMX0saGV4VG9SZ2I6e3ZhbHVlOnU9Pntjb25zdCBGPS9bYS1mXFxkXXs2fXxbYS1mXFxkXXszfS9pLmV4ZWModS50b1N0cmluZygxNikpO2lmKCFGKXJldHVybiBbMCwwLDBdO2xldFtlXT1GO2UubGVuZ3RoPT09MyYmKGU9Wy4uLmVdLm1hcChDPT5DK0MpLmpvaW4oXCJcIikpO2NvbnN0IHM9TnVtYmVyLnBhcnNlSW50KGUsMTYpO3JldHVybiBbcz4+MTYmMjU1LHM+PjgmMjU1LHMmMjU1XX0sZW51bWVyYWJsZTohMX0saGV4VG9BbnNpMjU2Ont2YWx1ZTp1PT5yLnJnYlRvQW5zaTI1NiguLi5yLmhleFRvUmdiKHUpKSxlbnVtZXJhYmxlOiExfSxhbnNpMjU2VG9BbnNpOnt2YWx1ZTp1PT57aWYodTw4KXJldHVybiAzMCt1O2lmKHU8MTYpcmV0dXJuIDkwKyh1LTgpO2xldCBGLGUscztpZih1Pj0yMzIpRj0oKHUtMjMyKSoxMCs4KS8yNTUsZT1GLHM9RjtlbHNlIHt1LT0xNjtjb25zdCBpPXUlMzY7Rj1NYXRoLmZsb29yKHUvMzYpLzUsZT1NYXRoLmZsb29yKGkvNikvNSxzPWklNi81O31jb25zdCBDPU1hdGgubWF4KEYsZSxzKSoyO2lmKEM9PT0wKXJldHVybiAzMDtsZXQgRD0zMCsoTWF0aC5yb3VuZChzKTw8MnxNYXRoLnJvdW5kKGUpPDwxfE1hdGgucm91bmQoRikpO3JldHVybiBDPT09MiYmKEQrPTYwKSxEfSxlbnVtZXJhYmxlOiExfSxyZ2JUb0Fuc2k6e3ZhbHVlOih1LEYsZSk9PnIuYW5zaTI1NlRvQW5zaShyLnJnYlRvQW5zaTI1Nih1LEYsZSkpLGVudW1lcmFibGU6ITF9LGhleFRvQW5zaTp7dmFsdWU6dT0+ci5hbnNpMjU2VG9BbnNpKHIuaGV4VG9BbnNpMjU2KHUpKSxlbnVtZXJhYmxlOiExfX0pLHJ9Y29uc3QgcT1VKCkscD1uZXcgU2V0KFtcIlxceDFCXCIsXCJcXHg5QlwiXSksSj0zOSxiPVwiXFx4MDdcIixXPVwiW1wiLFE9XCJdXCIsST1cIm1cIix3PWAke1F9ODs7YCxOPXQ9PmAke3AudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7V30ke3R9JHtJfWAsaj10PT5gJHtwLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke3d9JHt0fSR7Yn1gLFg9dD0+dC5zcGxpdChcIiBcIikubWFwKHU9PmModSkpLF89KHQsdSxGKT0+e2NvbnN0IGU9Wy4uLnVdO2xldCBzPSExLEM9ITEsRD1jKCQodFt0Lmxlbmd0aC0xXSkpO2Zvcihjb25zdFtpLG9db2YgZS5lbnRyaWVzKCkpe2NvbnN0IEU9YyhvKTtpZihEK0U8PUY/dFt0Lmxlbmd0aC0xXSs9bzoodC5wdXNoKG8pLEQ9MCkscC5oYXMobykmJihzPSEwLEM9ZS5zbGljZShpKzEpLmpvaW4oXCJcIikuc3RhcnRzV2l0aCh3KSkscyl7Qz9vPT09YiYmKHM9ITEsQz0hMSk6bz09PUkmJihzPSExKTtjb250aW51ZX1EKz1FLEQ9PT1GJiZpPGUubGVuZ3RoLTEmJih0LnB1c2goXCJcIiksRD0wKTt9IUQmJnRbdC5sZW5ndGgtMV0ubGVuZ3RoPjAmJnQubGVuZ3RoPjEmJih0W3QubGVuZ3RoLTJdKz10LnBvcCgpKTt9LEREPXQ9Pntjb25zdCB1PXQuc3BsaXQoXCIgXCIpO2xldCBGPXUubGVuZ3RoO2Zvcig7Rj4wJiYhKGModVtGLTFdKT4wKTspRi0tO3JldHVybiBGPT09dS5sZW5ndGg/dDp1LnNsaWNlKDAsRikuam9pbihcIiBcIikrdS5zbGljZShGKS5qb2luKFwiXCIpfSx1RD0odCx1LEY9e30pPT57aWYoRi50cmltIT09ITEmJnQudHJpbSgpPT09XCJcIilyZXR1cm4gXCJcIjtsZXQgZT1cIlwiLHMsQztjb25zdCBEPVgodCk7bGV0IGk9W1wiXCJdO2Zvcihjb25zdFtFLGFdb2YgdC5zcGxpdChcIiBcIikuZW50cmllcygpKXtGLnRyaW0hPT0hMSYmKGlbaS5sZW5ndGgtMV09aVtpLmxlbmd0aC0xXS50cmltU3RhcnQoKSk7bGV0IG49YyhpW2kubGVuZ3RoLTFdKTtpZihFIT09MCYmKG4+PXUmJihGLndvcmRXcmFwPT09ITF8fEYudHJpbT09PSExKSYmKGkucHVzaChcIlwiKSxuPTApLChuPjB8fEYudHJpbT09PSExKSYmKGlbaS5sZW5ndGgtMV0rPVwiIFwiLG4rKykpLEYuaGFyZCYmRFtFXT51KXtjb25zdCBCPXUtbixBPTErTWF0aC5mbG9vcigoRFtFXS1CLTEpL3UpO01hdGguZmxvb3IoKERbRV0tMSkvdSk8QSYmaS5wdXNoKFwiXCIpLF8oaSxhLHUpO2NvbnRpbnVlfWlmKG4rRFtFXT51JiZuPjAmJkRbRV0+MCl7aWYoRi53b3JkV3JhcD09PSExJiZuPHUpe18oaSxhLHUpO2NvbnRpbnVlfWkucHVzaChcIlwiKTt9aWYobitEW0VdPnUmJkYud29yZFdyYXA9PT0hMSl7XyhpLGEsdSk7Y29udGludWV9aVtpLmxlbmd0aC0xXSs9YTt9Ri50cmltIT09ITEmJihpPWkubWFwKEU9PkREKEUpKSk7Y29uc3Qgbz1bLi4uaS5qb2luKGBcbmApXTtmb3IoY29uc3RbRSxhXW9mIG8uZW50cmllcygpKXtpZihlKz1hLHAuaGFzKGEpKXtjb25zdHtncm91cHM6Qn09bmV3IFJlZ0V4cChgKD86XFxcXCR7V30oPzxjb2RlPlxcXFxkKyltfFxcXFwke3d9KD88dXJpPi4qKSR7Yn0pYCkuZXhlYyhvLnNsaWNlKEUpLmpvaW4oXCJcIikpfHx7Z3JvdXBzOnt9fTtpZihCLmNvZGUhPT12b2lkIDApe2NvbnN0IEE9TnVtYmVyLnBhcnNlRmxvYXQoQi5jb2RlKTtzPUE9PT1KP3ZvaWQgMDpBO31lbHNlIEIudXJpIT09dm9pZCAwJiYoQz1CLnVyaS5sZW5ndGg9PT0wP3ZvaWQgMDpCLnVyaSk7fWNvbnN0IG49cS5jb2Rlcy5nZXQoTnVtYmVyKHMpKTtvW0UrMV09PT1gXG5gPyhDJiYoZSs9aihcIlwiKSkscyYmbiYmKGUrPU4obikpKTphPT09YFxuYCYmKHMmJm4mJihlKz1OKHMpKSxDJiYoZSs9aihDKSkpO31yZXR1cm4gZX07ZnVuY3Rpb24gUCh0LHUsRil7cmV0dXJuIFN0cmluZyh0KS5ub3JtYWxpemUoKS5yZXBsYWNlKC9cXHJcXG4vZyxgXG5gKS5zcGxpdChgXG5gKS5tYXAoZT0+dUQoZSx1LEYpKS5qb2luKGBcbmApfWZ1bmN0aW9uIEZEKHQsdSl7aWYodD09PXUpcmV0dXJuO2NvbnN0IEY9dC5zcGxpdChgXG5gKSxlPXUuc3BsaXQoYFxuYCkscz1bXTtmb3IobGV0IEM9MDtDPE1hdGgubWF4KEYubGVuZ3RoLGUubGVuZ3RoKTtDKyspRltDXSE9PWVbQ10mJnMucHVzaChDKTtyZXR1cm4gc31jb25zdCBSPVN5bWJvbChcImNsYWNrOmNhbmNlbFwiKTtmdW5jdGlvbiBnKHQsdSl7dC5pc1RUWSYmdC5zZXRSYXdNb2RlKHUpO31jb25zdCBWPW5ldyBNYXAoW1tcImtcIixcInVwXCJdLFtcImpcIixcImRvd25cIl0sW1wiaFwiLFwibGVmdFwiXSxbXCJsXCIsXCJyaWdodFwiXV0pLHREPW5ldyBTZXQoW1widXBcIixcImRvd25cIixcImxlZnRcIixcInJpZ2h0XCIsXCJzcGFjZVwiLFwiZW50ZXJcIl0pO2NsYXNzIGh7Y29uc3RydWN0b3Ioe3JlbmRlcjp1LGlucHV0OkY9c3RkaW4sb3V0cHV0OmU9c3Rkb3V0LC4uLnN9LEM9ITApe3RoaXMuX3RyYWNrPSExLHRoaXMuX2N1cnNvcj0wLHRoaXMuc3RhdGU9XCJpbml0aWFsXCIsdGhpcy5lcnJvcj1cIlwiLHRoaXMuc3Vic2NyaWJlcnM9bmV3IE1hcCx0aGlzLl9wcmV2RnJhbWU9XCJcIix0aGlzLm9wdHM9cyx0aGlzLm9uS2V5cHJlc3M9dGhpcy5vbktleXByZXNzLmJpbmQodGhpcyksdGhpcy5jbG9zZT10aGlzLmNsb3NlLmJpbmQodGhpcyksdGhpcy5yZW5kZXI9dGhpcy5yZW5kZXIuYmluZCh0aGlzKSx0aGlzLl9yZW5kZXI9dS5iaW5kKHRoaXMpLHRoaXMuX3RyYWNrPUMsdGhpcy5pbnB1dD1GLHRoaXMub3V0cHV0PWU7fXByb21wdCgpe2NvbnN0IHU9bmV3IFdyaXRlU3RyZWFtKDApO3JldHVybiB1Ll93cml0ZT0oRixlLHMpPT57dGhpcy5fdHJhY2smJih0aGlzLnZhbHVlPXRoaXMucmwubGluZS5yZXBsYWNlKC9cXHQvZyxcIlwiKSx0aGlzLl9jdXJzb3I9dGhpcy5ybC5jdXJzb3IsdGhpcy5lbWl0KFwidmFsdWVcIix0aGlzLnZhbHVlKSkscygpO30sdGhpcy5pbnB1dC5waXBlKHUpLHRoaXMucmw9Zi5jcmVhdGVJbnRlcmZhY2Uoe2lucHV0OnRoaXMuaW5wdXQsb3V0cHV0OnUsdGFiU2l6ZToyLHByb21wdDpcIlwiLGVzY2FwZUNvZGVUaW1lb3V0OjUwfSksZi5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbnB1dCx0aGlzLnJsKSx0aGlzLnJsLnByb21wdCgpLHRoaXMub3B0cy5pbml0aWFsVmFsdWUhPT12b2lkIDAmJnRoaXMuX3RyYWNrJiZ0aGlzLnJsLndyaXRlKHRoaXMub3B0cy5pbml0aWFsVmFsdWUpLHRoaXMuaW5wdXQub24oXCJrZXlwcmVzc1wiLHRoaXMub25LZXlwcmVzcyksZyh0aGlzLmlucHV0LCEwKSx0aGlzLm91dHB1dC5vbihcInJlc2l6ZVwiLHRoaXMucmVuZGVyKSx0aGlzLnJlbmRlcigpLG5ldyBQcm9taXNlKChGLGUpPT57dGhpcy5vbmNlKFwic3VibWl0XCIsKCk9Pnt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLnNob3cpLHRoaXMub3V0cHV0Lm9mZihcInJlc2l6ZVwiLHRoaXMucmVuZGVyKSxnKHRoaXMuaW5wdXQsITEpLEYodGhpcy52YWx1ZSk7fSksdGhpcy5vbmNlKFwiY2FuY2VsXCIsKCk9Pnt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLnNob3cpLHRoaXMub3V0cHV0Lm9mZihcInJlc2l6ZVwiLHRoaXMucmVuZGVyKSxnKHRoaXMuaW5wdXQsITEpLEYoUik7fSk7fSl9b24odSxGKXtjb25zdCBlPXRoaXMuc3Vic2NyaWJlcnMuZ2V0KHUpPz9bXTtlLnB1c2goe2NiOkZ9KSx0aGlzLnN1YnNjcmliZXJzLnNldCh1LGUpO31vbmNlKHUsRil7Y29uc3QgZT10aGlzLnN1YnNjcmliZXJzLmdldCh1KT8/W107ZS5wdXNoKHtjYjpGLG9uY2U6ITB9KSx0aGlzLnN1YnNjcmliZXJzLnNldCh1LGUpO31lbWl0KHUsLi4uRil7Y29uc3QgZT10aGlzLnN1YnNjcmliZXJzLmdldCh1KT8/W10scz1bXTtmb3IoY29uc3QgQyBvZiBlKUMuY2IoLi4uRiksQy5vbmNlJiZzLnB1c2goKCk9PmUuc3BsaWNlKGUuaW5kZXhPZihDKSwxKSk7Zm9yKGNvbnN0IEMgb2YgcylDKCk7fXVuc3Vic2NyaWJlKCl7dGhpcy5zdWJzY3JpYmVycy5jbGVhcigpO31vbktleXByZXNzKHUsRil7aWYodGhpcy5zdGF0ZT09PVwiZXJyb3JcIiYmKHRoaXMuc3RhdGU9XCJhY3RpdmVcIiksRj8ubmFtZSYmIXRoaXMuX3RyYWNrJiZWLmhhcyhGLm5hbWUpJiZ0aGlzLmVtaXQoXCJjdXJzb3JcIixWLmdldChGLm5hbWUpKSxGPy5uYW1lJiZ0RC5oYXMoRi5uYW1lKSYmdGhpcy5lbWl0KFwiY3Vyc29yXCIsRi5uYW1lKSx1JiYodS50b0xvd2VyQ2FzZSgpPT09XCJ5XCJ8fHUudG9Mb3dlckNhc2UoKT09PVwiblwiKSYmdGhpcy5lbWl0KFwiY29uZmlybVwiLHUudG9Mb3dlckNhc2UoKT09PVwieVwiKSx1JiZ0aGlzLmVtaXQoXCJrZXlcIix1LnRvTG93ZXJDYXNlKCkpLEY/Lm5hbWU9PT1cInJldHVyblwiKXtpZih0aGlzLm9wdHMudmFsaWRhdGUpe2NvbnN0IGU9dGhpcy5vcHRzLnZhbGlkYXRlKHRoaXMudmFsdWUpO2UmJih0aGlzLmVycm9yPWUsdGhpcy5zdGF0ZT1cImVycm9yXCIsdGhpcy5ybC53cml0ZSh0aGlzLnZhbHVlKSk7fXRoaXMuc3RhdGUhPT1cImVycm9yXCImJih0aGlzLnN0YXRlPVwic3VibWl0XCIpO311PT09XCJcdTAwMDNcIiYmKHRoaXMuc3RhdGU9XCJjYW5jZWxcIiksKHRoaXMuc3RhdGU9PT1cInN1Ym1pdFwifHx0aGlzLnN0YXRlPT09XCJjYW5jZWxcIikmJnRoaXMuZW1pdChcImZpbmFsaXplXCIpLHRoaXMucmVuZGVyKCksKHRoaXMuc3RhdGU9PT1cInN1Ym1pdFwifHx0aGlzLnN0YXRlPT09XCJjYW5jZWxcIikmJnRoaXMuY2xvc2UoKTt9Y2xvc2UoKXt0aGlzLmlucHV0LnVucGlwZSgpLHRoaXMuaW5wdXQucmVtb3ZlTGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMub25LZXlwcmVzcyksdGhpcy5vdXRwdXQud3JpdGUoYFxuYCksZyh0aGlzLmlucHV0LCExKSx0aGlzLnJsLmNsb3NlKCksdGhpcy5lbWl0KGAke3RoaXMuc3RhdGV9YCx0aGlzLnZhbHVlKSx0aGlzLnVuc3Vic2NyaWJlKCk7fXJlc3RvcmVDdXJzb3IoKXtjb25zdCB1PVAodGhpcy5fcHJldkZyYW1lLHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMse2hhcmQ6ITB9KS5zcGxpdChgXG5gKS5sZW5ndGgtMTt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLm1vdmUoLTk5OSx1Ki0xKSk7fXJlbmRlcigpe2NvbnN0IHU9UCh0aGlzLl9yZW5kZXIodGhpcyk/P1wiXCIscHJvY2Vzcy5zdGRvdXQuY29sdW1ucyx7aGFyZDohMH0pO2lmKHUhPT10aGlzLl9wcmV2RnJhbWUpe2lmKHRoaXMuc3RhdGU9PT1cImluaXRpYWxcIil0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLmhpZGUpO2Vsc2Uge2NvbnN0IEY9RkQodGhpcy5fcHJldkZyYW1lLHUpO2lmKHRoaXMucmVzdG9yZUN1cnNvcigpLEYmJkY/Lmxlbmd0aD09PTEpe2NvbnN0IGU9RlswXTt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLm1vdmUoMCxlKSksdGhpcy5vdXRwdXQud3JpdGUoc3JjLmVyYXNlLmxpbmVzKDEpKTtjb25zdCBzPXUuc3BsaXQoYFxuYCk7dGhpcy5vdXRwdXQud3JpdGUoc1tlXSksdGhpcy5fcHJldkZyYW1lPXUsdGhpcy5vdXRwdXQud3JpdGUoc3JjLmN1cnNvci5tb3ZlKDAscy5sZW5ndGgtZS0xKSk7cmV0dXJufWVsc2UgaWYoRiYmRj8ubGVuZ3RoPjEpe2NvbnN0IGU9RlswXTt0aGlzLm91dHB1dC53cml0ZShzcmMuY3Vyc29yLm1vdmUoMCxlKSksdGhpcy5vdXRwdXQud3JpdGUoc3JjLmVyYXNlLmRvd24oKSk7Y29uc3QgQz11LnNwbGl0KGBcbmApLnNsaWNlKGUpO3RoaXMub3V0cHV0LndyaXRlKEMuam9pbihgXG5gKSksdGhpcy5fcHJldkZyYW1lPXU7cmV0dXJufXRoaXMub3V0cHV0LndyaXRlKHNyYy5lcmFzZS5kb3duKCkpO310aGlzLm91dHB1dC53cml0ZSh1KSx0aGlzLnN0YXRlPT09XCJpbml0aWFsXCImJih0aGlzLnN0YXRlPVwiYWN0aXZlXCIpLHRoaXMuX3ByZXZGcmFtZT11O319fWNsYXNzIHNEIGV4dGVuZHMgaHtnZXQgY3Vyc29yKCl7cmV0dXJuIHRoaXMudmFsdWU/MDoxfWdldCBfdmFsdWUoKXtyZXR1cm4gdGhpcy5jdXJzb3I9PT0wfWNvbnN0cnVjdG9yKHUpe3N1cGVyKHUsITEpLHRoaXMudmFsdWU9ISF1LmluaXRpYWxWYWx1ZSx0aGlzLm9uKFwidmFsdWVcIiwoKT0+e3RoaXMudmFsdWU9dGhpcy5fdmFsdWU7fSksdGhpcy5vbihcImNvbmZpcm1cIixGPT57dGhpcy5vdXRwdXQud3JpdGUoc3JjLmN1cnNvci5tb3ZlKDAsLTEpKSx0aGlzLnZhbHVlPUYsdGhpcy5zdGF0ZT1cInN1Ym1pdFwiLHRoaXMuY2xvc2UoKTt9KSx0aGlzLm9uKFwiY3Vyc29yXCIsKCk9Pnt0aGlzLnZhbHVlPSF0aGlzLnZhbHVlO30pO319Y2xhc3MgaUQgZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKHUpe3N1cGVyKHUsITEpLHRoaXMuY3Vyc29yPTAsdGhpcy5vcHRpb25zPXUub3B0aW9ucyx0aGlzLnZhbHVlPVsuLi51LmluaXRpYWxWYWx1ZXM/P1tdXSx0aGlzLmN1cnNvcj1NYXRoLm1heCh0aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7dmFsdWU6Rn0pPT5GPT09dS5jdXJzb3JBdCksMCksdGhpcy5vbihcImtleVwiLEY9PntGPT09XCJhXCImJnRoaXMudG9nZ2xlQWxsKCk7fSksdGhpcy5vbihcImN1cnNvclwiLEY9Pntzd2l0Y2goRil7Y2FzZVwibGVmdFwiOmNhc2VcInVwXCI6dGhpcy5jdXJzb3I9dGhpcy5jdXJzb3I9PT0wP3RoaXMub3B0aW9ucy5sZW5ndGgtMTp0aGlzLmN1cnNvci0xO2JyZWFrO2Nhc2VcImRvd25cIjpjYXNlXCJyaWdodFwiOnRoaXMuY3Vyc29yPXRoaXMuY3Vyc29yPT09dGhpcy5vcHRpb25zLmxlbmd0aC0xPzA6dGhpcy5jdXJzb3IrMTticmVhaztjYXNlXCJzcGFjZVwiOnRoaXMudG9nZ2xlVmFsdWUoKTticmVha319KTt9Z2V0IF92YWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLnZhbHVlfXRvZ2dsZUFsbCgpe2NvbnN0IHU9dGhpcy52YWx1ZS5sZW5ndGg9PT10aGlzLm9wdGlvbnMubGVuZ3RoO3RoaXMudmFsdWU9dT9bXTp0aGlzLm9wdGlvbnMubWFwKEY9PkYudmFsdWUpO310b2dnbGVWYWx1ZSgpe2NvbnN0IHU9dGhpcy52YWx1ZS5pbmNsdWRlcyh0aGlzLl92YWx1ZSk7dGhpcy52YWx1ZT11P3RoaXMudmFsdWUuZmlsdGVyKEY9PkYhPT10aGlzLl92YWx1ZSk6Wy4uLnRoaXMudmFsdWUsdGhpcy5fdmFsdWVdO319Y2xhc3MgRUQgZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKHUpe3N1cGVyKHUsITEpLHRoaXMuY3Vyc29yPTAsdGhpcy5vcHRpb25zPXUub3B0aW9ucyx0aGlzLmN1cnNvcj10aGlzLm9wdGlvbnMuZmluZEluZGV4KCh7dmFsdWU6Rn0pPT5GPT09dS5pbml0aWFsVmFsdWUpLHRoaXMuY3Vyc29yPT09LTEmJih0aGlzLmN1cnNvcj0wKSx0aGlzLmNoYW5nZVZhbHVlKCksdGhpcy5vbihcImN1cnNvclwiLEY9Pntzd2l0Y2goRil7Y2FzZVwibGVmdFwiOmNhc2VcInVwXCI6dGhpcy5jdXJzb3I9dGhpcy5jdXJzb3I9PT0wP3RoaXMub3B0aW9ucy5sZW5ndGgtMTp0aGlzLmN1cnNvci0xO2JyZWFrO2Nhc2VcImRvd25cIjpjYXNlXCJyaWdodFwiOnRoaXMuY3Vyc29yPXRoaXMuY3Vyc29yPT09dGhpcy5vcHRpb25zLmxlbmd0aC0xPzA6dGhpcy5jdXJzb3IrMTticmVha310aGlzLmNoYW5nZVZhbHVlKCk7fSk7fWdldCBfdmFsdWUoKXtyZXR1cm4gdGhpcy5vcHRpb25zW3RoaXMuY3Vyc29yXX1jaGFuZ2VWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fdmFsdWUudmFsdWU7fX1jbGFzcyBvRCBleHRlbmRzIGh7Y29uc3RydWN0b3IodSl7c3VwZXIodSksdGhpcy52YWx1ZVdpdGhDdXJzb3I9XCJcIix0aGlzLm9uKFwiZmluYWxpemVcIiwoKT0+e3RoaXMudmFsdWV8fCh0aGlzLnZhbHVlPXUuZGVmYXVsdFZhbHVlKSx0aGlzLnZhbHVlV2l0aEN1cnNvcj10aGlzLnZhbHVlO30pLHRoaXMub24oXCJ2YWx1ZVwiLCgpPT57aWYodGhpcy5jdXJzb3I+PXRoaXMudmFsdWUubGVuZ3RoKXRoaXMudmFsdWVXaXRoQ3Vyc29yPWAke3RoaXMudmFsdWV9JHtsLmludmVyc2UobC5oaWRkZW4oXCJfXCIpKX1gO2Vsc2Uge2NvbnN0IEY9dGhpcy52YWx1ZS5zbGljZSgwLHRoaXMuY3Vyc29yKSxlPXRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO3RoaXMudmFsdWVXaXRoQ3Vyc29yPWAke0Z9JHtsLmludmVyc2UoZVswXSl9JHtlLnNsaWNlKDEpfWA7fX0pO31nZXQgY3Vyc29yKCl7cmV0dXJuIHRoaXMuX2N1cnNvcn19XG5cbmNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGVTdXBwb3J0ZWQoKTtcbmNvbnN0IHMgPSAoYywgZmFsbGJhY2spID0+IHVuaWNvZGUgPyBjIDogZmFsbGJhY2s7XG5jb25zdCBTX1NURVBfQUNUSVZFID0gcyhcIlxcdTI3NkZcIiwgXCI+XCIpO1xuY29uc3QgU19TVEVQX0NBTkNFTCA9IHMoXCJcXHUyNUEwXCIsIFwieFwiKTtcbmNvbnN0IFNfU1RFUF9FUlJPUiA9IHMoXCJcXHUyNUIyXCIsIFwieFwiKTtcbmNvbnN0IFNfU1RFUF9TVUJNSVQgPSBzKFwiXFx1MjcxNFwiLCBcIlxcdTIyMUFcIik7XG5jb25zdCBTX0JBUiA9IFwiXCI7XG5jb25zdCBTX0JBUl9FTkQgPSBcIlwiO1xuY29uc3QgU19SQURJT19BQ1RJVkUgPSBzKFwiXFx1MjVDRlwiLCBcIj5cIik7XG5jb25zdCBTX1JBRElPX0lOQUNUSVZFID0gcyhcIlxcdTI1Q0JcIiwgXCIgXCIpO1xuY29uc3QgU19DSEVDS0JPWF9BQ1RJVkUgPSBzKFwiXFx1MjVGQlwiLCBcIltcXHUyMDIyXVwiKTtcbmNvbnN0IFNfQ0hFQ0tCT1hfU0VMRUNURUQgPSBzKFwiXFx1MjVGQ1wiLCBcIlsrXVwiKTtcbmNvbnN0IFNfQ0hFQ0tCT1hfSU5BQ1RJVkUgPSBzKFwiXFx1MjVGQlwiLCBcIlsgXVwiKTtcbmNvbnN0IHN5bWJvbCA9IChzdGF0ZSkgPT4ge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcImluaXRpYWxcIjpcbiAgICBjYXNlIFwiYWN0aXZlXCI6IHtcbiAgICAgIHJldHVybiBjb2xvcnMuY3lhbihTX1NURVBfQUNUSVZFKTtcbiAgICB9XG4gICAgY2FzZSBcImNhbmNlbFwiOiB7XG4gICAgICByZXR1cm4gY29sb3JzLnJlZChTX1NURVBfQ0FOQ0VMKTtcbiAgICB9XG4gICAgY2FzZSBcImVycm9yXCI6IHtcbiAgICAgIHJldHVybiBjb2xvcnMueWVsbG93KFNfU1RFUF9FUlJPUik7XG4gICAgfVxuICAgIGNhc2UgXCJzdWJtaXRcIjoge1xuICAgICAgcmV0dXJuIGNvbG9ycy5ncmVlbihTX1NURVBfU1VCTUlUKTtcbiAgICB9XG4gIH1cbn07XG5jb25zdCB0ZXh0ID0gKG9wdHMpID0+IHtcbiAgcmV0dXJuIG5ldyBvRCh7XG4gICAgdmFsaWRhdGU6IG9wdHMudmFsaWRhdGUsXG4gICAgcGxhY2Vob2xkZXI6IG9wdHMucGxhY2Vob2xkZXIsXG4gICAgZGVmYXVsdFZhbHVlOiBvcHRzLmRlZmF1bHRWYWx1ZSxcbiAgICBpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFZhbHVlLFxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gYCR7Y29sb3JzLmdyYXkoU19CQVIpfVxuJHtzeW1ib2wodGhpcy5zdGF0ZSl9ICR7b3B0cy5tZXNzYWdlfVxuYDtcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gb3B0cy5wbGFjZWhvbGRlciA/IGNvbG9ycy5pbnZlcnNlKG9wdHMucGxhY2Vob2xkZXJbMF0pICsgY29sb3JzLmRpbShvcHRzLnBsYWNlaG9sZGVyLnNsaWNlKDEpKSA6IGNvbG9ycy5pbnZlcnNlKGNvbG9ycy5oaWRkZW4oXCJfXCIpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWVXaXRoQ3Vyc29yIDogcGxhY2Vob2xkZXI7XG4gICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGUudHJpbSgpfVxuJHtjb2xvcnMueWVsbG93KFxuICAgICAgICAgICAgU19CQVJcbiAgICAgICAgICApfSAke3ZhbHVlfVxuJHtjb2xvcnMueWVsbG93KFNfQkFSX0VORCl9ICR7Y29sb3JzLnllbGxvdyhcbiAgICAgICAgICAgIHRoaXMuZXJyb3JcbiAgICAgICAgICApfVxuYDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3VibWl0XCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLmRpbShcbiAgICAgICAgICAgIHRoaXMudmFsdWUgfHwgb3B0cy5wbGFjZWhvbGRlclxuICAgICAgICAgICl9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLnN0cmlrZXRocm91Z2goXG4gICAgICAgICAgICBjb2xvcnMuZGltKHRoaXMudmFsdWUgPz8gXCJcIilcbiAgICAgICAgICApfSR7dGhpcy52YWx1ZT8udHJpbSgpID8gXCJcXG5cIiArIGNvbG9ycy5ncmF5KFNfQkFSKSA6IFwiXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmV0dXJuIGAke3RpdGxlfSR7Y29sb3JzLmN5YW4oU19CQVIpfSAke3ZhbHVlfVxuJHtjb2xvcnMuY3lhbihcbiAgICAgICAgICAgIFNfQkFSX0VORFxuICAgICAgICAgICl9XG5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KS5wcm9tcHQoKTtcbn07XG5jb25zdCBjb25maXJtID0gKG9wdHMpID0+IHtcbiAgY29uc3QgYWN0aXZlID0gb3B0cy5hY3RpdmUgPz8gXCJZZXNcIjtcbiAgY29uc3QgaW5hY3RpdmUgPSBvcHRzLmluYWN0aXZlID8/IFwiTm9cIjtcbiAgcmV0dXJuIG5ldyBzRCh7XG4gICAgYWN0aXZlLFxuICAgIGluYWN0aXZlLFxuICAgIGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWUgPz8gdHJ1ZSxcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB0aXRsZSA9IGAke2NvbG9ycy5ncmF5KFNfQkFSKX1cbiR7c3ltYm9sKHRoaXMuc3RhdGUpfSAke29wdHMubWVzc2FnZX1cbmA7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWUgPyBhY3RpdmUgOiBpbmFjdGl2ZTtcbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIFwic3VibWl0XCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLmRpbSh2YWx1ZSl9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuZ3JheShTX0JBUil9ICR7Y29sb3JzLnN0cmlrZXRocm91Z2goXG4gICAgICAgICAgICBjb2xvcnMuZGltKHZhbHVlKVxuICAgICAgICAgICl9XG4ke2NvbG9ycy5ncmF5KFNfQkFSKX1gO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuY3lhbihTX0JBUil9ICR7dGhpcy52YWx1ZSA/IGAke2NvbG9ycy5ncmVlbihTX1JBRElPX0FDVElWRSl9ICR7YWN0aXZlfWAgOiBgJHtjb2xvcnMuZGltKFNfUkFESU9fSU5BQ1RJVkUpfSAke2NvbG9ycy5kaW0oYWN0aXZlKX1gfSAke2NvbG9ycy5kaW0oXCIvXCIpfSAke3RoaXMudmFsdWUgPyBgJHtjb2xvcnMuZGltKFNfUkFESU9fSU5BQ1RJVkUpfSAke2NvbG9ycy5kaW0oaW5hY3RpdmUpfWAgOiBgJHtjb2xvcnMuZ3JlZW4oU19SQURJT19BQ1RJVkUpfSAke2luYWN0aXZlfWB9XG4ke2NvbG9ycy5jeWFuKFNfQkFSX0VORCl9XG5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KS5wcm9tcHQoKTtcbn07XG5jb25zdCBzZWxlY3QgPSAob3B0cykgPT4ge1xuICBjb25zdCBvcHQgPSAob3B0aW9uLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUpO1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJhY3RpdmVcIjoge1xuICAgICAgICByZXR1cm4gYCR7Y29sb3JzLmdyZWVuKFNfUkFESU9fQUNUSVZFKX0gJHtsYWJlbH0gJHtvcHRpb24uaGludCA/IGNvbG9ycy5kaW0oYCgke29wdGlvbi5oaW50fSlgKSA6IFwiXCJ9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOiB7XG4gICAgICAgIHJldHVybiBgJHtjb2xvcnMuZGltKGxhYmVsKX1gO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNhbmNlbGxlZFwiOiB7XG4gICAgICAgIHJldHVybiBgJHtjb2xvcnMuc3RyaWtldGhyb3VnaChjb2xvcnMuZGltKGxhYmVsKSl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2NvbG9ycy5kaW0oU19SQURJT19JTkFDVElWRSl9ICR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgfTtcbiAgcmV0dXJuIG5ldyBFRCh7XG4gICAgb3B0aW9uczogb3B0cy5vcHRpb25zLFxuICAgIGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsVmFsdWUsXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgdGl0bGUgPSBgJHtjb2xvcnMuZ3JheShTX0JBUil9XG4ke3N5bWJvbCh0aGlzLnN0YXRlKX0gJHtvcHRzLm1lc3NhZ2V9XG5gO1xuICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgIGNhc2UgXCJzdWJtaXRcIjoge1xuICAgICAgICAgIHJldHVybiBgJHt0aXRsZX0ke2NvbG9ycy5ncmF5KFNfQkFSKX0gJHtvcHQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLFxuICAgICAgICAgICAgXCJzZWxlY3RlZFwiXG4gICAgICAgICAgKX1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjYW5jZWxcIjoge1xuICAgICAgICAgIHJldHVybiBgJHt0aXRsZX0ke2NvbG9ycy5ncmF5KFNfQkFSKX0gJHtvcHQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNbdGhpcy5jdXJzb3JdLFxuICAgICAgICAgICAgXCJjYW5jZWxsZWRcIlxuICAgICAgICAgICl9XG4ke2NvbG9ycy5ncmF5KFNfQkFSKX1gO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICByZXR1cm4gYCR7dGl0bGV9JHtjb2xvcnMuY3lhbihTX0JBUil9ICR7dGhpcy5vcHRpb25zLm1hcChcbiAgICAgICAgICAgIChvcHRpb24sIGkpID0+IG9wdChvcHRpb24sIGkgPT09IHRoaXMuY3Vyc29yID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIilcbiAgICAgICAgICApLmpvaW4oYFxuJHtjb2xvcnMuY3lhbihTX0JBUil9ICBgKX1cbiR7Y29sb3JzLmN5YW4oU19CQVJfRU5EKX1cbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pLnByb21wdCgpO1xufTtcbmNvbnN0IG11bHRpc2VsZWN0ID0gKG9wdHMpID0+IHtcbiAgY29uc3Qgb3B0ID0gKG9wdGlvbiwgc3RhdGUpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9IG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlKTtcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICBjYXNlIFwiYWN0aXZlXCI6IHtcbiAgICAgICAgcmV0dXJuIGAke2NvbG9ycy5jeWFuKFNfQ0hFQ0tCT1hfQUNUSVZFKX0gJHtsYWJlbH0gJHtvcHRpb24uaGludCA/IGNvbG9ycy5kaW0oYCgke29wdGlvbi5oaW50fSlgKSA6IFwiXCJ9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOiB7XG4gICAgICAgIHJldHVybiBgJHtjb2xvcnMuZ3JlZW4oU19DSEVDS0JPWF9TRUxFQ1RFRCl9ICR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJjYW5jZWxsZWRcIjoge1xuICAgICAgICByZXR1cm4gYCR7Y29sb3JzLnN0cmlrZXRocm91Z2goY29sb3JzLmRpbShsYWJlbCkpfWA7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYWN0aXZlLXNlbGVjdGVkXCI6IHtcbiAgICAgICAgcmV0dXJuIGAke2NvbG9ycy5ncmVlbihTX0NIRUNLQk9YX1NFTEVDVEVEKX0gJHtsYWJlbH0gJHtvcHRpb24uaGludCA/IGNvbG9ycy5kaW0oYCgke29wdGlvbi5oaW50fSlgKSA6IFwiXCJ9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJzdWJtaXR0ZWRcIjoge1xuICAgICAgICByZXR1cm4gYCR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGAke2NvbG9ycy5kaW0oU19DSEVDS0JPWF9JTkFDVElWRSl9ICR7Y29sb3JzLmRpbShsYWJlbCl9YDtcbiAgfTtcbiAgcmV0dXJuIG5ldyBpRCh7XG4gICAgb3B0aW9uczogb3B0cy5vcHRpb25zLFxuICAgIGluaXRpYWxWYWx1ZXM6IG9wdHMuaW5pdGlhbFZhbHVlcyxcbiAgICByZXF1aXJlZDogb3B0cy5yZXF1aXJlZCA/PyB0cnVlLFxuICAgIGN1cnNvckF0OiBvcHRzLmN1cnNvckF0LFxuICAgIHZhbGlkYXRlKHNlbGVjdGVkKSB7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiBzZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBvcHRpb24uXG4ke2NvbG9ycy5yZXNldChcbiAgICAgICAgICBjb2xvcnMuZGltKFxuICAgICAgICAgICAgYFByZXNzICR7Y29sb3JzLmdyYXkoXG4gICAgICAgICAgICAgIGNvbG9ycy5iZ1doaXRlKGNvbG9ycy5pbnZlcnNlKFwiIHNwYWNlIFwiKSlcbiAgICAgICAgICAgICl9IHRvIHNlbGVjdCwgJHtjb2xvcnMuZ3JheShcbiAgICAgICAgICAgICAgY29sb3JzLmJnV2hpdGUoY29sb3JzLmludmVyc2UoXCIgZW50ZXIgXCIpKVxuICAgICAgICAgICAgKX0gdG8gc3VibWl0YFxuICAgICAgICAgIClcbiAgICAgICAgKX1gO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3QgdGl0bGUgPSBgJHtjb2xvcnMuZ3JheShTX0JBUil9XG4ke3N5bWJvbCh0aGlzLnN0YXRlKX0gJHtvcHRzLm1lc3NhZ2V9XG5gO1xuICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XG4gICAgICAgIGNhc2UgXCJzdWJtaXRcIjoge1xuICAgICAgICAgIHJldHVybiBgJHt0aXRsZX0ke2NvbG9ycy5ncmF5KFNfQkFSKX0gJHt0aGlzLm9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHRoaXMudmFsdWUuaW5jbHVkZXModmFsdWUpKS5tYXAoKG9wdGlvbikgPT4gb3B0KG9wdGlvbiwgXCJzdWJtaXR0ZWRcIikpLmpvaW4oY29sb3JzLmRpbShcIiwgXCIpKSB8fCBjb2xvcnMuZGltKFwibm9uZVwiKX1gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjYW5jZWxcIjoge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5vcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB0aGlzLnZhbHVlLmluY2x1ZGVzKHZhbHVlKSkubWFwKChvcHRpb24pID0+IG9wdChvcHRpb24sIFwiY2FuY2VsbGVkXCIpKS5qb2luKGNvbG9ycy5kaW0oXCIsIFwiKSk7XG4gICAgICAgICAgcmV0dXJuIGAke3RpdGxlfSR7Y29sb3JzLmdyYXkoU19CQVIpfSAke2xhYmVsLnRyaW0oKSA/IGAke2xhYmVsfVxuJHtjb2xvcnMuZ3JheShTX0JBUil9YCA6IFwiXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZXJyb3JcIjoge1xuICAgICAgICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuZXJyb3Iuc3BsaXQoXCJcXG5cIikubWFwKFxuICAgICAgICAgICAgKGxuLCBpKSA9PiBpID09PSAwID8gYCR7Y29sb3JzLnllbGxvdyhTX0JBUl9FTkQpfSAke2NvbG9ycy55ZWxsb3cobG4pfWAgOiBgICAgJHtsbn1gXG4gICAgICAgICAgKS5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgIHJldHVybiB0aXRsZSArIGNvbG9ycy55ZWxsb3coU19CQVIpICsgXCIgIFwiICsgdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuaW5jbHVkZXMob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGkgPT09IHRoaXMuY3Vyc29yO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZSAmJiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gb3B0KG9wdGlvbiwgXCJhY3RpdmUtc2VsZWN0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdChvcHRpb24sIFwic2VsZWN0ZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0KG9wdGlvbiwgYWN0aXZlID8gXCJhY3RpdmVcIiA6IFwiaW5hY3RpdmVcIik7XG4gICAgICAgICAgfSkuam9pbihgXG4ke2NvbG9ycy55ZWxsb3coU19CQVIpfSAgYCkgKyBcIlxcblwiICsgZm9vdGVyICsgXCJcXG5cIjtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgcmV0dXJuIGAke3RpdGxlfSR7Y29sb3JzLmN5YW4oU19CQVIpfSAke3RoaXMub3B0aW9ucy5tYXAoKG9wdGlvbiwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBpID09PSB0aGlzLmN1cnNvcjtcbiAgICAgICAgICAgIGlmIChhY3RpdmUgJiYgc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdChvcHRpb24sIFwiYWN0aXZlLXNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcHQob3B0aW9uLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdChvcHRpb24sIGFjdGl2ZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCIpO1xuICAgICAgICAgIH0pLmpvaW4oYFxuJHtjb2xvcnMuY3lhbihTX0JBUil9ICBgKX1cbiR7Y29sb3JzLmN5YW4oU19CQVJfRU5EKX1cbmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pLnByb21wdCgpO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0KG1lc3NhZ2UsIG9wdHMgPSB7fSkge1xuICBpZiAoIW9wdHMudHlwZSB8fCBvcHRzLnR5cGUgPT09IFwidGV4dFwiKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRleHQoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogb3B0cy5kZWZhdWx0LFxuICAgICAgcGxhY2Vob2xkZXI6IG9wdHMucGxhY2Vob2xkZXIsXG4gICAgICBpbml0aWFsVmFsdWU6IG9wdHMuaW5pdGlhbFxuICAgIH0pO1xuICB9XG4gIGlmIChvcHRzLnR5cGUgPT09IFwiY29uZmlybVwiKSB7XG4gICAgcmV0dXJuIGF3YWl0IGNvbmZpcm0oe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGluaXRpYWxWYWx1ZTogb3B0cy5pbml0aWFsXG4gICAgfSk7XG4gIH1cbiAgaWYgKG9wdHMudHlwZSA9PT0gXCJzZWxlY3RcIikge1xuICAgIHJldHVybiBhd2FpdCBzZWxlY3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IG9wdHMub3B0aW9ucy5tYXAoXG4gICAgICAgIChvKSA9PiB0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIiA/IHsgdmFsdWU6IG8sIGxhYmVsOiBvIH0gOiBvXG4gICAgICApXG4gICAgfSk7XG4gIH1cbiAgaWYgKG9wdHMudHlwZSA9PT0gXCJtdWx0aXNlbGVjdFwiKSB7XG4gICAgcmV0dXJuIGF3YWl0IG11bHRpc2VsZWN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBvcHRzLm9wdGlvbnMubWFwKFxuICAgICAgICAobykgPT4gdHlwZW9mIG8gPT09IFwic3RyaW5nXCIgPyB7IHZhbHVlOiBvLCBsYWJlbDogbyB9IDogb1xuICAgICAgKSxcbiAgICAgIHJlcXVpcmVkOiBvcHRzLnJlcXVpcmVkXG4gICAgfSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHByb21wdCB0eXBlOiAke29wdHMudHlwZX1gKTtcbn1cblxuZXhwb3J0IHsgcHJvbXB0IH07XG4iLCAiaW1wb3J0IHsgY3JlYXRlQ29uc29sYSBhcyBjcmVhdGVDb25zb2xhJDEsIExvZ0xldmVscyB9IGZyb20gJy4uL2NvcmUubWpzJztcbmltcG9ydCB7IEIgYXMgQmFzaWNSZXBvcnRlciwgcCBhcyBwYXJzZVN0YWNrIH0gZnJvbSAnLi9jb25zb2xhLjA2YWQ4YTY0Lm1qcyc7XG5pbXBvcnQgcHJvY2VzcyQxIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBjb2xvcnMsIGJveCwgc3RyaXBBbnNpIGFzIHN0cmlwQW5zaSQxIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgcHJvdmlkZXJzID0gW1xuICBbXCJBUFBWRVlPUlwiXSxcbiAgW1wiQVpVUkVfUElQRUxJTkVTXCIsIFwiU1lTVEVNX1RFQU1GT1VOREFUSU9OQ09MTEVDVElPTlVSSVwiXSxcbiAgW1wiQVpVUkVfU1RBVElDXCIsIFwiSU5QVVRfQVpVUkVfU1RBVElDX1dFQl9BUFBTX0FQSV9UT0tFTlwiXSxcbiAgW1wiQVBQQ0lSQ0xFXCIsIFwiQUNfQVBQQ0lSQ0xFXCJdLFxuICBbXCJCQU1CT09cIiwgXCJiYW1ib29fcGxhbktleVwiXSxcbiAgW1wiQklUQlVDS0VUXCIsIFwiQklUQlVDS0VUX0NPTU1JVFwiXSxcbiAgW1wiQklUUklTRVwiLCBcIkJJVFJJU0VfSU9cIl0sXG4gIFtcIkJVRERZXCIsIFwiQlVERFlfV09SS1NQQUNFX0lEXCJdLFxuICBbXCJCVUlMREtJVEVcIl0sXG4gIFtcIkNJUkNMRVwiLCBcIkNJUkNMRUNJXCJdLFxuICBbXCJDSVJSVVNcIiwgXCJDSVJSVVNfQ0lcIl0sXG4gIFtcIkNMT1VERkxBUkVfUEFHRVNcIiwgXCJDRl9QQUdFU1wiLCB7IGNpOiB0cnVlIH1dLFxuICBbXCJDT0RFQlVJTERcIiwgXCJDT0RFQlVJTERfQlVJTERfQVJOXCJdLFxuICBbXCJDT0RFRlJFU0hcIiwgXCJDRl9CVUlMRF9JRFwiXSxcbiAgW1wiRFJPTkVcIl0sXG4gIFtcIkRST05FXCIsIFwiRFJPTkVfQlVJTERfRVZFTlRcIl0sXG4gIFtcIkRTQVJJXCJdLFxuICBbXCJHSVRIVUJfQUNUSU9OU1wiXSxcbiAgW1wiR0lUTEFCXCIsIFwiR0lUTEFCX0NJXCJdLFxuICBbXCJHSVRMQUJcIiwgXCJDSV9NRVJHRV9SRVFVRVNUX0lEXCJdLFxuICBbXCJHT0NEXCIsIFwiR09fUElQRUxJTkVfTEFCRUxcIl0sXG4gIFtcIkxBWUVSQ0lcIl0sXG4gIFtcIkhVRFNPTlwiLCBcIkhVRFNPTl9VUkxcIl0sXG4gIFtcIkpFTktJTlNcIiwgXCJKRU5LSU5TX1VSTFwiXSxcbiAgW1wiTUFHTlVNXCJdLFxuICBbXCJORVRMSUZZXCJdLFxuICBbXCJORVRMSUZZXCIsIFwiTkVUTElGWV9MT0NBTFwiLCB7IGNpOiBmYWxzZSB9XSxcbiAgW1wiTkVWRVJDT0RFXCJdLFxuICBbXCJSRU5ERVJcIl0sXG4gIFtcIlNBSUxcIiwgXCJTQUlMQ0lcIl0sXG4gIFtcIlNFTUFQSE9SRVwiXSxcbiAgW1wiU0NSRVdEUklWRVJcIl0sXG4gIFtcIlNISVBQQUJMRVwiXSxcbiAgW1wiU09MQU5PXCIsIFwiVERESVVNXCJdLFxuICBbXCJTVFJJREVSXCJdLFxuICBbXCJURUFNQ0lUWVwiLCBcIlRFQU1DSVRZX1ZFUlNJT05cIl0sXG4gIFtcIlRSQVZJU1wiXSxcbiAgW1wiVkVSQ0VMXCIsIFwiTk9XX0JVSUxERVJcIl0sXG4gIFtcIkFQUENFTlRFUlwiLCBcIkFQUENFTlRFUl9CVUlMRF9JRFwiXSxcbiAgW1wiQ09ERVNBTkRCT1hcIiwgXCJDT0RFU0FOREJPWF9TU0VcIiwgeyBjaTogZmFsc2UgfV0sXG4gIFtcIlNUQUNLQkxJVFpcIl0sXG4gIFtcIlNUT1JNS0lUXCJdLFxuICBbXCJDTEVBVlJcIl1cbl07XG5mdW5jdGlvbiBkZXRlY3RQcm92aWRlcihlbnYpIHtcbiAgZm9yIChjb25zdCBwcm92aWRlciBvZiBwcm92aWRlcnMpIHtcbiAgICBjb25zdCBlbnZOYW1lID0gcHJvdmlkZXJbMV0gfHwgcHJvdmlkZXJbMF07XG4gICAgaWYgKGVudltlbnZOYW1lXSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogcHJvdmlkZXJbMF0udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgLi4ucHJvdmlkZXJbMl1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChlbnYuU0hFTEwgJiYgZW52LlNIRUxMID09PSBcIi9iaW4vanNoXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogXCJzdGFja2JsaXR6XCIsXG4gICAgICBjaTogZmFsc2VcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJcIixcbiAgICBjaTogZmFsc2VcbiAgfTtcbn1cblxuY29uc3QgcHJvY2Vzc1NoaW0gPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiA/IHByb2Nlc3MgOiB7fTtcbmNvbnN0IGVudlNoaW0gPSBwcm9jZXNzU2hpbS5lbnYgfHwge307XG5jb25zdCBwcm92aWRlckluZm8gPSBkZXRlY3RQcm92aWRlcihlbnZTaGltKTtcbmNvbnN0IG5vZGVFTlYgPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViB8fCBcIlwiO1xucHJvY2Vzc1NoaW0ucGxhdGZvcm07XG5wcm92aWRlckluZm8ubmFtZTtcbmNvbnN0IGlzQ0kgPSB0b0Jvb2xlYW4oZW52U2hpbS5DSSkgfHwgcHJvdmlkZXJJbmZvLmNpICE9PSBmYWxzZTtcbmNvbnN0IGhhc1RUWSA9IHRvQm9vbGVhbihwcm9jZXNzU2hpbS5zdGRvdXQgJiYgcHJvY2Vzc1NoaW0uc3Rkb3V0LmlzVFRZKTtcbmNvbnN0IGlzRGVidWcgPSB0b0Jvb2xlYW4oZW52U2hpbS5ERUJVRyk7XG5jb25zdCBpc1Rlc3QgPSBub2RlRU5WID09PSBcInRlc3RcIiB8fCB0b0Jvb2xlYW4oZW52U2hpbS5URVNUKTtcbnRvQm9vbGVhbihlbnZTaGltLk1JTklNQUwpIHx8IGlzQ0kgfHwgaXNUZXN0IHx8ICFoYXNUVFk7XG5mdW5jdGlvbiB0b0Jvb2xlYW4odmFsKSB7XG4gIHJldHVybiB2YWwgPyB2YWwgIT09IFwiZmFsc2VcIiA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBhbnNpUmVnZXgoe29ubHlGaXJzdCA9IGZhbHNlfSA9IHt9KSB7XG5cdGNvbnN0IHBhdHRlcm4gPSBbXG5cdCAgICAnW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KScsXG5cdFx0Jyg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpJ1xuXHRdLmpvaW4oJ3wnKTtcblxuXHRyZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBvbmx5Rmlyc3QgPyB1bmRlZmluZWQgOiAnZycpO1xufVxuXG5jb25zdCByZWdleCA9IGFuc2lSZWdleCgpO1xuXG5mdW5jdGlvbiBzdHJpcEFuc2koc3RyaW5nKSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgXFxgc3RyaW5nXFxgLCBnb3QgXFxgJHt0eXBlb2Ygc3RyaW5nfVxcYGApO1xuXHR9XG5cblx0Ly8gRXZlbiB0aG91Z2ggdGhlIHJlZ2V4IGlzIGdsb2JhbCwgd2UgZG9uJ3QgbmVlZCB0byByZXNldCB0aGUgYC5sYXN0SW5kZXhgXG5cdC8vIGJlY2F1c2UgdW5saWtlIGAuZXhlYygpYCBhbmQgYC50ZXN0KClgLCBgLnJlcGxhY2UoKWAgZG9lcyBpdCBhdXRvbWF0aWNhbGx5XG5cdC8vIGFuZCBkb2luZyBpdCBtYW51YWxseSBoYXMgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LlxuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVnZXgsICcnKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgKHgpIHtcblx0cmV0dXJuIHggJiYgeC5fX2VzTW9kdWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnZGVmYXVsdCcpID8geFsnZGVmYXVsdCddIDogeDtcbn1cblxudmFyIGVhc3Rhc2lhbndpZHRoID0ge2V4cG9ydHM6IHt9fTtcblxuKGZ1bmN0aW9uIChtb2R1bGUpIHtcblx0dmFyIGVhdyA9IHt9O1xuXG5cdHtcblx0ICBtb2R1bGUuZXhwb3J0cyA9IGVhdztcblx0fVxuXG5cdGVhdy5lYXN0QXNpYW5XaWR0aCA9IGZ1bmN0aW9uKGNoYXJhY3Rlcikge1xuXHQgIHZhciB4ID0gY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCk7XG5cdCAgdmFyIHkgPSAoY2hhcmFjdGVyLmxlbmd0aCA9PSAyKSA/IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDEpIDogMDtcblx0ICB2YXIgY29kZVBvaW50ID0geDtcblx0ICBpZiAoKDB4RDgwMCA8PSB4ICYmIHggPD0gMHhEQkZGKSAmJiAoMHhEQzAwIDw9IHkgJiYgeSA8PSAweERGRkYpKSB7XG5cdCAgICB4ICY9IDB4M0ZGO1xuXHQgICAgeSAmPSAweDNGRjtcblx0ICAgIGNvZGVQb2ludCA9ICh4IDw8IDEwKSB8IHk7XG5cdCAgICBjb2RlUG9pbnQgKz0gMHgxMDAwMDtcblx0ICB9XG5cblx0ICBpZiAoKDB4MzAwMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweEZGMDEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGNjApIHx8XG5cdCAgICAgICgweEZGRTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRTYpKSB7XG5cdCAgICByZXR1cm4gJ0YnO1xuXHQgIH1cblx0ICBpZiAoKDB4MjBBOSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweEZGNjEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQkUpIHx8XG5cdCAgICAgICgweEZGQzIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQzcpIHx8XG5cdCAgICAgICgweEZGQ0EgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGQ0YpIHx8XG5cdCAgICAgICgweEZGRDIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRDcpIHx8XG5cdCAgICAgICgweEZGREEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGREMpIHx8XG5cdCAgICAgICgweEZGRTggPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRUUpKSB7XG5cdCAgICByZXR1cm4gJ0gnO1xuXHQgIH1cblx0ICBpZiAoKDB4MTEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTE1RikgfHxcblx0ICAgICAgKDB4MTFBMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTFBNykgfHxcblx0ICAgICAgKDB4MTFGQSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MTFGRikgfHxcblx0ICAgICAgKDB4MjMyOSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjMyQSkgfHxcblx0ICAgICAgKDB4MkU4MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkU5OSkgfHxcblx0ICAgICAgKDB4MkU5QiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkVGMykgfHxcblx0ICAgICAgKDB4MkYwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkZENSkgfHxcblx0ICAgICAgKDB4MkZGMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MkZGQikgfHxcblx0ICAgICAgKDB4MzAwMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzAzRSkgfHxcblx0ICAgICAgKDB4MzA0MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzA5NikgfHxcblx0ICAgICAgKDB4MzA5OSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzBGRikgfHxcblx0ICAgICAgKDB4MzEwNSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzEyRCkgfHxcblx0ICAgICAgKDB4MzEzMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzE4RSkgfHxcblx0ICAgICAgKDB4MzE5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzFCQSkgfHxcblx0ICAgICAgKDB4MzFDMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzFFMykgfHxcblx0ICAgICAgKDB4MzFGMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzIxRSkgfHxcblx0ICAgICAgKDB4MzIyMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzI0NykgfHxcblx0ICAgICAgKDB4MzI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MzJGRSkgfHxcblx0ICAgICAgKDB4MzMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4NERCRikgfHxcblx0ICAgICAgKDB4NEUwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTQ4QykgfHxcblx0ICAgICAgKDB4QTQ5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTRDNikgfHxcblx0ICAgICAgKDB4QTk2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4QTk3QykgfHxcblx0ICAgICAgKDB4QUMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdBMykgfHxcblx0ICAgICAgKDB4RDdCMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdDNikgfHxcblx0ICAgICAgKDB4RDdDQiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RDdGQikgfHxcblx0ICAgICAgKDB4RjkwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkFGRikgfHxcblx0ICAgICAgKDB4RkUxMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkUxOSkgfHxcblx0ICAgICAgKDB4RkUzMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU1MikgfHxcblx0ICAgICAgKDB4RkU1NCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2NikgfHxcblx0ICAgICAgKDB4RkU2OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4RkU2QikgfHxcblx0ICAgICAgKDB4MUIwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFCMDAxKSB8fFxuXHQgICAgICAoMHgxRjIwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYyMDIpIHx8XG5cdCAgICAgICgweDFGMjEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjIzQSkgfHxcblx0ICAgICAgKDB4MUYyNDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMjQ4KSB8fFxuXHQgICAgICAoMHgxRjI1MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYyNTEpIHx8XG5cdCAgICAgICgweDIwMDAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyRjczRikgfHxcblx0ICAgICAgKDB4MkI3NDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDJGRkZEKSB8fFxuXHQgICAgICAoMHgzMDAwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4M0ZGRkQpKSB7XG5cdCAgICByZXR1cm4gJ1cnO1xuXHQgIH1cblx0ICBpZiAoKDB4MDAyMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDA3RSkgfHxcblx0ICAgICAgKDB4MDBBMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBBMykgfHxcblx0ICAgICAgKDB4MDBBNSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBBNikgfHxcblx0ICAgICAgKDB4MDBBQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwQUYgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyN0U2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyN0VEKSB8fFxuXHQgICAgICAoMHgyOTg1IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyOTg2KSkge1xuXHQgICAgcmV0dXJuICdOYSc7XG5cdCAgfVxuXHQgIGlmICgoMHgwMEExID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDBBNCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwQTcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwQTgpIHx8XG5cdCAgICAgICgweDAwQUEgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMEFEIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEFFKSB8fFxuXHQgICAgICAoMHgwMEIwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEI0KSB8fFxuXHQgICAgICAoMHgwMEI2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEJBKSB8fFxuXHQgICAgICAoMHgwMEJDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEJGKSB8fFxuXHQgICAgICAoMHgwMEM2ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDBEMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwRDcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRDgpIHx8XG5cdCAgICAgICgweDAwREUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAwRTEpIHx8XG5cdCAgICAgICgweDAwRTYgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMEU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEVBKSB8fFxuXHQgICAgICAoMHgwMEVDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMEVEKSB8fFxuXHQgICAgICAoMHgwMEYwID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDBGMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBGMykgfHxcblx0ICAgICAgKDB4MDBGNyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDBGQSkgfHxcblx0ICAgICAgKDB4MDBGQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAwRkUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMTAxID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDExMSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxMTMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMTFCID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDEyNiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDEyNykgfHxcblx0ICAgICAgKDB4MDEyQiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxMzEgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAxMzMpIHx8XG5cdCAgICAgICgweDAxMzggPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMTNGIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMTQyKSB8fFxuXHQgICAgICAoMHgwMTQ0ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDE0OCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDE0QikgfHxcblx0ICAgICAgKDB4MDE0RCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxNTIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAxNTMpIHx8XG5cdCAgICAgICgweDAxNjYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAxNjcpIHx8XG5cdCAgICAgICgweDAxNkIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMUNFID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDFEMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxRDIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMUQ0ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDFENiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAxRDggPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMURBID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDFEQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAyNTEgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMjYxID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDJDNCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAyQzcgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMkM5IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgwMkNCKSB8fFxuXHQgICAgICAoMHgwMkNEID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDJEMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDAyRDggPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDAyREIpIHx8XG5cdCAgICAgICgweDAyREQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgwMkRGID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MDMwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDM2RikgfHxcblx0ICAgICAgKDB4MDM5MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNBMSkgfHxcblx0ICAgICAgKDB4MDNBMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNBOSkgfHxcblx0ICAgICAgKDB4MDNCMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNDMSkgfHxcblx0ICAgICAgKDB4MDNDMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MDNDOSkgfHxcblx0ICAgICAgKDB4MDQwMSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDA0MTAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDA0NEYpIHx8XG5cdCAgICAgICgweDA0NTEgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMDEwID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjAxMyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxNikgfHxcblx0ICAgICAgKDB4MjAxOCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxOSkgfHxcblx0ICAgICAgKDB4MjAxQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAxRCkgfHxcblx0ICAgICAgKDB4MjAyMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAyMikgfHxcblx0ICAgICAgKDB4MjAyNCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjAyNykgfHxcblx0ICAgICAgKDB4MjAzMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIwMzIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIwMzMpIHx8XG5cdCAgICAgICgweDIwMzUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMDNCID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjAzRSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIwNzQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMDdGID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjA4MSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjA4NCkgfHxcblx0ICAgICAgKDB4MjBBQyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxMDMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMTA1ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjEwOSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxMTMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMTE2ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjEyMSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjEyMikgfHxcblx0ICAgICAgKDB4MjEyNiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxMkIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMTUzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTU0KSB8fFxuXHQgICAgICAoMHgyMTVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTVFKSB8fFxuXHQgICAgICAoMHgyMTYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTZCKSB8fFxuXHQgICAgICAoMHgyMTcwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMTc5KSB8fFxuXHQgICAgICAoMHgyMTg5ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjE5MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjE5OSkgfHxcblx0ICAgICAgKDB4MjFCOCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjFCOSkgfHxcblx0ICAgICAgKDB4MjFEMiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIxRDQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMUU3ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIwMCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyMDIgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMDMpIHx8XG5cdCAgICAgICgweDIyMDcgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDIyMDgpIHx8XG5cdCAgICAgICgweDIyMEIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjBGID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIxMSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyMTUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjFBID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIxRCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIyMCkgfHxcblx0ICAgICAgKDB4MjIyMyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyMjUgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjI3IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyMjJDKSB8fFxuXHQgICAgICAoMHgyMjJFID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjIzNCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIzNykgfHxcblx0ICAgICAgKDB4MjIzQyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjIzRCkgfHxcblx0ICAgICAgKDB4MjI0OCA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyNEMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMjUyID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjI2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2MSkgfHxcblx0ICAgICAgKDB4MjI2NCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2NykgfHxcblx0ICAgICAgKDB4MjI2QSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2QikgfHxcblx0ICAgICAgKDB4MjI2RSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI2RikgfHxcblx0ICAgICAgKDB4MjI4MiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI4MykgfHxcblx0ICAgICAgKDB4MjI4NiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjI4NykgfHxcblx0ICAgICAgKDB4MjI5NSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIyOTkgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyMkE1ID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjJCRiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDIzMTIgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNDYwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNEU5KSB8fFxuXHQgICAgICAoMHgyNEVCIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTRCKSB8fFxuXHQgICAgICAoMHgyNTUwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTczKSB8fFxuXHQgICAgICAoMHgyNTgwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNThGKSB8fFxuXHQgICAgICAoMHgyNTkyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNTk1KSB8fFxuXHQgICAgICAoMHgyNUEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUExKSB8fFxuXHQgICAgICAoMHgyNUEzIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUE5KSB8fFxuXHQgICAgICAoMHgyNUIyIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUIzKSB8fFxuXHQgICAgICAoMHgyNUI2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUI3KSB8fFxuXHQgICAgICAoMHgyNUJDIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUJEKSB8fFxuXHQgICAgICAoMHgyNUMwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUMxKSB8fFxuXHQgICAgICAoMHgyNUM2IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNUM4KSB8fFxuXHQgICAgICAoMHgyNUNCID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjVDRSA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVEMSkgfHxcblx0ICAgICAgKDB4MjVFMiA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjVFNSkgfHxcblx0ICAgICAgKDB4MjVFRiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI2MDUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2MDYpIHx8XG5cdCAgICAgICgweDI2MDkgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNjBFIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjBGKSB8fFxuXHQgICAgICAoMHgyNjE0IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNjE1KSB8fFxuXHQgICAgICAoMHgyNjFDID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjYxRSA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI2NDAgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNjQyID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4MjY2MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2MSkgfHxcblx0ICAgICAgKDB4MjY2MyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2NSkgfHxcblx0ICAgICAgKDB4MjY2NyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2QSkgfHxcblx0ICAgICAgKDB4MjY2QyA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MjY2RCkgfHxcblx0ICAgICAgKDB4MjY2RiA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI2OUUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2OUYpIHx8XG5cdCAgICAgICgweDI2QkUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2QkYpIHx8XG5cdCAgICAgICgweDI2QzQgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2Q0QpIHx8XG5cdCAgICAgICgweDI2Q0YgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI2RTEpIHx8XG5cdCAgICAgICgweDI2RTMgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgyNkU4IDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgyNkZGKSB8fFxuXHQgICAgICAoMHgyNzNEID09IGNvZGVQb2ludCkgfHxcblx0ICAgICAgKDB4Mjc1NyA9PSBjb2RlUG9pbnQpIHx8XG5cdCAgICAgICgweDI3NzYgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDI3N0YpIHx8XG5cdCAgICAgICgweDJCNTUgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDJCNTkpIHx8XG5cdCAgICAgICgweDMyNDggPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDMyNEYpIHx8XG5cdCAgICAgICgweEUwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEY4RkYpIHx8XG5cdCAgICAgICgweEZFMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZFMEYpIHx8XG5cdCAgICAgICgweEZGRkQgPT0gY29kZVBvaW50KSB8fFxuXHQgICAgICAoMHgxRjEwMCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxMEEpIHx8XG5cdCAgICAgICgweDFGMTEwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHgxRjEyRCkgfHxcblx0ICAgICAgKDB4MUYxMzAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDFGMTY5KSB8fFxuXHQgICAgICAoMHgxRjE3MCA8PSBjb2RlUG9pbnQgJiYgY29kZVBvaW50IDw9IDB4MUYxOUEpIHx8XG5cdCAgICAgICgweEUwMTAwIDw9IGNvZGVQb2ludCAmJiBjb2RlUG9pbnQgPD0gMHhFMDFFRikgfHxcblx0ICAgICAgKDB4RjAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweEZGRkZEKSB8fFxuXHQgICAgICAoMHgxMDAwMDAgPD0gY29kZVBvaW50ICYmIGNvZGVQb2ludCA8PSAweDEwRkZGRCkpIHtcblx0ICAgIHJldHVybiAnQSc7XG5cdCAgfVxuXG5cdCAgcmV0dXJuICdOJztcblx0fTtcblxuXHRlYXcuY2hhcmFjdGVyTGVuZ3RoID0gZnVuY3Rpb24oY2hhcmFjdGVyKSB7XG5cdCAgdmFyIGNvZGUgPSB0aGlzLmVhc3RBc2lhbldpZHRoKGNoYXJhY3Rlcik7XG5cdCAgaWYgKGNvZGUgPT0gJ0YnIHx8IGNvZGUgPT0gJ1cnIHx8IGNvZGUgPT0gJ0EnKSB7XG5cdCAgICByZXR1cm4gMjtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIDE7XG5cdCAgfVxuXHR9O1xuXG5cdC8vIFNwbGl0IGEgc3RyaW5nIGNvbnNpZGVyaW5nIHN1cnJvZ2F0ZS1wYWlycy5cblx0ZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcblx0ICByZXR1cm4gc3RyaW5nLm1hdGNoKC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFteXFx1RDgwMC1cXHVERkZGXS9nKSB8fCBbXTtcblx0fVxuXG5cdGVhdy5sZW5ndGggPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0ICB2YXIgY2hhcmFjdGVycyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcblx0ICB2YXIgbGVuID0gMDtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcblx0ICAgIGxlbiA9IGxlbiArIHRoaXMuY2hhcmFjdGVyTGVuZ3RoKGNoYXJhY3RlcnNbaV0pO1xuXHQgIH1cblx0ICByZXR1cm4gbGVuO1xuXHR9O1xuXG5cdGVhdy5zbGljZSA9IGZ1bmN0aW9uKHRleHQsIHN0YXJ0LCBlbmQpIHtcblx0ICB0ZXh0TGVuID0gZWF3Lmxlbmd0aCh0ZXh0KTtcblx0ICBzdGFydCA9IHN0YXJ0ID8gc3RhcnQgOiAwO1xuXHQgIGVuZCA9IGVuZCA/IGVuZCA6IDE7XG5cdCAgaWYgKHN0YXJ0IDwgMCkge1xuXHQgICAgICBzdGFydCA9IHRleHRMZW4gKyBzdGFydDtcblx0ICB9XG5cdCAgaWYgKGVuZCA8IDApIHtcblx0ICAgICAgZW5kID0gdGV4dExlbiArIGVuZDtcblx0ICB9XG5cdCAgdmFyIHJlc3VsdCA9ICcnO1xuXHQgIHZhciBlYXdMZW4gPSAwO1xuXHQgIHZhciBjaGFycyA9IHN0cmluZ1RvQXJyYXkodGV4dCk7XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuXHQgICAgdmFyIGNoYXIgPSBjaGFyc1tpXTtcblx0ICAgIHZhciBjaGFyTGVuID0gZWF3Lmxlbmd0aChjaGFyKTtcblx0ICAgIGlmIChlYXdMZW4gPj0gc3RhcnQgLSAoY2hhckxlbiA9PSAyID8gMSA6IDApKSB7XG5cdCAgICAgICAgaWYgKGVhd0xlbiArIGNoYXJMZW4gPD0gZW5kKSB7XG5cdCAgICAgICAgICAgIHJlc3VsdCArPSBjaGFyO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblx0ICAgIGVhd0xlbiArPSBjaGFyTGVuO1xuXHQgIH1cblx0ICByZXR1cm4gcmVzdWx0O1xuXHR9OyBcbn0gKGVhc3Rhc2lhbndpZHRoKSk7XG5cbnZhciBlYXN0YXNpYW53aWR0aEV4cG9ydHMgPSBlYXN0YXNpYW53aWR0aC5leHBvcnRzO1xuY29uc3QgZWFzdEFzaWFuV2lkdGggPSAvKkBfX1BVUkVfXyovZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMoZWFzdGFzaWFud2lkdGhFeHBvcnRzKTtcblxuY29uc3QgZW1vamlSZWdleCA9ICgpID0+IHtcblx0Ly8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG5cdHJldHVybiAvWyMqMC05XVxcdUZFMEY/XFx1MjBFM3xbXFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyXFx1MjY5NC1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTdcXHUyNkFBXFx1MjZCMFxcdTI2QjFcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM4XFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZFOVxcdTI2RjAtXFx1MjZGNVxcdTI2RjdcXHUyNkY4XFx1MjZGQVxcdTI3MDJcXHUyNzA4XFx1MjcwOVxcdTI3MEZcXHUyNzEyXFx1MjcxNFxcdTI3MTZcXHUyNzFEXFx1MjcyMVxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzU3XFx1Mjc2M1xcdTI3QTFcXHUyOTM0XFx1MjkzNVxcdTJCMDUtXFx1MkIwN1xcdTJCMUJcXHUyQjFDXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldXFx1RkUwRj98W1xcdTI2MURcXHUyNzBDXFx1MjcwRF0oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHUyNzBBXFx1MjcwQl0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1MjNFOS1cXHUyM0VDXFx1MjNGMFxcdTIzRjNcXHUyNUZEXFx1MjY5M1xcdTI2QTFcXHUyNkFCXFx1MjZDNVxcdTI2Q0VcXHUyNkQ0XFx1MjZFQVxcdTI2RkRcXHUyNzA1XFx1MjcyOFxcdTI3NENcXHUyNzRFXFx1Mjc1My1cXHUyNzU1XFx1Mjc5NS1cXHUyNzk3XFx1MjdCMFxcdTI3QkZcXHUyQjUwXXxcXHUyNkY5KD86XFx1RkUwRnxcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHUyNzY0XFx1RkUwRj8oPzpcXHUyMDBEKD86XFx1RDgzRFxcdUREMjV8XFx1RDgzRVxcdURFNzkpKT98XFx1RDgzQyg/OltcXHVEQzA0XFx1REQ3MFxcdURENzFcXHVERDdFXFx1REQ3RlxcdURFMDJcXHVERTM3XFx1REYyMVxcdURGMjQtXFx1REYyQ1xcdURGMzZcXHVERjdEXFx1REY5NlxcdURGOTdcXHVERjk5LVxcdURGOUJcXHVERjlFXFx1REY5RlxcdURGQ0RcXHVERkNFXFx1REZENC1cXHVERkRGXFx1REZGNVxcdURGRjddXFx1RkUwRj98W1xcdURGODVcXHVERkMyXFx1REZDN10oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REZDM1xcdURGQzRcXHVERkNBXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERkNCXFx1REZDQ10oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVEQ0NGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURFMDFcXHVERTFBXFx1REUyRlxcdURFMzItXFx1REUzNlxcdURFMzgtXFx1REUzQVxcdURFNTBcXHVERTUxXFx1REYwMC1cXHVERjIwXFx1REYyRC1cXHVERjM1XFx1REYzNy1cXHVERjdDXFx1REY3RS1cXHVERjg0XFx1REY4Ni1cXHVERjkzXFx1REZBMC1cXHVERkMxXFx1REZDNVxcdURGQzZcXHVERkM4XFx1REZDOVxcdURGQ0YtXFx1REZEM1xcdURGRTAtXFx1REZGMFxcdURGRjgtXFx1REZGRl18XFx1RERFNlxcdUQ4M0NbXFx1RERFOC1cXHVEREVDXFx1RERFRVxcdURERjFcXHVEREYyXFx1RERGNFxcdURERjYtXFx1RERGQVxcdURERkNcXHVEREZEXFx1RERGRl18XFx1RERFN1xcdUQ4M0NbXFx1RERFNlxcdURERTdcXHVEREU5LVxcdURERUZcXHVEREYxLVxcdURERjRcXHVEREY2LVxcdURERjlcXHVEREZCXFx1RERGQ1xcdURERkVcXHVEREZGXXxcXHVEREU4XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERUVcXHVEREYwLVxcdURERjVcXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGRjNcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHUyNkE3XFx1RkUwRj98XFx1RDgzQ1xcdURGMDgpKT98XFx1REZGNCg/OlxcdTIwMERcXHUyNjIwXFx1RkUwRj98XFx1REI0MFxcdURDNjdcXHVEQjQwXFx1REM2MlxcdURCNDAoPzpcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2N3xcXHVEQzczXFx1REI0MFxcdURDNjNcXHVEQjQwXFx1REM3NHxcXHVEQzc3XFx1REI0MFxcdURDNkNcXHVEQjQwXFx1REM3MylcXHVEQjQwXFx1REM3Rik/KXxcXHVEODNEKD86W1xcdURDMDhcXHVEQzI2XSg/OlxcdTIwMERcXHUyQjFCKT98W1xcdURDM0ZcXHVEQ0ZEXFx1REQ0OVxcdURENEFcXHVERDZGXFx1REQ3MFxcdURENzNcXHVERDc2LVxcdURENzlcXHVERDg3XFx1REQ4QS1cXHVERDhEXFx1RERBNVxcdUREQThcXHVEREIxXFx1RERCMlxcdUREQkNcXHVEREMyLVxcdUREQzRcXHVEREQxLVxcdURERDNcXHVERERDLVxcdUREREVcXHVEREUxXFx1RERFM1xcdURERThcXHVEREVGXFx1RERGM1xcdURERkFcXHVERUNCXFx1REVDRC1cXHVERUNGXFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRjBcXHVERUYzXVxcdUZFMEY/fFtcXHVEQzQyXFx1REM0M1xcdURDNDYtXFx1REM1MFxcdURDNjZcXHVEQzY3XFx1REM2Qi1cXHVEQzZEXFx1REM3MlxcdURDNzQtXFx1REM3NlxcdURDNzhcXHVEQzdDXFx1REM4M1xcdURDODVcXHVEQzhGXFx1REM5MVxcdURDQUFcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVERTRDXFx1REU0RlxcdURFQzBcXHVERUNDXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzZFXFx1REM3MFxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDc0XFx1REQ5MF0oPzpcXHVGRTBGfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVEQzAwLVxcdURDMDdcXHVEQzA5LVxcdURDMTRcXHVEQzE2LVxcdURDMjVcXHVEQzI3LVxcdURDM0FcXHVEQzNDLVxcdURDM0VcXHVEQzQwXFx1REM0NFxcdURDNDVcXHVEQzUxLVxcdURDNjVcXHVEQzZBXFx1REM3OS1cXHVEQzdCXFx1REM3RC1cXHVEQzgwXFx1REM4NFxcdURDODgtXFx1REM4RVxcdURDOTBcXHVEQzkyLVxcdURDQTlcXHVEQ0FCLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVEREE0XFx1RERGQi1cXHVERTJEXFx1REUyRi1cXHVERTM0XFx1REUzNy1cXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ3XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMzQig/OlxcdTIwMERcXHUyNzQ0XFx1RkUwRj8pP3xcXHVEQzQxXFx1RkUwRj8oPzpcXHUyMDBEXFx1RDgzRFxcdURERThcXHVGRTBGPyk/fFxcdURDNjgoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OHxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPyl8XFx1RDgzRVtcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF0pfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pKSk/fFxcdURGRkUoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSkpKT8pKT98XFx1REM2OSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9bXFx1REM2OFxcdURDNjldfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzY2KD86XFx1MjAwRFxcdUQ4M0RcXHVEQzY2KT98XFx1REM2Nyg/OlxcdTIwMERcXHVEODNEW1xcdURDNjZcXHVEQzY3XSk/fFxcdURDNjlcXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pKXxcXHVEODNFW1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXSl8XFx1RDgzQyg/OlxcdURGRkIoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkMtXFx1REZGRl0pKSk/fFxcdURGRkMoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86W1xcdURDNjhcXHVEQzY5XXxcXHVEQzhCXFx1MjAwRFxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pKSk/fFxcdURGRkYoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV18XFx1REM4QlxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XSlcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURDNkYoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REQ3NSg/OlxcdUZFMEZ8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98XFx1REUyRSg/OlxcdTIwMERcXHVEODNEXFx1RENBOCk/fFxcdURFMzUoPzpcXHUyMDBEXFx1RDgzRFxcdURDQUIpP3xcXHVERTM2KD86XFx1MjAwRFxcdUQ4M0NcXHVERjJCXFx1RkUwRj8pPyl8XFx1RDgzRSg/OltcXHVERDBDXFx1REQwRlxcdUREMTgtXFx1REQxRlxcdUREMzAtXFx1REQzNFxcdUREMzZcXHVERDc3XFx1RERCNVxcdUREQjZcXHVEREJCXFx1REREMlxcdURERDNcXHVEREQ1XFx1REVDMy1cXHVERUM1XFx1REVGMFxcdURFRjItXFx1REVGOF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3xbXFx1REQyNlxcdUREMzVcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdUREQjhcXHVEREI5XFx1RERDRC1cXHVERENGXFx1RERENFxcdURERDYtXFx1RERERF0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RERERVxcdUREREZdKD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFtcXHVERDBEXFx1REQwRVxcdUREMTAtXFx1REQxN1xcdUREMjAtXFx1REQyNVxcdUREMjctXFx1REQyRlxcdUREM0FcXHVERDNGLVxcdURENDVcXHVERDQ3LVxcdURENzZcXHVERDc4LVxcdUREQjRcXHVEREI3XFx1RERCQVxcdUREQkMtXFx1RERDQ1xcdURERDBcXHVEREUwLVxcdURERkZcXHVERTcwLVxcdURFN0NcXHVERTgwLVxcdURFODhcXHVERTkwLVxcdURFQkRcXHVERUJGLVxcdURFQzJcXHVERUNFLVxcdURFREJcXHVERUUwLVxcdURFRThdfFxcdUREM0MoPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/fFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFxcdURERDEoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDEpKXxcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdUQ4M0UoPzpbXFx1RERBRi1cXHVEREIzXFx1RERCQ1xcdUREQkRdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUYtXFx1RERCM1xcdUREQkNcXHVEREJEXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEW1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1RDgzRSg/OltcXHVEREFGLVxcdUREQjNcXHVEREJDXFx1RERCRF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSkpKT8pKT98XFx1REVGMSg/OlxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKT98XFx1REZGQyg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pP3xcXHVERkZEKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSk/fFxcdURGRkUoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKT98XFx1REZGRig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSk/KSk/KS9nO1xufTtcblxuZnVuY3Rpb24gc3RyaW5nV2lkdGgkMShzdHJpbmcsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnIHx8IHN0cmluZy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdG9wdGlvbnMgPSB7XG5cdFx0YW1iaWd1b3VzSXNOYXJyb3c6IHRydWUsXG5cdFx0Y291bnRBbnNpRXNjYXBlQ29kZXM6IGZhbHNlLFxuXHRcdC4uLm9wdGlvbnMsXG5cdH07XG5cblx0aWYgKCFvcHRpb25zLmNvdW50QW5zaUVzY2FwZUNvZGVzKSB7XG5cdFx0c3RyaW5nID0gc3RyaXBBbnNpKHN0cmluZyk7XG5cdH1cblxuXHRpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgYW1iaWd1b3VzQ2hhcmFjdGVyV2lkdGggPSBvcHRpb25zLmFtYmlndW91c0lzTmFycm93ID8gMSA6IDI7XG5cdGxldCB3aWR0aCA9IDA7XG5cblx0Zm9yIChjb25zdCB7c2VnbWVudDogY2hhcmFjdGVyfSBvZiBuZXcgSW50bC5TZWdtZW50ZXIoKS5zZWdtZW50KHN0cmluZykpIHtcblx0XHRjb25zdCBjb2RlUG9pbnQgPSBjaGFyYWN0ZXIuY29kZVBvaW50QXQoMCk7XG5cblx0XHQvLyBJZ25vcmUgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0aWYgKGNvZGVQb2ludCA8PSAweDFGIHx8IChjb2RlUG9pbnQgPj0gMHg3RiAmJiBjb2RlUG9pbnQgPD0gMHg5RikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHgzXzAwICYmIGNvZGVQb2ludCA8PSAweDNfNkYpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChlbW9qaVJlZ2V4KCkudGVzdChjaGFyYWN0ZXIpKSB7XG5cdFx0XHR3aWR0aCArPSAyO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29kZSA9IGVhc3RBc2lhbldpZHRoLmVhc3RBc2lhbldpZHRoKGNoYXJhY3Rlcik7XG5cdFx0c3dpdGNoIChjb2RlKSB7XG5cdFx0XHRjYXNlICdGJzpcblx0XHRcdGNhc2UgJ1cnOiB7XG5cdFx0XHRcdHdpZHRoICs9IDI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjYXNlICdBJzoge1xuXHRcdFx0XHR3aWR0aCArPSBhbWJpZ3VvdXNDaGFyYWN0ZXJXaWR0aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0d2lkdGggKz0gMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59XG5cbmZ1bmN0aW9uIGlzVW5pY29kZVN1cHBvcnRlZCgpIHtcblx0aWYgKHByb2Nlc3MkMS5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuXHRcdHJldHVybiBwcm9jZXNzJDEuZW52LlRFUk0gIT09ICdsaW51eCc7IC8vIExpbnV4IGNvbnNvbGUgKGtlcm5lbClcblx0fVxuXG5cdHJldHVybiBCb29sZWFuKHByb2Nlc3MkMS5lbnYuQ0kpXG5cdFx0fHwgQm9vbGVhbihwcm9jZXNzJDEuZW52LldUX1NFU1NJT04pIC8vIFdpbmRvd3MgVGVybWluYWxcblx0XHR8fCBCb29sZWFuKHByb2Nlc3MkMS5lbnYuVEVSTUlOVVNfU1VCTElNRSkgLy8gVGVybWludXMgKDwwLjIuMjcpXG5cdFx0fHwgcHJvY2VzcyQxLmVudi5Db25FbXVUYXNrID09PSAne2NtZDo6Q21kZXJ9JyAvLyBDb25FbXUgYW5kIGNtZGVyXG5cdFx0fHwgcHJvY2VzcyQxLmVudi5URVJNX1BST0dSQU0gPT09ICdUZXJtaW51cy1TdWJsaW1lJ1xuXHRcdHx8IHByb2Nlc3MkMS5lbnYuVEVSTV9QUk9HUkFNID09PSAndnNjb2RlJ1xuXHRcdHx8IHByb2Nlc3MkMS5lbnYuVEVSTSA9PT0gJ3h0ZXJtLTI1NmNvbG9yJ1xuXHRcdHx8IHByb2Nlc3MkMS5lbnYuVEVSTSA9PT0gJ2FsYWNyaXR0eSdcblx0XHR8fCBwcm9jZXNzJDEuZW52LlRFUk1JTkFMX0VNVUxBVE9SID09PSAnSmV0QnJhaW5zLUplZGlUZXJtJztcbn1cblxuY29uc3QgVFlQRV9DT0xPUl9NQVAgPSB7XG4gIGluZm86IFwiY3lhblwiLFxuICBmYWlsOiBcInJlZFwiLFxuICBzdWNjZXNzOiBcImdyZWVuXCIsXG4gIHJlYWR5OiBcImdyZWVuXCIsXG4gIHN0YXJ0OiBcIm1hZ2VudGFcIlxufTtcbmNvbnN0IExFVkVMX0NPTE9SX01BUCA9IHtcbiAgMDogXCJyZWRcIixcbiAgMTogXCJ5ZWxsb3dcIlxufTtcbmNvbnN0IHVuaWNvZGUgPSBpc1VuaWNvZGVTdXBwb3J0ZWQoKTtcbmNvbnN0IHMgPSAoYywgZmFsbGJhY2spID0+IHVuaWNvZGUgPyBjIDogZmFsbGJhY2s7XG5jb25zdCBUWVBFX0lDT05TID0ge1xuICBlcnJvcjogcyhcIlxcdTI3MTZcIiwgXCJcXHhEN1wiKSxcbiAgZmF0YWw6IHMoXCJcXHUyNzE2XCIsIFwiXFx4RDdcIiksXG4gIHJlYWR5OiBzKFwiXFx1MjcxNFwiLCBcIlxcdTIyMUFcIiksXG4gIHdhcm46IHMoXCJcXHUyNkEwXCIsIFwiXFx1MjAzQ1wiKSxcbiAgaW5mbzogcyhcIlxcdTIxMzlcIiwgXCJpXCIpLFxuICBzdWNjZXNzOiBzKFwiXFx1MjcxNFwiLCBcIlxcdTIyMUFcIiksXG4gIGRlYnVnOiBzKFwiXFx1MjY5OVwiLCBcIkRcIiksXG4gIHRyYWNlOiBzKFwiXFx1MjE5MlwiLCBcIlxcdTIxOTJcIiksXG4gIGZhaWw6IHMoXCJcXHUyNzE2XCIsIFwiXFx4RDdcIiksXG4gIHN0YXJ0OiBzKFwiXFx1MjVEMFwiLCBcIm9cIiksXG4gIGxvZzogXCJcIlxufTtcbmZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cikge1xuICBpZiAoIUludGwuU2VnbWVudGVyKSB7XG4gICAgcmV0dXJuIHN0cmlwQW5zaSQxKHN0cikubGVuZ3RoO1xuICB9XG4gIHJldHVybiBzdHJpbmdXaWR0aCQxKHN0cik7XG59XG5jbGFzcyBGYW5jeVJlcG9ydGVyIGV4dGVuZHMgQmFzaWNSZXBvcnRlciB7XG4gIGZvcm1hdFN0YWNrKHN0YWNrKSB7XG4gICAgcmV0dXJuIFwiXFxuXCIgKyBwYXJzZVN0YWNrKHN0YWNrKS5tYXAoXG4gICAgICAobGluZSkgPT4gXCIgIFwiICsgbGluZS5yZXBsYWNlKC9eYXQgKy8sIChtKSA9PiBjb2xvcnMuZ3JheShtKSkucmVwbGFjZSgvXFwoKC4rKVxcKS8sIChfLCBtKSA9PiBgKCR7Y29sb3JzLmN5YW4obSl9KWApXG4gICAgKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIGZvcm1hdFR5cGUobG9nT2JqLCBpc0JhZGdlLCBvcHRzKSB7XG4gICAgY29uc3QgdHlwZUNvbG9yID0gVFlQRV9DT0xPUl9NQVBbbG9nT2JqLnR5cGVdIHx8IExFVkVMX0NPTE9SX01BUFtsb2dPYmoubGV2ZWxdIHx8IFwiZ3JheVwiO1xuICAgIGlmIChpc0JhZGdlKSB7XG4gICAgICByZXR1cm4gZ2V0QmdDb2xvcih0eXBlQ29sb3IpKFxuICAgICAgICBjb2xvcnMuYmxhY2soYCAke2xvZ09iai50eXBlLnRvVXBwZXJDYXNlKCl9IGApXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBfdHlwZSA9IHR5cGVvZiBUWVBFX0lDT05TW2xvZ09iai50eXBlXSA9PT0gXCJzdHJpbmdcIiA/IFRZUEVfSUNPTlNbbG9nT2JqLnR5cGVdIDogbG9nT2JqLmljb24gfHwgbG9nT2JqLnR5cGU7XG4gICAgcmV0dXJuIF90eXBlID8gZ2V0Q29sb3IodHlwZUNvbG9yKShfdHlwZSkgOiBcIlwiO1xuICB9XG4gIGZvcm1hdExvZ09iaihsb2dPYmosIG9wdHMpIHtcbiAgICBjb25zdCBbbWVzc2FnZSwgLi4uYWRkaXRpb25hbF0gPSB0aGlzLmZvcm1hdEFyZ3MobG9nT2JqLmFyZ3MsIG9wdHMpLnNwbGl0KFxuICAgICAgXCJcXG5cIlxuICAgICk7XG4gICAgaWYgKGxvZ09iai50eXBlID09PSBcImJveFwiKSB7XG4gICAgICByZXR1cm4gYm94KFxuICAgICAgICBjaGFyYWN0ZXJGb3JtYXQoXG4gICAgICAgICAgbWVzc2FnZSArIChhZGRpdGlvbmFsLmxlbmd0aCA+IDAgPyBcIlxcblwiICsgYWRkaXRpb25hbC5qb2luKFwiXFxuXCIpIDogXCJcIilcbiAgICAgICAgKSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiBsb2dPYmoudGl0bGUgPyBjaGFyYWN0ZXJGb3JtYXQobG9nT2JqLnRpdGxlKSA6IHZvaWQgMCxcbiAgICAgICAgICBzdHlsZTogbG9nT2JqLnN0eWxlXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmZvcm1hdERhdGUobG9nT2JqLmRhdGUsIG9wdHMpO1xuICAgIGNvbnN0IGNvbG9yZWREYXRlID0gZGF0ZSAmJiBjb2xvcnMuZ3JheShkYXRlKTtcbiAgICBjb25zdCBpc0JhZGdlID0gbG9nT2JqLmJhZGdlID8/IGxvZ09iai5sZXZlbCA8IDI7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZm9ybWF0VHlwZShsb2dPYmosIGlzQmFkZ2UsIG9wdHMpO1xuICAgIGNvbnN0IHRhZyA9IGxvZ09iai50YWcgPyBjb2xvcnMuZ3JheShsb2dPYmoudGFnKSA6IFwiXCI7XG4gICAgbGV0IGxpbmU7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMuZmlsdGVyQW5kSm9pbihbdHlwZSwgY2hhcmFjdGVyRm9ybWF0KG1lc3NhZ2UpXSk7XG4gICAgY29uc3QgcmlnaHQgPSB0aGlzLmZpbHRlckFuZEpvaW4ob3B0cy5jb2x1bW5zID8gW3RhZywgY29sb3JlZERhdGVdIDogW3RhZ10pO1xuICAgIGNvbnN0IHNwYWNlID0gKG9wdHMuY29sdW1ucyB8fCAwKSAtIHN0cmluZ1dpZHRoKGxlZnQpIC0gc3RyaW5nV2lkdGgocmlnaHQpIC0gMjtcbiAgICBsaW5lID0gc3BhY2UgPiAwICYmIChvcHRzLmNvbHVtbnMgfHwgMCkgPj0gODAgPyBsZWZ0ICsgXCIgXCIucmVwZWF0KHNwYWNlKSArIHJpZ2h0IDogKHJpZ2h0ID8gYCR7Y29sb3JzLmdyYXkoYFske3JpZ2h0fV1gKX0gYCA6IFwiXCIpICsgbGVmdDtcbiAgICBsaW5lICs9IGNoYXJhY3RlckZvcm1hdChcbiAgICAgIGFkZGl0aW9uYWwubGVuZ3RoID4gMCA/IFwiXFxuXCIgKyBhZGRpdGlvbmFsLmpvaW4oXCJcXG5cIikgOiBcIlwiXG4gICAgKTtcbiAgICBpZiAobG9nT2JqLnR5cGUgPT09IFwidHJhY2VcIikge1xuICAgICAgY29uc3QgX2VyciA9IG5ldyBFcnJvcihcIlRyYWNlOiBcIiArIGxvZ09iai5tZXNzYWdlKTtcbiAgICAgIGxpbmUgKz0gdGhpcy5mb3JtYXRTdGFjayhfZXJyLnN0YWNrIHx8IFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gaXNCYWRnZSA/IFwiXFxuXCIgKyBsaW5lICsgXCJcXG5cIiA6IGxpbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoYXJhY3RlckZvcm1hdChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9gKFteYF0rKWAvZ20sIChfLCBtKSA9PiBjb2xvcnMuY3lhbihtKSkucmVwbGFjZSgvXFxzK18oW15fXSspX1xccysvZ20sIChfLCBtKSA9PiBgICR7Y29sb3JzLnVuZGVybGluZShtKX0gYCk7XG59XG5mdW5jdGlvbiBnZXRDb2xvcihjb2xvciA9IFwid2hpdGVcIikge1xuICByZXR1cm4gY29sb3JzW2NvbG9yXSB8fCBjb2xvcnMud2hpdGU7XG59XG5mdW5jdGlvbiBnZXRCZ0NvbG9yKGNvbG9yID0gXCJiZ1doaXRlXCIpIHtcbiAgcmV0dXJuIGNvbG9yc1tgYmcke2NvbG9yWzBdLnRvVXBwZXJDYXNlKCl9JHtjb2xvci5zbGljZSgxKX1gXSB8fCBjb2xvcnMuYmdXaGl0ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29uc29sYShvcHRpb25zID0ge30pIHtcbiAgbGV0IGxldmVsID0gX2dldERlZmF1bHRMb2dMZXZlbCgpO1xuICBpZiAocHJvY2Vzcy5lbnYuQ09OU09MQV9MRVZFTCkge1xuICAgIGxldmVsID0gTnVtYmVyLnBhcnNlSW50KHByb2Nlc3MuZW52LkNPTlNPTEFfTEVWRUwpID8/IGxldmVsO1xuICB9XG4gIGNvbnN0IGNvbnNvbGEyID0gY3JlYXRlQ29uc29sYSQxKHtcbiAgICBsZXZlbCxcbiAgICBkZWZhdWx0czogeyBsZXZlbCB9LFxuICAgIHN0ZG91dDogcHJvY2Vzcy5zdGRvdXQsXG4gICAgc3RkZXJyOiBwcm9jZXNzLnN0ZGVycixcbiAgICBwcm9tcHQ6ICguLi5hcmdzKSA9PiBpbXBvcnQoJy4uL2NodW5rcy9wcm9tcHQubWpzJykudGhlbigobSkgPT4gbS5wcm9tcHQoLi4uYXJncykpLFxuICAgIHJlcG9ydGVyczogb3B0aW9ucy5yZXBvcnRlcnMgfHwgW1xuICAgICAgb3B0aW9ucy5mYW5jeSA/PyAhKGlzQ0kgfHwgaXNUZXN0KSA/IG5ldyBGYW5jeVJlcG9ydGVyKCkgOiBuZXcgQmFzaWNSZXBvcnRlcigpXG4gICAgXSxcbiAgICAuLi5vcHRpb25zXG4gIH0pO1xuICByZXR1cm4gY29uc29sYTI7XG59XG5mdW5jdGlvbiBfZ2V0RGVmYXVsdExvZ0xldmVsKCkge1xuICBpZiAoaXNEZWJ1Zykge1xuICAgIHJldHVybiBMb2dMZXZlbHMuZGVidWc7XG4gIH1cbiAgaWYgKGlzVGVzdCkge1xuICAgIHJldHVybiBMb2dMZXZlbHMud2FybjtcbiAgfVxuICByZXR1cm4gTG9nTGV2ZWxzLmluZm87XG59XG5jb25zdCBjb25zb2xhID0gY3JlYXRlQ29uc29sYSgpO1xuXG5leHBvcnQgeyBjb25zb2xhIGFzIGEsIGNyZWF0ZUNvbnNvbGEgYXMgYywgZ2V0RGVmYXVsdEV4cG9ydEZyb21DanMgYXMgZywgaXNVbmljb2RlU3VwcG9ydGVkIGFzIGkgfTtcbiIsICIvLyBOb3RlOiB0aGlzIGlzIHRoZSBzZW12ZXIub3JnIHZlcnNpb24gb2YgdGhlIHNwZWMgdGhhdCBpdCBpbXBsZW1lbnRzXG4vLyBOb3QgbmVjZXNzYXJpbHkgdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGNvZGUuXG5jb25zdCBTRU1WRVJfU1BFQ19WRVJTSU9OID0gJzIuMC4wJ1xuXG5jb25zdCBNQVhfTEVOR1RIID0gMjU2XG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIDkwMDcxOTkyNTQ3NDA5OTFcblxuLy8gTWF4IHNhZmUgc2VnbWVudCBsZW5ndGggZm9yIGNvZXJjaW9uLlxuY29uc3QgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCA9IDE2XG5cbi8vIE1heCBzYWZlIGxlbmd0aCBmb3IgYSBidWlsZCBpZGVudGlmaWVyLiBUaGUgbWF4IGxlbmd0aCBtaW51cyA2IGNoYXJhY3RlcnMgZm9yXG4vLyB0aGUgc2hvcnRlc3QgdmVyc2lvbiB3aXRoIGEgYnVpbGQgMC4wLjArQlVJTEQuXG5jb25zdCBNQVhfU0FGRV9CVUlMRF9MRU5HVEggPSBNQVhfTEVOR1RIIC0gNlxuXG5jb25zdCBSRUxFQVNFX1RZUEVTID0gW1xuICAnbWFqb3InLFxuICAncHJlbWFqb3InLFxuICAnbWlub3InLFxuICAncHJlbWlub3InLFxuICAncGF0Y2gnLFxuICAncHJlcGF0Y2gnLFxuICAncHJlcmVsZWFzZScsXG5dXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RILFxuICBNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RILFxuICBNQVhfU0FGRV9CVUlMRF9MRU5HVEgsXG4gIE1BWF9TQUZFX0lOVEVHRVIsXG4gIFJFTEVBU0VfVFlQRVMsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT04sXG4gIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFOiAwYjAwMSxcbiAgRkxBR19MT09TRTogMGIwMTAsXG59XG4iLCAiY29uc3QgZGVidWcgPSAoXG4gIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICBwcm9jZXNzLmVudiAmJlxuICBwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmXG4gIC9cXGJzZW12ZXJcXGIvaS50ZXN0KHByb2Nlc3MuZW52Lk5PREVfREVCVUcpXG4pID8gKC4uLmFyZ3MpID0+IGNvbnNvbGUuZXJyb3IoJ1NFTVZFUicsIC4uLmFyZ3MpXG4gIDogKCkgPT4ge31cblxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1Z1xuIiwgImNvbnN0IHtcbiAgTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCxcbiAgTUFYX1NBRkVfQlVJTERfTEVOR1RILFxuICBNQVhfTEVOR1RILFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi9kZWJ1ZycpXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB7fVxuXG4vLyBUaGUgYWN0dWFsIHJlZ2V4cHMgZ28gb24gZXhwb3J0cy5yZVxuY29uc3QgcmUgPSBleHBvcnRzLnJlID0gW11cbmNvbnN0IHNhZmVSZSA9IGV4cG9ydHMuc2FmZVJlID0gW11cbmNvbnN0IHNyYyA9IGV4cG9ydHMuc3JjID0gW11cbmNvbnN0IHQgPSBleHBvcnRzLnQgPSB7fVxubGV0IFIgPSAwXG5cbmNvbnN0IExFVFRFUkRBU0hOVU1CRVIgPSAnW2EtekEtWjAtOS1dJ1xuXG4vLyBSZXBsYWNlIHNvbWUgZ3JlZWR5IHJlZ2V4IHRva2VucyB0byBwcmV2ZW50IHJlZ2V4IGRvcyBpc3N1ZXMuIFRoZXNlIHJlZ2V4IGFyZVxuLy8gdXNlZCBpbnRlcm5hbGx5IHZpYSB0aGUgc2FmZVJlIG9iamVjdCBzaW5jZSBhbGwgaW5wdXRzIGluIHRoaXMgbGlicmFyeSBnZXRcbi8vIG5vcm1hbGl6ZWQgZmlyc3QgdG8gdHJpbSBhbmQgY29sbGFwc2UgYWxsIGV4dHJhIHdoaXRlc3BhY2UuIFRoZSBvcmlnaW5hbFxuLy8gcmVnZXhlcyBhcmUgZXhwb3J0ZWQgZm9yIHVzZXJsYW5kIGNvbnN1bXB0aW9uIGFuZCBsb3dlciBsZXZlbCB1c2FnZS4gQVxuLy8gZnV0dXJlIGJyZWFraW5nIGNoYW5nZSBjb3VsZCBleHBvcnQgdGhlIHNhZmVyIHJlZ2V4IG9ubHkgd2l0aCBhIG5vdGUgdGhhdFxuLy8gYWxsIGlucHV0IHNob3VsZCBoYXZlIGV4dHJhIHdoaXRlc3BhY2UgcmVtb3ZlZC5cbmNvbnN0IHNhZmVSZWdleFJlcGxhY2VtZW50cyA9IFtcbiAgWydcXFxccycsIDFdLFxuICBbJ1xcXFxkJywgTUFYX0xFTkdUSF0sXG4gIFtMRVRURVJEQVNITlVNQkVSLCBNQVhfU0FGRV9CVUlMRF9MRU5HVEhdLFxuXVxuXG5jb25zdCBtYWtlU2FmZVJlZ2V4ID0gKHZhbHVlKSA9PiB7XG4gIGZvciAoY29uc3QgW3Rva2VuLCBtYXhdIG9mIHNhZmVSZWdleFJlcGxhY2VtZW50cykge1xuICAgIHZhbHVlID0gdmFsdWVcbiAgICAgIC5zcGxpdChgJHt0b2tlbn0qYCkuam9pbihgJHt0b2tlbn17MCwke21heH19YClcbiAgICAgIC5zcGxpdChgJHt0b2tlbn0rYCkuam9pbihgJHt0b2tlbn17MSwke21heH19YClcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuY29uc3QgY3JlYXRlVG9rZW4gPSAobmFtZSwgdmFsdWUsIGlzR2xvYmFsKSA9PiB7XG4gIGNvbnN0IHNhZmUgPSBtYWtlU2FmZVJlZ2V4KHZhbHVlKVxuICBjb25zdCBpbmRleCA9IFIrK1xuICBkZWJ1ZyhuYW1lLCBpbmRleCwgdmFsdWUpXG4gIHRbbmFtZV0gPSBpbmRleFxuICBzcmNbaW5kZXhdID0gdmFsdWVcbiAgcmVbaW5kZXhdID0gbmV3IFJlZ0V4cCh2YWx1ZSwgaXNHbG9iYWwgPyAnZycgOiB1bmRlZmluZWQpXG4gIHNhZmVSZVtpbmRleF0gPSBuZXcgUmVnRXhwKHNhZmUsIGlzR2xvYmFsID8gJ2cnIDogdW5kZWZpbmVkKVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMgY2FuIGJlIHVzZWQgZm9yIHRva2VuaXppbmcsXG4vLyB2YWxpZGF0aW5nLCBhbmQgcGFyc2luZyBTZW1WZXIgdmVyc2lvbiBzdHJpbmdzLlxuXG4vLyAjIyBOdW1lcmljIElkZW50aWZpZXJcbi8vIEEgc2luZ2xlIGAwYCwgb3IgYSBub24temVybyBkaWdpdCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgZGlnaXRzLlxuXG5jcmVhdGVUb2tlbignTlVNRVJJQ0lERU5USUZJRVInLCAnMHxbMS05XVxcXFxkKicpXG5jcmVhdGVUb2tlbignTlVNRVJJQ0lERU5USUZJRVJMT09TRScsICdcXFxcZCsnKVxuXG4vLyAjIyBOb24tbnVtZXJpYyBJZGVudGlmaWVyXG4vLyBaZXJvIG9yIG1vcmUgZGlnaXRzLCBmb2xsb3dlZCBieSBhIGxldHRlciBvciBoeXBoZW4sIGFuZCB0aGVuIHplcm8gb3Jcbi8vIG1vcmUgbGV0dGVycywgZGlnaXRzLCBvciBoeXBoZW5zLlxuXG5jcmVhdGVUb2tlbignTk9OTlVNRVJJQ0lERU5USUZJRVInLCBgXFxcXGQqW2EtekEtWi1dJHtMRVRURVJEQVNITlVNQkVSfSpgKVxuXG4vLyAjIyBNYWluIFZlcnNpb25cbi8vIFRocmVlIGRvdC1zZXBhcmF0ZWQgbnVtZXJpYyBpZGVudGlmaWVycy5cblxuY3JlYXRlVG9rZW4oJ01BSU5WRVJTSU9OJywgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX0pXFxcXC5gICtcbiAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgIGAoJHtzcmNbdC5OVU1FUklDSURFTlRJRklFUl19KWApXG5cbmNyZWF0ZVRva2VuKCdNQUlOVkVSU0lPTkxPT1NFJywgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlcXFxcLmAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSTE9PU0VdfSlgKVxuXG4vLyAjIyBQcmUtcmVsZWFzZSBWZXJzaW9uIElkZW50aWZpZXJcbi8vIEEgbnVtZXJpYyBpZGVudGlmaWVyLCBvciBhIG5vbi1udW1lcmljIGlkZW50aWZpZXIuXG5cbmNyZWF0ZVRva2VuKCdQUkVSRUxFQVNFSURFTlRJRklFUicsIGAoPzoke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXVxufXwke3NyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VJREVOVElGSUVSTE9PU0UnLCBgKD86JHtzcmNbdC5OVU1FUklDSURFTlRJRklFUkxPT1NFXVxufXwke3NyY1t0Lk5PTk5VTUVSSUNJREVOVElGSUVSXX0pYClcblxuLy8gIyMgUHJlLXJlbGVhc2UgVmVyc2lvblxuLy8gSHlwaGVuLCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBkb3Qtc2VwYXJhdGVkIHByZS1yZWxlYXNlIHZlcnNpb25cbi8vIGlkZW50aWZpZXJzLlxuXG5jcmVhdGVUb2tlbignUFJFUkVMRUFTRScsIGAoPzotKCR7c3JjW3QuUFJFUkVMRUFTRUlERU5USUZJRVJdXG59KD86XFxcXC4ke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSXX0pKikpYClcblxuY3JlYXRlVG9rZW4oJ1BSRVJFTEVBU0VMT09TRScsIGAoPzotPygke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0VdXG59KD86XFxcXC4ke3NyY1t0LlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0VdfSkqKSlgKVxuXG4vLyAjIyBCdWlsZCBNZXRhZGF0YSBJZGVudGlmaWVyXG4vLyBBbnkgY29tYmluYXRpb24gb2YgZGlnaXRzLCBsZXR0ZXJzLCBvciBoeXBoZW5zLlxuXG5jcmVhdGVUb2tlbignQlVJTERJREVOVElGSUVSJywgYCR7TEVUVEVSREFTSE5VTUJFUn0rYClcblxuLy8gIyMgQnVpbGQgTWV0YWRhdGFcbi8vIFBsdXMgc2lnbiwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgcGVyaW9kLXNlcGFyYXRlZCBidWlsZCBtZXRhZGF0YVxuLy8gaWRlbnRpZmllcnMuXG5cbmNyZWF0ZVRva2VuKCdCVUlMRCcsIGAoPzpcXFxcKygke3NyY1t0LkJVSUxESURFTlRJRklFUl1cbn0oPzpcXFxcLiR7c3JjW3QuQlVJTERJREVOVElGSUVSXX0pKikpYClcblxuLy8gIyMgRnVsbCBWZXJzaW9uIFN0cmluZ1xuLy8gQSBtYWluIHZlcnNpb24sIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYSBwcmUtcmVsZWFzZSB2ZXJzaW9uIGFuZFxuLy8gYnVpbGQgbWV0YWRhdGEuXG5cbi8vIE5vdGUgdGhhdCB0aGUgb25seSBtYWpvciwgbWlub3IsIHBhdGNoLCBhbmQgcHJlLXJlbGVhc2Ugc2VjdGlvbnMgb2Zcbi8vIHRoZSB2ZXJzaW9uIHN0cmluZyBhcmUgY2FwdHVyaW5nIGdyb3Vwcy4gIFRoZSBidWlsZCBtZXRhZGF0YSBpcyBub3QgYVxuLy8gY2FwdHVyaW5nIGdyb3VwLCBiZWNhdXNlIGl0IHNob3VsZCBub3QgZXZlciBiZSB1c2VkIGluIHZlcnNpb25cbi8vIGNvbXBhcmlzb24uXG5cbmNyZWF0ZVRva2VuKCdGVUxMUExBSU4nLCBgdj8ke3NyY1t0Lk1BSU5WRVJTSU9OXVxufSR7c3JjW3QuUFJFUkVMRUFTRV19PyR7XG4gIHNyY1t0LkJVSUxEXX0/YClcblxuY3JlYXRlVG9rZW4oJ0ZVTEwnLCBgXiR7c3JjW3QuRlVMTFBMQUlOXX0kYClcblxuLy8gbGlrZSBmdWxsLCBidXQgYWxsb3dzIHYxLjIuMyBhbmQgPTEuMi4zLCB3aGljaCBwZW9wbGUgZG8gc29tZXRpbWVzLlxuLy8gYWxzbywgMS4wLjBhbHBoYTEgKHByZXJlbGVhc2Ugd2l0aG91dCB0aGUgaHlwaGVuKSB3aGljaCBpcyBwcmV0dHlcbi8vIGNvbW1vbiBpbiB0aGUgbnBtIHJlZ2lzdHJ5LlxuY3JlYXRlVG9rZW4oJ0xPT1NFUExBSU4nLCBgW3Y9XFxcXHNdKiR7c3JjW3QuTUFJTlZFUlNJT05MT09TRV1cbn0ke3NyY1t0LlBSRVJFTEVBU0VMT09TRV19PyR7XG4gIHNyY1t0LkJVSUxEXX0/YClcblxuY3JlYXRlVG9rZW4oJ0xPT1NFJywgYF4ke3NyY1t0LkxPT1NFUExBSU5dfSRgKVxuXG5jcmVhdGVUb2tlbignR1RMVCcsICcoKD86PHw+KT89PyknKVxuXG4vLyBTb21ldGhpbmcgbGlrZSBcIjIuKlwiIG9yIFwiMS4yLnhcIi5cbi8vIE5vdGUgdGhhdCBcIngueFwiIGlzIGEgdmFsaWQgeFJhbmdlIGlkZW50aWZlciwgbWVhbmluZyBcImFueSB2ZXJzaW9uXCJcbi8vIE9ubHkgdGhlIGZpcnN0IGl0ZW0gaXMgc3RyaWN0bHkgcmVxdWlyZWQuXG5jcmVhdGVUb2tlbignWFJBTkdFSURFTlRJRklFUkxPT1NFJywgYCR7c3JjW3QuTlVNRVJJQ0lERU5USUZJRVJMT09TRV19fHh8WHxcXFxcKmApXG5jcmVhdGVUb2tlbignWFJBTkdFSURFTlRJRklFUicsIGAke3NyY1t0Lk5VTUVSSUNJREVOVElGSUVSXX18eHxYfFxcXFwqYClcblxuY3JlYXRlVG9rZW4oJ1hSQU5HRVBMQUlOJywgYFt2PVxcXFxzXSooJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUl19KWAgK1xuICAgICAgICAgICAgICAgICAgIGAoPzpcXFxcLigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJdfSlgICtcbiAgICAgICAgICAgICAgICAgICBgKD86JHtzcmNbdC5QUkVSRUxFQVNFXX0pPyR7XG4gICAgICAgICAgICAgICAgICAgICBzcmNbdC5CVUlMRF19P2AgK1xuICAgICAgICAgICAgICAgICAgIGApPyk/YClcblxuY3JlYXRlVG9rZW4oJ1hSQU5HRVBMQUlOTE9PU0UnLCBgW3Y9XFxcXHNdKigke3NyY1t0LlhSQU5HRUlERU5USUZJRVJMT09TRV19KWAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCg/OlxcXFwuKCR7c3JjW3QuWFJBTkdFSURFTlRJRklFUkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD86XFxcXC4oJHtzcmNbdC5YUkFOR0VJREVOVElGSUVSTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VMT09TRV19KT8ke1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbdC5CVUlMRF19P2AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCk/KT9gKVxuXG5jcmVhdGVUb2tlbignWFJBTkdFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKiR7c3JjW3QuWFJBTkdFUExBSU5dfSRgKVxuY3JlYXRlVG9rZW4oJ1hSQU5HRUxPT1NFJywgYF4ke3NyY1t0LkdUTFRdfVxcXFxzKiR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIENvZXJjaW9uLlxuLy8gRXh0cmFjdCBhbnl0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGJlIGEgcGFydCBvZiBhIHZhbGlkIHNlbXZlclxuY3JlYXRlVG9rZW4oJ0NPRVJDRVBMQUlOJywgYCR7JyhefFteXFxcXGRdKScgK1xuICAgICAgICAgICAgICAnKFxcXFxkezEsJ30ke01BWF9TQUZFX0NPTVBPTkVOVF9MRU5HVEh9fSlgICtcbiAgICAgICAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsJHtNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIfX0pKT9gICtcbiAgICAgICAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsJHtNQVhfU0FGRV9DT01QT05FTlRfTEVOR1RIfX0pKT9gKVxuY3JlYXRlVG9rZW4oJ0NPRVJDRScsIGAke3NyY1t0LkNPRVJDRVBMQUlOXX0oPzokfFteXFxcXGRdKWApXG5jcmVhdGVUb2tlbignQ09FUkNFRlVMTCcsIHNyY1t0LkNPRVJDRVBMQUlOXSArXG4gICAgICAgICAgICAgIGAoPzoke3NyY1t0LlBSRVJFTEVBU0VdfSk/YCArXG4gICAgICAgICAgICAgIGAoPzoke3NyY1t0LkJVSUxEXX0pP2AgK1xuICAgICAgICAgICAgICBgKD86JHxbXlxcXFxkXSlgKVxuY3JlYXRlVG9rZW4oJ0NPRVJDRVJUTCcsIHNyY1t0LkNPRVJDRV0sIHRydWUpXG5jcmVhdGVUb2tlbignQ09FUkNFUlRMRlVMTCcsIHNyY1t0LkNPRVJDRUZVTExdLCB0cnVlKVxuXG4vLyBUaWxkZSByYW5nZXMuXG4vLyBNZWFuaW5nIGlzIFwicmVhc29uYWJseSBhdCBvciBncmVhdGVyIHRoYW5cIlxuY3JlYXRlVG9rZW4oJ0xPTkVUSUxERScsICcoPzp+Pj8pJylcblxuY3JlYXRlVG9rZW4oJ1RJTERFVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuTE9ORVRJTERFXX1cXFxccytgLCB0cnVlKVxuZXhwb3J0cy50aWxkZVRyaW1SZXBsYWNlID0gJyQxfidcblxuY3JlYXRlVG9rZW4oJ1RJTERFJywgYF4ke3NyY1t0LkxPTkVUSUxERV19JHtzcmNbdC5YUkFOR0VQTEFJTl19JGApXG5jcmVhdGVUb2tlbignVElMREVMT09TRScsIGBeJHtzcmNbdC5MT05FVElMREVdfSR7c3JjW3QuWFJBTkdFUExBSU5MT09TRV19JGApXG5cbi8vIENhcmV0IHJhbmdlcy5cbi8vIE1lYW5pbmcgaXMgXCJhdCBsZWFzdCBhbmQgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aFwiXG5jcmVhdGVUb2tlbignTE9ORUNBUkVUJywgJyg/OlxcXFxeKScpXG5cbmNyZWF0ZVRva2VuKCdDQVJFVFRSSU0nLCBgKFxcXFxzKikke3NyY1t0LkxPTkVDQVJFVF19XFxcXHMrYCwgdHJ1ZSlcbmV4cG9ydHMuY2FyZXRUcmltUmVwbGFjZSA9ICckMV4nXG5cbmNyZWF0ZVRva2VuKCdDQVJFVCcsIGBeJHtzcmNbdC5MT05FQ0FSRVRdfSR7c3JjW3QuWFJBTkdFUExBSU5dfSRgKVxuY3JlYXRlVG9rZW4oJ0NBUkVUTE9PU0UnLCBgXiR7c3JjW3QuTE9ORUNBUkVUXX0ke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSRgKVxuXG4vLyBBIHNpbXBsZSBndC9sdC9lcSB0aGluZywgb3IganVzdCBcIlwiIHRvIGluZGljYXRlIFwiYW55IHZlcnNpb25cIlxuY3JlYXRlVG9rZW4oJ0NPTVBBUkFUT1JMT09TRScsIGBeJHtzcmNbdC5HVExUXX1cXFxccyooJHtzcmNbdC5MT09TRVBMQUlOXX0pJHxeJGApXG5jcmVhdGVUb2tlbignQ09NUEFSQVRPUicsIGBeJHtzcmNbdC5HVExUXX1cXFxccyooJHtzcmNbdC5GVUxMUExBSU5dfSkkfF4kYClcblxuLy8gQW4gZXhwcmVzc2lvbiB0byBzdHJpcCBhbnkgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZSBndGx0IGFuZCB0aGUgdGhpbmdcbi8vIGl0IG1vZGlmaWVzLCBzbyB0aGF0IGA+IDEuMi4zYCA9PT4gYD4xLjIuM2BcbmNyZWF0ZVRva2VuKCdDT01QQVJBVE9SVFJJTScsIGAoXFxcXHMqKSR7c3JjW3QuR1RMVF1cbn1cXFxccyooJHtzcmNbdC5MT09TRVBMQUlOXX18JHtzcmNbdC5YUkFOR0VQTEFJTl19KWAsIHRydWUpXG5leHBvcnRzLmNvbXBhcmF0b3JUcmltUmVwbGFjZSA9ICckMSQyJDMnXG5cbi8vIFNvbWV0aGluZyBsaWtlIGAxLjIuMyAtIDEuMi40YFxuLy8gTm90ZSB0aGF0IHRoZXNlIGFsbCB1c2UgdGhlIGxvb3NlIGZvcm0sIGJlY2F1c2UgdGhleSdsbCBiZVxuLy8gY2hlY2tlZCBhZ2FpbnN0IGVpdGhlciB0aGUgc3RyaWN0IG9yIGxvb3NlIGNvbXBhcmF0b3IgZm9ybVxuLy8gbGF0ZXIuXG5jcmVhdGVUb2tlbignSFlQSEVOUkFOR0UnLCBgXlxcXFxzKigke3NyY1t0LlhSQU5HRVBMQUlOXX0pYCArXG4gICAgICAgICAgICAgICAgICAgYFxcXFxzKy1cXFxccytgICtcbiAgICAgICAgICAgICAgICAgICBgKCR7c3JjW3QuWFJBTkdFUExBSU5dfSlgICtcbiAgICAgICAgICAgICAgICAgICBgXFxcXHMqJGApXG5cbmNyZWF0ZVRva2VuKCdIWVBIRU5SQU5HRUxPT1NFJywgYF5cXFxccyooJHtzcmNbdC5YUkFOR0VQTEFJTkxPT1NFXX0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgXFxcXHMrLVxcXFxzK2AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCgke3NyY1t0LlhSQU5HRVBMQUlOTE9PU0VdfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBcXFxccyokYClcblxuLy8gU3RhciByYW5nZXMgYmFzaWNhbGx5IGp1c3QgYWxsb3cgYW55dGhpbmcgYXQgYWxsLlxuY3JlYXRlVG9rZW4oJ1NUQVInLCAnKDx8Pik/PT9cXFxccypcXFxcKicpXG4vLyA+PTAuMC4wIGlzIGxpa2UgYSBzdGFyXG5jcmVhdGVUb2tlbignR1RFMCcsICdeXFxcXHMqPj1cXFxccyowXFxcXC4wXFxcXC4wXFxcXHMqJCcpXG5jcmVhdGVUb2tlbignR1RFMFBSRScsICdeXFxcXHMqPj1cXFxccyowXFxcXC4wXFxcXC4wLTBcXFxccyokJylcbiIsICIvLyBwYXJzZSBvdXQganVzdCB0aGUgb3B0aW9ucyB3ZSBjYXJlIGFib3V0XG5jb25zdCBsb29zZU9wdGlvbiA9IE9iamVjdC5mcmVlemUoeyBsb29zZTogdHJ1ZSB9KVxuY29uc3QgZW1wdHlPcHRzID0gT2JqZWN0LmZyZWV6ZSh7IH0pXG5jb25zdCBwYXJzZU9wdGlvbnMgPSBvcHRpb25zID0+IHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGVtcHR5T3B0c1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBsb29zZU9wdGlvblxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VPcHRpb25zXG4iLCAiY29uc3QgbnVtZXJpYyA9IC9eWzAtOV0rJC9cbmNvbnN0IGNvbXBhcmVJZGVudGlmaWVycyA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IGFudW0gPSBudW1lcmljLnRlc3QoYSlcbiAgY29uc3QgYm51bSA9IG51bWVyaWMudGVzdChiKVxuXG4gIGlmIChhbnVtICYmIGJudW0pIHtcbiAgICBhID0gK2FcbiAgICBiID0gK2JcbiAgfVxuXG4gIHJldHVybiBhID09PSBiID8gMFxuICAgIDogKGFudW0gJiYgIWJudW0pID8gLTFcbiAgICA6IChibnVtICYmICFhbnVtKSA/IDFcbiAgICA6IGEgPCBiID8gLTFcbiAgICA6IDFcbn1cblxuY29uc3QgcmNvbXBhcmVJZGVudGlmaWVycyA9IChhLCBiKSA9PiBjb21wYXJlSWRlbnRpZmllcnMoYiwgYSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXBhcmVJZGVudGlmaWVycyxcbiAgcmNvbXBhcmVJZGVudGlmaWVycyxcbn1cbiIsICJjb25zdCBkZWJ1ZyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL2RlYnVnJylcbmNvbnN0IHsgTUFYX0xFTkdUSCwgTUFYX1NBRkVfSU5URUdFUiB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IHsgc2FmZVJlOiByZSwgdCB9ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvcmUnKVxuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9wYXJzZS1vcHRpb25zJylcbmNvbnN0IHsgY29tcGFyZUlkZW50aWZpZXJzIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9pZGVudGlmaWVycycpXG5jbGFzcyBTZW1WZXIge1xuICBjb25zdHJ1Y3RvciAodmVyc2lvbiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgICBpZiAodmVyc2lvbi5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgICAgdmVyc2lvbi5pbmNsdWRlUHJlcmVsZWFzZSA9PT0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlKSB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbi52ZXJzaW9uXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgdmVyc2lvbi4gTXVzdCBiZSBhIHN0cmluZy4gR290IHR5cGUgXCIke3R5cGVvZiB2ZXJzaW9ufVwiLmApXG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24ubGVuZ3RoID4gTUFYX0xFTkdUSCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYHZlcnNpb24gaXMgbG9uZ2VyIHRoYW4gJHtNQVhfTEVOR1RIfSBjaGFyYWN0ZXJzYFxuICAgICAgKVxuICAgIH1cblxuICAgIGRlYnVnKCdTZW1WZXInLCB2ZXJzaW9uLCBvcHRpb25zKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLmxvb3NlID0gISFvcHRpb25zLmxvb3NlXG4gICAgLy8gdGhpcyBpc24ndCBhY3R1YWxseSByZWxldmFudCBmb3IgdmVyc2lvbnMsIGJ1dCBrZWVwIGl0IHNvIHRoYXQgd2VcbiAgICAvLyBkb24ndCBydW4gaW50byB0cm91YmxlIHBhc3NpbmcgdGhpcy5vcHRpb25zIGFyb3VuZC5cbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICBjb25zdCBtID0gdmVyc2lvbi50cmltKCkubWF0Y2gob3B0aW9ucy5sb29zZSA/IHJlW3QuTE9PU0VdIDogcmVbdC5GVUxMXSlcblxuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBWZXJzaW9uOiAke3ZlcnNpb259YClcbiAgICB9XG5cbiAgICB0aGlzLnJhdyA9IHZlcnNpb25cblxuICAgIC8vIHRoZXNlIGFyZSBhY3R1YWxseSBudW1iZXJzXG4gICAgdGhpcy5tYWpvciA9ICttWzFdXG4gICAgdGhpcy5taW5vciA9ICttWzJdXG4gICAgdGhpcy5wYXRjaCA9ICttWzNdXG5cbiAgICBpZiAodGhpcy5tYWpvciA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdGhpcy5tYWpvciA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbWFqb3IgdmVyc2lvbicpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWlub3IgPiBNQVhfU0FGRV9JTlRFR0VSIHx8IHRoaXMubWlub3IgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG1pbm9yIHZlcnNpb24nKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhdGNoID4gTUFYX1NBRkVfSU5URUdFUiB8fCB0aGlzLnBhdGNoIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwYXRjaCB2ZXJzaW9uJylcbiAgICB9XG5cbiAgICAvLyBudW1iZXJpZnkgYW55IHByZXJlbGVhc2UgbnVtZXJpYyBpZHNcbiAgICBpZiAoIW1bNF0pIHtcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJlcmVsZWFzZSA9IG1bNF0uc3BsaXQoJy4nKS5tYXAoKGlkKSA9PiB7XG4gICAgICAgIGlmICgvXlswLTldKyQvLnRlc3QoaWQpKSB7XG4gICAgICAgICAgY29uc3QgbnVtID0gK2lkXG4gICAgICAgICAgaWYgKG51bSA+PSAwICYmIG51bSA8IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlkXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuYnVpbGQgPSBtWzVdID8gbVs1XS5zcGxpdCgnLicpIDogW11cbiAgICB0aGlzLmZvcm1hdCgpXG4gIH1cblxuICBmb3JtYXQgKCkge1xuICAgIHRoaXMudmVyc2lvbiA9IGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLnBhdGNofWBcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCkge1xuICAgICAgdGhpcy52ZXJzaW9uICs9IGAtJHt0aGlzLnByZXJlbGVhc2Uuam9pbignLicpfWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvblxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZlcnNpb25cbiAgfVxuXG4gIGNvbXBhcmUgKG90aGVyKSB7XG4gICAgZGVidWcoJ1NlbVZlci5jb21wYXJlJywgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMsIG90aGVyKVxuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2VtVmVyKSkge1xuICAgICAgaWYgKHR5cGVvZiBvdGhlciA9PT0gJ3N0cmluZycgJiYgb3RoZXIgPT09IHRoaXMudmVyc2lvbikge1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfVxuICAgICAgb3RoZXIgPSBuZXcgU2VtVmVyKG90aGVyLCB0aGlzLm9wdGlvbnMpXG4gICAgfVxuXG4gICAgaWYgKG90aGVyLnZlcnNpb24gPT09IHRoaXMudmVyc2lvbikge1xuICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21wYXJlTWFpbihvdGhlcikgfHwgdGhpcy5jb21wYXJlUHJlKG90aGVyKVxuICB9XG5cbiAgY29tcGFyZU1haW4gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMubWFqb3IsIG90aGVyLm1ham9yKSB8fFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMubWlub3IsIG90aGVyLm1pbm9yKSB8fFxuICAgICAgY29tcGFyZUlkZW50aWZpZXJzKHRoaXMucGF0Y2gsIG90aGVyLnBhdGNoKVxuICAgIClcbiAgfVxuXG4gIGNvbXBhcmVQcmUgKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBTZW1WZXIpKSB7XG4gICAgICBvdGhlciA9IG5ldyBTZW1WZXIob3RoZXIsIHRoaXMub3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBOT1QgaGF2aW5nIGEgcHJlcmVsZWFzZSBpcyA+IGhhdmluZyBvbmVcbiAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcmVsZWFzZS5sZW5ndGggJiYgb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIGlmICghdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCAmJiAhb3RoZXIucHJlcmVsZWFzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgbGV0IGkgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgYSA9IHRoaXMucHJlcmVsZWFzZVtpXVxuICAgICAgY29uc3QgYiA9IG90aGVyLnByZXJlbGVhc2VbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIGNvbXBhcmVCdWlsZCAob3RoZXIpIHtcbiAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNlbVZlcikpIHtcbiAgICAgIG90aGVyID0gbmV3IFNlbVZlcihvdGhlciwgdGhpcy5vcHRpb25zKVxuICAgIH1cblxuICAgIGxldCBpID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmJ1aWxkW2ldXG4gICAgICBjb25zdCBiID0gb3RoZXIuYnVpbGRbaV1cbiAgICAgIGRlYnVnKCdwcmVyZWxlYXNlIGNvbXBhcmUnLCBpLCBhLCBiKVxuICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCAmJiBiID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gZWxzZSBpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9IGVsc2UgaWYgKGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH0gZWxzZSBpZiAoYSA9PT0gYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVJZGVudGlmaWVycyhhLCBiKVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCsraSlcbiAgfVxuXG4gIC8vIHByZW1pbm9yIHdpbGwgYnVtcCB0aGUgdmVyc2lvbiB1cCB0byB0aGUgbmV4dCBtaW5vciByZWxlYXNlLCBhbmQgaW1tZWRpYXRlbHlcbiAgLy8gZG93biB0byBwcmUtcmVsZWFzZS4gcHJlbWFqb3IgYW5kIHByZXBhdGNoIHdvcmsgdGhlIHNhbWUgd2F5LlxuICBpbmMgKHJlbGVhc2UsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKSB7XG4gICAgc3dpdGNoIChyZWxlYXNlKSB7XG4gICAgICBjYXNlICdwcmVtYWpvcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IgPSAwXG4gICAgICAgIHRoaXMubWFqb3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVtaW5vcic6XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwcmVwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYWxyZWFkeSBhIHByZXJlbGVhc2UsIGl0IHdpbGwgYnVtcCB0byB0aGUgbmV4dCB2ZXJzaW9uXG4gICAgICAgIC8vIGRyb3AgYW55IHByZXJlbGVhc2VzIHRoYXQgbWlnaHQgYWxyZWFkeSBleGlzdCwgc2luY2UgdGhleSBhcmUgbm90XG4gICAgICAgIC8vIHJlbGV2YW50IGF0IHRoaXMgcG9pbnQuXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPSAwXG4gICAgICAgIHRoaXMuaW5jKCdwYXRjaCcsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICB0aGlzLmluYygncHJlJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBJZiB0aGUgaW5wdXQgaXMgYSBub24tcHJlcmVsZWFzZSB2ZXJzaW9uLCB0aGlzIGFjdHMgdGhlIHNhbWUgYXNcbiAgICAgIC8vIHByZXBhdGNoLlxuICAgICAgY2FzZSAncHJlcmVsZWFzZSc6XG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5pbmMoJ3BhdGNoJywgaWRlbnRpZmllciwgaWRlbnRpZmllckJhc2UpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmMoJ3ByZScsIGlkZW50aWZpZXIsIGlkZW50aWZpZXJCYXNlKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdtYWpvcic6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgYSBwcmUtbWFqb3IgdmVyc2lvbiwgYnVtcCB1cCB0byB0aGUgc2FtZSBtYWpvciB2ZXJzaW9uLlxuICAgICAgICAvLyBPdGhlcndpc2UgaW5jcmVtZW50IG1ham9yLlxuICAgICAgICAvLyAxLjAuMC01IGJ1bXBzIHRvIDEuMC4wXG4gICAgICAgIC8vIDEuMS4wIGJ1bXBzIHRvIDIuMC4wXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLm1pbm9yICE9PSAwIHx8XG4gICAgICAgICAgdGhpcy5wYXRjaCAhPT0gMCB8fFxuICAgICAgICAgIHRoaXMucHJlcmVsZWFzZS5sZW5ndGggPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5tYWpvcisrXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5taW5vciA9IDBcbiAgICAgICAgdGhpcy5wYXRjaCA9IDBcbiAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW11cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ21pbm9yJzpcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHByZS1taW5vciB2ZXJzaW9uLCBidW1wIHVwIHRvIHRoZSBzYW1lIG1pbm9yIHZlcnNpb24uXG4gICAgICAgIC8vIE90aGVyd2lzZSBpbmNyZW1lbnQgbWlub3IuXG4gICAgICAgIC8vIDEuMi4wLTUgYnVtcHMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjEgYnVtcHMgdG8gMS4zLjBcbiAgICAgICAgaWYgKHRoaXMucGF0Y2ggIT09IDAgfHwgdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMubWlub3IrK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGF0Y2ggPSAwXG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdwYXRjaCc6XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgcHJlLXJlbGVhc2UgdmVyc2lvbiwgaXQgd2lsbCBpbmNyZW1lbnQgdGhlIHBhdGNoLlxuICAgICAgICAvLyBJZiBpdCBpcyBhIHByZS1yZWxlYXNlIGl0IHdpbGwgYnVtcCB1cCB0byB0aGUgc2FtZSBwYXRjaCB2ZXJzaW9uLlxuICAgICAgICAvLyAxLjIuMC01IHBhdGNoZXMgdG8gMS4yLjBcbiAgICAgICAgLy8gMS4yLjAgcGF0Y2hlcyB0byAxLjIuMVxuICAgICAgICBpZiAodGhpcy5wcmVyZWxlYXNlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucGF0Y2grK1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcmVsZWFzZSA9IFtdXG4gICAgICAgIGJyZWFrXG4gICAgICAvLyBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIHB1YmxpY2x5LlxuICAgICAgLy8gMS4wLjAgJ3ByZScgd291bGQgYmVjb21lIDEuMC4wLTAgd2hpY2ggaXMgdGhlIHdyb25nIGRpcmVjdGlvbi5cbiAgICAgIGNhc2UgJ3ByZSc6IHtcbiAgICAgICAgY29uc3QgYmFzZSA9IE51bWJlcihpZGVudGlmaWVyQmFzZSkgPyAxIDogMFxuXG4gICAgICAgIGlmICghaWRlbnRpZmllciAmJiBpZGVudGlmaWVyQmFzZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiBpZGVudGlmaWVyIGlzIGVtcHR5JylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gW2Jhc2VdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGkgPSB0aGlzLnByZXJlbGVhc2UubGVuZ3RoXG4gICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJlcmVsZWFzZVtpXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlW2ldKytcbiAgICAgICAgICAgICAgaSA9IC0yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgICAgLy8gZGlkbid0IGluY3JlbWVudCBhbnl0aGluZ1xuICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgPT09IHRoaXMucHJlcmVsZWFzZS5qb2luKCcuJykgJiYgaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbmNyZW1lbnQgYXJndW1lbnQ6IGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdHMnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlLnB1c2goYmFzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkZW50aWZpZXIpIHtcbiAgICAgICAgICAvLyAxLjIuMC1iZXRhLjEgYnVtcHMgdG8gMS4yLjAtYmV0YS4yLFxuICAgICAgICAgIC8vIDEuMi4wLWJldGEuZm9vYmx6IG9yIDEuMi4wLWJldGEgYnVtcHMgdG8gMS4yLjAtYmV0YS4wXG4gICAgICAgICAgbGV0IHByZXJlbGVhc2UgPSBbaWRlbnRpZmllciwgYmFzZV1cbiAgICAgICAgICBpZiAoaWRlbnRpZmllckJhc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBwcmVyZWxlYXNlID0gW2lkZW50aWZpZXJdXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb21wYXJlSWRlbnRpZmllcnModGhpcy5wcmVyZWxlYXNlWzBdLCBpZGVudGlmaWVyKSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGlzTmFOKHRoaXMucHJlcmVsZWFzZVsxXSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW5jcmVtZW50IGFyZ3VtZW50OiAke3JlbGVhc2V9YClcbiAgICB9XG4gICAgdGhpcy5yYXcgPSB0aGlzLmZvcm1hdCgpXG4gICAgaWYgKHRoaXMuYnVpbGQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJhdyArPSBgKyR7dGhpcy5idWlsZC5qb2luKCcuJyl9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VtVmVyXG4iLCAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgcGFyc2UgPSAodmVyc2lvbiwgb3B0aW9ucywgdGhyb3dFcnJvcnMgPSBmYWxzZSkgPT4ge1xuICBpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFNlbVZlcikge1xuICAgIHJldHVybiB2ZXJzaW9uXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFNlbVZlcih2ZXJzaW9uLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIGlmICghdGhyb3dFcnJvcnMpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRocm93IGVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZVxuIiwgImNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCB2YWxpZCA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHYgPSBwYXJzZSh2ZXJzaW9uLCBvcHRpb25zKVxuICByZXR1cm4gdiA/IHYudmVyc2lvbiA6IG51bGxcbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRcbiIsICJjb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgY2xlYW4gPSAodmVyc2lvbiwgb3B0aW9ucykgPT4ge1xuICBjb25zdCBzID0gcGFyc2UodmVyc2lvbi50cmltKCkucmVwbGFjZSgvXls9dl0rLywgJycpLCBvcHRpb25zKVxuICByZXR1cm4gcyA/IHMudmVyc2lvbiA6IG51bGxcbn1cbm1vZHVsZS5leHBvcnRzID0gY2xlYW5cbiIsICJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5cbmNvbnN0IGluYyA9ICh2ZXJzaW9uLCByZWxlYXNlLCBvcHRpb25zLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkgPT4ge1xuICBpZiAodHlwZW9mIChvcHRpb25zKSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZGVudGlmaWVyQmFzZSA9IGlkZW50aWZpZXJcbiAgICBpZGVudGlmaWVyID0gb3B0aW9uc1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBTZW1WZXIoXG4gICAgICB2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyID8gdmVyc2lvbi52ZXJzaW9uIDogdmVyc2lvbixcbiAgICAgIG9wdGlvbnNcbiAgICApLmluYyhyZWxlYXNlLCBpZGVudGlmaWVyLCBpZGVudGlmaWVyQmFzZSkudmVyc2lvblxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jXG4iLCAiY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL3BhcnNlLmpzJylcblxuY29uc3QgZGlmZiA9ICh2ZXJzaW9uMSwgdmVyc2lvbjIpID0+IHtcbiAgY29uc3QgdjEgPSBwYXJzZSh2ZXJzaW9uMSwgbnVsbCwgdHJ1ZSlcbiAgY29uc3QgdjIgPSBwYXJzZSh2ZXJzaW9uMiwgbnVsbCwgdHJ1ZSlcbiAgY29uc3QgY29tcGFyaXNvbiA9IHYxLmNvbXBhcmUodjIpXG5cbiAgaWYgKGNvbXBhcmlzb24gPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgdjFIaWdoZXIgPSBjb21wYXJpc29uID4gMFxuICBjb25zdCBoaWdoVmVyc2lvbiA9IHYxSGlnaGVyID8gdjEgOiB2MlxuICBjb25zdCBsb3dWZXJzaW9uID0gdjFIaWdoZXIgPyB2MiA6IHYxXG4gIGNvbnN0IGhpZ2hIYXNQcmUgPSAhIWhpZ2hWZXJzaW9uLnByZXJlbGVhc2UubGVuZ3RoXG4gIGNvbnN0IGxvd0hhc1ByZSA9ICEhbG93VmVyc2lvbi5wcmVyZWxlYXNlLmxlbmd0aFxuXG4gIGlmIChsb3dIYXNQcmUgJiYgIWhpZ2hIYXNQcmUpIHtcbiAgICAvLyBHb2luZyBmcm9tIHByZXJlbGVhc2UgLT4gbm8gcHJlcmVsZWFzZSByZXF1aXJlcyBzb21lIHNwZWNpYWwgY2FzaW5nXG5cbiAgICAvLyBJZiB0aGUgbG93IHZlcnNpb24gaGFzIG9ubHkgYSBtYWpvciwgdGhlbiBpdCB3aWxsIGFsd2F5cyBiZSBhIG1ham9yXG4gICAgLy8gU29tZSBleGFtcGxlczpcbiAgICAvLyAxLjAuMC0xIC0+IDEuMC4wXG4gICAgLy8gMS4wLjAtMSAtPiAxLjEuMVxuICAgIC8vIDEuMC4wLTEgLT4gMi4wLjBcbiAgICBpZiAoIWxvd1ZlcnNpb24ucGF0Y2ggJiYgIWxvd1ZlcnNpb24ubWlub3IpIHtcbiAgICAgIHJldHVybiAnbWFqb3InXG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGl0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nIHRoZSBoaWdoIHZlcnNpb25cblxuICAgIGlmIChoaWdoVmVyc2lvbi5wYXRjaCkge1xuICAgICAgLy8gYW55dGhpbmcgaGlnaGVyIHRoYW4gYSBwYXRjaCBidW1wIHdvdWxkIHJlc3VsdCBpbiB0aGUgd3JvbmcgdmVyc2lvblxuICAgICAgcmV0dXJuICdwYXRjaCdcbiAgICB9XG5cbiAgICBpZiAoaGlnaFZlcnNpb24ubWlub3IpIHtcbiAgICAgIC8vIGFueXRoaW5nIGhpZ2hlciB0aGFuIGEgbWlub3IgYnVtcCB3b3VsZCByZXN1bHQgaW4gdGhlIHdyb25nIHZlcnNpb25cbiAgICAgIHJldHVybiAnbWlub3InXG4gICAgfVxuXG4gICAgLy8gYnVtcGluZyBtYWpvci9taW5vci9wYXRjaCBhbGwgaGF2ZSBzYW1lIHJlc3VsdFxuICAgIHJldHVybiAnbWFqb3InXG4gIH1cblxuICAvLyBhZGQgdGhlIGBwcmVgIHByZWZpeCBpZiB3ZSBhcmUgZ29pbmcgdG8gYSBwcmVyZWxlYXNlIHZlcnNpb25cbiAgY29uc3QgcHJlZml4ID0gaGlnaEhhc1ByZSA/ICdwcmUnIDogJydcblxuICBpZiAodjEubWFqb3IgIT09IHYyLm1ham9yKSB7XG4gICAgcmV0dXJuIHByZWZpeCArICdtYWpvcidcbiAgfVxuXG4gIGlmICh2MS5taW5vciAhPT0gdjIubWlub3IpIHtcbiAgICByZXR1cm4gcHJlZml4ICsgJ21pbm9yJ1xuICB9XG5cbiAgaWYgKHYxLnBhdGNoICE9PSB2Mi5wYXRjaCkge1xuICAgIHJldHVybiBwcmVmaXggKyAncGF0Y2gnXG4gIH1cblxuICAvLyBoaWdoIGFuZCBsb3cgYXJlIHByZWxlYXNlc1xuICByZXR1cm4gJ3ByZXJlbGVhc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGlmZlxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1ham9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5tYWpvclxubW9kdWxlLmV4cG9ydHMgPSBtYWpvclxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IG1pbm9yID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5taW5vclxubW9kdWxlLmV4cG9ydHMgPSBtaW5vclxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IHBhdGNoID0gKGEsIGxvb3NlKSA9PiBuZXcgU2VtVmVyKGEsIGxvb3NlKS5wYXRjaFxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaFxuIiwgImNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpXG5jb25zdCBwcmVyZWxlYXNlID0gKHZlcnNpb24sIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2UodmVyc2lvbiwgb3B0aW9ucylcbiAgcmV0dXJuIChwYXJzZWQgJiYgcGFyc2VkLnByZXJlbGVhc2UubGVuZ3RoKSA/IHBhcnNlZC5wcmVyZWxlYXNlIDogbnVsbFxufVxubW9kdWxlLmV4cG9ydHMgPSBwcmVyZWxlYXNlXG4iLCAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT5cbiAgbmV3IFNlbVZlcihhLCBsb29zZSkuY29tcGFyZShuZXcgU2VtVmVyKGIsIGxvb3NlKSlcblxubW9kdWxlLmV4cG9ydHMgPSBjb21wYXJlXG4iLCAiY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IChhLCBiLCBsb29zZSkgPT4gY29tcGFyZShiLCBhLCBsb29zZSlcbm1vZHVsZS5leHBvcnRzID0gcmNvbXBhcmVcbiIsICJjb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9jb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IChhLCBiKSA9PiBjb21wYXJlKGEsIGIsIHRydWUpXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBhcmVMb29zZVxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IGNvbXBhcmVCdWlsZCA9IChhLCBiLCBsb29zZSkgPT4ge1xuICBjb25zdCB2ZXJzaW9uQSA9IG5ldyBTZW1WZXIoYSwgbG9vc2UpXG4gIGNvbnN0IHZlcnNpb25CID0gbmV3IFNlbVZlcihiLCBsb29zZSlcbiAgcmV0dXJuIHZlcnNpb25BLmNvbXBhcmUodmVyc2lvbkIpIHx8IHZlcnNpb25BLmNvbXBhcmVCdWlsZCh2ZXJzaW9uQilcbn1cbm1vZHVsZS5leHBvcnRzID0gY29tcGFyZUJ1aWxkXG4iLCAiY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9jb21wYXJlLWJ1aWxkJylcbmNvbnN0IHNvcnQgPSAobGlzdCwgbG9vc2UpID0+IGxpc3Quc29ydCgoYSwgYikgPT4gY29tcGFyZUJ1aWxkKGEsIGIsIGxvb3NlKSlcbm1vZHVsZS5leHBvcnRzID0gc29ydFxuIiwgImNvbnN0IGNvbXBhcmVCdWlsZCA9IHJlcXVpcmUoJy4vY29tcGFyZS1idWlsZCcpXG5jb25zdCByc29ydCA9IChsaXN0LCBsb29zZSkgPT4gbGlzdC5zb3J0KChhLCBiKSA9PiBjb21wYXJlQnVpbGQoYiwgYSwgbG9vc2UpKVxubW9kdWxlLmV4cG9ydHMgPSByc29ydFxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3QgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID4gMFxubW9kdWxlLmV4cG9ydHMgPSBndFxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbHQgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpIDwgMFxubW9kdWxlLmV4cG9ydHMgPSBsdFxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpID09PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGVxXG4iLCAiY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4vY29tcGFyZScpXG5jb25zdCBuZXEgPSAoYSwgYiwgbG9vc2UpID0+IGNvbXBhcmUoYSwgYiwgbG9vc2UpICE9PSAwXG5tb2R1bGUuZXhwb3J0cyA9IG5lcVxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgZ3RlID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA+PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGd0ZVxuIiwgImNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuL2NvbXBhcmUnKVxuY29uc3QgbHRlID0gKGEsIGIsIGxvb3NlKSA9PiBjb21wYXJlKGEsIGIsIGxvb3NlKSA8PSAwXG5tb2R1bGUuZXhwb3J0cyA9IGx0ZVxuIiwgImNvbnN0IGVxID0gcmVxdWlyZSgnLi9lcScpXG5jb25zdCBuZXEgPSByZXF1aXJlKCcuL25lcScpXG5jb25zdCBndCA9IHJlcXVpcmUoJy4vZ3QnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi9ndGUnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4vbHRlJylcblxuY29uc3QgY21wID0gKGEsIG9wLCBiLCBsb29zZSkgPT4ge1xuICBzd2l0Y2ggKG9wKSB7XG4gICAgY2FzZSAnPT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSA9PT0gYlxuXG4gICAgY2FzZSAnIT09JzpcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYSA9IGEudmVyc2lvblxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgICAgICBiID0gYi52ZXJzaW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gYSAhPT0gYlxuXG4gICAgY2FzZSAnJzpcbiAgICBjYXNlICc9JzpcbiAgICBjYXNlICc9PSc6XG4gICAgICByZXR1cm4gZXEoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICchPSc6XG4gICAgICByZXR1cm4gbmVxKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPic6XG4gICAgICByZXR1cm4gZ3QoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc+PSc6XG4gICAgICByZXR1cm4gZ3RlKGEsIGIsIGxvb3NlKVxuXG4gICAgY2FzZSAnPCc6XG4gICAgICByZXR1cm4gbHQoYSwgYiwgbG9vc2UpXG5cbiAgICBjYXNlICc8PSc6XG4gICAgICByZXR1cm4gbHRlKGEsIGIsIGxvb3NlKVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgb3BlcmF0b3I6ICR7b3B9YClcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBjbXBcbiIsICJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5cbmNvbnN0IGNvZXJjZSA9ICh2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgU2VtVmVyKSB7XG4gICAgcmV0dXJuIHZlcnNpb25cbiAgfVxuXG4gIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ251bWJlcicpIHtcbiAgICB2ZXJzaW9uID0gU3RyaW5nKHZlcnNpb24pXG4gIH1cblxuICBpZiAodHlwZW9mIHZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG5cbiAgbGV0IG1hdGNoID0gbnVsbFxuICBpZiAoIW9wdGlvbnMucnRsKSB7XG4gICAgbWF0Y2ggPSB2ZXJzaW9uLm1hdGNoKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyByZVt0LkNPRVJDRUZVTExdIDogcmVbdC5DT0VSQ0VdKVxuICB9IGVsc2Uge1xuICAgIC8vIEZpbmQgdGhlIHJpZ2h0LW1vc3QgY29lcmNpYmxlIHN0cmluZyB0aGF0IGRvZXMgbm90IHNoYXJlXG4gICAgLy8gYSB0ZXJtaW51cyB3aXRoIGEgbW9yZSBsZWZ0LXdhcmQgY29lcmNpYmxlIHN0cmluZy5cbiAgICAvLyBFZywgJzEuMi4zLjQnIHdhbnRzIHRvIGNvZXJjZSAnMi4zLjQnLCBub3QgJzMuNCcgb3IgJzQnXG4gICAgLy8gV2l0aCBpbmNsdWRlUHJlcmVsZWFzZSBvcHRpb24gc2V0LCAnMS4yLjMuNC1yYycgd2FudHMgdG8gY29lcmNlICcyLjMuNC1yYycsIG5vdCAnMi4zLjQnXG4gICAgLy9cbiAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHN0cmluZyBjaGVja2luZyB3aXRoIGEgL2cgcmVnZXhwXG4gICAgLy8gTWFudWFsbHkgc2V0IHRoZSBpbmRleCBzbyBhcyB0byBwaWNrIHVwIG92ZXJsYXBwaW5nIG1hdGNoZXMuXG4gICAgLy8gU3RvcCB3aGVuIHdlIGdldCBhIG1hdGNoIHRoYXQgZW5kcyBhdCB0aGUgc3RyaW5nIGVuZCwgc2luY2Ugbm9cbiAgICAvLyBjb2VyY2libGUgc3RyaW5nIGNhbiBiZSBtb3JlIHJpZ2h0LXdhcmQgd2l0aG91dCB0aGUgc2FtZSB0ZXJtaW51cy5cbiAgICBjb25zdCBjb2VyY2VSdGxSZWdleCA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyByZVt0LkNPRVJDRVJUTEZVTExdIDogcmVbdC5DT0VSQ0VSVExdXG4gICAgbGV0IG5leHRcbiAgICB3aGlsZSAoKG5leHQgPSBjb2VyY2VSdGxSZWdleC5leGVjKHZlcnNpb24pKSAmJlxuICAgICAgICAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoICE9PSB2ZXJzaW9uLmxlbmd0aClcbiAgICApIHtcbiAgICAgIGlmICghbWF0Y2ggfHxcbiAgICAgICAgICAgIG5leHQuaW5kZXggKyBuZXh0WzBdLmxlbmd0aCAhPT0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2ggPSBuZXh0XG4gICAgICB9XG4gICAgICBjb2VyY2VSdGxSZWdleC5sYXN0SW5kZXggPSBuZXh0LmluZGV4ICsgbmV4dFsxXS5sZW5ndGggKyBuZXh0WzJdLmxlbmd0aFxuICAgIH1cbiAgICAvLyBsZWF2ZSBpdCBpbiBhIGNsZWFuIHN0YXRlXG4gICAgY29lcmNlUnRsUmVnZXgubGFzdEluZGV4ID0gLTFcbiAgfVxuXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBtYWpvciA9IG1hdGNoWzJdXG4gIGNvbnN0IG1pbm9yID0gbWF0Y2hbM10gfHwgJzAnXG4gIGNvbnN0IHBhdGNoID0gbWF0Y2hbNF0gfHwgJzAnXG4gIGNvbnN0IHByZXJlbGVhc2UgPSBvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIG1hdGNoWzVdID8gYC0ke21hdGNoWzVdfWAgOiAnJ1xuICBjb25zdCBidWlsZCA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiYgbWF0Y2hbNl0gPyBgKyR7bWF0Y2hbNl19YCA6ICcnXG5cbiAgcmV0dXJuIHBhcnNlKGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofSR7cHJlcmVsZWFzZX0ke2J1aWxkfWAsIG9wdGlvbnMpXG59XG5tb2R1bGUuZXhwb3J0cyA9IGNvZXJjZVxuIiwgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoWWFsbGlzdCkge1xuICBZYWxsaXN0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24qICgpIHtcbiAgICBmb3IgKGxldCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlcjsgd2Fsa2VyID0gd2Fsa2VyLm5leHQpIHtcbiAgICAgIHlpZWxkIHdhbGtlci52YWx1ZVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSBZYWxsaXN0XG5cbllhbGxpc3QuTm9kZSA9IE5vZGVcbllhbGxpc3QuY3JlYXRlID0gWWFsbGlzdFxuXG5mdW5jdGlvbiBZYWxsaXN0IChsaXN0KSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICBpZiAoIShzZWxmIGluc3RhbmNlb2YgWWFsbGlzdCkpIHtcbiAgICBzZWxmID0gbmV3IFlhbGxpc3QoKVxuICB9XG5cbiAgc2VsZi50YWlsID0gbnVsbFxuICBzZWxmLmhlYWQgPSBudWxsXG4gIHNlbGYubGVuZ3RoID0gMFxuXG4gIGlmIChsaXN0ICYmIHR5cGVvZiBsaXN0LmZvckVhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHNlbGYucHVzaChpdGVtKVxuICAgIH0pXG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHNlbGYucHVzaChhcmd1bWVudHNbaV0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlbGZcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUucmVtb3ZlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlLmxpc3QgIT09IHRoaXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlbW92aW5nIG5vZGUgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgbGlzdCcpXG4gIH1cblxuICB2YXIgbmV4dCA9IG5vZGUubmV4dFxuICB2YXIgcHJldiA9IG5vZGUucHJldlxuXG4gIGlmIChuZXh0KSB7XG4gICAgbmV4dC5wcmV2ID0gcHJldlxuICB9XG5cbiAgaWYgKHByZXYpIHtcbiAgICBwcmV2Lm5leHQgPSBuZXh0XG4gIH1cblxuICBpZiAobm9kZSA9PT0gdGhpcy5oZWFkKSB7XG4gICAgdGhpcy5oZWFkID0gbmV4dFxuICB9XG4gIGlmIChub2RlID09PSB0aGlzLnRhaWwpIHtcbiAgICB0aGlzLnRhaWwgPSBwcmV2XG4gIH1cblxuICBub2RlLmxpc3QubGVuZ3RoLS1cbiAgbm9kZS5uZXh0ID0gbnVsbFxuICBub2RlLnByZXYgPSBudWxsXG4gIG5vZGUubGlzdCA9IG51bGxcblxuICByZXR1cm4gbmV4dFxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS51bnNoaWZ0Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmIChub2RlID09PSB0aGlzLmhlYWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChub2RlLmxpc3QpIHtcbiAgICBub2RlLmxpc3QucmVtb3ZlTm9kZShub2RlKVxuICB9XG5cbiAgdmFyIGhlYWQgPSB0aGlzLmhlYWRcbiAgbm9kZS5saXN0ID0gdGhpc1xuICBub2RlLm5leHQgPSBoZWFkXG4gIGlmIChoZWFkKSB7XG4gICAgaGVhZC5wcmV2ID0gbm9kZVxuICB9XG5cbiAgdGhpcy5oZWFkID0gbm9kZVxuICBpZiAoIXRoaXMudGFpbCkge1xuICAgIHRoaXMudGFpbCA9IG5vZGVcbiAgfVxuICB0aGlzLmxlbmd0aCsrXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnB1c2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IHRoaXMudGFpbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKG5vZGUubGlzdCkge1xuICAgIG5vZGUubGlzdC5yZW1vdmVOb2RlKG5vZGUpXG4gIH1cblxuICB2YXIgdGFpbCA9IHRoaXMudGFpbFxuICBub2RlLmxpc3QgPSB0aGlzXG4gIG5vZGUucHJldiA9IHRhaWxcbiAgaWYgKHRhaWwpIHtcbiAgICB0YWlsLm5leHQgPSBub2RlXG4gIH1cblxuICB0aGlzLnRhaWwgPSBub2RlXG4gIGlmICghdGhpcy5oZWFkKSB7XG4gICAgdGhpcy5oZWFkID0gbm9kZVxuICB9XG4gIHRoaXMubGVuZ3RoKytcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcHVzaCh0aGlzLCBhcmd1bWVudHNbaV0pXG4gIH1cbiAgcmV0dXJuIHRoaXMubGVuZ3RoXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnVuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHVuc2hpZnQodGhpcywgYXJndW1lbnRzW2ldKVxuICB9XG4gIHJldHVybiB0aGlzLmxlbmd0aFxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy50YWlsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgdmFyIHJlcyA9IHRoaXMudGFpbC52YWx1ZVxuICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwucHJldlxuICBpZiAodGhpcy50YWlsKSB7XG4gICAgdGhpcy50YWlsLm5leHQgPSBudWxsXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oZWFkID0gbnVsbFxuICB9XG4gIHRoaXMubGVuZ3RoLS1cbiAgcmV0dXJuIHJlc1xufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5zaGlmdCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmhlYWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICB2YXIgcmVzID0gdGhpcy5oZWFkLnZhbHVlXG4gIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0XG4gIGlmICh0aGlzLmhlYWQpIHtcbiAgICB0aGlzLmhlYWQucHJldiA9IG51bGxcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRhaWwgPSBudWxsXG4gIH1cbiAgdGhpcy5sZW5ndGgtLVxuICByZXR1cm4gcmVzXG59XG5cbllhbGxpc3QucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZm4sIHRoaXNwKSB7XG4gIHRoaXNwID0gdGhpc3AgfHwgdGhpc1xuICBmb3IgKHZhciB3YWxrZXIgPSB0aGlzLmhlYWQsIGkgPSAwOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgaSwgdGhpcylcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG59XG5cbllhbGxpc3QucHJvdG90eXBlLmZvckVhY2hSZXZlcnNlID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXNcbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy50YWlsLCBpID0gdGhpcy5sZW5ndGggLSAxOyB3YWxrZXIgIT09IG51bGw7IGktLSkge1xuICAgIGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgaSwgdGhpcylcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldlxuICB9XG59XG5cbllhbGxpc3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuKSB7XG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgbjsgaSsrKSB7XG4gICAgLy8gYWJvcnQgb3V0IG9mIHRoZSBsaXN0IGVhcmx5IGlmIHdlIGhpdCBhIGN5Y2xlXG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxuICBpZiAoaSA9PT0gbiAmJiB3YWxrZXIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gd2Fsa2VyLnZhbHVlXG4gIH1cbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuZ2V0UmV2ZXJzZSA9IGZ1bmN0aW9uIChuKSB7XG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLnRhaWw7IHdhbGtlciAhPT0gbnVsbCAmJiBpIDwgbjsgaSsrKSB7XG4gICAgLy8gYWJvcnQgb3V0IG9mIHRoZSBsaXN0IGVhcmx5IGlmIHdlIGhpdCBhIGN5Y2xlXG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxuICBpZiAoaSA9PT0gbiAmJiB3YWxrZXIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gd2Fsa2VyLnZhbHVlXG4gIH1cbn1cblxuWWFsbGlzdC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGZuLCB0aGlzcCkge1xuICB0aGlzcCA9IHRoaXNwIHx8IHRoaXNcbiAgdmFyIHJlcyA9IG5ldyBZYWxsaXN0KClcbiAgZm9yICh2YXIgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgcmVzLnB1c2goZm4uY2FsbCh0aGlzcCwgd2Fsa2VyLnZhbHVlLCB0aGlzKSlcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG4gIHJldHVybiByZXNcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUubWFwUmV2ZXJzZSA9IGZ1bmN0aW9uIChmbiwgdGhpc3ApIHtcbiAgdGhpc3AgPSB0aGlzcCB8fCB0aGlzXG4gIHZhciByZXMgPSBuZXcgWWFsbGlzdCgpXG4gIGZvciAodmFyIHdhbGtlciA9IHRoaXMudGFpbDsgd2Fsa2VyICE9PSBudWxsOykge1xuICAgIHJlcy5wdXNoKGZuLmNhbGwodGhpc3AsIHdhbGtlci52YWx1ZSwgdGhpcykpXG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIChmbiwgaW5pdGlhbCkge1xuICB2YXIgYWNjXG4gIHZhciB3YWxrZXIgPSB0aGlzLmhlYWRcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgYWNjID0gaW5pdGlhbFxuICB9IGVsc2UgaWYgKHRoaXMuaGVhZCkge1xuICAgIHdhbGtlciA9IHRoaXMuaGVhZC5uZXh0XG4gICAgYWNjID0gdGhpcy5oZWFkLnZhbHVlXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGxpc3Qgd2l0aCBubyBpbml0aWFsIHZhbHVlJylcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGFjYyA9IGZuKGFjYywgd2Fsa2VyLnZhbHVlLCBpKVxuICAgIHdhbGtlciA9IHdhbGtlci5uZXh0XG4gIH1cblxuICByZXR1cm4gYWNjXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJlZHVjZVJldmVyc2UgPSBmdW5jdGlvbiAoZm4sIGluaXRpYWwpIHtcbiAgdmFyIGFjY1xuICB2YXIgd2Fsa2VyID0gdGhpcy50YWlsXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIGFjYyA9IGluaXRpYWxcbiAgfSBlbHNlIGlmICh0aGlzLnRhaWwpIHtcbiAgICB3YWxrZXIgPSB0aGlzLnRhaWwucHJldlxuICAgIGFjYyA9IHRoaXMudGFpbC52YWx1ZVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBsaXN0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpXG4gIH1cblxuICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyB3YWxrZXIgIT09IG51bGw7IGktLSkge1xuICAgIGFjYyA9IGZuKGFjYywgd2Fsa2VyLnZhbHVlLCBpKVxuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2XG4gIH1cblxuICByZXR1cm4gYWNjXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnIgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwLCB3YWxrZXIgPSB0aGlzLmhlYWQ7IHdhbGtlciAhPT0gbnVsbDsgaSsrKSB7XG4gICAgYXJyW2ldID0gd2Fsa2VyLnZhbHVlXG4gICAgd2Fsa2VyID0gd2Fsa2VyLm5leHRcbiAgfVxuICByZXR1cm4gYXJyXG59XG5cbllhbGxpc3QucHJvdG90eXBlLnRvQXJyYXlSZXZlcnNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy50YWlsOyB3YWxrZXIgIT09IG51bGw7IGkrKykge1xuICAgIGFycltpXSA9IHdhbGtlci52YWx1ZVxuICAgIHdhbGtlciA9IHdhbGtlci5wcmV2XG4gIH1cbiAgcmV0dXJuIGFyclxufVxuXG5ZYWxsaXN0LnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChmcm9tLCB0bykge1xuICB0byA9IHRvIHx8IHRoaXMubGVuZ3RoXG4gIGlmICh0byA8IDApIHtcbiAgICB0byArPSB0aGlzLmxlbmd0aFxuICB9XG4gIGZyb20gPSBmcm9tIHx8IDBcbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSArPSB0aGlzLmxlbmd0aFxuICB9XG4gIHZhciByZXQgPSBuZXcgWWFsbGlzdCgpXG4gIGlmICh0byA8IGZyb20gfHwgdG8gPCAwKSB7XG4gICAgcmV0dXJuIHJldFxuICB9XG4gIGlmIChmcm9tIDwgMCkge1xuICAgIGZyb20gPSAwXG4gIH1cbiAgaWYgKHRvID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0byA9IHRoaXMubGVuZ3RoXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIHdhbGtlciA9IHRoaXMuaGVhZDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPCBmcm9tOyBpKyspIHtcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG4gIGZvciAoOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IHRvOyBpKyssIHdhbGtlciA9IHdhbGtlci5uZXh0KSB7XG4gICAgcmV0LnB1c2god2Fsa2VyLnZhbHVlKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuc2xpY2VSZXZlcnNlID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7XG4gIHRvID0gdG8gfHwgdGhpcy5sZW5ndGhcbiAgaWYgKHRvIDwgMCkge1xuICAgIHRvICs9IHRoaXMubGVuZ3RoXG4gIH1cbiAgZnJvbSA9IGZyb20gfHwgMFxuICBpZiAoZnJvbSA8IDApIHtcbiAgICBmcm9tICs9IHRoaXMubGVuZ3RoXG4gIH1cbiAgdmFyIHJldCA9IG5ldyBZYWxsaXN0KClcbiAgaWYgKHRvIDwgZnJvbSB8fCB0byA8IDApIHtcbiAgICByZXR1cm4gcmV0XG4gIH1cbiAgaWYgKGZyb20gPCAwKSB7XG4gICAgZnJvbSA9IDBcbiAgfVxuICBpZiAodG8gPiB0aGlzLmxlbmd0aCkge1xuICAgIHRvID0gdGhpcy5sZW5ndGhcbiAgfVxuICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGgsIHdhbGtlciA9IHRoaXMudGFpbDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPiB0bzsgaS0tKSB7XG4gICAgd2Fsa2VyID0gd2Fsa2VyLnByZXZcbiAgfVxuICBmb3IgKDsgd2Fsa2VyICE9PSBudWxsICYmIGkgPiBmcm9tOyBpLS0sIHdhbGtlciA9IHdhbGtlci5wcmV2KSB7XG4gICAgcmV0LnB1c2god2Fsa2VyLnZhbHVlKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuWWFsbGlzdC5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24gKHN0YXJ0LCBkZWxldGVDb3VudCwgLi4ubm9kZXMpIHtcbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMVxuICB9XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IHRoaXMubGVuZ3RoICsgc3RhcnQ7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgd2Fsa2VyID0gdGhpcy5oZWFkOyB3YWxrZXIgIT09IG51bGwgJiYgaSA8IHN0YXJ0OyBpKyspIHtcbiAgICB3YWxrZXIgPSB3YWxrZXIubmV4dFxuICB9XG5cbiAgdmFyIHJldCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyB3YWxrZXIgJiYgaSA8IGRlbGV0ZUNvdW50OyBpKyspIHtcbiAgICByZXQucHVzaCh3YWxrZXIudmFsdWUpXG4gICAgd2Fsa2VyID0gdGhpcy5yZW1vdmVOb2RlKHdhbGtlcilcbiAgfVxuICBpZiAod2Fsa2VyID09PSBudWxsKSB7XG4gICAgd2Fsa2VyID0gdGhpcy50YWlsXG4gIH1cblxuICBpZiAod2Fsa2VyICE9PSB0aGlzLmhlYWQgJiYgd2Fsa2VyICE9PSB0aGlzLnRhaWwpIHtcbiAgICB3YWxrZXIgPSB3YWxrZXIucHJldlxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHdhbGtlciA9IGluc2VydCh0aGlzLCB3YWxrZXIsIG5vZGVzW2ldKVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbllhbGxpc3QucHJvdG90eXBlLnJldmVyc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkID0gdGhpcy5oZWFkXG4gIHZhciB0YWlsID0gdGhpcy50YWlsXG4gIGZvciAodmFyIHdhbGtlciA9IGhlYWQ7IHdhbGtlciAhPT0gbnVsbDsgd2Fsa2VyID0gd2Fsa2VyLnByZXYpIHtcbiAgICB2YXIgcCA9IHdhbGtlci5wcmV2XG4gICAgd2Fsa2VyLnByZXYgPSB3YWxrZXIubmV4dFxuICAgIHdhbGtlci5uZXh0ID0gcFxuICB9XG4gIHRoaXMuaGVhZCA9IHRhaWxcbiAgdGhpcy50YWlsID0gaGVhZFxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBpbnNlcnQgKHNlbGYsIG5vZGUsIHZhbHVlKSB7XG4gIHZhciBpbnNlcnRlZCA9IG5vZGUgPT09IHNlbGYuaGVhZCA/XG4gICAgbmV3IE5vZGUodmFsdWUsIG51bGwsIG5vZGUsIHNlbGYpIDpcbiAgICBuZXcgTm9kZSh2YWx1ZSwgbm9kZSwgbm9kZS5uZXh0LCBzZWxmKVxuXG4gIGlmIChpbnNlcnRlZC5uZXh0ID09PSBudWxsKSB7XG4gICAgc2VsZi50YWlsID0gaW5zZXJ0ZWRcbiAgfVxuICBpZiAoaW5zZXJ0ZWQucHJldiA9PT0gbnVsbCkge1xuICAgIHNlbGYuaGVhZCA9IGluc2VydGVkXG4gIH1cblxuICBzZWxmLmxlbmd0aCsrXG5cbiAgcmV0dXJuIGluc2VydGVkXG59XG5cbmZ1bmN0aW9uIHB1c2ggKHNlbGYsIGl0ZW0pIHtcbiAgc2VsZi50YWlsID0gbmV3IE5vZGUoaXRlbSwgc2VsZi50YWlsLCBudWxsLCBzZWxmKVxuICBpZiAoIXNlbGYuaGVhZCkge1xuICAgIHNlbGYuaGVhZCA9IHNlbGYudGFpbFxuICB9XG4gIHNlbGYubGVuZ3RoKytcbn1cblxuZnVuY3Rpb24gdW5zaGlmdCAoc2VsZiwgaXRlbSkge1xuICBzZWxmLmhlYWQgPSBuZXcgTm9kZShpdGVtLCBudWxsLCBzZWxmLmhlYWQsIHNlbGYpXG4gIGlmICghc2VsZi50YWlsKSB7XG4gICAgc2VsZi50YWlsID0gc2VsZi5oZWFkXG4gIH1cbiAgc2VsZi5sZW5ndGgrK1xufVxuXG5mdW5jdGlvbiBOb2RlICh2YWx1ZSwgcHJldiwgbmV4dCwgbGlzdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUodmFsdWUsIHByZXYsIG5leHQsIGxpc3QpXG4gIH1cblxuICB0aGlzLmxpc3QgPSBsaXN0XG4gIHRoaXMudmFsdWUgPSB2YWx1ZVxuXG4gIGlmIChwcmV2KSB7XG4gICAgcHJldi5uZXh0ID0gdGhpc1xuICAgIHRoaXMucHJldiA9IHByZXZcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnByZXYgPSBudWxsXG4gIH1cblxuICBpZiAobmV4dCkge1xuICAgIG5leHQucHJldiA9IHRoaXNcbiAgICB0aGlzLm5leHQgPSBuZXh0XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5uZXh0ID0gbnVsbFxuICB9XG59XG5cbnRyeSB7XG4gIC8vIGFkZCBpZiBzdXBwb3J0IGZvciBTeW1ib2wuaXRlcmF0b3IgaXMgcHJlc2VudFxuICByZXF1aXJlKCcuL2l0ZXJhdG9yLmpzJykoWWFsbGlzdClcbn0gY2F0Y2ggKGVyKSB7fVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBBIGxpbmtlZCBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgcmVjZW50bHktdXNlZC1uZXNzXG5jb25zdCBZYWxsaXN0ID0gcmVxdWlyZSgneWFsbGlzdCcpXG5cbmNvbnN0IE1BWCA9IFN5bWJvbCgnbWF4JylcbmNvbnN0IExFTkdUSCA9IFN5bWJvbCgnbGVuZ3RoJylcbmNvbnN0IExFTkdUSF9DQUxDVUxBVE9SID0gU3ltYm9sKCdsZW5ndGhDYWxjdWxhdG9yJylcbmNvbnN0IEFMTE9XX1NUQUxFID0gU3ltYm9sKCdhbGxvd1N0YWxlJylcbmNvbnN0IE1BWF9BR0UgPSBTeW1ib2woJ21heEFnZScpXG5jb25zdCBESVNQT1NFID0gU3ltYm9sKCdkaXNwb3NlJylcbmNvbnN0IE5PX0RJU1BPU0VfT05fU0VUID0gU3ltYm9sKCdub0Rpc3Bvc2VPblNldCcpXG5jb25zdCBMUlVfTElTVCA9IFN5bWJvbCgnbHJ1TGlzdCcpXG5jb25zdCBDQUNIRSA9IFN5bWJvbCgnY2FjaGUnKVxuY29uc3QgVVBEQVRFX0FHRV9PTl9HRVQgPSBTeW1ib2woJ3VwZGF0ZUFnZU9uR2V0JylcblxuY29uc3QgbmFpdmVMZW5ndGggPSAoKSA9PiAxXG5cbi8vIGxydUxpc3QgaXMgYSB5YWxsaXN0IHdoZXJlIHRoZSBoZWFkIGlzIHRoZSB5b3VuZ2VzdFxuLy8gaXRlbSwgYW5kIHRoZSB0YWlsIGlzIHRoZSBvbGRlc3QuICB0aGUgbGlzdCBjb250YWlucyB0aGUgSGl0XG4vLyBvYmplY3RzIGFzIHRoZSBlbnRyaWVzLlxuLy8gRWFjaCBIaXQgb2JqZWN0IGhhcyBhIHJlZmVyZW5jZSB0byBpdHMgWWFsbGlzdC5Ob2RlLiAgVGhpc1xuLy8gbmV2ZXIgY2hhbmdlcy5cbi8vXG4vLyBjYWNoZSBpcyBhIE1hcCAob3IgUHNldWRvTWFwKSB0aGF0IG1hdGNoZXMgdGhlIGtleXMgdG9cbi8vIHRoZSBZYWxsaXN0Lk5vZGUgb2JqZWN0LlxuY2xhc3MgTFJVQ2FjaGUge1xuICBjb25zdHJ1Y3RvciAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ251bWJlcicpXG4gICAgICBvcHRpb25zID0geyBtYXg6IG9wdGlvbnMgfVxuXG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgb3B0aW9ucyA9IHt9XG5cbiAgICBpZiAob3B0aW9ucy5tYXggJiYgKHR5cGVvZiBvcHRpb25zLm1heCAhPT0gJ251bWJlcicgfHwgb3B0aW9ucy5tYXggPCAwKSlcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpXG4gICAgLy8gS2luZCBvZiB3ZWlyZCB0byBoYXZlIGEgZGVmYXVsdCBtYXggb2YgSW5maW5pdHksIGJ1dCBvaCB3ZWxsLlxuICAgIGNvbnN0IG1heCA9IHRoaXNbTUFYXSA9IG9wdGlvbnMubWF4IHx8IEluZmluaXR5XG5cbiAgICBjb25zdCBsYyA9IG9wdGlvbnMubGVuZ3RoIHx8IG5haXZlTGVuZ3RoXG4gICAgdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl0gPSAodHlwZW9mIGxjICE9PSAnZnVuY3Rpb24nKSA/IG5haXZlTGVuZ3RoIDogbGNcbiAgICB0aGlzW0FMTE9XX1NUQUxFXSA9IG9wdGlvbnMuc3RhbGUgfHwgZmFsc2VcbiAgICBpZiAob3B0aW9ucy5tYXhBZ2UgJiYgdHlwZW9mIG9wdGlvbnMubWF4QWdlICE9PSAnbnVtYmVyJylcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21heEFnZSBtdXN0IGJlIGEgbnVtYmVyJylcbiAgICB0aGlzW01BWF9BR0VdID0gb3B0aW9ucy5tYXhBZ2UgfHwgMFxuICAgIHRoaXNbRElTUE9TRV0gPSBvcHRpb25zLmRpc3Bvc2VcbiAgICB0aGlzW05PX0RJU1BPU0VfT05fU0VUXSA9IG9wdGlvbnMubm9EaXNwb3NlT25TZXQgfHwgZmFsc2VcbiAgICB0aGlzW1VQREFURV9BR0VfT05fR0VUXSA9IG9wdGlvbnMudXBkYXRlQWdlT25HZXQgfHwgZmFsc2VcbiAgICB0aGlzLnJlc2V0KClcbiAgfVxuXG4gIC8vIHJlc2l6ZSB0aGUgY2FjaGUgd2hlbiB0aGUgbWF4IGNoYW5nZXMuXG4gIHNldCBtYXggKG1MKSB7XG4gICAgaWYgKHR5cGVvZiBtTCAhPT0gJ251bWJlcicgfHwgbUwgPCAwKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJylcblxuICAgIHRoaXNbTUFYXSA9IG1MIHx8IEluZmluaXR5XG4gICAgdHJpbSh0aGlzKVxuICB9XG4gIGdldCBtYXggKCkge1xuICAgIHJldHVybiB0aGlzW01BWF1cbiAgfVxuXG4gIHNldCBhbGxvd1N0YWxlIChhbGxvd1N0YWxlKSB7XG4gICAgdGhpc1tBTExPV19TVEFMRV0gPSAhIWFsbG93U3RhbGVcbiAgfVxuICBnZXQgYWxsb3dTdGFsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNbQUxMT1dfU1RBTEVdXG4gIH1cblxuICBzZXQgbWF4QWdlIChtQSkge1xuICAgIGlmICh0eXBlb2YgbUEgIT09ICdudW1iZXInKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWF4QWdlIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyJylcblxuICAgIHRoaXNbTUFYX0FHRV0gPSBtQVxuICAgIHRyaW0odGhpcylcbiAgfVxuICBnZXQgbWF4QWdlICgpIHtcbiAgICByZXR1cm4gdGhpc1tNQVhfQUdFXVxuICB9XG5cbiAgLy8gcmVzaXplIHRoZSBjYWNoZSB3aGVuIHRoZSBsZW5ndGhDYWxjdWxhdG9yIGNoYW5nZXMuXG4gIHNldCBsZW5ndGhDYWxjdWxhdG9yIChsQykge1xuICAgIGlmICh0eXBlb2YgbEMgIT09ICdmdW5jdGlvbicpXG4gICAgICBsQyA9IG5haXZlTGVuZ3RoXG5cbiAgICBpZiAobEMgIT09IHRoaXNbTEVOR1RIX0NBTENVTEFUT1JdKSB7XG4gICAgICB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXSA9IGxDXG4gICAgICB0aGlzW0xFTkdUSF0gPSAwXG4gICAgICB0aGlzW0xSVV9MSVNUXS5mb3JFYWNoKGhpdCA9PiB7XG4gICAgICAgIGhpdC5sZW5ndGggPSB0aGlzW0xFTkdUSF9DQUxDVUxBVE9SXShoaXQudmFsdWUsIGhpdC5rZXkpXG4gICAgICAgIHRoaXNbTEVOR1RIXSArPSBoaXQubGVuZ3RoXG4gICAgICB9KVxuICAgIH1cbiAgICB0cmltKHRoaXMpXG4gIH1cbiAgZ2V0IGxlbmd0aENhbGN1bGF0b3IgKCkgeyByZXR1cm4gdGhpc1tMRU5HVEhfQ0FMQ1VMQVRPUl0gfVxuXG4gIGdldCBsZW5ndGggKCkgeyByZXR1cm4gdGhpc1tMRU5HVEhdIH1cbiAgZ2V0IGl0ZW1Db3VudCAoKSB7IHJldHVybiB0aGlzW0xSVV9MSVNUXS5sZW5ndGggfVxuXG4gIHJmb3JFYWNoIChmbiwgdGhpc3ApIHtcbiAgICB0aGlzcCA9IHRoaXNwIHx8IHRoaXNcbiAgICBmb3IgKGxldCB3YWxrZXIgPSB0aGlzW0xSVV9MSVNUXS50YWlsOyB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgICBjb25zdCBwcmV2ID0gd2Fsa2VyLnByZXZcbiAgICAgIGZvckVhY2hTdGVwKHRoaXMsIGZuLCB3YWxrZXIsIHRoaXNwKVxuICAgICAgd2Fsa2VyID0gcHJldlxuICAgIH1cbiAgfVxuXG4gIGZvckVhY2ggKGZuLCB0aGlzcCkge1xuICAgIHRoaXNwID0gdGhpc3AgfHwgdGhpc1xuICAgIGZvciAobGV0IHdhbGtlciA9IHRoaXNbTFJVX0xJU1RdLmhlYWQ7IHdhbGtlciAhPT0gbnVsbDspIHtcbiAgICAgIGNvbnN0IG5leHQgPSB3YWxrZXIubmV4dFxuICAgICAgZm9yRWFjaFN0ZXAodGhpcywgZm4sIHdhbGtlciwgdGhpc3ApXG4gICAgICB3YWxrZXIgPSBuZXh0XG4gICAgfVxuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNbTFJVX0xJU1RdLnRvQXJyYXkoKS5tYXAoayA9PiBrLmtleSlcbiAgfVxuXG4gIHZhbHVlcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNbTFJVX0xJU1RdLnRvQXJyYXkoKS5tYXAoayA9PiBrLnZhbHVlKVxuICB9XG5cbiAgcmVzZXQgKCkge1xuICAgIGlmICh0aGlzW0RJU1BPU0VdICYmXG4gICAgICAgIHRoaXNbTFJVX0xJU1RdICYmXG4gICAgICAgIHRoaXNbTFJVX0xJU1RdLmxlbmd0aCkge1xuICAgICAgdGhpc1tMUlVfTElTVF0uZm9yRWFjaChoaXQgPT4gdGhpc1tESVNQT1NFXShoaXQua2V5LCBoaXQudmFsdWUpKVxuICAgIH1cblxuICAgIHRoaXNbQ0FDSEVdID0gbmV3IE1hcCgpIC8vIGhhc2ggb2YgaXRlbXMgYnkga2V5XG4gICAgdGhpc1tMUlVfTElTVF0gPSBuZXcgWWFsbGlzdCgpIC8vIGxpc3Qgb2YgaXRlbXMgaW4gb3JkZXIgb2YgdXNlIHJlY2VuY3lcbiAgICB0aGlzW0xFTkdUSF0gPSAwIC8vIGxlbmd0aCBvZiBpdGVtcyBpbiB0aGUgbGlzdFxuICB9XG5cbiAgZHVtcCAoKSB7XG4gICAgcmV0dXJuIHRoaXNbTFJVX0xJU1RdLm1hcChoaXQgPT5cbiAgICAgIGlzU3RhbGUodGhpcywgaGl0KSA/IGZhbHNlIDoge1xuICAgICAgICBrOiBoaXQua2V5LFxuICAgICAgICB2OiBoaXQudmFsdWUsXG4gICAgICAgIGU6IGhpdC5ub3cgKyAoaGl0Lm1heEFnZSB8fCAwKVxuICAgICAgfSkudG9BcnJheSgpLmZpbHRlcihoID0+IGgpXG4gIH1cblxuICBkdW1wTHJ1ICgpIHtcbiAgICByZXR1cm4gdGhpc1tMUlVfTElTVF1cbiAgfVxuXG4gIHNldCAoa2V5LCB2YWx1ZSwgbWF4QWdlKSB7XG4gICAgbWF4QWdlID0gbWF4QWdlIHx8IHRoaXNbTUFYX0FHRV1cblxuICAgIGlmIChtYXhBZ2UgJiYgdHlwZW9mIG1heEFnZSAhPT0gJ251bWJlcicpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXhBZ2UgbXVzdCBiZSBhIG51bWJlcicpXG5cbiAgICBjb25zdCBub3cgPSBtYXhBZ2UgPyBEYXRlLm5vdygpIDogMFxuICAgIGNvbnN0IGxlbiA9IHRoaXNbTEVOR1RIX0NBTENVTEFUT1JdKHZhbHVlLCBrZXkpXG5cbiAgICBpZiAodGhpc1tDQUNIRV0uaGFzKGtleSkpIHtcbiAgICAgIGlmIChsZW4gPiB0aGlzW01BWF0pIHtcbiAgICAgICAgZGVsKHRoaXMsIHRoaXNbQ0FDSEVdLmdldChrZXkpKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXNbQ0FDSEVdLmdldChrZXkpXG4gICAgICBjb25zdCBpdGVtID0gbm9kZS52YWx1ZVxuXG4gICAgICAvLyBkaXNwb3NlIG9mIHRoZSBvbGQgb25lIGJlZm9yZSBvdmVyd3JpdGluZ1xuICAgICAgLy8gc3BsaXQgb3V0IGludG8gMiBpZnMgZm9yIGJldHRlciBjb3ZlcmFnZSB0cmFja2luZ1xuICAgICAgaWYgKHRoaXNbRElTUE9TRV0pIHtcbiAgICAgICAgaWYgKCF0aGlzW05PX0RJU1BPU0VfT05fU0VUXSlcbiAgICAgICAgICB0aGlzW0RJU1BPU0VdKGtleSwgaXRlbS52YWx1ZSlcbiAgICAgIH1cblxuICAgICAgaXRlbS5ub3cgPSBub3dcbiAgICAgIGl0ZW0ubWF4QWdlID0gbWF4QWdlXG4gICAgICBpdGVtLnZhbHVlID0gdmFsdWVcbiAgICAgIHRoaXNbTEVOR1RIXSArPSBsZW4gLSBpdGVtLmxlbmd0aFxuICAgICAgaXRlbS5sZW5ndGggPSBsZW5cbiAgICAgIHRoaXMuZ2V0KGtleSlcbiAgICAgIHRyaW0odGhpcylcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgaGl0ID0gbmV3IEVudHJ5KGtleSwgdmFsdWUsIGxlbiwgbm93LCBtYXhBZ2UpXG5cbiAgICAvLyBvdmVyc2l6ZWQgb2JqZWN0cyBmYWxsIG91dCBvZiBjYWNoZSBhdXRvbWF0aWNhbGx5LlxuICAgIGlmIChoaXQubGVuZ3RoID4gdGhpc1tNQVhdKSB7XG4gICAgICBpZiAodGhpc1tESVNQT1NFXSlcbiAgICAgICAgdGhpc1tESVNQT1NFXShrZXksIHZhbHVlKVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzW0xFTkdUSF0gKz0gaGl0Lmxlbmd0aFxuICAgIHRoaXNbTFJVX0xJU1RdLnVuc2hpZnQoaGl0KVxuICAgIHRoaXNbQ0FDSEVdLnNldChrZXksIHRoaXNbTFJVX0xJU1RdLmhlYWQpXG4gICAgdHJpbSh0aGlzKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBoYXMgKGtleSkge1xuICAgIGlmICghdGhpc1tDQUNIRV0uaGFzKGtleSkpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGhpdCA9IHRoaXNbQ0FDSEVdLmdldChrZXkpLnZhbHVlXG4gICAgcmV0dXJuICFpc1N0YWxlKHRoaXMsIGhpdClcbiAgfVxuXG4gIGdldCAoa2V5KSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBrZXksIHRydWUpXG4gIH1cblxuICBwZWVrIChrZXkpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGtleSwgZmFsc2UpXG4gIH1cblxuICBwb3AgKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzW0xSVV9MSVNUXS50YWlsXG4gICAgaWYgKCFub2RlKVxuICAgICAgcmV0dXJuIG51bGxcblxuICAgIGRlbCh0aGlzLCBub2RlKVxuICAgIHJldHVybiBub2RlLnZhbHVlXG4gIH1cblxuICBkZWwgKGtleSkge1xuICAgIGRlbCh0aGlzLCB0aGlzW0NBQ0hFXS5nZXQoa2V5KSlcbiAgfVxuXG4gIGxvYWQgKGFycikge1xuICAgIC8vIHJlc2V0IHRoZSBjYWNoZVxuICAgIHRoaXMucmVzZXQoKVxuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuICAgIC8vIEEgcHJldmlvdXMgc2VyaWFsaXplZCBjYWNoZSBoYXMgdGhlIG1vc3QgcmVjZW50IGl0ZW1zIGZpcnN0XG4gICAgZm9yIChsZXQgbCA9IGFyci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgY29uc3QgaGl0ID0gYXJyW2xdXG4gICAgICBjb25zdCBleHBpcmVzQXQgPSBoaXQuZSB8fCAwXG4gICAgICBpZiAoZXhwaXJlc0F0ID09PSAwKVxuICAgICAgICAvLyB0aGUgaXRlbSB3YXMgY3JlYXRlZCB3aXRob3V0IGV4cGlyYXRpb24gaW4gYSBub24gYWdlZCBjYWNoZVxuICAgICAgICB0aGlzLnNldChoaXQuaywgaGl0LnYpXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF4QWdlID0gZXhwaXJlc0F0IC0gbm93XG4gICAgICAgIC8vIGRvbnQgYWRkIGFscmVhZHkgZXhwaXJlZCBpdGVtc1xuICAgICAgICBpZiAobWF4QWdlID4gMCkge1xuICAgICAgICAgIHRoaXMuc2V0KGhpdC5rLCBoaXQudiwgbWF4QWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJ1bmUgKCkge1xuICAgIHRoaXNbQ0FDSEVdLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGdldCh0aGlzLCBrZXksIGZhbHNlKSlcbiAgfVxufVxuXG5jb25zdCBnZXQgPSAoc2VsZiwga2V5LCBkb1VzZSkgPT4ge1xuICBjb25zdCBub2RlID0gc2VsZltDQUNIRV0uZ2V0KGtleSlcbiAgaWYgKG5vZGUpIHtcbiAgICBjb25zdCBoaXQgPSBub2RlLnZhbHVlXG4gICAgaWYgKGlzU3RhbGUoc2VsZiwgaGl0KSkge1xuICAgICAgZGVsKHNlbGYsIG5vZGUpXG4gICAgICBpZiAoIXNlbGZbQUxMT1dfU1RBTEVdKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkb1VzZSkge1xuICAgICAgICBpZiAoc2VsZltVUERBVEVfQUdFX09OX0dFVF0pXG4gICAgICAgICAgbm9kZS52YWx1ZS5ub3cgPSBEYXRlLm5vdygpXG4gICAgICAgIHNlbGZbTFJVX0xJU1RdLnVuc2hpZnROb2RlKG5vZGUpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoaXQudmFsdWVcbiAgfVxufVxuXG5jb25zdCBpc1N0YWxlID0gKHNlbGYsIGhpdCkgPT4ge1xuICBpZiAoIWhpdCB8fCAoIWhpdC5tYXhBZ2UgJiYgIXNlbGZbTUFYX0FHRV0pKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IGRpZmYgPSBEYXRlLm5vdygpIC0gaGl0Lm5vd1xuICByZXR1cm4gaGl0Lm1heEFnZSA/IGRpZmYgPiBoaXQubWF4QWdlXG4gICAgOiBzZWxmW01BWF9BR0VdICYmIChkaWZmID4gc2VsZltNQVhfQUdFXSlcbn1cblxuY29uc3QgdHJpbSA9IHNlbGYgPT4ge1xuICBpZiAoc2VsZltMRU5HVEhdID4gc2VsZltNQVhdKSB7XG4gICAgZm9yIChsZXQgd2Fsa2VyID0gc2VsZltMUlVfTElTVF0udGFpbDtcbiAgICAgIHNlbGZbTEVOR1RIXSA+IHNlbGZbTUFYXSAmJiB3YWxrZXIgIT09IG51bGw7KSB7XG4gICAgICAvLyBXZSBrbm93IHRoYXQgd2UncmUgYWJvdXQgdG8gZGVsZXRlIHRoaXMgb25lLCBhbmQgYWxzb1xuICAgICAgLy8gd2hhdCB0aGUgbmV4dCBsZWFzdCByZWNlbnRseSB1c2VkIGtleSB3aWxsIGJlLCBzbyBqdXN0XG4gICAgICAvLyBnbyBhaGVhZCBhbmQgc2V0IGl0IG5vdy5cbiAgICAgIGNvbnN0IHByZXYgPSB3YWxrZXIucHJldlxuICAgICAgZGVsKHNlbGYsIHdhbGtlcilcbiAgICAgIHdhbGtlciA9IHByZXZcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVsID0gKHNlbGYsIG5vZGUpID0+IHtcbiAgaWYgKG5vZGUpIHtcbiAgICBjb25zdCBoaXQgPSBub2RlLnZhbHVlXG4gICAgaWYgKHNlbGZbRElTUE9TRV0pXG4gICAgICBzZWxmW0RJU1BPU0VdKGhpdC5rZXksIGhpdC52YWx1ZSlcblxuICAgIHNlbGZbTEVOR1RIXSAtPSBoaXQubGVuZ3RoXG4gICAgc2VsZltDQUNIRV0uZGVsZXRlKGhpdC5rZXkpXG4gICAgc2VsZltMUlVfTElTVF0ucmVtb3ZlTm9kZShub2RlKVxuICB9XG59XG5cbmNsYXNzIEVudHJ5IHtcbiAgY29uc3RydWN0b3IgKGtleSwgdmFsdWUsIGxlbmd0aCwgbm93LCBtYXhBZ2UpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoXG4gICAgdGhpcy5ub3cgPSBub3dcbiAgICB0aGlzLm1heEFnZSA9IG1heEFnZSB8fCAwXG4gIH1cbn1cblxuY29uc3QgZm9yRWFjaFN0ZXAgPSAoc2VsZiwgZm4sIG5vZGUsIHRoaXNwKSA9PiB7XG4gIGxldCBoaXQgPSBub2RlLnZhbHVlXG4gIGlmIChpc1N0YWxlKHNlbGYsIGhpdCkpIHtcbiAgICBkZWwoc2VsZiwgbm9kZSlcbiAgICBpZiAoIXNlbGZbQUxMT1dfU1RBTEVdKVxuICAgICAgaGl0ID0gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKGhpdClcbiAgICBmbi5jYWxsKHRoaXNwLCBoaXQudmFsdWUsIGhpdC5rZXksIHNlbGYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTFJVQ2FjaGVcbiIsICIvLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgUmFuZ2Uge1xuICBjb25zdHJ1Y3RvciAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBpZiAocmFuZ2UgaW5zdGFuY2VvZiBSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5sb29zZSA9PT0gISFvcHRpb25zLmxvb3NlICYmXG4gICAgICAgIHJhbmdlLmluY2x1ZGVQcmVyZWxlYXNlID09PSAhIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2VcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UucmF3LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyYW5nZSBpbnN0YW5jZW9mIENvbXBhcmF0b3IpIHtcbiAgICAgIC8vIGp1c3QgcHV0IGl0IGluIHRoZSBzZXQgYW5kIHJldHVyblxuICAgICAgdGhpcy5yYXcgPSByYW5nZS52YWx1ZVxuICAgICAgdGhpcy5zZXQgPSBbW3JhbmdlXV1cbiAgICAgIHRoaXMuZm9ybWF0KClcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLmluY2x1ZGVQcmVyZWxlYXNlID0gISFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlXG5cbiAgICAvLyBGaXJzdCByZWR1Y2UgYWxsIHdoaXRlc3BhY2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB3ZSBkbyBub3QgaGF2ZSB0byByZWx5XG4gICAgLy8gb24gcG90ZW50aWFsbHkgc2xvdyByZWdleGVzIGxpa2UgXFxzKi4gVGhpcyBpcyB0aGVuIHN0b3JlZCBhbmQgdXNlZCBmb3JcbiAgICAvLyBmdXR1cmUgZXJyb3IgbWVzc2FnZXMgYXMgd2VsbC5cbiAgICB0aGlzLnJhdyA9IHJhbmdlXG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLmpvaW4oJyAnKVxuXG4gICAgLy8gRmlyc3QsIHNwbGl0IG9uIHx8XG4gICAgdGhpcy5zZXQgPSB0aGlzLnJhd1xuICAgICAgLnNwbGl0KCd8fCcpXG4gICAgICAvLyBtYXAgdGhlIHJhbmdlIHRvIGEgMmQgYXJyYXkgb2YgY29tcGFyYXRvcnNcbiAgICAgIC5tYXAociA9PiB0aGlzLnBhcnNlUmFuZ2Uoci50cmltKCkpKVxuICAgICAgLy8gdGhyb3cgb3V0IGFueSBjb21wYXJhdG9yIGxpc3RzIHRoYXQgYXJlIGVtcHR5XG4gICAgICAvLyB0aGlzIGdlbmVyYWxseSBtZWFucyB0aGF0IGl0IHdhcyBub3QgYSB2YWxpZCByYW5nZSwgd2hpY2ggaXMgYWxsb3dlZFxuICAgICAgLy8gaW4gbG9vc2UgbW9kZSwgYnV0IHdpbGwgc3RpbGwgdGhyb3cgaWYgdGhlIFdIT0xFIHJhbmdlIGlzIGludmFsaWQuXG4gICAgICAuZmlsdGVyKGMgPT4gYy5sZW5ndGgpXG5cbiAgICBpZiAoIXRoaXMuc2V0Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBTZW1WZXIgUmFuZ2U6ICR7dGhpcy5yYXd9YClcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlIGFueSB0aGF0IGFyZSBub3QgdGhlIG51bGwgc2V0LCB0aHJvdyBvdXQgbnVsbCBzZXRzLlxuICAgIGlmICh0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBrZWVwIHRoZSBmaXJzdCBvbmUsIGluIGNhc2UgdGhleSdyZSBhbGwgbnVsbCBzZXRzXG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuc2V0WzBdXG4gICAgICB0aGlzLnNldCA9IHRoaXMuc2V0LmZpbHRlcihjID0+ICFpc051bGxTZXQoY1swXSkpXG4gICAgICBpZiAodGhpcy5zZXQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0ID0gW2ZpcnN0XVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNldC5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYW55IHRoYXQgYXJlICosIHRoZW4gdGhlIHJhbmdlIGlzIGp1c3QgKlxuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5zZXQpIHtcbiAgICAgICAgICBpZiAoYy5sZW5ndGggPT09IDEgJiYgaXNBbnkoY1swXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gW2NdXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybWF0KClcbiAgfVxuXG4gIGZvcm1hdCAoKSB7XG4gICAgdGhpcy5yYW5nZSA9IHRoaXMuc2V0XG4gICAgICAubWFwKChjb21wcykgPT4gY29tcHMuam9pbignICcpLnRyaW0oKSlcbiAgICAgIC5qb2luKCd8fCcpXG4gICAgICAudHJpbSgpXG4gICAgcmV0dXJuIHRoaXMucmFuZ2VcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZVxuICB9XG5cbiAgcGFyc2VSYW5nZSAocmFuZ2UpIHtcbiAgICAvLyBtZW1vaXplIHJhbmdlIHBhcnNpbmcgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIHRoaXMgaXMgYSB2ZXJ5IGhvdCBwYXRoLCBhbmQgZnVsbHkgZGV0ZXJtaW5pc3RpYy5cbiAgICBjb25zdCBtZW1vT3B0cyA9XG4gICAgICAodGhpcy5vcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmIEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFKSB8XG4gICAgICAodGhpcy5vcHRpb25zLmxvb3NlICYmIEZMQUdfTE9PU0UpXG4gICAgY29uc3QgbWVtb0tleSA9IG1lbW9PcHRzICsgJzonICsgcmFuZ2VcbiAgICBjb25zdCBjYWNoZWQgPSBjYWNoZS5nZXQobWVtb0tleSlcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkXG4gICAgfVxuXG4gICAgY29uc3QgbG9vc2UgPSB0aGlzLm9wdGlvbnMubG9vc2VcbiAgICAvLyBgMS4yLjMgLSAxLjIuNGAgPT4gYD49MS4yLjMgPD0xLjIuNGBcbiAgICBjb25zdCBociA9IGxvb3NlID8gcmVbdC5IWVBIRU5SQU5HRUxPT1NFXSA6IHJlW3QuSFlQSEVOUkFOR0VdXG4gICAgcmFuZ2UgPSByYW5nZS5yZXBsYWNlKGhyLCBoeXBoZW5SZXBsYWNlKHRoaXMub3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkpXG4gICAgZGVidWcoJ2h5cGhlbiByZXBsYWNlJywgcmFuZ2UpXG5cbiAgICAvLyBgPiAxLjIuMyA8IDEuMi41YCA9PiBgPjEuMi4zIDwxLjIuNWBcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DT01QQVJBVE9SVFJJTV0sIGNvbXBhcmF0b3JUcmltUmVwbGFjZSlcbiAgICBkZWJ1ZygnY29tcGFyYXRvciB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgfiAxLjIuM2AgPT4gYH4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5USUxERVRSSU1dLCB0aWxkZVRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCd0aWxkZSB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBgXiAxLjIuM2AgPT4gYF4xLjIuM2BcbiAgICByYW5nZSA9IHJhbmdlLnJlcGxhY2UocmVbdC5DQVJFVFRSSU1dLCBjYXJldFRyaW1SZXBsYWNlKVxuICAgIGRlYnVnKCdjYXJldCB0cmltJywgcmFuZ2UpXG5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmFuZ2UgaXMgY29tcGxldGVseSB0cmltbWVkIGFuZFxuICAgIC8vIHJlYWR5IHRvIGJlIHNwbGl0IGludG8gY29tcGFyYXRvcnMuXG5cbiAgICBsZXQgcmFuZ2VMaXN0ID0gcmFuZ2VcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKGNvbXAgPT4gcGFyc2VDb21wYXJhdG9yKGNvbXAsIHRoaXMub3B0aW9ucykpXG4gICAgICAuam9pbignICcpXG4gICAgICAuc3BsaXQoL1xccysvKVxuICAgICAgLy8gPj0wLjAuMCBpcyBlcXVpdmFsZW50IHRvICpcbiAgICAgIC5tYXAoY29tcCA9PiByZXBsYWNlR1RFMChjb21wLCB0aGlzLm9wdGlvbnMpKVxuXG4gICAgaWYgKGxvb3NlKSB7XG4gICAgICAvLyBpbiBsb29zZSBtb2RlLCB0aHJvdyBvdXQgYW55IHRoYXQgYXJlIG5vdCB2YWxpZCBjb21wYXJhdG9yc1xuICAgICAgcmFuZ2VMaXN0ID0gcmFuZ2VMaXN0LmZpbHRlcihjb21wID0+IHtcbiAgICAgICAgZGVidWcoJ2xvb3NlIGludmFsaWQgZmlsdGVyJywgY29tcCwgdGhpcy5vcHRpb25zKVxuICAgICAgICByZXR1cm4gISFjb21wLm1hdGNoKHJlW3QuQ09NUEFSQVRPUkxPT1NFXSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlYnVnKCdyYW5nZSBsaXN0JywgcmFuZ2VMaXN0KVxuXG4gICAgLy8gaWYgYW55IGNvbXBhcmF0b3JzIGFyZSB0aGUgbnVsbCBzZXQsIHRoZW4gcmVwbGFjZSB3aXRoIEpVU1QgbnVsbCBzZXRcbiAgICAvLyBpZiBtb3JlIHRoYW4gb25lIGNvbXBhcmF0b3IsIHJlbW92ZSBhbnkgKiBjb21wYXJhdG9yc1xuICAgIC8vIGFsc28sIGRvbid0IGluY2x1ZGUgdGhlIHNhbWUgY29tcGFyYXRvciBtb3JlIHRoYW4gb25jZVxuICAgIGNvbnN0IHJhbmdlTWFwID0gbmV3IE1hcCgpXG4gICAgY29uc3QgY29tcGFyYXRvcnMgPSByYW5nZUxpc3QubWFwKGNvbXAgPT4gbmV3IENvbXBhcmF0b3IoY29tcCwgdGhpcy5vcHRpb25zKSlcbiAgICBmb3IgKGNvbnN0IGNvbXAgb2YgY29tcGFyYXRvcnMpIHtcbiAgICAgIGlmIChpc051bGxTZXQoY29tcCkpIHtcbiAgICAgICAgcmV0dXJuIFtjb21wXVxuICAgICAgfVxuICAgICAgcmFuZ2VNYXAuc2V0KGNvbXAudmFsdWUsIGNvbXApXG4gICAgfVxuICAgIGlmIChyYW5nZU1hcC5zaXplID4gMSAmJiByYW5nZU1hcC5oYXMoJycpKSB7XG4gICAgICByYW5nZU1hcC5kZWxldGUoJycpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLnJhbmdlTWFwLnZhbHVlcygpXVxuICAgIGNhY2hlLnNldChtZW1vS2V5LCByZXN1bHQpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgaW50ZXJzZWN0cyAocmFuZ2UsIG9wdGlvbnMpIHtcbiAgICBpZiAoIShyYW5nZSBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBSYW5nZSBpcyByZXF1aXJlZCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0LnNvbWUoKHRoaXNDb21wYXJhdG9ycykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaXNTYXRpc2ZpYWJsZSh0aGlzQ29tcGFyYXRvcnMsIG9wdGlvbnMpICYmXG4gICAgICAgIHJhbmdlLnNldC5zb21lKChyYW5nZUNvbXBhcmF0b3JzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzU2F0aXNmaWFibGUocmFuZ2VDb21wYXJhdG9ycywgb3B0aW9ucykgJiZcbiAgICAgICAgICAgIHRoaXNDb21wYXJhdG9ycy5ldmVyeSgodGhpc0NvbXBhcmF0b3IpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlQ29tcGFyYXRvcnMuZXZlcnkoKHJhbmdlQ29tcGFyYXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzQ29tcGFyYXRvci5pbnRlcnNlY3RzKHJhbmdlQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICAvLyBpZiBBTlkgb2YgdGhlIHNldHMgbWF0Y2ggQUxMIG9mIGl0cyBjb21wYXJhdG9ycywgdGhlbiBwYXNzXG4gIHRlc3QgKHZlcnNpb24pIHtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZlcnNpb24gPSBuZXcgU2VtVmVyKHZlcnNpb24sIHRoaXMub3B0aW9ucylcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0ZXN0U2V0KHRoaXMuc2V0W2ldLCB2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VcblxuY29uc3QgTFJVID0gcmVxdWlyZSgnbHJ1LWNhY2hlJylcbmNvbnN0IGNhY2hlID0gbmV3IExSVSh7IG1heDogMTAwMCB9KVxuXG5jb25zdCBwYXJzZU9wdGlvbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9wYXJzZS1vcHRpb25zJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuL2NvbXBhcmF0b3InKVxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9kZWJ1ZycpXG5jb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuL3NlbXZlcicpXG5jb25zdCB7XG4gIHNhZmVSZTogcmUsXG4gIHQsXG4gIGNvbXBhcmF0b3JUcmltUmVwbGFjZSxcbiAgdGlsZGVUcmltUmVwbGFjZSxcbiAgY2FyZXRUcmltUmVwbGFjZSxcbn0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCB7IEZMQUdfSU5DTFVERV9QUkVSRUxFQVNFLCBGTEFHX0xPT1NFIH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9jb25zdGFudHMnKVxuXG5jb25zdCBpc051bGxTZXQgPSBjID0+IGMudmFsdWUgPT09ICc8MC4wLjAtMCdcbmNvbnN0IGlzQW55ID0gYyA9PiBjLnZhbHVlID09PSAnJ1xuXG4vLyB0YWtlIGEgc2V0IG9mIGNvbXBhcmF0b3JzIGFuZCBkZXRlcm1pbmUgd2hldGhlciB0aGVyZVxuLy8gZXhpc3RzIGEgdmVyc2lvbiB3aGljaCBjYW4gc2F0aXNmeSBpdFxuY29uc3QgaXNTYXRpc2ZpYWJsZSA9IChjb21wYXJhdG9ycywgb3B0aW9ucykgPT4ge1xuICBsZXQgcmVzdWx0ID0gdHJ1ZVxuICBjb25zdCByZW1haW5pbmdDb21wYXJhdG9ycyA9IGNvbXBhcmF0b3JzLnNsaWNlKClcbiAgbGV0IHRlc3RDb21wYXJhdG9yID0gcmVtYWluaW5nQ29tcGFyYXRvcnMucG9wKClcblxuICB3aGlsZSAocmVzdWx0ICYmIHJlbWFpbmluZ0NvbXBhcmF0b3JzLmxlbmd0aCkge1xuICAgIHJlc3VsdCA9IHJlbWFpbmluZ0NvbXBhcmF0b3JzLmV2ZXJ5KChvdGhlckNvbXBhcmF0b3IpID0+IHtcbiAgICAgIHJldHVybiB0ZXN0Q29tcGFyYXRvci5pbnRlcnNlY3RzKG90aGVyQ29tcGFyYXRvciwgb3B0aW9ucylcbiAgICB9KVxuXG4gICAgdGVzdENvbXBhcmF0b3IgPSByZW1haW5pbmdDb21wYXJhdG9ycy5wb3AoKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBjb21wcmlzZWQgb2YgeHJhbmdlcywgdGlsZGVzLCBzdGFycywgYW5kIGd0bHQncyBhdCB0aGlzIHBvaW50LlxuLy8gYWxyZWFkeSByZXBsYWNlZCB0aGUgaHlwaGVuIHJhbmdlc1xuLy8gdHVybiBpbnRvIGEgc2V0IG9mIEpVU1QgY29tcGFyYXRvcnMuXG5jb25zdCBwYXJzZUNvbXBhcmF0b3IgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygnY29tcCcsIGNvbXAsIG9wdGlvbnMpXG4gIGNvbXAgPSByZXBsYWNlQ2FyZXRzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCdjYXJldCcsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlVGlsZGVzKGNvbXAsIG9wdGlvbnMpXG4gIGRlYnVnKCd0aWxkZXMnLCBjb21wKVxuICBjb21wID0gcmVwbGFjZVhSYW5nZXMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3hyYW5nZScsIGNvbXApXG4gIGNvbXAgPSByZXBsYWNlU3RhcnMoY29tcCwgb3B0aW9ucylcbiAgZGVidWcoJ3N0YXJzJywgY29tcClcbiAgcmV0dXJuIGNvbXBcbn1cblxuY29uc3QgaXNYID0gaWQgPT4gIWlkIHx8IGlkLnRvTG93ZXJDYXNlKCkgPT09ICd4JyB8fCBpZCA9PT0gJyonXG5cbi8vIH4sIH4+IC0tPiAqIChhbnksIGtpbmRhIHNpbGx5KVxuLy8gfjIsIH4yLngsIH4yLngueCwgfj4yLCB+PjIueCB+PjIueC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyB+Mi4wLCB+Mi4wLngsIH4+Mi4wLCB+PjIuMC54IC0tPiA+PTIuMC4wIDwyLjEuMC0wXG4vLyB+MS4yLCB+MS4yLngsIH4+MS4yLCB+PjEuMi54IC0tPiA+PTEuMi4wIDwxLjMuMC0wXG4vLyB+MS4yLjMsIH4+MS4yLjMgLS0+ID49MS4yLjMgPDEuMy4wLTBcbi8vIH4xLjIuMCwgfj4xLjIuMCAtLT4gPj0xLjIuMCA8MS4zLjAtMFxuLy8gfjAuMC4xIC0tPiA+PTAuMC4xIDwwLjEuMC0wXG5jb25zdCByZXBsYWNlVGlsZGVzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAubWFwKChjKSA9PiByZXBsYWNlVGlsZGUoYywgb3B0aW9ucykpXG4gICAgLmpvaW4oJyAnKVxufVxuXG5jb25zdCByZXBsYWNlVGlsZGUgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb25zdCByID0gb3B0aW9ucy5sb29zZSA/IHJlW3QuVElMREVMT09TRV0gOiByZVt0LlRJTERFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCd0aWxkZScsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wIDwkeytNICsgMX0uMC4wLTBgXG4gICAgfSBlbHNlIGlmIChpc1gocCkpIHtcbiAgICAgIC8vIH4xLjIgPT0gPj0xLjIuMCA8MS4zLjAtMFxuICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAgPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9IGVsc2UgaWYgKHByKSB7XG4gICAgICBkZWJ1ZygncmVwbGFjZVRpbGRlIHByJywgcHIpXG4gICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIH4xLjIuMyA9PSA+PTEuMi4zIDwxLjMuMC0wXG4gICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICB9IDwke019LiR7K20gKyAxfS4wLTBgXG4gICAgfVxuXG4gICAgZGVidWcoJ3RpbGRlIHJldHVybicsIHJldClcbiAgICByZXR1cm4gcmV0XG4gIH0pXG59XG5cbi8vIF4gLS0+ICogKGFueSwga2luZGEgc2lsbHkpXG4vLyBeMiwgXjIueCwgXjIueC54IC0tPiA+PTIuMC4wIDwzLjAuMC0wXG4vLyBeMi4wLCBeMi4wLnggLS0+ID49Mi4wLjAgPDMuMC4wLTBcbi8vIF4xLjIsIF4xLjIueCAtLT4gPj0xLjIuMCA8Mi4wLjAtMFxuLy8gXjEuMi4zIC0tPiA+PTEuMi4zIDwyLjAuMC0wXG4vLyBeMS4yLjAgLS0+ID49MS4yLjAgPDIuMC4wLTBcbi8vIF4wLjAuMSAtLT4gPj0wLjAuMSA8MC4wLjItMFxuLy8gXjAuMS4wIC0tPiA+PTAuMS4wIDwwLjIuMC0wXG5jb25zdCByZXBsYWNlQ2FyZXRzID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAubWFwKChjKSA9PiByZXBsYWNlQ2FyZXQoYywgb3B0aW9ucykpXG4gICAgLmpvaW4oJyAnKVxufVxuXG5jb25zdCByZXBsYWNlQ2FyZXQgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygnY2FyZXQnLCBjb21wLCBvcHRpb25zKVxuICBjb25zdCByID0gb3B0aW9ucy5sb29zZSA/IHJlW3QuQ0FSRVRMT09TRV0gOiByZVt0LkNBUkVUXVxuICBjb25zdCB6ID0gb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/ICctMCcgOiAnJ1xuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChfLCBNLCBtLCBwLCBwcikgPT4ge1xuICAgIGRlYnVnKCdjYXJldCcsIGNvbXAsIF8sIE0sIG0sIHAsIHByKVxuICAgIGxldCByZXRcblxuICAgIGlmIChpc1goTSkpIHtcbiAgICAgIHJldCA9ICcnXG4gICAgfSBlbHNlIGlmIChpc1gobSkpIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHt6fSA8JHsrTSArIDF9LjAuMC0wYFxuICAgIH0gZWxzZSBpZiAoaXNYKHApKSB7XG4gICAgICBpZiAoTSA9PT0gJzAnKSB7XG4gICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4wJHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LjAke3p9IDwkeytNICsgMX0uMC4wLTBgXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcikge1xuICAgICAgZGVidWcoJ3JlcGxhY2VDYXJldCBwcicsIHByKVxuICAgICAgaWYgKE0gPT09ICcwJykge1xuICAgICAgICBpZiAobSA9PT0gJzAnKSB7XG4gICAgICAgICAgcmV0ID0gYD49JHtNfS4ke219LiR7cH0tJHtwclxuICAgICAgICAgIH0gPCR7TX0uJHttfS4keytwICsgMX0tMGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgICAgfSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwfS0ke3ByXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ25vIHByJylcbiAgICAgIGlmIChNID09PSAnMCcpIHtcbiAgICAgICAgaWYgKG0gPT09ICcwJykge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgICAgICB9JHt6fSA8JHtNfS4ke219LiR7K3AgKyAxfS0wYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IGA+PSR7TX0uJHttfS4ke3BcbiAgICAgICAgICB9JHt6fSA8JHtNfS4keyttICsgMX0uMC0wYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBgPj0ke019LiR7bX0uJHtwXG4gICAgICAgIH0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWJ1ZygnY2FyZXQgcmV0dXJuJywgcmV0KVxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuY29uc3QgcmVwbGFjZVhSYW5nZXMgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBkZWJ1ZygncmVwbGFjZVhSYW5nZXMnLCBjb21wLCBvcHRpb25zKVxuICByZXR1cm4gY29tcFxuICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgLm1hcCgoYykgPT4gcmVwbGFjZVhSYW5nZShjLCBvcHRpb25zKSlcbiAgICAuam9pbignICcpXG59XG5cbmNvbnN0IHJlcGxhY2VYUmFuZ2UgPSAoY29tcCwgb3B0aW9ucykgPT4ge1xuICBjb21wID0gY29tcC50cmltKClcbiAgY29uc3QgciA9IG9wdGlvbnMubG9vc2UgPyByZVt0LlhSQU5HRUxPT1NFXSA6IHJlW3QuWFJBTkdFXVxuICByZXR1cm4gY29tcC5yZXBsYWNlKHIsIChyZXQsIGd0bHQsIE0sIG0sIHAsIHByKSA9PiB7XG4gICAgZGVidWcoJ3hSYW5nZScsIGNvbXAsIHJldCwgZ3RsdCwgTSwgbSwgcCwgcHIpXG4gICAgY29uc3QgeE0gPSBpc1goTSlcbiAgICBjb25zdCB4bSA9IHhNIHx8IGlzWChtKVxuICAgIGNvbnN0IHhwID0geG0gfHwgaXNYKHApXG4gICAgY29uc3QgYW55WCA9IHhwXG5cbiAgICBpZiAoZ3RsdCA9PT0gJz0nICYmIGFueVgpIHtcbiAgICAgIGd0bHQgPSAnJ1xuICAgIH1cblxuICAgIC8vIGlmIHdlJ3JlIGluY2x1ZGluZyBwcmVyZWxlYXNlcyBpbiB0aGUgbWF0Y2gsIHRoZW4gd2UgbmVlZFxuICAgIC8vIHRvIGZpeCB0aGlzIHRvIC0wLCB0aGUgbG93ZXN0IHBvc3NpYmxlIHByZXJlbGVhc2UgdmFsdWVcbiAgICBwciA9IG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgPyAnLTAnIDogJydcblxuICAgIGlmICh4TSkge1xuICAgICAgaWYgKGd0bHQgPT09ICc+JyB8fCBndGx0ID09PSAnPCcpIHtcbiAgICAgICAgLy8gbm90aGluZyBpcyBhbGxvd2VkXG4gICAgICAgIHJldCA9ICc8MC4wLjAtMCdcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vdGhpbmcgaXMgZm9yYmlkZGVuXG4gICAgICAgIHJldCA9ICcqJ1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ3RsdCAmJiBhbnlYKSB7XG4gICAgICAvLyB3ZSBrbm93IHBhdGNoIGlzIGFuIHgsIGJlY2F1c2Ugd2UgaGF2ZSBhbnkgeCBhdCBhbGwuXG4gICAgICAvLyByZXBsYWNlIFggd2l0aCAwXG4gICAgICBpZiAoeG0pIHtcbiAgICAgICAgbSA9IDBcbiAgICAgIH1cbiAgICAgIHAgPSAwXG5cbiAgICAgIGlmIChndGx0ID09PSAnPicpIHtcbiAgICAgICAgLy8gPjEgPT4gPj0yLjAuMFxuICAgICAgICAvLyA+MS4yID0+ID49MS4zLjBcbiAgICAgICAgZ3RsdCA9ICc+PSdcbiAgICAgICAgaWYgKHhtKSB7XG4gICAgICAgICAgTSA9ICtNICsgMVxuICAgICAgICAgIG0gPSAwXG4gICAgICAgICAgcCA9IDBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtID0gK20gKyAxXG4gICAgICAgICAgcCA9IDBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChndGx0ID09PSAnPD0nKSB7XG4gICAgICAgIC8vIDw9MC43LnggaXMgYWN0dWFsbHkgPDAuOC4wLCBzaW5jZSBhbnkgMC43Lnggc2hvdWxkXG4gICAgICAgIC8vIHBhc3MuICBTaW1pbGFybHksIDw9Ny54IGlzIGFjdHVhbGx5IDw4LjAuMCwgZXRjLlxuICAgICAgICBndGx0ID0gJzwnXG4gICAgICAgIGlmICh4bSkge1xuICAgICAgICAgIE0gPSArTSArIDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtID0gK20gKyAxXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGd0bHQgPT09ICc8Jykge1xuICAgICAgICBwciA9ICctMCdcbiAgICAgIH1cblxuICAgICAgcmV0ID0gYCR7Z3RsdCArIE19LiR7bX0uJHtwfSR7cHJ9YFxuICAgIH0gZWxzZSBpZiAoeG0pIHtcbiAgICAgIHJldCA9IGA+PSR7TX0uMC4wJHtwcn0gPCR7K00gKyAxfS4wLjAtMGBcbiAgICB9IGVsc2UgaWYgKHhwKSB7XG4gICAgICByZXQgPSBgPj0ke019LiR7bX0uMCR7cHJcbiAgICAgIH0gPCR7TX0uJHsrbSArIDF9LjAtMGBcbiAgICB9XG5cbiAgICBkZWJ1ZygneFJhbmdlIHJldHVybicsIHJldClcblxuICAgIHJldHVybiByZXRcbiAgfSlcbn1cblxuLy8gQmVjYXVzZSAqIGlzIEFORC1lZCB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgY29tcGFyYXRvcixcbi8vIGFuZCAnJyBtZWFucyBcImFueSB2ZXJzaW9uXCIsIGp1c3QgcmVtb3ZlIHRoZSAqcyBlbnRpcmVseS5cbmNvbnN0IHJlcGxhY2VTdGFycyA9IChjb21wLCBvcHRpb25zKSA9PiB7XG4gIGRlYnVnKCdyZXBsYWNlU3RhcnMnLCBjb21wLCBvcHRpb25zKVxuICAvLyBMb29zZW5lc3MgaXMgaWdub3JlZCBoZXJlLiAgc3RhciBpcyBhbHdheXMgYXMgbG9vc2UgYXMgaXQgZ2V0cyFcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UocmVbdC5TVEFSXSwgJycpXG59XG5cbmNvbnN0IHJlcGxhY2VHVEUwID0gKGNvbXAsIG9wdGlvbnMpID0+IHtcbiAgZGVidWcoJ3JlcGxhY2VHVEUwJywgY29tcCwgb3B0aW9ucylcbiAgcmV0dXJuIGNvbXBcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UocmVbb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSA/IHQuR1RFMFBSRSA6IHQuR1RFMF0sICcnKVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBzdHJpbmcucmVwbGFjZShyZVt0LkhZUEhFTlJBTkdFXSlcbi8vIE0sIG0sIHBhdGNoLCBwcmVyZWxlYXNlLCBidWlsZFxuLy8gMS4yIC0gMy40LjUgPT4gPj0xLjIuMCA8PTMuNC41XG4vLyAxLjIuMyAtIDMuNCA9PiA+PTEuMi4wIDwzLjUuMC0wIEFueSAzLjQueCB3aWxsIGRvXG4vLyAxLjIgLSAzLjQgPT4gPj0xLjIuMCA8My41LjAtMFxuY29uc3QgaHlwaGVuUmVwbGFjZSA9IGluY1ByID0+ICgkMCxcbiAgZnJvbSwgZk0sIGZtLCBmcCwgZnByLCBmYixcbiAgdG8sIHRNLCB0bSwgdHAsIHRwciwgdGIpID0+IHtcbiAgaWYgKGlzWChmTSkpIHtcbiAgICBmcm9tID0gJydcbiAgfSBlbHNlIGlmIChpc1goZm0pKSB7XG4gICAgZnJvbSA9IGA+PSR7Zk19LjAuMCR7aW5jUHIgPyAnLTAnIDogJyd9YFxuICB9IGVsc2UgaWYgKGlzWChmcCkpIHtcbiAgICBmcm9tID0gYD49JHtmTX0uJHtmbX0uMCR7aW5jUHIgPyAnLTAnIDogJyd9YFxuICB9IGVsc2UgaWYgKGZwcikge1xuICAgIGZyb20gPSBgPj0ke2Zyb219YFxuICB9IGVsc2Uge1xuICAgIGZyb20gPSBgPj0ke2Zyb219JHtpbmNQciA/ICctMCcgOiAnJ31gXG4gIH1cblxuICBpZiAoaXNYKHRNKSkge1xuICAgIHRvID0gJydcbiAgfSBlbHNlIGlmIChpc1godG0pKSB7XG4gICAgdG8gPSBgPCR7K3RNICsgMX0uMC4wLTBgXG4gIH0gZWxzZSBpZiAoaXNYKHRwKSkge1xuICAgIHRvID0gYDwke3RNfS4keyt0bSArIDF9LjAtMGBcbiAgfSBlbHNlIGlmICh0cHIpIHtcbiAgICB0byA9IGA8PSR7dE19LiR7dG19LiR7dHB9LSR7dHByfWBcbiAgfSBlbHNlIGlmIChpbmNQcikge1xuICAgIHRvID0gYDwke3RNfS4ke3RtfS4keyt0cCArIDF9LTBgXG4gIH0gZWxzZSB7XG4gICAgdG8gPSBgPD0ke3RvfWBcbiAgfVxuXG4gIHJldHVybiBgJHtmcm9tfSAke3RvfWAudHJpbSgpXG59XG5cbmNvbnN0IHRlc3RTZXQgPSAoc2V0LCB2ZXJzaW9uLCBvcHRpb25zKSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFzZXRbaV0udGVzdCh2ZXJzaW9uKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgaWYgKHZlcnNpb24ucHJlcmVsZWFzZS5sZW5ndGggJiYgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAvLyBGaW5kIHRoZSBzZXQgb2YgdmVyc2lvbnMgdGhhdCBhcmUgYWxsb3dlZCB0byBoYXZlIHByZXJlbGVhc2VzXG4gICAgLy8gRm9yIGV4YW1wbGUsIF4xLjIuMy1wci4xIGRlc3VnYXJzIHRvID49MS4yLjMtcHIuMSA8Mi4wLjBcbiAgICAvLyBUaGF0IHNob3VsZCBhbGxvdyBgMS4yLjMtcHIuMmAgdG8gcGFzcy5cbiAgICAvLyBIb3dldmVyLCBgMS4yLjQtYWxwaGEubm90cmVhZHlgIHNob3VsZCBOT1QgYmUgYWxsb3dlZCxcbiAgICAvLyBldmVuIHRob3VnaCBpdCdzIHdpdGhpbiB0aGUgcmFuZ2Ugc2V0IGJ5IHRoZSBjb21wYXJhdG9ycy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgICAgZGVidWcoc2V0W2ldLnNlbXZlcilcbiAgICAgIGlmIChzZXRbaV0uc2VtdmVyID09PSBDb21wYXJhdG9yLkFOWSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoc2V0W2ldLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgYWxsb3dlZCA9IHNldFtpXS5zZW12ZXJcbiAgICAgICAgaWYgKGFsbG93ZWQubWFqb3IgPT09IHZlcnNpb24ubWFqb3IgJiZcbiAgICAgICAgICAgIGFsbG93ZWQubWlub3IgPT09IHZlcnNpb24ubWlub3IgJiZcbiAgICAgICAgICAgIGFsbG93ZWQucGF0Y2ggPT09IHZlcnNpb24ucGF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmVyc2lvbiBoYXMgYSAtcHJlLCBidXQgaXQncyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGxpa2UuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuIiwgImNvbnN0IEFOWSA9IFN5bWJvbCgnU2VtVmVyIEFOWScpXG4vLyBob2lzdGVkIGNsYXNzIGZvciBjeWNsaWMgZGVwZW5kZW5jeVxuY2xhc3MgQ29tcGFyYXRvciB7XG4gIHN0YXRpYyBnZXQgQU5ZICgpIHtcbiAgICByZXR1cm4gQU5ZXG4gIH1cblxuICBjb25zdHJ1Y3RvciAoY29tcCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMob3B0aW9ucylcblxuICAgIGlmIChjb21wIGluc3RhbmNlb2YgQ29tcGFyYXRvcikge1xuICAgICAgaWYgKGNvbXAubG9vc2UgPT09ICEhb3B0aW9ucy5sb29zZSkge1xuICAgICAgICByZXR1cm4gY29tcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcCA9IGNvbXAudmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wID0gY29tcC50cmltKCkuc3BsaXQoL1xccysvKS5qb2luKCcgJylcbiAgICBkZWJ1ZygnY29tcGFyYXRvcicsIGNvbXAsIG9wdGlvbnMpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMubG9vc2UgPSAhIW9wdGlvbnMubG9vc2VcbiAgICB0aGlzLnBhcnNlKGNvbXApXG5cbiAgICBpZiAodGhpcy5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm9wZXJhdG9yICsgdGhpcy5zZW12ZXIudmVyc2lvblxuICAgIH1cblxuICAgIGRlYnVnKCdjb21wJywgdGhpcylcbiAgfVxuXG4gIHBhcnNlIChjb21wKSB7XG4gICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5sb29zZSA/IHJlW3QuQ09NUEFSQVRPUkxPT1NFXSA6IHJlW3QuQ09NUEFSQVRPUl1cbiAgICBjb25zdCBtID0gY29tcC5tYXRjaChyKVxuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGNvbXBhcmF0b3I6ICR7Y29tcH1gKVxuICAgIH1cblxuICAgIHRoaXMub3BlcmF0b3IgPSBtWzFdICE9PSB1bmRlZmluZWQgPyBtWzFdIDogJydcbiAgICBpZiAodGhpcy5vcGVyYXRvciA9PT0gJz0nKSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gJydcbiAgICB9XG5cbiAgICAvLyBpZiBpdCBsaXRlcmFsbHkgaXMganVzdCAnPicgb3IgJycgdGhlbiBhbGxvdyBhbnl0aGluZy5cbiAgICBpZiAoIW1bMl0pIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gQU5ZXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VtdmVyID0gbmV3IFNlbVZlcihtWzJdLCB0aGlzLm9wdGlvbnMubG9vc2UpXG4gICAgfVxuICB9XG5cbiAgdG9TdHJpbmcgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cblxuICB0ZXN0ICh2ZXJzaW9uKSB7XG4gICAgZGVidWcoJ0NvbXBhcmF0b3IudGVzdCcsIHZlcnNpb24sIHRoaXMub3B0aW9ucy5sb29zZSlcblxuICAgIGlmICh0aGlzLnNlbXZlciA9PT0gQU5ZIHx8IHZlcnNpb24gPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2ZXJzaW9uID0gbmV3IFNlbVZlcih2ZXJzaW9uLCB0aGlzLm9wdGlvbnMpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY21wKHZlcnNpb24sIHRoaXMub3BlcmF0b3IsIHRoaXMuc2VtdmVyLCB0aGlzLm9wdGlvbnMpXG4gIH1cblxuICBpbnRlcnNlY3RzIChjb21wLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoY29tcCBpbnN0YW5jZW9mIENvbXBhcmF0b3IpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIENvbXBhcmF0b3IgaXMgcmVxdWlyZWQnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGNvbXAudmFsdWUsIG9wdGlvbnMpLnRlc3QodGhpcy52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKGNvbXAub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICBpZiAoY29tcC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy52YWx1ZSwgb3B0aW9ucykudGVzdChjb21wLnNlbXZlcilcbiAgICB9XG5cbiAgICBvcHRpb25zID0gcGFyc2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyBTcGVjaWFsIGNhc2VzIHdoZXJlIG5vdGhpbmcgY2FuIHBvc3NpYmx5IGJlIGxvd2VyXG4gICAgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICAgICh0aGlzLnZhbHVlID09PSAnPDAuMC4wLTAnIHx8IGNvbXAudmFsdWUgPT09ICc8MC4wLjAtMCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmluY2x1ZGVQcmVyZWxlYXNlICYmXG4gICAgICAodGhpcy52YWx1ZS5zdGFydHNXaXRoKCc8MC4wLjAnKSB8fCBjb21wLnZhbHVlLnN0YXJ0c1dpdGgoJzwwLjAuMCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gU2FtZSBkaXJlY3Rpb24gaW5jcmVhc2luZyAoPiBvciA+PSlcbiAgICBpZiAodGhpcy5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykgJiYgY29tcC5vcGVyYXRvci5zdGFydHNXaXRoKCc+JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFNhbWUgZGlyZWN0aW9uIGRlY3JlYXNpbmcgKDwgb3IgPD0pXG4gICAgaWYgKHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBzYW1lIFNlbVZlciBhbmQgYm90aCBzaWRlcyBhcmUgaW5jbHVzaXZlICg8PSBvciA+PSlcbiAgICBpZiAoXG4gICAgICAodGhpcy5zZW12ZXIudmVyc2lvbiA9PT0gY29tcC5zZW12ZXIudmVyc2lvbikgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IuaW5jbHVkZXMoJz0nKSAmJiBjb21wLm9wZXJhdG9yLmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIG9wcG9zaXRlIGRpcmVjdGlvbnMgbGVzcyB0aGFuXG4gICAgaWYgKGNtcCh0aGlzLnNlbXZlciwgJzwnLCBjb21wLnNlbXZlciwgb3B0aW9ucykgJiZcbiAgICAgIHRoaXMub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPicpICYmIGNvbXAub3BlcmF0b3Iuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zIGdyZWF0ZXIgdGhhblxuICAgIGlmIChjbXAodGhpcy5zZW12ZXIsICc+JywgY29tcC5zZW12ZXIsIG9wdGlvbnMpICYmXG4gICAgICB0aGlzLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJzwnKSAmJiBjb21wLm9wZXJhdG9yLnN0YXJ0c1dpdGgoJz4nKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb21wYXJhdG9yXG5cbmNvbnN0IHBhcnNlT3B0aW9ucyA9IHJlcXVpcmUoJy4uL2ludGVybmFsL3BhcnNlLW9wdGlvbnMnKVxuY29uc3QgeyBzYWZlUmU6IHJlLCB0IH0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbC9yZScpXG5jb25zdCBjbXAgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY21wJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWwvZGVidWcnKVxuY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuL3JhbmdlJylcbiIsICJjb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3Qgc2F0aXNmaWVzID0gKHZlcnNpb24sIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgcmFuZ2UgPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG4gIH0gY2F0Y2ggKGVyKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHJhbmdlLnRlc3QodmVyc2lvbilcbn1cbm1vZHVsZS5leHBvcnRzID0gc2F0aXNmaWVzXG4iLCAiY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcblxuLy8gTW9zdGx5IGp1c3QgZm9yIHRlc3RpbmcgYW5kIGxlZ2FjeSBBUEkgcmVhc29uc1xuY29uc3QgdG9Db21wYXJhdG9ycyA9IChyYW5nZSwgb3B0aW9ucykgPT5cbiAgbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKS5zZXRcbiAgICAubWFwKGNvbXAgPT4gY29tcC5tYXAoYyA9PiBjLnZhbHVlKS5qb2luKCcgJykudHJpbSgpLnNwbGl0KCcgJykpXG5cbm1vZHVsZS5leHBvcnRzID0gdG9Db21wYXJhdG9yc1xuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5cbmNvbnN0IG1heFNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtYXggPSBudWxsXG4gIGxldCBtYXhTViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1heCB8fCBtYXhTVi5jb21wYXJlKHYpID09PSAtMSkge1xuICAgICAgICAvLyBjb21wYXJlKG1heCwgdiwgdHJ1ZSlcbiAgICAgICAgbWF4ID0gdlxuICAgICAgICBtYXhTViA9IG5ldyBTZW1WZXIobWF4LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1heFxufVxubW9kdWxlLmV4cG9ydHMgPSBtYXhTYXRpc2Z5aW5nXG4iLCAiY29uc3QgU2VtVmVyID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IG1pblNhdGlzZnlpbmcgPSAodmVyc2lvbnMsIHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIGxldCBtaW4gPSBudWxsXG4gIGxldCBtaW5TViA9IG51bGxcbiAgbGV0IHJhbmdlT2JqID0gbnVsbFxuICB0cnkge1xuICAgIHJhbmdlT2JqID0gbmV3IFJhbmdlKHJhbmdlLCBvcHRpb25zKVxuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgdmVyc2lvbnMuZm9yRWFjaCgodikgPT4ge1xuICAgIGlmIChyYW5nZU9iai50ZXN0KHYpKSB7XG4gICAgICAvLyBzYXRpc2ZpZXModiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgICBpZiAoIW1pbiB8fCBtaW5TVi5jb21wYXJlKHYpID09PSAxKSB7XG4gICAgICAgIC8vIGNvbXBhcmUobWluLCB2LCB0cnVlKVxuICAgICAgICBtaW4gPSB2XG4gICAgICAgIG1pblNWID0gbmV3IFNlbVZlcihtaW4sIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gbWluXG59XG5tb2R1bGUuZXhwb3J0cyA9IG1pblNhdGlzZnlpbmdcbiIsICJjb25zdCBTZW1WZXIgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3NlbXZlcicpXG5jb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3QgZ3QgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZ3QnKVxuXG5jb25zdCBtaW5WZXJzaW9uID0gKHJhbmdlLCBsb29zZSkgPT4ge1xuICByYW5nZSA9IG5ldyBSYW5nZShyYW5nZSwgbG9vc2UpXG5cbiAgbGV0IG1pbnZlciA9IG5ldyBTZW1WZXIoJzAuMC4wJylcbiAgaWYgKHJhbmdlLnRlc3QobWludmVyKSkge1xuICAgIHJldHVybiBtaW52ZXJcbiAgfVxuXG4gIG1pbnZlciA9IG5ldyBTZW1WZXIoJzAuMC4wLTAnKVxuICBpZiAocmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgbWludmVyID0gbnVsbFxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlLnNldC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvbXBhcmF0b3JzID0gcmFuZ2Uuc2V0W2ldXG5cbiAgICBsZXQgc2V0TWluID0gbnVsbFxuICAgIGNvbXBhcmF0b3JzLmZvckVhY2goKGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIC8vIENsb25lIHRvIGF2b2lkIG1hbmlwdWxhdGluZyB0aGUgY29tcGFyYXRvcidzIHNlbXZlciBvYmplY3QuXG4gICAgICBjb25zdCBjb21wdmVyID0gbmV3IFNlbVZlcihjb21wYXJhdG9yLnNlbXZlci52ZXJzaW9uKVxuICAgICAgc3dpdGNoIChjb21wYXJhdG9yLm9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgJz4nOlxuICAgICAgICAgIGlmIChjb21wdmVyLnByZXJlbGVhc2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb21wdmVyLnBhdGNoKytcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcHZlci5wcmVyZWxlYXNlLnB1c2goMClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29tcHZlci5yYXcgPSBjb21wdmVyLmZvcm1hdCgpXG4gICAgICAgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICAgICAgY2FzZSAnJzpcbiAgICAgICAgY2FzZSAnPj0nOlxuICAgICAgICAgIGlmICghc2V0TWluIHx8IGd0KGNvbXB2ZXIsIHNldE1pbikpIHtcbiAgICAgICAgICAgIHNldE1pbiA9IGNvbXB2ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhc2UgJzw9JzpcbiAgICAgICAgICAvKiBJZ25vcmUgbWF4aW11bSB2ZXJzaW9ucyAqL1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG9wZXJhdGlvbjogJHtjb21wYXJhdG9yLm9wZXJhdG9yfWApXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoc2V0TWluICYmICghbWludmVyIHx8IGd0KG1pbnZlciwgc2V0TWluKSkpIHtcbiAgICAgIG1pbnZlciA9IHNldE1pblxuICAgIH1cbiAgfVxuXG4gIGlmIChtaW52ZXIgJiYgcmFuZ2UudGVzdChtaW52ZXIpKSB7XG4gICAgcmV0dXJuIG1pbnZlclxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbm1vZHVsZS5leHBvcnRzID0gbWluVmVyc2lvblxuIiwgImNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCB2YWxpZFJhbmdlID0gKHJhbmdlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgLy8gUmV0dXJuICcqJyBpbnN0ZWFkIG9mICcnIHNvIHRoYXQgdHJ1dGhpbmVzcyB3b3Jrcy5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgaXQncyBpbnZhbGlkIGFueXdheVxuICAgIHJldHVybiBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpLnJhbmdlIHx8ICcqJ1xuICB9IGNhdGNoIChlcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRSYW5nZVxuIiwgImNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvc2VtdmVyJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3InKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi4vY2xhc3Nlcy9yYW5nZScpXG5jb25zdCBzYXRpc2ZpZXMgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvc2F0aXNmaWVzJylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2d0JylcbmNvbnN0IGx0ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2x0JylcbmNvbnN0IGx0ZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9sdGUnKVxuY29uc3QgZ3RlID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2d0ZScpXG5cbmNvbnN0IG91dHNpZGUgPSAodmVyc2lvbiwgcmFuZ2UsIGhpbG8sIG9wdGlvbnMpID0+IHtcbiAgdmVyc2lvbiA9IG5ldyBTZW1WZXIodmVyc2lvbiwgb3B0aW9ucylcbiAgcmFuZ2UgPSBuZXcgUmFuZ2UocmFuZ2UsIG9wdGlvbnMpXG5cbiAgbGV0IGd0Zm4sIGx0ZWZuLCBsdGZuLCBjb21wLCBlY29tcFxuICBzd2l0Y2ggKGhpbG8pIHtcbiAgICBjYXNlICc+JzpcbiAgICAgIGd0Zm4gPSBndFxuICAgICAgbHRlZm4gPSBsdGVcbiAgICAgIGx0Zm4gPSBsdFxuICAgICAgY29tcCA9ICc+J1xuICAgICAgZWNvbXAgPSAnPj0nXG4gICAgICBicmVha1xuICAgIGNhc2UgJzwnOlxuICAgICAgZ3RmbiA9IGx0XG4gICAgICBsdGVmbiA9IGd0ZVxuICAgICAgbHRmbiA9IGd0XG4gICAgICBjb21wID0gJzwnXG4gICAgICBlY29tcCA9ICc8PSdcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3QgcHJvdmlkZSBhIGhpbG8gdmFsIG9mIFwiPFwiIG9yIFwiPlwiJylcbiAgfVxuXG4gIC8vIElmIGl0IHNhdGlzZmllcyB0aGUgcmFuZ2UgaXQgaXMgbm90IG91dHNpZGVcbiAgaWYgKHNhdGlzZmllcyh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIEZyb20gbm93IG9uLCB2YXJpYWJsZSB0ZXJtcyBhcmUgYXMgaWYgd2UncmUgaW4gXCJndHJcIiBtb2RlLlxuICAvLyBidXQgbm90ZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgZmxpcHBlZCBmb3IgdGhlIFwibHRyXCIgZnVuY3Rpb24uXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZS5zZXQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb21wYXJhdG9ycyA9IHJhbmdlLnNldFtpXVxuXG4gICAgbGV0IGhpZ2ggPSBudWxsXG4gICAgbGV0IGxvdyA9IG51bGxcblxuICAgIGNvbXBhcmF0b3JzLmZvckVhY2goKGNvbXBhcmF0b3IpID0+IHtcbiAgICAgIGlmIChjb21wYXJhdG9yLnNlbXZlciA9PT0gQU5ZKSB7XG4gICAgICAgIGNvbXBhcmF0b3IgPSBuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXG4gICAgICB9XG4gICAgICBoaWdoID0gaGlnaCB8fCBjb21wYXJhdG9yXG4gICAgICBsb3cgPSBsb3cgfHwgY29tcGFyYXRvclxuICAgICAgaWYgKGd0Zm4oY29tcGFyYXRvci5zZW12ZXIsIGhpZ2guc2VtdmVyLCBvcHRpb25zKSkge1xuICAgICAgICBoaWdoID0gY29tcGFyYXRvclxuICAgICAgfSBlbHNlIGlmIChsdGZuKGNvbXBhcmF0b3Iuc2VtdmVyLCBsb3cuc2VtdmVyLCBvcHRpb25zKSkge1xuICAgICAgICBsb3cgPSBjb21wYXJhdG9yXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIElmIHRoZSBlZGdlIHZlcnNpb24gY29tcGFyYXRvciBoYXMgYSBvcGVyYXRvciB0aGVuIG91ciB2ZXJzaW9uXG4gICAgLy8gaXNuJ3Qgb3V0c2lkZSBpdFxuICAgIGlmIChoaWdoLm9wZXJhdG9yID09PSBjb21wIHx8IGhpZ2gub3BlcmF0b3IgPT09IGVjb21wKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbG93ZXN0IHZlcnNpb24gY29tcGFyYXRvciBoYXMgYW4gb3BlcmF0b3IgYW5kIG91ciB2ZXJzaW9uXG4gICAgLy8gaXMgbGVzcyB0aGFuIGl0IHRoZW4gaXQgaXNuJ3QgaGlnaGVyIHRoYW4gdGhlIHJhbmdlXG4gICAgaWYgKCghbG93Lm9wZXJhdG9yIHx8IGxvdy5vcGVyYXRvciA9PT0gY29tcCkgJiZcbiAgICAgICAgbHRlZm4odmVyc2lvbiwgbG93LnNlbXZlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAobG93Lm9wZXJhdG9yID09PSBlY29tcCAmJiBsdGZuKHZlcnNpb24sIGxvdy5zZW12ZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdXRzaWRlXG4iLCAiLy8gRGV0ZXJtaW5lIGlmIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIGFsbCB0aGUgdmVyc2lvbnMgcG9zc2libGUgaW4gdGhlIHJhbmdlLlxuY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG5jb25zdCBndHIgPSAodmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpID0+IG91dHNpZGUodmVyc2lvbiwgcmFuZ2UsICc+Jywgb3B0aW9ucylcbm1vZHVsZS5leHBvcnRzID0gZ3RyXG4iLCAiY29uc3Qgb3V0c2lkZSA9IHJlcXVpcmUoJy4vb3V0c2lkZScpXG4vLyBEZXRlcm1pbmUgaWYgdmVyc2lvbiBpcyBsZXNzIHRoYW4gYWxsIHRoZSB2ZXJzaW9ucyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbmNvbnN0IGx0ciA9ICh2ZXJzaW9uLCByYW5nZSwgb3B0aW9ucykgPT4gb3V0c2lkZSh2ZXJzaW9uLCByYW5nZSwgJzwnLCBvcHRpb25zKVxubW9kdWxlLmV4cG9ydHMgPSBsdHJcbiIsICJjb25zdCBSYW5nZSA9IHJlcXVpcmUoJy4uL2NsYXNzZXMvcmFuZ2UnKVxuY29uc3QgaW50ZXJzZWN0cyA9IChyMSwgcjIsIG9wdGlvbnMpID0+IHtcbiAgcjEgPSBuZXcgUmFuZ2UocjEsIG9wdGlvbnMpXG4gIHIyID0gbmV3IFJhbmdlKHIyLCBvcHRpb25zKVxuICByZXR1cm4gcjEuaW50ZXJzZWN0cyhyMiwgb3B0aW9ucylcbn1cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJzZWN0c1xuIiwgIi8vIGdpdmVuIGEgc2V0IG9mIHZlcnNpb25zIGFuZCBhIHJhbmdlLCBjcmVhdGUgYSBcInNpbXBsaWZpZWRcIiByYW5nZVxuLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2FtZSB2ZXJzaW9ucyB0aGF0IHRoZSBvcmlnaW5hbCByYW5nZSBkb2VzXG4vLyBJZiB0aGUgb3JpZ2luYWwgcmFuZ2UgaXMgc2hvcnRlciB0aGFuIHRoZSBzaW1wbGlmaWVkIG9uZSwgcmV0dXJuIHRoYXQuXG5jb25zdCBzYXRpc2ZpZXMgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvc2F0aXNmaWVzLmpzJylcbmNvbnN0IGNvbXBhcmUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvY29tcGFyZS5qcycpXG5tb2R1bGUuZXhwb3J0cyA9ICh2ZXJzaW9ucywgcmFuZ2UsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgc2V0ID0gW11cbiAgbGV0IGZpcnN0ID0gbnVsbFxuICBsZXQgcHJldiA9IG51bGxcbiAgY29uc3QgdiA9IHZlcnNpb25zLnNvcnQoKGEsIGIpID0+IGNvbXBhcmUoYSwgYiwgb3B0aW9ucykpXG4gIGZvciAoY29uc3QgdmVyc2lvbiBvZiB2KSB7XG4gICAgY29uc3QgaW5jbHVkZWQgPSBzYXRpc2ZpZXModmVyc2lvbiwgcmFuZ2UsIG9wdGlvbnMpXG4gICAgaWYgKGluY2x1ZGVkKSB7XG4gICAgICBwcmV2ID0gdmVyc2lvblxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICBmaXJzdCA9IHZlcnNpb25cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgc2V0LnB1c2goW2ZpcnN0LCBwcmV2XSlcbiAgICAgIH1cbiAgICAgIHByZXYgPSBudWxsXG4gICAgICBmaXJzdCA9IG51bGxcbiAgICB9XG4gIH1cbiAgaWYgKGZpcnN0KSB7XG4gICAgc2V0LnB1c2goW2ZpcnN0LCBudWxsXSlcbiAgfVxuXG4gIGNvbnN0IHJhbmdlcyA9IFtdXG4gIGZvciAoY29uc3QgW21pbiwgbWF4XSBvZiBzZXQpIHtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgIHJhbmdlcy5wdXNoKG1pbilcbiAgICB9IGVsc2UgaWYgKCFtYXggJiYgbWluID09PSB2WzBdKSB7XG4gICAgICByYW5nZXMucHVzaCgnKicpXG4gICAgfSBlbHNlIGlmICghbWF4KSB7XG4gICAgICByYW5nZXMucHVzaChgPj0ke21pbn1gKVxuICAgIH0gZWxzZSBpZiAobWluID09PSB2WzBdKSB7XG4gICAgICByYW5nZXMucHVzaChgPD0ke21heH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZXMucHVzaChgJHttaW59IC0gJHttYXh9YClcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2ltcGxpZmllZCA9IHJhbmdlcy5qb2luKCcgfHwgJylcbiAgY29uc3Qgb3JpZ2luYWwgPSB0eXBlb2YgcmFuZ2UucmF3ID09PSAnc3RyaW5nJyA/IHJhbmdlLnJhdyA6IFN0cmluZyhyYW5nZSlcbiAgcmV0dXJuIHNpbXBsaWZpZWQubGVuZ3RoIDwgb3JpZ2luYWwubGVuZ3RoID8gc2ltcGxpZmllZCA6IHJhbmdlXG59XG4iLCAiY29uc3QgUmFuZ2UgPSByZXF1aXJlKCcuLi9jbGFzc2VzL3JhbmdlLmpzJylcbmNvbnN0IENvbXBhcmF0b3IgPSByZXF1aXJlKCcuLi9jbGFzc2VzL2NvbXBhcmF0b3IuanMnKVxuY29uc3QgeyBBTlkgfSA9IENvbXBhcmF0b3JcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9zYXRpc2ZpZXMuanMnKVxuY29uc3QgY29tcGFyZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb21wYXJlLmpzJylcblxuLy8gQ29tcGxleCByYW5nZSBgcjEgfHwgcjIgfHwgLi4uYCBpcyBhIHN1YnNldCBvZiBgUjEgfHwgUjIgfHwgLi4uYCBpZmY6XG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIGlzIGEgbnVsbCBzZXQsIE9SXG4vLyAtIEV2ZXJ5IHNpbXBsZSByYW5nZSBgcjEsIHIyLCAuLi5gIHdoaWNoIGlzIG5vdCBhIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mXG4vLyAgIHNvbWUgYFIxLCBSMiwgLi4uYFxuLy9cbi8vIFNpbXBsZSByYW5nZSBgYzEgYzIgLi4uYCBpcyBhIHN1YnNldCBvZiBzaW1wbGUgcmFuZ2UgYEMxIEMyIC4uLmAgaWZmOlxuLy8gLSBJZiBjIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gSWYgQyBpcyBvbmx5IHRoZSBBTlkgY29tcGFyYXRvciwgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIGlmIGluIHByZXJlbGVhc2UgbW9kZSwgcmV0dXJuIGZhbHNlXG4vLyAgIC0gZWxzZSByZXBsYWNlIGMgd2l0aCBgWz49MC4wLjBdYFxuLy8gLSBJZiBDIGlzIG9ubHkgdGhlIEFOWSBjb21wYXJhdG9yXG4vLyAgIC0gaWYgaW4gcHJlcmVsZWFzZSBtb2RlLCByZXR1cm4gdHJ1ZVxuLy8gICAtIGVsc2UgcmVwbGFjZSBDIHdpdGggYFs+PTAuMC4wXWBcbi8vIC0gTGV0IEVRIGJlIHRoZSBzZXQgb2YgPSBjb21wYXJhdG9ycyBpbiBjXG4vLyAtIElmIEVRIGlzIG1vcmUgdGhhbiBvbmUsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vIC0gTGV0IEdUIGJlIHRoZSBoaWdoZXN0ID4gb3IgPj0gY29tcGFyYXRvciBpbiBjXG4vLyAtIExldCBMVCBiZSB0aGUgbG93ZXN0IDwgb3IgPD0gY29tcGFyYXRvciBpbiBjXG4vLyAtIElmIEdUIGFuZCBMVCwgYW5kIEdULnNlbXZlciA+IExULnNlbXZlciwgcmV0dXJuIHRydWUgKG51bGwgc2V0KVxuLy8gLSBJZiBhbnkgQyBpcyBhID0gcmFuZ2UsIGFuZCBHVCBvciBMVCBhcmUgc2V0LCByZXR1cm4gZmFsc2Vcbi8vIC0gSWYgRVFcbi8vICAgLSBJZiBHVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgR1QsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBMVCwgYW5kIEVRIGRvZXMgbm90IHNhdGlzZnkgTFQsIHJldHVybiB0cnVlIChudWxsIHNldClcbi8vICAgLSBJZiBFUSBzYXRpc2ZpZXMgZXZlcnkgQywgcmV0dXJuIHRydWVcbi8vICAgLSBFbHNlIHJldHVybiBmYWxzZVxuLy8gLSBJZiBHVFxuLy8gICAtIElmIEdULnNlbXZlciBpcyBsb3dlciB0aGFuIGFueSA+IG9yID49IGNvbXAgaW4gQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1QgaXMgPj0sIGFuZCBHVC5zZW12ZXIgZG9lcyBub3Qgc2F0aXNmeSBldmVyeSBDLCByZXR1cm4gZmFsc2Vcbi8vICAgLSBJZiBHVC5zZW12ZXIgaGFzIGEgcHJlcmVsZWFzZSwgYW5kIG5vdCBpbiBwcmVyZWxlYXNlIG1vZGVcbi8vICAgICAtIElmIG5vIEMgaGFzIGEgcHJlcmVsZWFzZSBhbmQgdGhlIEdULnNlbXZlciB0dXBsZSwgcmV0dXJuIGZhbHNlXG4vLyAtIElmIExUXG4vLyAgIC0gSWYgTFQuc2VtdmVyIGlzIGdyZWF0ZXIgdGhhbiBhbnkgPCBvciA8PSBjb21wIGluIEMsIHJldHVybiBmYWxzZVxuLy8gICAtIElmIExUIGlzIDw9LCBhbmQgTFQuc2VtdmVyIGRvZXMgbm90IHNhdGlzZnkgZXZlcnkgQywgcmV0dXJuIGZhbHNlXG4vLyAgIC0gSWYgR1Quc2VtdmVyIGhhcyBhIHByZXJlbGVhc2UsIGFuZCBub3QgaW4gcHJlcmVsZWFzZSBtb2RlXG4vLyAgICAgLSBJZiBubyBDIGhhcyBhIHByZXJlbGVhc2UgYW5kIHRoZSBMVC5zZW12ZXIgdHVwbGUsIHJldHVybiBmYWxzZVxuLy8gLSBFbHNlIHJldHVybiB0cnVlXG5cbmNvbnN0IHN1YnNldCA9IChzdWIsIGRvbSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChzdWIgPT09IGRvbSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBzdWIgPSBuZXcgUmFuZ2Uoc3ViLCBvcHRpb25zKVxuICBkb20gPSBuZXcgUmFuZ2UoZG9tLCBvcHRpb25zKVxuICBsZXQgc2F3Tm9uTnVsbCA9IGZhbHNlXG5cbiAgT1VURVI6IGZvciAoY29uc3Qgc2ltcGxlU3ViIG9mIHN1Yi5zZXQpIHtcbiAgICBmb3IgKGNvbnN0IHNpbXBsZURvbSBvZiBkb20uc2V0KSB7XG4gICAgICBjb25zdCBpc1N1YiA9IHNpbXBsZVN1YnNldChzaW1wbGVTdWIsIHNpbXBsZURvbSwgb3B0aW9ucylcbiAgICAgIHNhd05vbk51bGwgPSBzYXdOb25OdWxsIHx8IGlzU3ViICE9PSBudWxsXG4gICAgICBpZiAoaXNTdWIpIHtcbiAgICAgICAgY29udGludWUgT1VURVJcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhlIG51bGwgc2V0IGlzIGEgc3Vic2V0IG9mIGV2ZXJ5dGhpbmcsIGJ1dCBudWxsIHNpbXBsZSByYW5nZXMgaW5cbiAgICAvLyBhIGNvbXBsZXggcmFuZ2Ugc2hvdWxkIGJlIGlnbm9yZWQuICBzbyBpZiB3ZSBzYXcgYSBub24tbnVsbCByYW5nZSxcbiAgICAvLyB0aGVuIHdlIGtub3cgdGhpcyBpc24ndCBhIHN1YnNldCwgYnV0IGlmIEVWRVJZIHNpbXBsZSByYW5nZSB3YXMgbnVsbCxcbiAgICAvLyB0aGVuIGl0IGlzIGEgc3Vic2V0LlxuICAgIGlmIChzYXdOb25OdWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgbWluaW11bVZlcnNpb25XaXRoUHJlUmVsZWFzZSA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMC0wJyldXG5jb25zdCBtaW5pbXVtVmVyc2lvbiA9IFtuZXcgQ29tcGFyYXRvcignPj0wLjAuMCcpXVxuXG5jb25zdCBzaW1wbGVTdWJzZXQgPSAoc3ViLCBkb20sIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN1YiA9PT0gZG9tKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdWIubGVuZ3RoID09PSAxICYmIHN1YlswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgIGlmIChkb20ubGVuZ3RoID09PSAxICYmIGRvbVswXS5zZW12ZXIgPT09IEFOWSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpIHtcbiAgICAgIHN1YiA9IG1pbmltdW1WZXJzaW9uV2l0aFByZVJlbGVhc2VcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBpZiAoZG9tLmxlbmd0aCA9PT0gMSAmJiBkb21bMF0uc2VtdmVyID09PSBBTlkpIHtcbiAgICBpZiAob3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgZG9tID0gbWluaW11bVZlcnNpb25cbiAgICB9XG4gIH1cblxuICBjb25zdCBlcVNldCA9IG5ldyBTZXQoKVxuICBsZXQgZ3QsIGx0XG4gIGZvciAoY29uc3QgYyBvZiBzdWIpIHtcbiAgICBpZiAoYy5vcGVyYXRvciA9PT0gJz4nIHx8IGMub3BlcmF0b3IgPT09ICc+PScpIHtcbiAgICAgIGd0ID0gaGlnaGVyR1QoZ3QsIGMsIG9wdGlvbnMpXG4gICAgfSBlbHNlIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgbHQgPSBsb3dlckxUKGx0LCBjLCBvcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBlcVNldC5hZGQoYy5zZW12ZXIpXG4gICAgfVxuICB9XG5cbiAgaWYgKGVxU2V0LnNpemUgPiAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBndGx0Q29tcFxuICBpZiAoZ3QgJiYgbHQpIHtcbiAgICBndGx0Q29tcCA9IGNvbXBhcmUoZ3Quc2VtdmVyLCBsdC5zZW12ZXIsIG9wdGlvbnMpXG4gICAgaWYgKGd0bHRDb21wID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGd0bHRDb21wID09PSAwICYmIChndC5vcGVyYXRvciAhPT0gJz49JyB8fCBsdC5vcGVyYXRvciAhPT0gJzw9JykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gd2lsbCBpdGVyYXRlIG9uZSBvciB6ZXJvIHRpbWVzXG4gIGZvciAoY29uc3QgZXEgb2YgZXFTZXQpIHtcbiAgICBpZiAoZ3QgJiYgIXNhdGlzZmllcyhlcSwgU3RyaW5nKGd0KSwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKGx0ICYmICFzYXRpc2ZpZXMoZXEsIFN0cmluZyhsdCksIG9wdGlvbnMpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICAgIGlmICghc2F0aXNmaWVzKGVxLCBTdHJpbmcoYyksIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBsZXQgaGlnaGVyLCBsb3dlclxuICBsZXQgaGFzRG9tTFQsIGhhc0RvbUdUXG4gIC8vIGlmIHRoZSBzdWJzZXQgaGFzIGEgcHJlcmVsZWFzZSwgd2UgbmVlZCBhIGNvbXBhcmF0b3IgaW4gdGhlIHN1cGVyc2V0XG4gIC8vIHdpdGggdGhlIHNhbWUgdHVwbGUgYW5kIGEgcHJlcmVsZWFzZSwgb3IgaXQncyBub3QgYSBzdWJzZXRcbiAgbGV0IG5lZWREb21MVFByZSA9IGx0ICYmXG4gICAgIW9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UgJiZcbiAgICBsdC5zZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPyBsdC5zZW12ZXIgOiBmYWxzZVxuICBsZXQgbmVlZERvbUdUUHJlID0gZ3QgJiZcbiAgICAhb3B0aW9ucy5pbmNsdWRlUHJlcmVsZWFzZSAmJlxuICAgIGd0LnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCA/IGd0LnNlbXZlciA6IGZhbHNlXG4gIC8vIGV4Y2VwdGlvbjogPDEuMi4zLTAgaXMgdGhlIHNhbWUgYXMgPDEuMi4zXG4gIGlmIChuZWVkRG9tTFRQcmUgJiYgbmVlZERvbUxUUHJlLnByZXJlbGVhc2UubGVuZ3RoID09PSAxICYmXG4gICAgICBsdC5vcGVyYXRvciA9PT0gJzwnICYmIG5lZWREb21MVFByZS5wcmVyZWxlYXNlWzBdID09PSAwKSB7XG4gICAgbmVlZERvbUxUUHJlID0gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgYyBvZiBkb20pIHtcbiAgICBoYXNEb21HVCA9IGhhc0RvbUdUIHx8IGMub3BlcmF0b3IgPT09ICc+JyB8fCBjLm9wZXJhdG9yID09PSAnPj0nXG4gICAgaGFzRG9tTFQgPSBoYXNEb21MVCB8fCBjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9J1xuICAgIGlmIChndCkge1xuICAgICAgaWYgKG5lZWREb21HVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21HVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21HVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21HVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21HVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPicgfHwgYy5vcGVyYXRvciA9PT0gJz49Jykge1xuICAgICAgICBoaWdoZXIgPSBoaWdoZXJHVChndCwgYywgb3B0aW9ucylcbiAgICAgICAgaWYgKGhpZ2hlciA9PT0gYyAmJiBoaWdoZXIgIT09IGd0KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ3Qub3BlcmF0b3IgPT09ICc+PScgJiYgIXNhdGlzZmllcyhndC5zZW12ZXIsIFN0cmluZyhjKSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsdCkge1xuICAgICAgaWYgKG5lZWREb21MVFByZSkge1xuICAgICAgICBpZiAoYy5zZW12ZXIucHJlcmVsZWFzZSAmJiBjLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWFqb3IgPT09IG5lZWREb21MVFByZS5tYWpvciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIubWlub3IgPT09IG5lZWREb21MVFByZS5taW5vciAmJlxuICAgICAgICAgICAgYy5zZW12ZXIucGF0Y2ggPT09IG5lZWREb21MVFByZS5wYXRjaCkge1xuICAgICAgICAgIG5lZWREb21MVFByZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjLm9wZXJhdG9yID09PSAnPCcgfHwgYy5vcGVyYXRvciA9PT0gJzw9Jykge1xuICAgICAgICBsb3dlciA9IGxvd2VyTFQobHQsIGMsIG9wdGlvbnMpXG4gICAgICAgIGlmIChsb3dlciA9PT0gYyAmJiBsb3dlciAhPT0gbHQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsdC5vcGVyYXRvciA9PT0gJzw9JyAmJiAhc2F0aXNmaWVzKGx0LnNlbXZlciwgU3RyaW5nKGMpLCBvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjLm9wZXJhdG9yICYmIChsdCB8fCBndCkgJiYgZ3RsdENvbXAgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZXJlIHdhcyBhIDwgb3IgPiwgYW5kIG5vdGhpbmcgaW4gdGhlIGRvbSwgdGhlbiBtdXN0IGJlIGZhbHNlXG4gIC8vIFVOTEVTUyBpdCB3YXMgbGltaXRlZCBieSBhbm90aGVyIHJhbmdlIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uXG4gIC8vIEVnLCA+MS4wLjAgPDEuMC4xIGlzIHN0aWxsIGEgc3Vic2V0IG9mIDwyLjAuMFxuICBpZiAoZ3QgJiYgaGFzRG9tTFQgJiYgIWx0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobHQgJiYgaGFzRG9tR1QgJiYgIWd0ICYmIGd0bHRDb21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyB3ZSBuZWVkZWQgYSBwcmVyZWxlYXNlIHJhbmdlIGluIGEgc3BlY2lmaWMgdHVwbGUsIGJ1dCBkaWRuJ3QgZ2V0IG9uZVxuICAvLyB0aGVuIHRoaXMgaXNuJ3QgYSBzdWJzZXQuICBlZyA+PTEuMi4zLXByZSBpcyBub3QgYSBzdWJzZXQgb2YgPj0xLjAuMCxcbiAgLy8gYmVjYXVzZSBpdCBpbmNsdWRlcyBwcmVyZWxlYXNlcyBpbiB0aGUgMS4yLjMgdHVwbGVcbiAgaWYgKG5lZWREb21HVFByZSB8fCBuZWVkRG9tTFRQcmUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vID49MS4yLjMgaXMgbG93ZXIgdGhhbiA+MS4yLjNcbmNvbnN0IGhpZ2hlckdUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wID4gMCA/IGFcbiAgICA6IGNvbXAgPCAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJz4nICYmIGEub3BlcmF0b3IgPT09ICc+PScgPyBiXG4gICAgOiBhXG59XG5cbi8vIDw9MS4yLjMgaXMgaGlnaGVyIHRoYW4gPDEuMi4zXG5jb25zdCBsb3dlckxUID0gKGEsIGIsIG9wdGlvbnMpID0+IHtcbiAgaWYgKCFhKSB7XG4gICAgcmV0dXJuIGJcbiAgfVxuICBjb25zdCBjb21wID0gY29tcGFyZShhLnNlbXZlciwgYi5zZW12ZXIsIG9wdGlvbnMpXG4gIHJldHVybiBjb21wIDwgMCA/IGFcbiAgICA6IGNvbXAgPiAwID8gYlxuICAgIDogYi5vcGVyYXRvciA9PT0gJzwnICYmIGEub3BlcmF0b3IgPT09ICc8PScgPyBiXG4gICAgOiBhXG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3Vic2V0XG4iLCAiLy8ganVzdCBwcmUtbG9hZCBhbGwgdGhlIHN0dWZmIHRoYXQgaW5kZXguanMgbGF6aWx5IGV4cG9ydHNcbmNvbnN0IGludGVybmFsUmUgPSByZXF1aXJlKCcuL2ludGVybmFsL3JlJylcbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvY29uc3RhbnRzJylcbmNvbnN0IFNlbVZlciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9zZW12ZXInKVxuY29uc3QgaWRlbnRpZmllcnMgPSByZXF1aXJlKCcuL2ludGVybmFsL2lkZW50aWZpZXJzJylcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcGFyc2UnKVxuY29uc3QgdmFsaWQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy92YWxpZCcpXG5jb25zdCBjbGVhbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NsZWFuJylcbmNvbnN0IGluYyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2luYycpXG5jb25zdCBkaWZmID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZGlmZicpXG5jb25zdCBtYWpvciA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL21ham9yJylcbmNvbnN0IG1pbm9yID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbWlub3InKVxuY29uc3QgcGF0Y2ggPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9wYXRjaCcpXG5jb25zdCBwcmVyZWxlYXNlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvcHJlcmVsZWFzZScpXG5jb25zdCBjb21wYXJlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZScpXG5jb25zdCByY29tcGFyZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jjb21wYXJlJylcbmNvbnN0IGNvbXBhcmVMb29zZSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NvbXBhcmUtbG9vc2UnKVxuY29uc3QgY29tcGFyZUJ1aWxkID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvY29tcGFyZS1idWlsZCcpXG5jb25zdCBzb3J0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvc29ydCcpXG5jb25zdCByc29ydCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3Jzb3J0JylcbmNvbnN0IGd0ID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvZ3QnKVxuY29uc3QgbHQgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9sdCcpXG5jb25zdCBlcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2VxJylcbmNvbnN0IG5lcSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL25lcScpXG5jb25zdCBndGUgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9ndGUnKVxuY29uc3QgbHRlID0gcmVxdWlyZSgnLi9mdW5jdGlvbnMvbHRlJylcbmNvbnN0IGNtcCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL2NtcCcpXG5jb25zdCBjb2VyY2UgPSByZXF1aXJlKCcuL2Z1bmN0aW9ucy9jb2VyY2UnKVxuY29uc3QgQ29tcGFyYXRvciA9IHJlcXVpcmUoJy4vY2xhc3Nlcy9jb21wYXJhdG9yJylcbmNvbnN0IFJhbmdlID0gcmVxdWlyZSgnLi9jbGFzc2VzL3JhbmdlJylcbmNvbnN0IHNhdGlzZmllcyA9IHJlcXVpcmUoJy4vZnVuY3Rpb25zL3NhdGlzZmllcycpXG5jb25zdCB0b0NvbXBhcmF0b3JzID0gcmVxdWlyZSgnLi9yYW5nZXMvdG8tY29tcGFyYXRvcnMnKVxuY29uc3QgbWF4U2F0aXNmeWluZyA9IHJlcXVpcmUoJy4vcmFuZ2VzL21heC1zYXRpc2Z5aW5nJylcbmNvbnN0IG1pblNhdGlzZnlpbmcgPSByZXF1aXJlKCcuL3Jhbmdlcy9taW4tc2F0aXNmeWluZycpXG5jb25zdCBtaW5WZXJzaW9uID0gcmVxdWlyZSgnLi9yYW5nZXMvbWluLXZlcnNpb24nKVxuY29uc3QgdmFsaWRSYW5nZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL3ZhbGlkJylcbmNvbnN0IG91dHNpZGUgPSByZXF1aXJlKCcuL3Jhbmdlcy9vdXRzaWRlJylcbmNvbnN0IGd0ciA9IHJlcXVpcmUoJy4vcmFuZ2VzL2d0cicpXG5jb25zdCBsdHIgPSByZXF1aXJlKCcuL3Jhbmdlcy9sdHInKVxuY29uc3QgaW50ZXJzZWN0cyA9IHJlcXVpcmUoJy4vcmFuZ2VzL2ludGVyc2VjdHMnKVxuY29uc3Qgc2ltcGxpZnlSYW5nZSA9IHJlcXVpcmUoJy4vcmFuZ2VzL3NpbXBsaWZ5JylcbmNvbnN0IHN1YnNldCA9IHJlcXVpcmUoJy4vcmFuZ2VzL3N1YnNldCcpXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2UsXG4gIHZhbGlkLFxuICBjbGVhbixcbiAgaW5jLFxuICBkaWZmLFxuICBtYWpvcixcbiAgbWlub3IsXG4gIHBhdGNoLFxuICBwcmVyZWxlYXNlLFxuICBjb21wYXJlLFxuICByY29tcGFyZSxcbiAgY29tcGFyZUxvb3NlLFxuICBjb21wYXJlQnVpbGQsXG4gIHNvcnQsXG4gIHJzb3J0LFxuICBndCxcbiAgbHQsXG4gIGVxLFxuICBuZXEsXG4gIGd0ZSxcbiAgbHRlLFxuICBjbXAsXG4gIGNvZXJjZSxcbiAgQ29tcGFyYXRvcixcbiAgUmFuZ2UsXG4gIHNhdGlzZmllcyxcbiAgdG9Db21wYXJhdG9ycyxcbiAgbWF4U2F0aXNmeWluZyxcbiAgbWluU2F0aXNmeWluZyxcbiAgbWluVmVyc2lvbixcbiAgdmFsaWRSYW5nZSxcbiAgb3V0c2lkZSxcbiAgZ3RyLFxuICBsdHIsXG4gIGludGVyc2VjdHMsXG4gIHNpbXBsaWZ5UmFuZ2UsXG4gIHN1YnNldCxcbiAgU2VtVmVyLFxuICByZTogaW50ZXJuYWxSZS5yZSxcbiAgc3JjOiBpbnRlcm5hbFJlLnNyYyxcbiAgdG9rZW5zOiBpbnRlcm5hbFJlLnQsXG4gIFNFTVZFUl9TUEVDX1ZFUlNJT046IGNvbnN0YW50cy5TRU1WRVJfU1BFQ19WRVJTSU9OLFxuICBSRUxFQVNFX1RZUEVTOiBjb25zdGFudHMuUkVMRUFTRV9UWVBFUyxcbiAgY29tcGFyZUlkZW50aWZpZXJzOiBpZGVudGlmaWVycy5jb21wYXJlSWRlbnRpZmllcnMsXG4gIHJjb21wYXJlSWRlbnRpZmllcnM6IGlkZW50aWZpZXJzLnJjb21wYXJlSWRlbnRpZmllcnMsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpXG5cbmNvbnN0IHBlcm1hbmVudE1vZHVsZXMgPSBbXG4gICdhc3NlcnQnLFxuICAnYnVmZmVyJyxcbiAgJ2NoaWxkX3Byb2Nlc3MnLFxuICAnY2x1c3RlcicsXG4gICdjb25zb2xlJyxcbiAgJ2NvbnN0YW50cycsXG4gICdjcnlwdG8nLFxuICAnZGdyYW0nLFxuICAnZG5zJyxcbiAgJ2RvbWFpbicsXG4gICdldmVudHMnLFxuICAnZnMnLFxuICAnaHR0cCcsXG4gICdodHRwcycsXG4gICdtb2R1bGUnLFxuICAnbmV0JyxcbiAgJ29zJyxcbiAgJ3BhdGgnLFxuICAncHVueWNvZGUnLFxuICAncXVlcnlzdHJpbmcnLFxuICAncmVhZGxpbmUnLFxuICAncmVwbCcsXG4gICdzdHJlYW0nLFxuICAnc3RyaW5nX2RlY29kZXInLFxuICAnc3lzJyxcbiAgJ3RpbWVycycsXG4gICd0bHMnLFxuICAndHR5JyxcbiAgJ3VybCcsXG4gICd1dGlsJyxcbiAgJ3ZtJyxcbiAgJ3psaWInXG5dXG5cbmNvbnN0IHZlcnNpb25Mb2NrZWRNb2R1bGVzID0ge1xuICBmcmVlbGlzdDogJzw2LjAuMCcsXG4gIHY4OiAnPj0xLjAuMCcsXG4gIHByb2Nlc3M6ICc+PTEuMS4wJyxcbiAgaW5zcGVjdG9yOiAnPj04LjAuMCcsXG4gIGFzeW5jX2hvb2tzOiAnPj04LjEuMCcsXG4gIGh0dHAyOiAnPj04LjQuMCcsXG4gIHBlcmZfaG9va3M6ICc+PTguNS4wJyxcbiAgdHJhY2VfZXZlbnRzOiAnPj0xMC4wLjAnLFxuICB3b3JrZXJfdGhyZWFkczogJz49MTIuMC4wJyxcbiAgJ25vZGU6dGVzdCc6ICc+PTE4LjAuMCdcbn1cblxuY29uc3QgZXhwZXJpbWVudGFsTW9kdWxlcyA9IHtcbiAgd29ya2VyX3RocmVhZHM6ICc+PTEwLjUuMCcsXG4gIHdhc2k6ICc+PTEyLjE2LjAnLFxuICBkaWFnbm9zdGljc19jaGFubmVsOiAnXjE0LjE3LjAgfHwgPj0xNS4xLjAnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gKHsgdmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbiwgZXhwZXJpbWVudGFsID0gZmFsc2UgfSA9IHt9KSA9PiB7XG4gIGNvbnN0IGJ1aWx0aW5zID0gWy4uLnBlcm1hbmVudE1vZHVsZXNdXG5cbiAgZm9yIChjb25zdCBbbmFtZSwgc2VtdmVyUmFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHZlcnNpb25Mb2NrZWRNb2R1bGVzKSkge1xuICAgIGlmICh2ZXJzaW9uID09PSAnKicgfHwgc2VtdmVyLnNhdGlzZmllcyh2ZXJzaW9uLCBzZW12ZXJSYW5nZSkpIHtcbiAgICAgIGJ1aWx0aW5zLnB1c2gobmFtZSlcbiAgICB9XG4gIH1cblxuICBpZiAoZXhwZXJpbWVudGFsKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgc2VtdmVyUmFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVyaW1lbnRhbE1vZHVsZXMpKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFidWlsdGlucy5pbmNsdWRlcyhuYW1lKSAmJlxuICAgICAgICAodmVyc2lvbiA9PT0gJyonIHx8IHNlbXZlci5zYXRpc2ZpZXModmVyc2lvbiwgc2VtdmVyUmFuZ2UpKVxuICAgICAgKSB7XG4gICAgICAgIGJ1aWx0aW5zLnB1c2gobmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVpbHRpbnNcbn1cbiIsICIndXNlIHN0cmljdCdcblxudmFyIHNjb3BlZFBhY2thZ2VQYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXig/OkAoW14vXSs/KVsvXSk/KFteL10rPykkJylcbnZhciBidWlsdGlucyA9IHJlcXVpcmUoJ2J1aWx0aW5zJylcbnZhciBibGFja2xpc3QgPSBbXG4gICdub2RlX21vZHVsZXMnLFxuICAnZmF2aWNvbi5pY28nLFxuXVxuXG5mdW5jdGlvbiB2YWxpZGF0ZSAobmFtZSkge1xuICB2YXIgd2FybmluZ3MgPSBbXVxuICB2YXIgZXJyb3JzID0gW11cblxuICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgIGVycm9ycy5wdXNoKCduYW1lIGNhbm5vdCBiZSBudWxsJylcbiAgICByZXR1cm4gZG9uZSh3YXJuaW5ncywgZXJyb3JzKVxuICB9XG5cbiAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9ycy5wdXNoKCduYW1lIGNhbm5vdCBiZSB1bmRlZmluZWQnKVxuICAgIHJldHVybiBkb25lKHdhcm5pbmdzLCBlcnJvcnMpXG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgZXJyb3JzLnB1c2goJ25hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgcmV0dXJuIGRvbmUod2FybmluZ3MsIGVycm9ycylcbiAgfVxuXG4gIGlmICghbmFtZS5sZW5ndGgpIHtcbiAgICBlcnJvcnMucHVzaCgnbmFtZSBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpXG4gIH1cblxuICBpZiAobmFtZS5tYXRjaCgvXlxcLi8pKSB7XG4gICAgZXJyb3JzLnB1c2goJ25hbWUgY2Fubm90IHN0YXJ0IHdpdGggYSBwZXJpb2QnKVxuICB9XG5cbiAgaWYgKG5hbWUubWF0Y2goL15fLykpIHtcbiAgICBlcnJvcnMucHVzaCgnbmFtZSBjYW5ub3Qgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlJylcbiAgfVxuXG4gIGlmIChuYW1lLnRyaW0oKSAhPT0gbmFtZSkge1xuICAgIGVycm9ycy5wdXNoKCduYW1lIGNhbm5vdCBjb250YWluIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2VzJylcbiAgfVxuXG4gIC8vIE5vIGZ1bm55IGJ1c2luZXNzXG4gIGJsYWNrbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChibGFja2xpc3RlZE5hbWUpIHtcbiAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpID09PSBibGFja2xpc3RlZE5hbWUpIHtcbiAgICAgIGVycm9ycy5wdXNoKGJsYWNrbGlzdGVkTmFtZSArICcgaXMgYSBibGFja2xpc3RlZCBuYW1lJylcbiAgICB9XG4gIH0pXG5cbiAgLy8gR2VuZXJhdGUgd2FybmluZ3MgZm9yIHN0dWZmIHRoYXQgdXNlZCB0byBiZSBhbGxvd2VkXG5cbiAgLy8gY29yZSBtb2R1bGUgbmFtZXMgbGlrZSBodHRwLCBldmVudHMsIHV0aWwsIGV0Y1xuICBidWlsdGlucyh7IHZlcnNpb246ICcqJyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChidWlsdGluKSB7XG4gICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYnVpbHRpbikge1xuICAgICAgd2FybmluZ3MucHVzaChidWlsdGluICsgJyBpcyBhIGNvcmUgbW9kdWxlIG5hbWUnKVxuICAgIH1cbiAgfSlcblxuICBpZiAobmFtZS5sZW5ndGggPiAyMTQpIHtcbiAgICB3YXJuaW5ncy5wdXNoKCduYW1lIGNhbiBubyBsb25nZXIgY29udGFpbiBtb3JlIHRoYW4gMjE0IGNoYXJhY3RlcnMnKVxuICB9XG5cbiAgLy8gbUl4ZUQgQ2FTZSBuQU1Fc1xuICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpICE9PSBuYW1lKSB7XG4gICAgd2FybmluZ3MucHVzaCgnbmFtZSBjYW4gbm8gbG9uZ2VyIGNvbnRhaW4gY2FwaXRhbCBsZXR0ZXJzJylcbiAgfVxuXG4gIGlmICgvW34nISgpKl0vLnRlc3QobmFtZS5zcGxpdCgnLycpLnNsaWNlKC0xKVswXSkpIHtcbiAgICB3YXJuaW5ncy5wdXNoKCduYW1lIGNhbiBubyBsb25nZXIgY29udGFpbiBzcGVjaWFsIGNoYXJhY3RlcnMgKFwiflxcJyEoKSpcIiknKVxuICB9XG5cbiAgaWYgKGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSAhPT0gbmFtZSkge1xuICAgIC8vIE1heWJlIGl0J3MgYSBzY29wZWQgcGFja2FnZSBuYW1lLCBsaWtlIEB1c2VyL3BhY2thZ2VcbiAgICB2YXIgbmFtZU1hdGNoID0gbmFtZS5tYXRjaChzY29wZWRQYWNrYWdlUGF0dGVybilcbiAgICBpZiAobmFtZU1hdGNoKSB7XG4gICAgICB2YXIgdXNlciA9IG5hbWVNYXRjaFsxXVxuICAgICAgdmFyIHBrZyA9IG5hbWVNYXRjaFsyXVxuICAgICAgaWYgKGVuY29kZVVSSUNvbXBvbmVudCh1c2VyKSA9PT0gdXNlciAmJiBlbmNvZGVVUklDb21wb25lbnQocGtnKSA9PT0gcGtnKSB7XG4gICAgICAgIHJldHVybiBkb25lKHdhcm5pbmdzLCBlcnJvcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZXJyb3JzLnB1c2goJ25hbWUgY2FuIG9ubHkgY29udGFpbiBVUkwtZnJpZW5kbHkgY2hhcmFjdGVycycpXG4gIH1cblxuICByZXR1cm4gZG9uZSh3YXJuaW5ncywgZXJyb3JzKVxufVxuXG52YXIgZG9uZSA9IGZ1bmN0aW9uICh3YXJuaW5ncywgZXJyb3JzKSB7XG4gIHZhciByZXN1bHQgPSB7XG4gICAgdmFsaWRGb3JOZXdQYWNrYWdlczogZXJyb3JzLmxlbmd0aCA9PT0gMCAmJiB3YXJuaW5ncy5sZW5ndGggPT09IDAsXG4gICAgdmFsaWRGb3JPbGRQYWNrYWdlczogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICB3YXJuaW5nczogd2FybmluZ3MsXG4gICAgZXJyb3JzOiBlcnJvcnMsXG4gIH1cbiAgaWYgKCFyZXN1bHQud2FybmluZ3MubGVuZ3RoKSB7XG4gICAgZGVsZXRlIHJlc3VsdC53YXJuaW5nc1xuICB9XG4gIGlmICghcmVzdWx0LmVycm9ycy5sZW5ndGgpIHtcbiAgICBkZWxldGUgcmVzdWx0LmVycm9yc1xuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWxpZGF0ZVxuIiwgImV4cG9ydCB7IGEgYXMgY29uc29sYSwgYyBhcyBjcmVhdGVDb25zb2xhLCBhIGFzIGRlZmF1bHQgfSBmcm9tICcuL3NoYXJlZC9jb25zb2xhLjM2YzAwMzRmLm1qcyc7XG5leHBvcnQgeyBDb25zb2xhLCBMb2dMZXZlbHMsIExvZ1R5cGVzIH0gZnJvbSAnLi9jb3JlLm1qcyc7XG5pbXBvcnQgJy4vc2hhcmVkL2NvbnNvbGEuMDZhZDhhNjQubWpzJztcbmltcG9ydCAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCAnLi91dGlscy5tanMnO1xuaW1wb3J0ICdub2RlOnR0eSc7XG5pbXBvcnQgJ25vZGU6dXRpbCc7XG5pbXBvcnQgJ25vZGU6cGF0aCc7XG4iLCAiaW1wb3J0IGNvbnNvbGEgZnJvbSAnY29uc29sYSc7XG5pbXBvcnQgeyBjb2xvcnMgfSBmcm9tICdjb25zb2xhL3V0aWxzJztcblxuZnVuY3Rpb24gdG9BcnJheSh2YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcmV0dXJuIHZhbCA9PT0gdm9pZCAwID8gW10gOiBbdmFsXTtcbn1cbmZ1bmN0aW9uIGZvcm1hdExpbmVDb2x1bW5zKGxpbmVzLCBsaW5lUHJlZml4ID0gXCJcIikge1xuICBjb25zdCBtYXhMZW5naCA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBmb3IgKGNvbnN0IFtpLCBlbGVtZW50XSBvZiBsaW5lLmVudHJpZXMoKSkge1xuICAgICAgbWF4TGVuZ2hbaV0gPSBNYXRoLm1heChtYXhMZW5naFtpXSB8fCAwLCBlbGVtZW50Lmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5lcy5tYXAoXG4gICAgKGwpID0+IGwubWFwKFxuICAgICAgKGMsIGkpID0+IGxpbmVQcmVmaXggKyBjW2kgPT09IDAgPyBcInBhZFN0YXJ0XCIgOiBcInBhZEVuZFwiXShtYXhMZW5naFtpXSlcbiAgICApLmpvaW4oXCIgIFwiKVxuICApLmpvaW4oXCJcXG5cIik7XG59XG5mdW5jdGlvbiByZXNvbHZlVmFsdWUoaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gXCJmdW5jdGlvblwiID8gaW5wdXQoKSA6IGlucHV0O1xufVxuY2xhc3MgQ0xJRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGNvZGUpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMubmFtZSA9IFwiQ0xJRXJyb3JcIjtcbiAgfVxufVxuXG5jb25zdCBOVU1CRVJfQ0hBUl9SRSA9IC9cXGQvO1xuY29uc3QgU1RSX1NQTElUVEVSUyA9IFtcIi1cIiwgXCJfXCIsIFwiL1wiLCBcIi5cIl07XG5mdW5jdGlvbiBpc1VwcGVyY2FzZShjaGFyID0gXCJcIikge1xuICBpZiAoTlVNQkVSX0NIQVJfUkUudGVzdChjaGFyKSkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGNoYXIgIT09IGNoYXIudG9Mb3dlckNhc2UoKTtcbn1cbmZ1bmN0aW9uIHNwbGl0QnlDYXNlKHN0ciwgc2VwYXJhdG9ycykge1xuICBjb25zdCBzcGxpdHRlcnMgPSBzZXBhcmF0b3JzID8/IFNUUl9TUExJVFRFUlM7XG4gIGNvbnN0IHBhcnRzID0gW107XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFydHM7XG4gIH1cbiAgbGV0IGJ1ZmYgPSBcIlwiO1xuICBsZXQgcHJldmlvdXNVcHBlcjtcbiAgbGV0IHByZXZpb3VzU3BsaXR0ZXI7XG4gIGZvciAoY29uc3QgY2hhciBvZiBzdHIpIHtcbiAgICBjb25zdCBpc1NwbGl0dGVyID0gc3BsaXR0ZXJzLmluY2x1ZGVzKGNoYXIpO1xuICAgIGlmIChpc1NwbGl0dGVyID09PSB0cnVlKSB7XG4gICAgICBwYXJ0cy5wdXNoKGJ1ZmYpO1xuICAgICAgYnVmZiA9IFwiXCI7XG4gICAgICBwcmV2aW91c1VwcGVyID0gdm9pZCAwO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzVXBwZXIgPSBpc1VwcGVyY2FzZShjaGFyKTtcbiAgICBpZiAocHJldmlvdXNTcGxpdHRlciA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChwcmV2aW91c1VwcGVyID09PSBmYWxzZSAmJiBpc1VwcGVyID09PSB0cnVlKSB7XG4gICAgICAgIHBhcnRzLnB1c2goYnVmZik7XG4gICAgICAgIGJ1ZmYgPSBjaGFyO1xuICAgICAgICBwcmV2aW91c1VwcGVyID0gaXNVcHBlcjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocHJldmlvdXNVcHBlciA9PT0gdHJ1ZSAmJiBpc1VwcGVyID09PSBmYWxzZSAmJiBidWZmLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdENoYXIgPSBidWZmLmF0KC0xKTtcbiAgICAgICAgcGFydHMucHVzaChidWZmLnNsaWNlKDAsIE1hdGgubWF4KDAsIGJ1ZmYubGVuZ3RoIC0gMSkpKTtcbiAgICAgICAgYnVmZiA9IGxhc3RDaGFyICsgY2hhcjtcbiAgICAgICAgcHJldmlvdXNVcHBlciA9IGlzVXBwZXI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBidWZmICs9IGNoYXI7XG4gICAgcHJldmlvdXNVcHBlciA9IGlzVXBwZXI7XG4gICAgcHJldmlvdXNTcGxpdHRlciA9IGlzU3BsaXR0ZXI7XG4gIH1cbiAgcGFydHMucHVzaChidWZmKTtcbiAgcmV0dXJuIHBhcnRzO1xufVxuZnVuY3Rpb24gdXBwZXJGaXJzdChzdHIpIHtcbiAgcmV0dXJuIHN0ciA/IHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpIDogXCJcIjtcbn1cbmZ1bmN0aW9uIGxvd2VyRmlyc3Qoc3RyKSB7XG4gIHJldHVybiBzdHIgPyBzdHJbMF0udG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSA6IFwiXCI7XG59XG5mdW5jdGlvbiBwYXNjYWxDYXNlKHN0ciwgb3B0cykge1xuICByZXR1cm4gc3RyID8gKEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ciA6IHNwbGl0QnlDYXNlKHN0cikpLm1hcCgocCkgPT4gdXBwZXJGaXJzdChvcHRzPy5ub3JtYWxpemUgPyBwLnRvTG93ZXJDYXNlKCkgOiBwKSkuam9pbihcIlwiKSA6IFwiXCI7XG59XG5mdW5jdGlvbiBjYW1lbENhc2Uoc3RyLCBvcHRzKSB7XG4gIHJldHVybiBsb3dlckZpcnN0KHBhc2NhbENhc2Uoc3RyIHx8IFwiXCIsIG9wdHMpKTtcbn1cbmZ1bmN0aW9uIGtlYmFiQ2FzZShzdHIsIGpvaW5lcikge1xuICByZXR1cm4gc3RyID8gKEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ciA6IHNwbGl0QnlDYXNlKHN0cikpLm1hcCgocCkgPT4gcC50b0xvd2VyQ2FzZSgpKS5qb2luKGpvaW5lciA/PyBcIi1cIikgOiBcIlwiO1xufVxuXG5mdW5jdGlvbiB0b0FycihhbnkpIHtcbiAgcmV0dXJuIGFueSA9PSB2b2lkIDAgPyBbXSA6IEFycmF5LmlzQXJyYXkoYW55KSA/IGFueSA6IFthbnldO1xufVxuZnVuY3Rpb24gdG9WYWwob3V0LCBrZXksIHZhbCwgb3B0cykge1xuICBsZXQgeDtcbiAgY29uc3Qgb2xkID0gb3V0W2tleV07XG4gIGNvbnN0IG54dCA9IH5vcHRzLnN0cmluZy5pbmRleE9mKGtleSkgPyB2YWwgPT0gdm9pZCAwIHx8IHZhbCA9PT0gdHJ1ZSA/IFwiXCIgOiBTdHJpbmcodmFsKSA6IHR5cGVvZiB2YWwgPT09IFwiYm9vbGVhblwiID8gdmFsIDogfm9wdHMuYm9vbGVhbi5pbmRleE9mKGtleSkgPyB2YWwgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsID09PSBcInRydWVcIiB8fCAob3V0Ll8ucHVzaCgoeCA9ICt2YWwsIHggKiAwID09PSAwKSA/IHggOiB2YWwpLCAhIXZhbCkgOiAoeCA9ICt2YWwsIHggKiAwID09PSAwKSA/IHggOiB2YWw7XG4gIG91dFtrZXldID0gb2xkID09IHZvaWQgMCA/IG54dCA6IEFycmF5LmlzQXJyYXkob2xkKSA/IG9sZC5jb25jYXQobnh0KSA6IFtvbGQsIG54dF07XG59XG5mdW5jdGlvbiBwYXJzZVJhd0FyZ3MoYXJncyA9IFtdLCBvcHRzID0ge30pIHtcbiAgbGV0IGs7XG4gIGxldCBhcnI7XG4gIGxldCBhcmc7XG4gIGxldCBuYW1lO1xuICBsZXQgdmFsO1xuICBjb25zdCBvdXQgPSB7IF86IFtdIH07XG4gIGxldCBpID0gMDtcbiAgbGV0IGogPSAwO1xuICBsZXQgaWR4ID0gMDtcbiAgY29uc3QgbGVuID0gYXJncy5sZW5ndGg7XG4gIGNvbnN0IGFsaWJpID0gb3B0cy5hbGlhcyAhPT0gdm9pZCAwO1xuICBjb25zdCBzdHJpY3QgPSBvcHRzLnVua25vd24gIT09IHZvaWQgMDtcbiAgY29uc3QgZGVmYXVsdHMgPSBvcHRzLmRlZmF1bHQgIT09IHZvaWQgMDtcbiAgb3B0cy5hbGlhcyA9IG9wdHMuYWxpYXMgfHwge307XG4gIG9wdHMuc3RyaW5nID0gdG9BcnIob3B0cy5zdHJpbmcpO1xuICBvcHRzLmJvb2xlYW4gPSB0b0FycihvcHRzLmJvb2xlYW4pO1xuICBpZiAoYWxpYmkpIHtcbiAgICBmb3IgKGsgaW4gb3B0cy5hbGlhcykge1xuICAgICAgYXJyID0gb3B0cy5hbGlhc1trXSA9IHRvQXJyKG9wdHMuYWxpYXNba10pO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAob3B0cy5hbGlhc1thcnJbaV1dID0gYXJyLmNvbmNhdChrKSkuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmb3IgKGkgPSBvcHRzLmJvb2xlYW4ubGVuZ3RoOyBpLS0gPiAwOyApIHtcbiAgICBhcnIgPSBvcHRzLmFsaWFzW29wdHMuYm9vbGVhbltpXV0gfHwgW107XG4gICAgZm9yIChqID0gYXJyLmxlbmd0aDsgai0tID4gMDsgKSB7XG4gICAgICBvcHRzLmJvb2xlYW4ucHVzaChhcnJbal0pO1xuICAgIH1cbiAgfVxuICBmb3IgKGkgPSBvcHRzLnN0cmluZy5sZW5ndGg7IGktLSA+IDA7ICkge1xuICAgIGFyciA9IG9wdHMuYWxpYXNbb3B0cy5zdHJpbmdbaV1dIHx8IFtdO1xuICAgIGZvciAoaiA9IGFyci5sZW5ndGg7IGotLSA+IDA7ICkge1xuICAgICAgb3B0cy5zdHJpbmcucHVzaChhcnJbal0pO1xuICAgIH1cbiAgfVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBmb3IgKGsgaW4gb3B0cy5kZWZhdWx0KSB7XG4gICAgICBuYW1lID0gdHlwZW9mIG9wdHMuZGVmYXVsdFtrXTtcbiAgICAgIGFyciA9IG9wdHMuYWxpYXNba10gPSBvcHRzLmFsaWFzW2tdIHx8IFtdO1xuICAgICAgaWYgKG9wdHNbbmFtZV0gIT09IHZvaWQgMCkge1xuICAgICAgICBvcHRzW25hbWVdLnB1c2goayk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBvcHRzW25hbWVdLnB1c2goYXJyW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBrZXlzID0gc3RyaWN0ID8gT2JqZWN0LmtleXMob3B0cy5hbGlhcykgOiBbXTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgIG91dC5fID0gb3V0Ll8uY29uY2F0KGFyZ3Muc2xpY2UoKytpKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZm9yIChqID0gMDsgaiA8IGFyZy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGFyZy5jaGFyQ29kZUF0KGopICE9PSA0NSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGogPT09IDApIHtcbiAgICAgIG91dC5fLnB1c2goYXJnKTtcbiAgICB9IGVsc2UgaWYgKGFyZy5zdWJzdHJpbmcoaiwgaiArIDMpID09PSBcIm5vLVwiKSB7XG4gICAgICBuYW1lID0gYXJnLnNsaWNlKE1hdGgubWF4KDAsIGogKyAzKSk7XG4gICAgICBpZiAoc3RyaWN0ICYmICF+a2V5cy5pbmRleE9mKG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnVua25vd24oYXJnKTtcbiAgICAgIH1cbiAgICAgIG91dFtuYW1lXSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGlkeCA9IGogKyAxOyBpZHggPCBhcmcubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBpZiAoYXJnLmNoYXJDb2RlQXQoaWR4KSA9PT0gNjEpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmFtZSA9IGFyZy5zdWJzdHJpbmcoaiwgaWR4KTtcbiAgICAgIHZhbCA9IGFyZy5zbGljZShNYXRoLm1heCgwLCArK2lkeCkpIHx8IGkgKyAxID09PSBsZW4gfHwgKFwiXCIgKyBhcmdzW2kgKyAxXSkuY2hhckNvZGVBdCgwKSA9PT0gNDUgfHwgYXJnc1srK2ldO1xuICAgICAgYXJyID0gaiA9PT0gMiA/IFtuYW1lXSA6IG5hbWU7XG4gICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGFyci5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIG5hbWUgPSBhcnJbaWR4XTtcbiAgICAgICAgaWYgKHN0cmljdCAmJiAhfmtleXMuaW5kZXhPZihuYW1lKSkge1xuICAgICAgICAgIHJldHVybiBvcHRzLnVua25vd24oXCItXCIucmVwZWF0KGopICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9WYWwob3V0LCBuYW1lLCBpZHggKyAxIDwgYXJyLmxlbmd0aCB8fCB2YWwsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBmb3IgKGsgaW4gb3B0cy5kZWZhdWx0KSB7XG4gICAgICBpZiAob3V0W2tdID09PSB2b2lkIDApIHtcbiAgICAgICAgb3V0W2tdID0gb3B0cy5kZWZhdWx0W2tdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxpYmkpIHtcbiAgICBmb3IgKGsgaW4gb3V0KSB7XG4gICAgICBhcnIgPSBvcHRzLmFsaWFzW2tdIHx8IFtdO1xuICAgICAgd2hpbGUgKGFyci5sZW5ndGggPiAwKSB7XG4gICAgICAgIG91dFthcnIuc2hpZnQoKV0gPSBvdXRba107XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhyYXdBcmdzLCBhcmdzRGVmKSB7XG4gIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICBib29sZWFuOiBbXSxcbiAgICBzdHJpbmc6IFtdLFxuICAgIG1peGVkOiBbXSxcbiAgICBhbGlhczoge30sXG4gICAgZGVmYXVsdDoge31cbiAgfTtcbiAgY29uc3QgYXJncyA9IHJlc29sdmVBcmdzKGFyZ3NEZWYpO1xuICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgaWYgKGFyZy50eXBlID09PSBcInBvc2l0aW9uYWxcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhcmcudHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcGFyc2VPcHRpb25zLnN0cmluZy5wdXNoKGFyZy5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGFyZy50eXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcGFyc2VPcHRpb25zLmJvb2xlYW4ucHVzaChhcmcubmFtZSk7XG4gICAgfVxuICAgIGlmIChhcmcuZGVmYXVsdCAhPT0gdm9pZCAwKSB7XG4gICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFthcmcubmFtZV0gPSBhcmcuZGVmYXVsdDtcbiAgICB9XG4gICAgaWYgKGFyZy5hbGlhcykge1xuICAgICAgcGFyc2VPcHRpb25zLmFsaWFzW2FyZy5uYW1lXSA9IGFyZy5hbGlhcztcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VSYXdBcmdzKHJhd0FyZ3MsIHBhcnNlT3B0aW9ucyk7XG4gIGNvbnN0IFsuLi5wb3NpdGlvbmFsQXJndW1lbnRzXSA9IHBhcnNlZC5fO1xuICBjb25zdCBwYXJzZWRBcmdzUHJveHkgPSBuZXcgUHJveHkocGFyc2VkLCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCkge1xuICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXSA/PyB0YXJnZXRbY2FtZWxDYXNlKHByb3ApXSA/PyB0YXJnZXRba2ViYWJDYXNlKHByb3ApXTtcbiAgICB9XG4gIH0pO1xuICBmb3IgKGNvbnN0IFssIGFyZ10gb2YgYXJncy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoYXJnLnR5cGUgPT09IFwicG9zaXRpb25hbFwiKSB7XG4gICAgICBjb25zdCBuZXh0UG9zaXRpb25hbEFyZ3VtZW50ID0gcG9zaXRpb25hbEFyZ3VtZW50cy5zaGlmdCgpO1xuICAgICAgaWYgKG5leHRQb3NpdGlvbmFsQXJndW1lbnQgIT09IHZvaWQgMCkge1xuICAgICAgICBwYXJzZWRBcmdzUHJveHlbYXJnLm5hbWVdID0gbmV4dFBvc2l0aW9uYWxBcmd1bWVudDtcbiAgICAgIH0gZWxzZSBpZiAoYXJnLmRlZmF1bHQgPT09IHZvaWQgMCAmJiBhcmcucmVxdWlyZWQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRocm93IG5ldyBDTElFcnJvcihcbiAgICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBwb3NpdGlvbmFsIGFyZ3VtZW50OiAke2FyZy5uYW1lLnRvVXBwZXJDYXNlKCl9YCxcbiAgICAgICAgICBcIkVBUkdcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkQXJnc1Byb3h5W2FyZy5uYW1lXSA9IGFyZy5kZWZhdWx0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLnJlcXVpcmVkICYmIHBhcnNlZEFyZ3NQcm94eVthcmcubmFtZV0gPT09IHZvaWQgMCkge1xuICAgICAgdGhyb3cgbmV3IENMSUVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAtLSR7YXJnLm5hbWV9YCwgXCJFQVJHXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkQXJnc1Byb3h5O1xufVxuZnVuY3Rpb24gcmVzb2x2ZUFyZ3MoYXJnc0RlZikge1xuICBjb25zdCBhcmdzID0gW107XG4gIGZvciAoY29uc3QgW25hbWUsIGFyZ0RlZl0gb2YgT2JqZWN0LmVudHJpZXMoYXJnc0RlZiB8fCB7fSkpIHtcbiAgICBhcmdzLnB1c2goe1xuICAgICAgLi4uYXJnRGVmLFxuICAgICAgbmFtZSxcbiAgICAgIGFsaWFzOiB0b0FycmF5KGFyZ0RlZi5hbGlhcylcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYXJncztcbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29tbWFuZChkZWYpIHtcbiAgcmV0dXJuIGRlZjtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY21kLCBvcHRzKSB7XG4gIGNvbnN0IGNtZEFyZ3MgPSBhd2FpdCByZXNvbHZlVmFsdWUoY21kLmFyZ3MgfHwge30pO1xuICBjb25zdCBwYXJzZWRBcmdzID0gcGFyc2VBcmdzKG9wdHMucmF3QXJncywgY21kQXJncyk7XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgcmF3QXJnczogb3B0cy5yYXdBcmdzLFxuICAgIGFyZ3M6IHBhcnNlZEFyZ3MsXG4gICAgZGF0YTogb3B0cy5kYXRhLFxuICAgIGNtZFxuICB9O1xuICBpZiAodHlwZW9mIGNtZC5zZXR1cCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgYXdhaXQgY21kLnNldHVwKGNvbnRleHQpO1xuICB9XG4gIGxldCByZXN1bHQ7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3ViQ29tbWFuZHMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY21kLnN1YkNvbW1hbmRzKTtcbiAgICBpZiAoc3ViQ29tbWFuZHMgJiYgT2JqZWN0LmtleXMoc3ViQ29tbWFuZHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN1YkNvbW1hbmRBcmdJbmRleCA9IG9wdHMucmF3QXJncy5maW5kSW5kZXgoXG4gICAgICAgIChhcmcpID0+ICFhcmcuc3RhcnRzV2l0aChcIi1cIilcbiAgICAgICk7XG4gICAgICBjb25zdCBzdWJDb21tYW5kTmFtZSA9IG9wdHMucmF3QXJnc1tzdWJDb21tYW5kQXJnSW5kZXhdO1xuICAgICAgaWYgKHN1YkNvbW1hbmROYW1lKSB7XG4gICAgICAgIGlmICghc3ViQ29tbWFuZHNbc3ViQ29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENMSUVycm9yKFxuICAgICAgICAgICAgYFVua25vd24gY29tbWFuZCBcXGAke3N1YkNvbW1hbmROYW1lfVxcYGAsXG4gICAgICAgICAgICBcIkVfVU5LTk9XTl9DT01NQU5EXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YkNvbW1hbmQgPSBhd2FpdCByZXNvbHZlVmFsdWUoc3ViQ29tbWFuZHNbc3ViQ29tbWFuZE5hbWVdKTtcbiAgICAgICAgaWYgKHN1YkNvbW1hbmQpIHtcbiAgICAgICAgICBhd2FpdCBydW5Db21tYW5kKHN1YkNvbW1hbmQsIHtcbiAgICAgICAgICAgIHJhd0FyZ3M6IG9wdHMucmF3QXJncy5zbGljZShzdWJDb21tYW5kQXJnSW5kZXggKyAxKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFjbWQucnVuKSB7XG4gICAgICAgIHRocm93IG5ldyBDTElFcnJvcihgTm8gY29tbWFuZCBzcGVjaWZpZWQuYCwgXCJFX05PX0NPTU1BTkRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY21kLnJ1biA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBjbWQucnVuKGNvbnRleHQpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodHlwZW9mIGNtZC5jbGVhbnVwID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGF3YWl0IGNtZC5jbGVhbnVwKGNvbnRleHQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZXN1bHQgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTdWJDb21tYW5kKGNtZCwgcmF3QXJncywgcGFyZW50KSB7XG4gIGNvbnN0IHN1YkNvbW1hbmRzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNtZC5zdWJDb21tYW5kcyk7XG4gIGlmIChzdWJDb21tYW5kcyAmJiBPYmplY3Qua2V5cyhzdWJDb21tYW5kcykubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHN1YkNvbW1hbmRBcmdJbmRleCA9IHJhd0FyZ3MuZmluZEluZGV4KChhcmcpID0+ICFhcmcuc3RhcnRzV2l0aChcIi1cIikpO1xuICAgIGNvbnN0IHN1YkNvbW1hbmROYW1lID0gcmF3QXJnc1tzdWJDb21tYW5kQXJnSW5kZXhdO1xuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSBhd2FpdCByZXNvbHZlVmFsdWUoc3ViQ29tbWFuZHNbc3ViQ29tbWFuZE5hbWVdKTtcbiAgICBpZiAoc3ViQ29tbWFuZCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVTdWJDb21tYW5kKFxuICAgICAgICBzdWJDb21tYW5kLFxuICAgICAgICByYXdBcmdzLnNsaWNlKHN1YkNvbW1hbmRBcmdJbmRleCArIDEpLFxuICAgICAgICBjbWRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbY21kLCBwYXJlbnRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93VXNhZ2UoY21kLCBwYXJlbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zb2xhLmxvZyhhd2FpdCByZW5kZXJVc2FnZShjbWQsIHBhcmVudCkgKyBcIlxcblwiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xhLmVycm9yKGVycm9yKTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyVXNhZ2UoY21kLCBwYXJlbnQpIHtcbiAgY29uc3QgY21kTWV0YSA9IGF3YWl0IHJlc29sdmVWYWx1ZShjbWQubWV0YSB8fCB7fSk7XG4gIGNvbnN0IGNtZEFyZ3MgPSByZXNvbHZlQXJncyhhd2FpdCByZXNvbHZlVmFsdWUoY21kLmFyZ3MgfHwge30pKTtcbiAgY29uc3QgcGFyZW50TWV0YSA9IGF3YWl0IHJlc29sdmVWYWx1ZShwYXJlbnQ/Lm1ldGEgfHwge30pO1xuICBjb25zdCBjb21tYW5kTmFtZSA9IGAke3BhcmVudE1ldGEubmFtZSA/IGAke3BhcmVudE1ldGEubmFtZX0gYCA6IFwiXCJ9YCArIChjbWRNZXRhLm5hbWUgfHwgcHJvY2Vzcy5hcmd2WzFdKTtcbiAgY29uc3QgYXJnTGluZXMgPSBbXTtcbiAgY29uc3QgcG9zTGluZXMgPSBbXTtcbiAgY29uc3QgY29tbWFuZHNMaW5lcyA9IFtdO1xuICBjb25zdCB1c2FnZUxpbmUgPSBbXTtcbiAgZm9yIChjb25zdCBhcmcgb2YgY21kQXJncykge1xuICAgIGlmIChhcmcudHlwZSA9PT0gXCJwb3NpdGlvbmFsXCIpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBhcmcubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IGFyZy5yZXF1aXJlZCAhPT0gZmFsc2UgJiYgYXJnLmRlZmF1bHQgPT09IHZvaWQgMDtcbiAgICAgIGNvbnN0IGRlZmF1bHRIaW50ID0gYXJnLmRlZmF1bHQgPyBgPVwiJHthcmcuZGVmYXVsdH1cImAgOiBcIlwiO1xuICAgICAgcG9zTGluZXMucHVzaChbXG4gICAgICAgIFwiYFwiICsgbmFtZSArIGRlZmF1bHRIaW50ICsgXCJgXCIsXG4gICAgICAgIGFyZy5kZXNjcmlwdGlvbiB8fCBcIlwiLFxuICAgICAgICBhcmcudmFsdWVIaW50ID8gYDwke2FyZy52YWx1ZUhpbnR9PmAgOiBcIlwiXG4gICAgICBdKTtcbiAgICAgIHVzYWdlTGluZS5wdXNoKGlzUmVxdWlyZWQgPyBgPCR7bmFtZX0+YCA6IGBbJHtuYW1lfV1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IGFyZy5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiBhcmcuZGVmYXVsdCA9PT0gdm9pZCAwO1xuICAgICAgY29uc3QgYXJnU3RyID0gKGFyZy50eXBlID09PSBcImJvb2xlYW5cIiAmJiBhcmcuZGVmYXVsdCA9PT0gdHJ1ZSA/IFtcbiAgICAgICAgLi4uKGFyZy5hbGlhcyB8fCBbXSkubWFwKChhKSA9PiBgLS1uby0ke2F9YCksXG4gICAgICAgIGAtLW5vLSR7YXJnLm5hbWV9YFxuICAgICAgXS5qb2luKFwiLCBcIikgOiBbLi4uKGFyZy5hbGlhcyB8fCBbXSkubWFwKChhKSA9PiBgLSR7YX1gKSwgYC0tJHthcmcubmFtZX1gXS5qb2luKFxuICAgICAgICBcIiwgXCJcbiAgICAgICkpICsgKGFyZy50eXBlID09PSBcInN0cmluZ1wiICYmIChhcmcudmFsdWVIaW50IHx8IGFyZy5kZWZhdWx0KSA/IGA9JHthcmcudmFsdWVIaW50ID8gYDwke2FyZy52YWx1ZUhpbnR9PmAgOiBgXCIke2FyZy5kZWZhdWx0IHx8IFwiXCJ9XCJgfWAgOiBcIlwiKTtcbiAgICAgIGFyZ0xpbmVzLnB1c2goW1xuICAgICAgICBcImBcIiArIGFyZ1N0ciArIChpc1JlcXVpcmVkID8gXCIgKHJlcXVpcmVkKVwiIDogXCJcIikgKyBcImBcIixcbiAgICAgICAgYXJnLmRlc2NyaXB0aW9uIHx8IFwiXCJcbiAgICAgIF0pO1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgdXNhZ2VMaW5lLnB1c2goYXJnU3RyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNtZC5zdWJDb21tYW5kcykge1xuICAgIGNvbnN0IGNvbW1hbmROYW1lcyA9IFtdO1xuICAgIGNvbnN0IHN1YkNvbW1hbmRzID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNtZC5zdWJDb21tYW5kcyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgc3ViXSBvZiBPYmplY3QuZW50cmllcyhzdWJDb21tYW5kcykpIHtcbiAgICAgIGNvbnN0IHN1YkNtZCA9IGF3YWl0IHJlc29sdmVWYWx1ZShzdWIpO1xuICAgICAgY29uc3QgbWV0YSA9IGF3YWl0IHJlc29sdmVWYWx1ZShzdWJDbWQ/Lm1ldGEpO1xuICAgICAgY29tbWFuZHNMaW5lcy5wdXNoKFtgXFxgJHtuYW1lfVxcYGAsIG1ldGE/LmRlc2NyaXB0aW9uIHx8IFwiXCJdKTtcbiAgICAgIGNvbW1hbmROYW1lcy5wdXNoKG5hbWUpO1xuICAgIH1cbiAgICB1c2FnZUxpbmUucHVzaChjb21tYW5kTmFtZXMuam9pbihcInxcIikpO1xuICB9XG4gIGNvbnN0IHVzYWdlTGluZXMgPSBbXTtcbiAgY29uc3QgdmVyc2lvbiA9IGNtZE1ldGEudmVyc2lvbiB8fCBwYXJlbnRNZXRhLnZlcnNpb247XG4gIHVzYWdlTGluZXMucHVzaChcbiAgICBjb2xvcnMuZ3JheShcbiAgICAgIGAke2NtZE1ldGEuZGVzY3JpcHRpb259ICgke2NvbW1hbmROYW1lICsgKHZlcnNpb24gPyBgIHYke3ZlcnNpb259YCA6IFwiXCIpfSlgXG4gICAgKSxcbiAgICBcIlwiXG4gICk7XG4gIGNvbnN0IGhhc09wdGlvbnMgPSBhcmdMaW5lcy5sZW5ndGggPiAwIHx8IHBvc0xpbmVzLmxlbmd0aCA+IDA7XG4gIHVzYWdlTGluZXMucHVzaChcbiAgICBgJHtjb2xvcnMudW5kZXJsaW5lKGNvbG9ycy5ib2xkKFwiVVNBR0VcIikpfSBcXGAke2NvbW1hbmROYW1lfSR7aGFzT3B0aW9ucyA/IFwiIFtPUFRJT05TXVwiIDogXCJcIn0gJHt1c2FnZUxpbmUuam9pbihcIiBcIil9XFxgYCxcbiAgICBcIlwiXG4gICk7XG4gIGlmIChwb3NMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgdXNhZ2VMaW5lcy5wdXNoKGNvbG9ycy51bmRlcmxpbmUoY29sb3JzLmJvbGQoXCJBUkdVTUVOVFNcIikpLCBcIlwiKTtcbiAgICB1c2FnZUxpbmVzLnB1c2goZm9ybWF0TGluZUNvbHVtbnMocG9zTGluZXMsIFwiICBcIikpO1xuICAgIHVzYWdlTGluZXMucHVzaChcIlwiKTtcbiAgfVxuICBpZiAoYXJnTGluZXMubGVuZ3RoID4gMCkge1xuICAgIHVzYWdlTGluZXMucHVzaChjb2xvcnMudW5kZXJsaW5lKGNvbG9ycy5ib2xkKFwiT1BUSU9OU1wiKSksIFwiXCIpO1xuICAgIHVzYWdlTGluZXMucHVzaChmb3JtYXRMaW5lQ29sdW1ucyhhcmdMaW5lcywgXCIgIFwiKSk7XG4gICAgdXNhZ2VMaW5lcy5wdXNoKFwiXCIpO1xuICB9XG4gIGlmIChjb21tYW5kc0xpbmVzLmxlbmd0aCA+IDApIHtcbiAgICB1c2FnZUxpbmVzLnB1c2goY29sb3JzLnVuZGVybGluZShjb2xvcnMuYm9sZChcIkNPTU1BTkRTXCIpKSwgXCJcIik7XG4gICAgdXNhZ2VMaW5lcy5wdXNoKGZvcm1hdExpbmVDb2x1bW5zKGNvbW1hbmRzTGluZXMsIFwiICBcIikpO1xuICAgIHVzYWdlTGluZXMucHVzaChcbiAgICAgIFwiXCIsXG4gICAgICBgVXNlIFxcYCR7Y29tbWFuZE5hbWV9IDxjb21tYW5kPiAtLWhlbHBcXGAgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21tYW5kLmBcbiAgICApO1xuICB9XG4gIHJldHVybiB1c2FnZUxpbmVzLmZpbHRlcigobCkgPT4gdHlwZW9mIGwgPT09IFwic3RyaW5nXCIpLmpvaW4oXCJcXG5cIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bk1haW4oY21kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcmF3QXJncyA9IG9wdHMucmF3QXJncyB8fCBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gIGNvbnN0IHNob3dVc2FnZSQxID0gb3B0cy5zaG93VXNhZ2UgfHwgc2hvd1VzYWdlO1xuICB0cnkge1xuICAgIGlmIChyYXdBcmdzLmluY2x1ZGVzKFwiLS1oZWxwXCIpIHx8IHJhd0FyZ3MuaW5jbHVkZXMoXCItaFwiKSkge1xuICAgICAgYXdhaXQgc2hvd1VzYWdlJDEoLi4uYXdhaXQgcmVzb2x2ZVN1YkNvbW1hbmQoY21kLCByYXdBcmdzKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSBlbHNlIGlmIChyYXdBcmdzLmxlbmd0aCA9PT0gMSAmJiByYXdBcmdzWzBdID09PSBcIi0tdmVyc2lvblwiKSB7XG4gICAgICBjb25zdCBtZXRhID0gdHlwZW9mIGNtZC5tZXRhID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCBjbWQubWV0YSgpIDogYXdhaXQgY21kLm1ldGE7XG4gICAgICBpZiAoIW1ldGE/LnZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IENMSUVycm9yKFwiTm8gdmVyc2lvbiBzcGVjaWZpZWRcIiwgXCJFX05PX1ZFUlNJT05cIik7XG4gICAgICB9XG4gICAgICBjb25zb2xhLmxvZyhtZXRhLnZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBydW5Db21tYW5kKGNtZCwgeyByYXdBcmdzIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBpc0NMSUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBDTElFcnJvcjtcbiAgICBpZiAoIWlzQ0xJRXJyb3IpIHtcbiAgICAgIGNvbnNvbGEuZXJyb3IoZXJyb3IsIFwiXFxuXCIpO1xuICAgIH1cbiAgICBpZiAoaXNDTElFcnJvcikge1xuICAgICAgYXdhaXQgc2hvd1VzYWdlJDEoLi4uYXdhaXQgcmVzb2x2ZVN1YkNvbW1hbmQoY21kLCByYXdBcmdzKSk7XG4gICAgfVxuICAgIGNvbnNvbGEuZXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVNYWluKGNtZCkge1xuICByZXR1cm4gKG9wdHMgPSB7fSkgPT4gcnVuTWFpbihjbWQsIG9wdHMpO1xufVxuXG5leHBvcnQgeyBjcmVhdGVNYWluLCBkZWZpbmVDb21tYW5kLCBwYXJzZUFyZ3MsIHJlbmRlclVzYWdlLCBydW5Db21tYW5kLCBydW5NYWluLCBzaG93VXNhZ2UgfTtcbiIsICJpbXBvcnQgeyBkZWZpbmVDb21tYW5kLCBydW5NYWluLCBwYXJzZUFyZ3MgfSBmcm9tIFwiY2l0dHlcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGV6U3Bhd24gZnJvbSBcIkBqc2RldnRvb2xzL2V6LXNwYXduXCI7XG4vLyBpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHsgaGFzaCB9IGZyb20gXCJvaGFzaFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9hY3Rpb25cIjtcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IGdldFBhY2thZ2VNYW5pZmVzdCB9IGZyb20gXCJxdWVyeS1yZWdpc3RyeVwiO1xuaW1wb3J0IHsgZXh0cmFjdE93bmVyQW5kUmVwbywgZXh0cmFjdFJlcG9zaXRvcnkgfSBmcm9tIFwiQHBrZy1wci1uZXcvdXRpbHNcIjtcbmltcG9ydCBcIi4vZW52aXJvbm1lbnRzXCI7XG5pbXBvcnQgcGtnIGZyb20gXCIuL3BhY2thZ2UuanNvblwiIHdpdGggeyB0eXBlOiBcImpzb25cIiB9O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIHZhciBBUElfVVJMOiBzdHJpbmc7XG59XG5cbmNvbnN0IHB1Ymxpc2hVcmwgPSBuZXcgVVJMKFwiL3B1Ymxpc2hcIiwgQVBJX1VSTCk7XG5cbmlmICghcHJvY2Vzcy5lbnYuVEVTVCAmJiBwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OUyAhPT0gXCJ0cnVlXCIpIHtcbiAgY29uc29sZS5lcnJvcihcIkNvbnRpbnVvdXMgUmVsZWFzZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIEdpdGh1YiBBY3Rpb25zLlwiKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3Qgb2N0b2tpdCA9IG5ldyBPY3Rva2l0KCk7XG5cbmNvbnN0IHtcbiAgR0lUSFVCX1NFUlZFUl9VUkwsXG4gIEdJVEhVQl9SRVBPU0lUT1JZLFxuICBHSVRIVUJfUlVOX0lELFxuICBHSVRIVUJfUlVOX0FUVEVNUFQsXG4gIEdJVEhVQl9BQ1RPUl9JRCxcbiAgR0lUSFVCX1NIQSxcbn0gPSBwcm9jZXNzLmVudjtcblxuY29uc3QgW293bmVyLCByZXBvXSA9IEdJVEhVQl9SRVBPU0lUT1JZLnNwbGl0KFwiL1wiKTtcblxuY29uc3QgY29tbWl0ID0gYXdhaXQgb2N0b2tpdC5naXQuZ2V0Q29tbWl0KHtcbiAgb3duZXIsXG4gIHJlcG8sXG4gIGNvbW1pdF9zaGE6IEdJVEhVQl9TSEEsXG59KTtcblxuY29uc3QgY29tbWl0VGltZXN0YW1wID0gRGF0ZS5wYXJzZShjb21taXQuZGF0YS5jb21taXR0ZXIuZGF0ZSk7XG5cbi8vIE5vdGU6IElmIHlvdSBuZWVkIHRvIHVzZSBhIHdvcmtmbG93IHJ1bidzIFVSTCBmcm9tIHdpdGhpbiBhIGpvYiwgeW91IGNhbiBjb21iaW5lIHRoZXNlIHZhcmlhYmxlczogJEdJVEhVQl9TRVJWRVJfVVJMLyRHSVRIVUJfUkVQT1NJVE9SWS9hY3Rpb25zL3J1bnMvJEdJVEhVQl9SVU5fSURcbmNvbnN0IHVybCA9IGAke0dJVEhVQl9TRVJWRVJfVVJMfS8ke293bmVyfS8ke3JlcG99L2FjdGlvbnMvcnVucy8ke0dJVEhVQl9SVU5fSUR9YDtcblxuY29uc3QgbWV0YWRhdGEgPSB7XG4gIHVybCxcbiAgYXR0ZW1wdDogTnVtYmVyKEdJVEhVQl9SVU5fQVRURU1QVCksXG4gIGFjdG9yOiBOdW1iZXIoR0lUSFVCX0FDVE9SX0lEKSxcbn07XG5cbmNvbnN0IGtleSA9IGhhc2gobWV0YWRhdGEpO1xuXG5jb25zdCBtYWluID0gZGVmaW5lQ29tbWFuZCh7XG4gIG1ldGE6IHtcbiAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgICBuYW1lOiBcInN0YWNrYmxpdHpcIixcbiAgICBkZXNjcmlwdGlvbjogXCJBIENMSSBmb3IgcGtnLnByLm5ldyAoQ29udGludW91cyBSZWxlYXNlcylcIixcbiAgfSxcbiAgc3ViQ29tbWFuZHM6IHtcbiAgICBwdWJsaXNoOiAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgY29tcGFjdDoge1xuICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgXCJjb21wYWN0IHVybHMuIFRoZSBzaG9ydGVzdCBmb3JtIG9mIHVybHMgbGlrZSBwa2cucHIubmV3L3RpbnliZW5jaEBhODMyYTU1KVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJ1bjogYXN5bmMgKHsgYXJncyB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29tcGFjdCA9ICEhYXJncy5jb21wYWN0O1xuXG4gICAgICAgICAgY29uc3QgcGF0aHMgPSAoYXJncy5fLmxlbmd0aCA/IGFyZ3MuXyA6IFtcIi5cIl0pLm1hcCgocCkgPT5cbiAgICAgICAgICAgIHBhdGgucmVzb2x2ZShwKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZGVwczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgICAgICAgICBjb25zdCBwSnNvbkNvbnRlbnQ6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBwSnNvblBhdGggPSBwYXRoLnJlc29sdmUocCwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IGF3YWl0IGltcG9ydFBhY2thZ2VKc29uKHBKc29uUGF0aCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wYWN0KSB7XG4gICAgICAgICAgICAgIGF3YWl0IHZlcmlmeUNvbXBhY3RNb2RlKG5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZXBzLnNldChcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgbmV3IFVSTChcbiAgICAgICAgICAgICAgICBgLyR7b3duZXJ9LyR7cmVwb30vJHtuYW1lfUAke0dJVEhVQl9TSEEuc3Vic3RyaW5nKDAsIDcpfWAsXG4gICAgICAgICAgICAgICAgQVBJX1VSTCxcbiAgICAgICAgICAgICAgKS5ocmVmLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBwSnNvblBhdGggPSBwYXRoLnJlc29sdmUocCwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocEpzb25QYXRoLCBcInV0Zi04XCIpO1xuICAgICAgICAgICAgcEpzb25Db250ZW50LnNldChwSnNvblBhdGgsIGNvbnRlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBwSnNvbiA9IGF3YWl0IGltcG9ydFBhY2thZ2VKc29uKHBKc29uUGF0aCk7XG4gICAgICAgICAgICBoaWphY2tEZXBzKGRlcHMsIHBKc29uLmRlcGVuZGVuY2llcyk7XG4gICAgICAgICAgICBoaWphY2tEZXBzKGRlcHMsIHBKc29uLmRldkRlcGVuZGVuY2llcyk7XG4gICAgICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUocEpzb25QYXRoLCBKU09OLnN0cmluZ2lmeShwSnNvbikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBwYXRocykge1xuICAgICAgICAgICAgY29uc3QgcEpzb25QYXRoID0gcGF0aC5yZXNvbHZlKHAsIFwicGFja2FnZS5qc29uXCIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnRQYWNrYWdlSnNvbihwSnNvblBhdGgpO1xuICAgICAgICAgICAgICBhd2FpdCBlelNwYXduLmFzeW5jKFwibnBtIHBhY2tcIiwgeyBzdGRpbzogXCJpbmhlcml0XCIsIGN3ZDogcCB9KTtcblxuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke25hbWV9LSR7dmVyc2lvbn0udGd6YDtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgucmVzb2x2ZShwLCBmaWxlTmFtZSkpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZmlsZV0sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIGJsb2IsIGZpbGVOYW1lKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwSnNvblBhdGgsIHBKc29uQ29udGVudC5nZXQocEpzb25QYXRoKSEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHB1Ymxpc2hVcmwsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwic2ItY29tcGFjdFwiOiBgJHtjb21wYWN0fWAsXG4gICAgICAgICAgICAgIFwic2Ita2V5XCI6IGtleSxcbiAgICAgICAgICAgICAgXCJzYi1jb21taXQtdGltZXN0YW1wXCI6IGNvbW1pdFRpbWVzdGFtcC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGxhdGVyUmVzID0gYXdhaXQgcmVzLmNsb25lKCkuanNvbigpO1xuICAgICAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgICAgIHJlcy5zdGF0dXMsXG4gICAgICAgICAgICAyMDAsXG4gICAgICAgICAgICBgcHVibGlzaGluZyBmYWlsZWQ6ICR7YXdhaXQgcmVzLnRleHQoKX1gLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBcdTI2QTFcdUZFMEYgWW91ciBucG0gcGFja2FnZXMgYXJlIHB1Ymxpc2hlZC5cbiAgICAgICAgICAgICR7Wy4uLmZvcm1EYXRhLmtleXMoKV0ubWFwKChuYW1lLCBpKSA9PiBgJHtuYW1lfTogXFxgbnBtIGkgJHtsYXRlclJlcy51cmxzW2ldfVxcYGApLmpvaW4oXCJcXG5cIil9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIGxpbms6ICgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGE6IHt9LFxuICAgICAgICBydW46ICgpID0+IHt9LFxuICAgICAgfTtcbiAgICB9LFxuICB9LFxufSk7XG5cbnJ1bk1haW4obWFpbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGltcG9ydFBhY2thZ2VKc29uKHA6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICBjb25zdCB7IGRlZmF1bHQ6IG9iaiB9ID0gYXdhaXQgaW1wb3J0KHBhdGhUb0ZpbGVVUkwocCkuaHJlZiwge1xuICAgIHdpdGg6IHsgdHlwZTogXCJqc29uXCIgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaGlqYWNrRGVwcyhcbiAgbmV3RGVwczogTWFwPHN0cmluZywgc3RyaW5nPixcbiAgb2xkRGVwcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4pIHtcbiAgaWYgKCFvbGREZXBzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAoY29uc3QgW25ld0RlcCwgdXJsXSBvZiBuZXdEZXBzKSB7XG4gICAgaWYgKG5ld0RlcCBpbiBvbGREZXBzKSB7XG4gICAgICBvbGREZXBzW25ld0RlcF0gPSB1cmw7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUNvbXBhY3RNb2RlKHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgYHBrZy1wci1uZXcgY2Fubm90IHJlc29sdmUgJHtwYWNrYWdlTmFtZX0gZnJvbSBucG0uIC0tY29tcGFjdCBmbGFnIGRlcGVuZHMgb24gdGhlIHBhY2thZ2UgYmVpbmcgYXZhaWxhYmxlIGluIG5wbS5cbk1ha2Ugc3VyZSB0byBoYXZlIHlvdXIgcGFja2FnZSBvbiBucG0gZmlyc3Qgb3IgY29uZmlndXJlIHRoZSAncmVwb3NpdG9yeScgZmllbGQgaW4geW91ciBwYWNrYWdlLmpzb24gcHJvcGVybHkuYCxcbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IGdldFBhY2thZ2VNYW5pZmVzdChwYWNrYWdlTmFtZSk7XG5cbiAgICBjb25zdCByZXBvc2l0b3J5ID0gZXh0cmFjdFJlcG9zaXRvcnkobWFuaWZlc3QpO1xuICAgIGlmICghcmVwb3NpdG9yeSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSBleHRyYWN0T3duZXJBbmRSZXBvKHJlcG9zaXRvcnkpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiIsICJjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5mcmVlemUoe1xuICBpZ25vcmVVbmtub3duOiBmYWxzZSxcbiAgcmVzcGVjdFR5cGU6IGZhbHNlLFxuICByZXNwZWN0RnVuY3Rpb25OYW1lczogZmFsc2UsXG4gIHJlc3BlY3RGdW5jdGlvblByb3BlcnRpZXM6IGZhbHNlLFxuICB1bm9yZGVyZWRPYmplY3RzOiB0cnVlLFxuICB1bm9yZGVyZWRBcnJheXM6IGZhbHNlLFxuICB1bm9yZGVyZWRTZXRzOiBmYWxzZSxcbiAgZXhjbHVkZUtleXM6IHZvaWQgMCxcbiAgZXhjbHVkZVZhbHVlczogdm9pZCAwLFxuICByZXBsYWNlcjogdm9pZCAwXG59KTtcbmZ1bmN0aW9uIG9iamVjdEhhc2gob2JqZWN0LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHsgLi4uZGVmYXVsdHMsIC4uLm9wdGlvbnMgfTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHM7XG4gIH1cbiAgY29uc3QgaGFzaGVyID0gY3JlYXRlSGFzaGVyKG9wdGlvbnMpO1xuICBoYXNoZXIuZGlzcGF0Y2gob2JqZWN0KTtcbiAgcmV0dXJuIGhhc2hlci50b1N0cmluZygpO1xufVxuY29uc3QgZGVmYXVsdFByb3RvdHlwZXNLZXlzID0gT2JqZWN0LmZyZWV6ZShbXG4gIFwicHJvdG90eXBlXCIsXG4gIFwiX19wcm90b19fXCIsXG4gIFwiY29uc3RydWN0b3JcIlxuXSk7XG5mdW5jdGlvbiBjcmVhdGVIYXNoZXIob3B0aW9ucykge1xuICBsZXQgYnVmZiA9IFwiXCI7XG4gIGxldCBjb250ZXh0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qgd3JpdGUgPSAoc3RyKSA9PiB7XG4gICAgYnVmZiArPSBzdHI7XG4gIH07XG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYnVmZjtcbiAgICB9LFxuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9LFxuICAgIGRpc3BhdGNoKHZhbHVlKSB7XG4gICAgICBpZiAob3B0aW9ucy5yZXBsYWNlcikge1xuICAgICAgICB2YWx1ZSA9IG9wdGlvbnMucmVwbGFjZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IHZhbHVlID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsdWU7XG4gICAgICByZXR1cm4gdGhpc1t0eXBlXSh2YWx1ZSk7XG4gICAgfSxcbiAgICBvYmplY3Qob2JqZWN0KSB7XG4gICAgICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QudG9KU09OID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0KG9iamVjdC50b0pTT04oKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBvYmpTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcbiAgICAgIGxldCBvYmpUeXBlID0gXCJcIjtcbiAgICAgIGNvbnN0IG9iamVjdExlbmd0aCA9IG9ialN0cmluZy5sZW5ndGg7XG4gICAgICBpZiAob2JqZWN0TGVuZ3RoIDwgMTApIHtcbiAgICAgICAgb2JqVHlwZSA9IFwidW5rbm93bjpbXCIgKyBvYmpTdHJpbmcgKyBcIl1cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialR5cGUgPSBvYmpTdHJpbmcuc2xpY2UoOCwgb2JqZWN0TGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICBvYmpUeXBlID0gb2JqVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgbGV0IG9iamVjdE51bWJlciA9IG51bGw7XG4gICAgICBpZiAoKG9iamVjdE51bWJlciA9IGNvbnRleHQuZ2V0KG9iamVjdCkpID09PSB2b2lkIDApIHtcbiAgICAgICAgY29udGV4dC5zZXQob2JqZWN0LCBjb250ZXh0LnNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goXCJbQ0lSQ1VMQVI6XCIgKyBvYmplY3ROdW1iZXIgKyBcIl1cIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBCdWZmZXIuaXNCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICAgICAgd3JpdGUoXCJidWZmZXI6XCIpO1xuICAgICAgICByZXR1cm4gd3JpdGUob2JqZWN0LnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICB9XG4gICAgICBpZiAob2JqVHlwZSAhPT0gXCJvYmplY3RcIiAmJiBvYmpUeXBlICE9PSBcImZ1bmN0aW9uXCIgJiYgb2JqVHlwZSAhPT0gXCJhc3luY2Z1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHRoaXNbb2JqVHlwZV0pIHtcbiAgICAgICAgICB0aGlzW29ialR5cGVdKG9iamVjdCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuaWdub3JlVW5rbm93bikge1xuICAgICAgICAgIHRoaXMudW5rb3duKG9iamVjdCwgb2JqVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcbiAgICAgICAgaWYgKG9wdGlvbnMudW5vcmRlcmVkT2JqZWN0cykge1xuICAgICAgICAgIGtleXMgPSBrZXlzLnNvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXh0cmFLZXlzID0gW107XG4gICAgICAgIGlmIChvcHRpb25zLnJlc3BlY3RUeXBlICE9PSBmYWxzZSAmJiAhaXNOYXRpdmVGdW5jdGlvbihvYmplY3QpKSB7XG4gICAgICAgICAgZXh0cmFLZXlzID0gZGVmYXVsdFByb3RvdHlwZXNLZXlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4Y2x1ZGVLZXlzKSB7XG4gICAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhb3B0aW9ucy5leGNsdWRlS2V5cyhrZXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGV4dHJhS2V5cyA9IGV4dHJhS2V5cy5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFvcHRpb25zLmV4Y2x1ZGVLZXlzKGtleSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGUoXCJvYmplY3Q6XCIgKyAoa2V5cy5sZW5ndGggKyBleHRyYUtleXMubGVuZ3RoKSArIFwiOlwiKTtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hGb3JLZXkgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaChrZXkpO1xuICAgICAgICAgIHdyaXRlKFwiOlwiKTtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZXhjbHVkZVZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChvYmplY3Rba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdyaXRlKFwiLFwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgIGRpc3BhdGNoRm9yS2V5KGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXh0cmFLZXlzKSB7XG4gICAgICAgICAgZGlzcGF0Y2hGb3JLZXkoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYXJyYXkoYXJyLCB1bm9yZGVyZWQpIHtcbiAgICAgIHVub3JkZXJlZCA9IHVub3JkZXJlZCA9PT0gdm9pZCAwID8gb3B0aW9ucy51bm9yZGVyZWRBcnJheXMgIT09IGZhbHNlIDogdW5vcmRlcmVkO1xuICAgICAgd3JpdGUoXCJhcnJheTpcIiArIGFyci5sZW5ndGggKyBcIjpcIik7XG4gICAgICBpZiAoIXVub3JkZXJlZCB8fCBhcnIubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBhcnIpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZXh0QWRkaXRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBhcnIubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoZXIgPSBjcmVhdGVIYXNoZXIob3B0aW9ucyk7XG4gICAgICAgIGhhc2hlci5kaXNwYXRjaChlbnRyeSk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhhc2hlci5nZXRDb250ZXh0KCkpIHtcbiAgICAgICAgICBjb250ZXh0QWRkaXRpb25zLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzaGVyLnRvU3RyaW5nKCk7XG4gICAgICB9KTtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0QWRkaXRpb25zO1xuICAgICAgZW50cmllcy5zb3J0KCk7XG4gICAgICByZXR1cm4gdGhpcy5hcnJheShlbnRyaWVzLCBmYWxzZSk7XG4gICAgfSxcbiAgICBkYXRlKGRhdGUpIHtcbiAgICAgIHJldHVybiB3cml0ZShcImRhdGU6XCIgKyBkYXRlLnRvSlNPTigpKTtcbiAgICB9LFxuICAgIHN5bWJvbChzeW0pIHtcbiAgICAgIHJldHVybiB3cml0ZShcInN5bWJvbDpcIiArIHN5bS50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIHVua293bih2YWx1ZSwgdHlwZSkge1xuICAgICAgd3JpdGUodHlwZSk7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdyaXRlKFwiOlwiKTtcbiAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuZW50cmllcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFycmF5KFxuICAgICAgICAgIEFycmF5LmZyb20odmFsdWUuZW50cmllcygpKSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICAgLyogb3JkZXJlZCAqL1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXJyb3IoZXJyKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJlcnJvcjpcIiArIGVyci50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIGJvb2xlYW4oYm9vbCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiYm9vbDpcIiArIGJvb2wpO1xuICAgIH0sXG4gICAgc3RyaW5nKHN0cmluZykge1xuICAgICAgd3JpdGUoXCJzdHJpbmc6XCIgKyBzdHJpbmcubGVuZ3RoICsgXCI6XCIpO1xuICAgICAgd3JpdGUoc3RyaW5nKTtcbiAgICB9LFxuICAgIGZ1bmN0aW9uKGZuKSB7XG4gICAgICB3cml0ZShcImZuOlwiKTtcbiAgICAgIGlmIChpc05hdGl2ZUZ1bmN0aW9uKGZuKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKFwiW25hdGl2ZV1cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKGZuLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucmVzcGVjdEZ1bmN0aW9uTmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goXCJmdW5jdGlvbi1uYW1lOlwiICsgU3RyaW5nKGZuLm5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnJlc3BlY3RGdW5jdGlvblByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5vYmplY3QoZm4pO1xuICAgICAgfVxuICAgIH0sXG4gICAgbnVtYmVyKG51bWJlcikge1xuICAgICAgcmV0dXJuIHdyaXRlKFwibnVtYmVyOlwiICsgbnVtYmVyKTtcbiAgICB9LFxuICAgIHhtbCh4bWwpIHtcbiAgICAgIHJldHVybiB3cml0ZShcInhtbDpcIiArIHhtbC50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIG51bGwoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJOdWxsXCIpO1xuICAgIH0sXG4gICAgdW5kZWZpbmVkKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiVW5kZWZpbmVkXCIpO1xuICAgIH0sXG4gICAgcmVnZXhwKHJlZ2V4KSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJyZWdleDpcIiArIHJlZ2V4LnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgdWludDhhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwidWludDhhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIHVpbnQ4Y2xhbXBlZGFycmF5KGFycikge1xuICAgICAgd3JpdGUoXCJ1aW50OGNsYW1wZWRhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIGludDhhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwiaW50OGFycmF5OlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgdWludDE2YXJyYXkoYXJyKSB7XG4gICAgICB3cml0ZShcInVpbnQxNmFycmF5OlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgaW50MTZhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwiaW50MTZhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIHVpbnQzMmFycmF5KGFycikge1xuICAgICAgd3JpdGUoXCJ1aW50MzJhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIGludDMyYXJyYXkoYXJyKSB7XG4gICAgICB3cml0ZShcImludDMyYXJyYXk6XCIpO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKSk7XG4gICAgfSxcbiAgICBmbG9hdDMyYXJyYXkoYXJyKSB7XG4gICAgICB3cml0ZShcImZsb2F0MzJhcnJheTpcIik7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpKTtcbiAgICB9LFxuICAgIGZsb2F0NjRhcnJheShhcnIpIHtcbiAgICAgIHdyaXRlKFwiZmxvYXQ2NGFycmF5OlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycikpO1xuICAgIH0sXG4gICAgYXJyYXlidWZmZXIoYXJyKSB7XG4gICAgICB3cml0ZShcImFycmF5YnVmZmVyOlwiKTtcbiAgICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKG5ldyBVaW50OEFycmF5KGFycikpO1xuICAgIH0sXG4gICAgdXJsKHVybCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidXJsOlwiICsgdXJsLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgbWFwKG1hcCkge1xuICAgICAgd3JpdGUoXCJtYXA6XCIpO1xuICAgICAgY29uc3QgYXJyID0gWy4uLm1hcF07XG4gICAgICByZXR1cm4gdGhpcy5hcnJheShhcnIsIG9wdGlvbnMudW5vcmRlcmVkU2V0cyAhPT0gZmFsc2UpO1xuICAgIH0sXG4gICAgc2V0KHNldCkge1xuICAgICAgd3JpdGUoXCJzZXQ6XCIpO1xuICAgICAgY29uc3QgYXJyID0gWy4uLnNldF07XG4gICAgICByZXR1cm4gdGhpcy5hcnJheShhcnIsIG9wdGlvbnMudW5vcmRlcmVkU2V0cyAhPT0gZmFsc2UpO1xuICAgIH0sXG4gICAgZmlsZShmaWxlKSB7XG4gICAgICB3cml0ZShcImZpbGU6XCIpO1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2goW2ZpbGUubmFtZSwgZmlsZS5zaXplLCBmaWxlLnR5cGUsIGZpbGUubGFzdE1vZGZpZWRdKTtcbiAgICB9LFxuICAgIGJsb2IoKSB7XG4gICAgICBpZiAob3B0aW9ucy5pZ25vcmVVbmtub3duKSB7XG4gICAgICAgIHJldHVybiB3cml0ZShcIltibG9iXVwiKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0hhc2hpbmcgQmxvYiBvYmplY3RzIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXFxuVXNlIFwib3B0aW9ucy5yZXBsYWNlclwiIG9yIFwib3B0aW9ucy5pZ25vcmVVbmtub3duXCJcXG4nXG4gICAgICApO1xuICAgIH0sXG4gICAgZG9td2luZG93KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiZG9td2luZG93XCIpO1xuICAgIH0sXG4gICAgYmlnaW50KG51bWJlcikge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiYmlnaW50OlwiICsgbnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgLyogTm9kZS5qcyBzdGFuZGFyZCBuYXRpdmUgb2JqZWN0cyAqL1xuICAgIHByb2Nlc3MoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJwcm9jZXNzXCIpO1xuICAgIH0sXG4gICAgdGltZXIoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJ0aW1lclwiKTtcbiAgICB9LFxuICAgIHBpcGUoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJwaXBlXCIpO1xuICAgIH0sXG4gICAgdGNwKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidGNwXCIpO1xuICAgIH0sXG4gICAgdWRwKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidWRwXCIpO1xuICAgIH0sXG4gICAgdHR5KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwidHR5XCIpO1xuICAgIH0sXG4gICAgc3RhdHdhdGNoZXIoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJzdGF0d2F0Y2hlclwiKTtcbiAgICB9LFxuICAgIHNlY3VyZWNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJzZWN1cmVjb250ZXh0XCIpO1xuICAgIH0sXG4gICAgY29ubmVjdGlvbigpIHtcbiAgICAgIHJldHVybiB3cml0ZShcImNvbm5lY3Rpb25cIik7XG4gICAgfSxcbiAgICB6bGliKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiemxpYlwiKTtcbiAgICB9LFxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJjb250ZXh0XCIpO1xuICAgIH0sXG4gICAgbm9kZXNjcmlwdCgpIHtcbiAgICAgIHJldHVybiB3cml0ZShcIm5vZGVzY3JpcHRcIik7XG4gICAgfSxcbiAgICBodHRwcGFyc2VyKCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiaHR0cHBhcnNlclwiKTtcbiAgICB9LFxuICAgIGRhdGF2aWV3KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiZGF0YXZpZXdcIik7XG4gICAgfSxcbiAgICBzaWduYWwoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJzaWduYWxcIik7XG4gICAgfSxcbiAgICBmc2V2ZW50KCkge1xuICAgICAgcmV0dXJuIHdyaXRlKFwiZnNldmVudFwiKTtcbiAgICB9LFxuICAgIHRsc3dyYXAoKSB7XG4gICAgICByZXR1cm4gd3JpdGUoXCJ0bHN3cmFwXCIpO1xuICAgIH1cbiAgfTtcbn1cbmNvbnN0IG5hdGl2ZUZ1bmMgPSBcIltuYXRpdmUgY29kZV0gfVwiO1xuY29uc3QgbmF0aXZlRnVuY0xlbmd0aCA9IG5hdGl2ZUZ1bmMubGVuZ3RoO1xuZnVuY3Rpb24gaXNOYXRpdmVGdW5jdGlvbihmKSB7XG4gIGlmICh0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmKS5zbGljZSgtbmF0aXZlRnVuY0xlbmd0aCkgPT09IG5hdGl2ZUZ1bmM7XG59XG5cbmNsYXNzIFdvcmRBcnJheSB7XG4gIGNvbnN0cnVjdG9yKHdvcmRzLCBzaWdCeXRlcykge1xuICAgIHdvcmRzID0gdGhpcy53b3JkcyA9IHdvcmRzIHx8IFtdO1xuICAgIHRoaXMuc2lnQnl0ZXMgPSBzaWdCeXRlcyA9PT0gdm9pZCAwID8gd29yZHMubGVuZ3RoICogNCA6IHNpZ0J5dGVzO1xuICB9XG4gIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgICByZXR1cm4gKGVuY29kZXIgfHwgSGV4KS5zdHJpbmdpZnkodGhpcyk7XG4gIH1cbiAgY29uY2F0KHdvcmRBcnJheSkge1xuICAgIHRoaXMuY2xhbXAoKTtcbiAgICBpZiAodGhpcy5zaWdCeXRlcyAlIDQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZEFycmF5LnNpZ0J5dGVzOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGhhdEJ5dGUgPSB3b3JkQXJyYXkud29yZHNbaSA+Pj4gMl0gPj4+IDI0IC0gaSAlIDQgKiA4ICYgMjU1O1xuICAgICAgICB0aGlzLndvcmRzW3RoaXMuc2lnQnl0ZXMgKyBpID4+PiAyXSB8PSB0aGF0Qnl0ZSA8PCAyNCAtICh0aGlzLnNpZ0J5dGVzICsgaSkgJSA0ICogODtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3b3JkQXJyYXkuc2lnQnl0ZXM7IGogKz0gNCkge1xuICAgICAgICB0aGlzLndvcmRzW3RoaXMuc2lnQnl0ZXMgKyBqID4+PiAyXSA9IHdvcmRBcnJheS53b3Jkc1tqID4+PiAyXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zaWdCeXRlcyArPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xhbXAoKSB7XG4gICAgdGhpcy53b3Jkc1t0aGlzLnNpZ0J5dGVzID4+PiAyXSAmPSA0Mjk0OTY3Mjk1IDw8IDMyIC0gdGhpcy5zaWdCeXRlcyAlIDQgKiA4O1xuICAgIHRoaXMud29yZHMubGVuZ3RoID0gTWF0aC5jZWlsKHRoaXMuc2lnQnl0ZXMgLyA0KTtcbiAgfVxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IFdvcmRBcnJheShbLi4udGhpcy53b3Jkc10pO1xuICB9XG59XG5jb25zdCBIZXggPSB7XG4gIHN0cmluZ2lmeSh3b3JkQXJyYXkpIHtcbiAgICBjb25zdCBoZXhDaGFycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZEFycmF5LnNpZ0J5dGVzOyBpKyspIHtcbiAgICAgIGNvbnN0IGJpdGUgPSB3b3JkQXJyYXkud29yZHNbaSA+Pj4gMl0gPj4+IDI0IC0gaSAlIDQgKiA4ICYgMjU1O1xuICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSA+Pj4gNCkudG9TdHJpbmcoMTYpLCAoYml0ZSAmIDE1KS50b1N0cmluZygxNikpO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Q2hhcnMuam9pbihcIlwiKTtcbiAgfVxufTtcbmNvbnN0IEJhc2U2NCA9IHtcbiAgc3RyaW5naWZ5KHdvcmRBcnJheSkge1xuICAgIGNvbnN0IGtleVN0ciA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIjtcbiAgICBjb25zdCBiYXNlNjRDaGFycyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZEFycmF5LnNpZ0J5dGVzOyBpICs9IDMpIHtcbiAgICAgIGNvbnN0IGJ5dGUxID0gd29yZEFycmF5LndvcmRzW2kgPj4+IDJdID4+PiAyNCAtIGkgJSA0ICogOCAmIDI1NTtcbiAgICAgIGNvbnN0IGJ5dGUyID0gd29yZEFycmF5LndvcmRzW2kgKyAxID4+PiAyXSA+Pj4gMjQgLSAoaSArIDEpICUgNCAqIDggJiAyNTU7XG4gICAgICBjb25zdCBieXRlMyA9IHdvcmRBcnJheS53b3Jkc1tpICsgMiA+Pj4gMl0gPj4+IDI0IC0gKGkgKyAyKSAlIDQgKiA4ICYgMjU1O1xuICAgICAgY29uc3QgdHJpcGxldCA9IGJ5dGUxIDw8IDE2IHwgYnl0ZTIgPDwgOCB8IGJ5dGUzO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA0ICYmIGkgKiA4ICsgaiAqIDYgPCB3b3JkQXJyYXkuc2lnQnl0ZXMgKiA4OyBqKyspIHtcbiAgICAgICAgYmFzZTY0Q2hhcnMucHVzaChrZXlTdHIuY2hhckF0KHRyaXBsZXQgPj4+IDYgKiAoMyAtIGopICYgNjMpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2U2NENoYXJzLmpvaW4oXCJcIik7XG4gIH1cbn07XG5jb25zdCBMYXRpbjEgPSB7XG4gIHBhcnNlKGxhdGluMVN0cikge1xuICAgIGNvbnN0IGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG4gICAgY29uc3Qgd29yZHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhdGluMVN0ckxlbmd0aDsgaSsrKSB7XG4gICAgICB3b3Jkc1tpID4+PiAyXSB8PSAobGF0aW4xU3RyLmNoYXJDb2RlQXQoaSkgJiAyNTUpIDw8IDI0IC0gaSAlIDQgKiA4O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdvcmRBcnJheSh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcbiAgfVxufTtcbmNvbnN0IFV0ZjggPSB7XG4gIHBhcnNlKHV0ZjhTdHIpIHtcbiAgICByZXR1cm4gTGF0aW4xLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh1dGY4U3RyKSkpO1xuICB9XG59O1xuY2xhc3MgQnVmZmVyZWRCbG9ja0FsZ29yaXRobSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5KCk7XG4gICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG4gICAgdGhpcy5fbWluQnVmZmVyU2l6ZSA9IDA7XG4gICAgdGhpcy5ibG9ja1NpemUgPSA1MTIgLyAzMjtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLl9kYXRhID0gbmV3IFdvcmRBcnJheSgpO1xuICAgIHRoaXMuX25EYXRhQnl0ZXMgPSAwO1xuICB9XG4gIF9hcHBlbmQoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZGF0YSA9IFV0ZjgucGFyc2UoZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGEuY29uY2F0KGRhdGEpO1xuICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9kb1Byb2Nlc3NCbG9jayhfZGF0YVdvcmRzLCBfb2Zmc2V0KSB7XG4gIH1cbiAgX3Byb2Nlc3MoZG9GbHVzaCkge1xuICAgIGxldCBwcm9jZXNzZWRXb3JkcztcbiAgICBsZXQgbkJsb2Nrc1JlYWR5ID0gdGhpcy5fZGF0YS5zaWdCeXRlcyAvICh0aGlzLmJsb2NrU2l6ZSAqIDQpO1xuICAgIGlmIChkb0ZsdXNoKSB7XG4gICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5tYXgoKG5CbG9ja3NSZWFkeSB8IDApIC0gdGhpcy5fbWluQnVmZmVyU2l6ZSwgMCk7XG4gICAgfVxuICAgIGNvbnN0IG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogdGhpcy5ibG9ja1NpemU7XG4gICAgY29uc3QgbkJ5dGVzUmVhZHkgPSBNYXRoLm1pbihuV29yZHNSZWFkeSAqIDQsIHRoaXMuX2RhdGEuc2lnQnl0ZXMpO1xuICAgIGlmIChuV29yZHNSZWFkeSkge1xuICAgICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbldvcmRzUmVhZHk7IG9mZnNldCArPSB0aGlzLmJsb2NrU2l6ZSkge1xuICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayh0aGlzLl9kYXRhLndvcmRzLCBvZmZzZXQpO1xuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkV29yZHMgPSB0aGlzLl9kYXRhLndvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG4gICAgICB0aGlzLl9kYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdvcmRBcnJheShwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuICB9XG59XG5jbGFzcyBIYXNoZXIgZXh0ZW5kcyBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtIHtcbiAgdXBkYXRlKG1lc3NhZ2VVcGRhdGUpIHtcbiAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG4gICAgdGhpcy5fcHJvY2VzcygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpIHtcbiAgICBpZiAobWVzc2FnZVVwZGF0ZSkge1xuICAgICAgdGhpcy5fYXBwZW5kKG1lc3NhZ2VVcGRhdGUpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBIID0gW1xuICAxNzc5MDMzNzAzLFxuICAtMTE1MDgzMzAxOSxcbiAgMTAxMzkwNDI0MixcbiAgLTE1MjE0ODY1MzQsXG4gIDEzNTk4OTMxMTksXG4gIC0xNjk0MTQ0MzcyLFxuICA1Mjg3MzQ2MzUsXG4gIDE1NDE0NTkyMjVcbl07XG5jb25zdCBLID0gW1xuICAxMTE2MzUyNDA4LFxuICAxODk5NDQ3NDQxLFxuICAtMTI0NTY0MzgyNSxcbiAgLTM3Mzk1NzcyMyxcbiAgOTYxOTg3MTYzLFxuICAxNTA4OTcwOTkzLFxuICAtMTg0MTMzMTU0OCxcbiAgLTE0MjQyMDQwNzUsXG4gIC02NzA1ODYyMTYsXG4gIDMxMDU5ODQwMSxcbiAgNjA3MjI1Mjc4LFxuICAxNDI2ODgxOTg3LFxuICAxOTI1MDc4Mzg4LFxuICAtMjEzMjg4OTA5MCxcbiAgLTE2ODAwNzkxOTMsXG4gIC0xMDQ2NzQ0NzE2LFxuICAtNDU5NTc2ODk1LFxuICAtMjcyNzQyNTIyLFxuICAyNjQzNDcwNzgsXG4gIDYwNDgwNzYyOCxcbiAgNzcwMjU1OTgzLFxuICAxMjQ5MTUwMTIyLFxuICAxNTU1MDgxNjkyLFxuICAxOTk2MDY0OTg2LFxuICAtMTc0MDc0NjQxNCxcbiAgLTE0NzMxMzI5NDcsXG4gIC0xMzQxOTcwNDg4LFxuICAtMTA4NDY1MzYyNSxcbiAgLTk1ODM5NTQwNSxcbiAgLTcxMDQzODU4NSxcbiAgMTEzOTI2OTkzLFxuICAzMzgyNDE4OTUsXG4gIDY2NjMwNzIwNSxcbiAgNzczNTI5OTEyLFxuICAxMjk0NzU3MzcyLFxuICAxMzk2MTgyMjkxLFxuICAxNjk1MTgzNzAwLFxuICAxOTg2NjYxMDUxLFxuICAtMjExNzk0MDk0NixcbiAgLTE4MzgwMTEyNTksXG4gIC0xNTY0NDgxMzc1LFxuICAtMTQ3NDY2NDg4NSxcbiAgLTEwMzUyMzY0OTYsXG4gIC05NDkyMDI1MjUsXG4gIC03Nzg5MDE0NzksXG4gIC02OTQ2MTQ0OTIsXG4gIC0yMDAzOTUzODcsXG4gIDI3NTQyMzM0NCxcbiAgNDMwMjI3NzM0LFxuICA1MDY5NDg2MTYsXG4gIDY1OTA2MDU1NixcbiAgODgzOTk3ODc3LFxuICA5NTgxMzk1NzEsXG4gIDEzMjI4MjIyMTgsXG4gIDE1MzcwMDIwNjMsXG4gIDE3NDc4NzM3NzksXG4gIDE5NTU1NjIyMjIsXG4gIDIwMjQxMDQ4MTUsXG4gIC0yMDY3MjM2ODQ0LFxuICAtMTkzMzExNDg3MixcbiAgLTE4NjY1MzA4MjIsXG4gIC0xNTM4MjMzMTA5LFxuICAtMTA5MDkzNTgxNyxcbiAgLTk2NTY0MTk5OFxuXTtcbmNvbnN0IFcgPSBbXTtcbmNsYXNzIFNIQTI1NiBleHRlbmRzIEhhc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkoWy4uLkhdKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICBzdXBlci5yZXNldCgpO1xuICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5KFsuLi5IXSk7XG4gIH1cbiAgX2RvUHJvY2Vzc0Jsb2NrKE0sIG9mZnNldCkge1xuICAgIGNvbnN0IEgyID0gdGhpcy5faGFzaC53b3JkcztcbiAgICBsZXQgYSA9IEgyWzBdO1xuICAgIGxldCBiID0gSDJbMV07XG4gICAgbGV0IGMgPSBIMlsyXTtcbiAgICBsZXQgZCA9IEgyWzNdO1xuICAgIGxldCBlID0gSDJbNF07XG4gICAgbGV0IGYgPSBIMls1XTtcbiAgICBsZXQgZyA9IEgyWzZdO1xuICAgIGxldCBoID0gSDJbN107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG4gICAgICBpZiAoaSA8IDE2KSB7XG4gICAgICAgIFdbaV0gPSBNW29mZnNldCArIGldIHwgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdhbW1hMHggPSBXW2kgLSAxNV07XG4gICAgICAgIGNvbnN0IGdhbW1hMCA9IChnYW1tYTB4IDw8IDI1IHwgZ2FtbWEweCA+Pj4gNykgXiAoZ2FtbWEweCA8PCAxNCB8IGdhbW1hMHggPj4+IDE4KSBeIGdhbW1hMHggPj4+IDM7XG4gICAgICAgIGNvbnN0IGdhbW1hMXggPSBXW2kgLSAyXTtcbiAgICAgICAgY29uc3QgZ2FtbWExID0gKGdhbW1hMXggPDwgMTUgfCBnYW1tYTF4ID4+PiAxNykgXiAoZ2FtbWExeCA8PCAxMyB8IGdhbW1hMXggPj4+IDE5KSBeIGdhbW1hMXggPj4+IDEwO1xuICAgICAgICBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl07XG4gICAgICB9XG4gICAgICBjb25zdCBjaCA9IGUgJiBmIF4gfmUgJiBnO1xuICAgICAgY29uc3QgbWFqID0gYSAmIGIgXiBhICYgYyBeIGIgJiBjO1xuICAgICAgY29uc3Qgc2lnbWEwID0gKGEgPDwgMzAgfCBhID4+PiAyKSBeIChhIDw8IDE5IHwgYSA+Pj4gMTMpIF4gKGEgPDwgMTAgfCBhID4+PiAyMik7XG4gICAgICBjb25zdCBzaWdtYTEgPSAoZSA8PCAyNiB8IGUgPj4+IDYpIF4gKGUgPDwgMjEgfCBlID4+PiAxMSkgXiAoZSA8PCA3IHwgZSA+Pj4gMjUpO1xuICAgICAgY29uc3QgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcbiAgICAgIGNvbnN0IHQyID0gc2lnbWEwICsgbWFqO1xuICAgICAgaCA9IGc7XG4gICAgICBnID0gZjtcbiAgICAgIGYgPSBlO1xuICAgICAgZSA9IGQgKyB0MSB8IDA7XG4gICAgICBkID0gYztcbiAgICAgIGMgPSBiO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gdDEgKyB0MiB8IDA7XG4gICAgfVxuICAgIEgyWzBdID0gSDJbMF0gKyBhIHwgMDtcbiAgICBIMlsxXSA9IEgyWzFdICsgYiB8IDA7XG4gICAgSDJbMl0gPSBIMlsyXSArIGMgfCAwO1xuICAgIEgyWzNdID0gSDJbM10gKyBkIHwgMDtcbiAgICBIMls0XSA9IEgyWzRdICsgZSB8IDA7XG4gICAgSDJbNV0gPSBIMls1XSArIGYgfCAwO1xuICAgIEgyWzZdID0gSDJbNl0gKyBnIHwgMDtcbiAgICBIMls3XSA9IEgyWzddICsgaCB8IDA7XG4gIH1cbiAgZmluYWxpemUobWVzc2FnZVVwZGF0ZSkge1xuICAgIHN1cGVyLmZpbmFsaXplKG1lc3NhZ2VVcGRhdGUpO1xuICAgIGNvbnN0IG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcbiAgICBjb25zdCBuQml0c0xlZnQgPSB0aGlzLl9kYXRhLnNpZ0J5dGVzICogODtcbiAgICB0aGlzLl9kYXRhLndvcmRzW25CaXRzTGVmdCA+Pj4gNV0gfD0gMTI4IDw8IDI0IC0gbkJpdHNMZWZ0ICUgMzI7XG4gICAgdGhpcy5fZGF0YS53b3Jkc1sobkJpdHNMZWZ0ICsgNjQgPj4+IDkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKFxuICAgICAgbkJpdHNUb3RhbCAvIDQyOTQ5NjcyOTZcbiAgICApO1xuICAgIHRoaXMuX2RhdGEud29yZHNbKG5CaXRzTGVmdCArIDY0ID4+PiA5IDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcbiAgICB0aGlzLl9kYXRhLnNpZ0J5dGVzID0gdGhpcy5fZGF0YS53b3Jkcy5sZW5ndGggKiA0O1xuICAgIHRoaXMuX3Byb2Nlc3MoKTtcbiAgICByZXR1cm4gdGhpcy5faGFzaDtcbiAgfVxufVxuZnVuY3Rpb24gc2hhMjU2KG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBTSEEyNTYoKS5maW5hbGl6ZShtZXNzYWdlKS50b1N0cmluZygpO1xufVxuZnVuY3Rpb24gc2hhMjU2YmFzZTY0KG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBTSEEyNTYoKS5maW5hbGl6ZShtZXNzYWdlKS50b1N0cmluZyhCYXNlNjQpO1xufVxuXG5mdW5jdGlvbiBoYXNoKG9iamVjdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGhhc2hlZCA9IHR5cGVvZiBvYmplY3QgPT09IFwic3RyaW5nXCIgPyBvYmplY3QgOiBvYmplY3RIYXNoKG9iamVjdCwgb3B0aW9ucyk7XG4gIHJldHVybiBzaGEyNTZiYXNlNjQoaGFzaGVkKS5zbGljZSgwLCAxMCk7XG59XG5cbmZ1bmN0aW9uIG11cm11ckhhc2goa2V5LCBzZWVkID0gMCkge1xuICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGtleSA9IGNyZWF0ZUJ1ZmZlcihrZXkpO1xuICB9XG4gIGxldCBpID0gMDtcbiAgbGV0IGgxID0gc2VlZDtcbiAgbGV0IGsxO1xuICBsZXQgaDFiO1xuICBjb25zdCByZW1haW5kZXIgPSBrZXkubGVuZ3RoICYgMztcbiAgY29uc3QgYnl0ZXMgPSBrZXkubGVuZ3RoIC0gcmVtYWluZGVyO1xuICBjb25zdCBjMSA9IDM0MzI5MTgzNTM7XG4gIGNvbnN0IGMyID0gNDYxODQ1OTA3O1xuICB3aGlsZSAoaSA8IGJ5dGVzKSB7XG4gICAgazEgPSBrZXlbaV0gJiAyNTUgfCAoa2V5WysraV0gJiAyNTUpIDw8IDggfCAoa2V5WysraV0gJiAyNTUpIDw8IDE2IHwgKGtleVsrK2ldICYgMjU1KSA8PCAyNDtcbiAgICArK2k7XG4gICAgazEgPSAoazEgJiA2NTUzNSkgKiBjMSArICgoKGsxID4+PiAxNikgKiBjMSAmIDY1NTM1KSA8PCAxNikgJiA0Mjk0OTY3Mjk1O1xuICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgazEgPSAoazEgJiA2NTUzNSkgKiBjMiArICgoKGsxID4+PiAxNikgKiBjMiAmIDY1NTM1KSA8PCAxNikgJiA0Mjk0OTY3Mjk1O1xuICAgIGgxIF49IGsxO1xuICAgIGgxID0gaDEgPDwgMTMgfCBoMSA+Pj4gMTk7XG4gICAgaDFiID0gKGgxICYgNjU1MzUpICogNSArICgoKGgxID4+PiAxNikgKiA1ICYgNjU1MzUpIDw8IDE2KSAmIDQyOTQ5NjcyOTU7XG4gICAgaDEgPSAoaDFiICYgNjU1MzUpICsgMjc0OTIgKyAoKChoMWIgPj4+IDE2KSArIDU4OTY0ICYgNjU1MzUpIDw8IDE2KTtcbiAgfVxuICBrMSA9IDA7XG4gIHN3aXRjaCAocmVtYWluZGVyKSB7XG4gICAgY2FzZSAzOiB7XG4gICAgICBrMSBePSAoa2V5W2kgKyAyXSAmIDI1NSkgPDwgMTY7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICBrMSBePSAoa2V5W2kgKyAxXSAmIDI1NSkgPDwgODtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDE6IHtcbiAgICAgIGsxIF49IGtleVtpXSAmIDI1NTtcbiAgICAgIGsxID0gKGsxICYgNjU1MzUpICogYzEgKyAoKChrMSA+Pj4gMTYpICogYzEgJiA2NTUzNSkgPDwgMTYpICYgNDI5NDk2NzI5NTtcbiAgICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgICBrMSA9IChrMSAmIDY1NTM1KSAqIGMyICsgKCgoazEgPj4+IDE2KSAqIGMyICYgNjU1MzUpIDw8IDE2KSAmIDQyOTQ5NjcyOTU7XG4gICAgICBoMSBePSBrMTtcbiAgICB9XG4gIH1cbiAgaDEgXj0ga2V5Lmxlbmd0aDtcbiAgaDEgXj0gaDEgPj4+IDE2O1xuICBoMSA9IChoMSAmIDY1NTM1KSAqIDIyNDY4MjI1MDcgKyAoKChoMSA+Pj4gMTYpICogMjI0NjgyMjUwNyAmIDY1NTM1KSA8PCAxNikgJiA0Mjk0OTY3Mjk1O1xuICBoMSBePSBoMSA+Pj4gMTM7XG4gIGgxID0gKGgxICYgNjU1MzUpICogMzI2NjQ4OTkwOSArICgoKGgxID4+PiAxNikgKiAzMjY2NDg5OTA5ICYgNjU1MzUpIDw8IDE2KSAmIDQyOTQ5NjcyOTU7XG4gIGgxIF49IGgxID4+PiAxNjtcbiAgcmV0dXJuIGgxID4+PiAwO1xufVxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyKHZhbCkge1xuICByZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbCk7XG59XG5cbmZ1bmN0aW9uIGlzRXF1YWwob2JqZWN0MSwgb2JqZWN0MiwgaGFzaE9wdGlvbnMgPSB7fSkge1xuICBpZiAob2JqZWN0MSA9PT0gb2JqZWN0Mikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChvYmplY3RIYXNoKG9iamVjdDEsIGhhc2hPcHRpb25zKSA9PT0gb2JqZWN0SGFzaChvYmplY3QyLCBoYXNoT3B0aW9ucykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGRpZmYob2JqMSwgb2JqMiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGgxID0gX3RvSGFzaGVkT2JqZWN0KG9iajEsIG9wdHMpO1xuICBjb25zdCBoMiA9IF90b0hhc2hlZE9iamVjdChvYmoyLCBvcHRzKTtcbiAgcmV0dXJuIF9kaWZmKGgxLCBoMiwgb3B0cyk7XG59XG5mdW5jdGlvbiBfZGlmZihoMSwgaDIsIG9wdHMgPSB7fSkge1xuICBjb25zdCBkaWZmcyA9IFtdO1xuICBjb25zdCBhbGxQcm9wcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtcbiAgICAuLi5PYmplY3Qua2V5cyhoMS5wcm9wcyB8fCB7fSksXG4gICAgLi4uT2JqZWN0LmtleXMoaDIucHJvcHMgfHwge30pXG4gIF0pO1xuICBpZiAoaDEucHJvcHMgJiYgaDIucHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgYWxsUHJvcHMpIHtcbiAgICAgIGNvbnN0IHAxID0gaDEucHJvcHNbcHJvcF07XG4gICAgICBjb25zdCBwMiA9IGgyLnByb3BzW3Byb3BdO1xuICAgICAgaWYgKHAxICYmIHAyKSB7XG4gICAgICAgIGRpZmZzLnB1c2goLi4uX2RpZmYoaDEucHJvcHM/Lltwcm9wXSwgaDIucHJvcHM/Lltwcm9wXSwgb3B0cykpO1xuICAgICAgfSBlbHNlIGlmIChwMSB8fCBwMikge1xuICAgICAgICBkaWZmcy5wdXNoKFxuICAgICAgICAgIG5ldyBEaWZmRW50cnkoKHAyIHx8IHAxKS5rZXksIHAxID8gXCJyZW1vdmVkXCIgOiBcImFkZGVkXCIsIHAyLCBwMSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGFsbFByb3BzLnNpemUgPT09IDAgJiYgaDEuaGFzaCAhPT0gaDIuaGFzaCkge1xuICAgIGRpZmZzLnB1c2gobmV3IERpZmZFbnRyeSgoaDIgfHwgaDEpLmtleSwgXCJjaGFuZ2VkXCIsIGgyLCBoMSkpO1xuICB9XG4gIHJldHVybiBkaWZmcztcbn1cbmZ1bmN0aW9uIF90b0hhc2hlZE9iamVjdChvYmosIG9wdHMsIGtleSA9IFwiXCIpIHtcbiAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG5ldyBEaWZmSGFzaGVkT2JqZWN0KGtleSwgb2JqLCBvYmplY3RIYXNoKG9iaiwgb3B0cykpO1xuICB9XG4gIGNvbnN0IHByb3BzID0ge307XG4gIGNvbnN0IGhhc2hlcyA9IFtdO1xuICBmb3IgKGNvbnN0IF9rZXkgaW4gb2JqKSB7XG4gICAgcHJvcHNbX2tleV0gPSBfdG9IYXNoZWRPYmplY3QoXG4gICAgICBvYmpbX2tleV0sXG4gICAgICBvcHRzLFxuICAgICAga2V5ID8gYCR7a2V5fS4ke19rZXl9YCA6IF9rZXlcbiAgICApO1xuICAgIGhhc2hlcy5wdXNoKHByb3BzW19rZXldLmhhc2gpO1xuICB9XG4gIHJldHVybiBuZXcgRGlmZkhhc2hlZE9iamVjdChrZXksIG9iaiwgYHske2hhc2hlcy5qb2luKFwiOlwiKX19YCwgcHJvcHMpO1xufVxuY2xhc3MgRGlmZkVudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3Ioa2V5LCB0eXBlLCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMubmV3VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLm9sZFZhbHVlID0gb2xkVmFsdWU7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gIH1cbiAgdG9KU09OKCkge1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIFwiYWRkZWRcIjoge1xuICAgICAgICByZXR1cm4gYEFkZGVkICAgXFxgJHt0aGlzLmtleX1cXGBgO1xuICAgICAgfVxuICAgICAgY2FzZSBcInJlbW92ZWRcIjoge1xuICAgICAgICByZXR1cm4gYFJlbW92ZWQgXFxgJHt0aGlzLmtleX1cXGBgO1xuICAgICAgfVxuICAgICAgY2FzZSBcImNoYW5nZWRcIjoge1xuICAgICAgICByZXR1cm4gYENoYW5nZWQgXFxgJHt0aGlzLmtleX1cXGAgZnJvbSBcXGAke3RoaXMub2xkVmFsdWU/LnRvU3RyaW5nKCkgfHwgXCItXCJ9XFxgIHRvIFxcYCR7dGhpcy5uZXdWYWx1ZS50b1N0cmluZygpfVxcYGA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5jbGFzcyBEaWZmSGFzaGVkT2JqZWN0IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3Ioa2V5LCB2YWx1ZSwgaGFzaCwgcHJvcHMpIHtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5oYXNoID0gaGFzaDtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMpIHtcbiAgICAgIHJldHVybiBgeyR7T2JqZWN0LmtleXModGhpcy5wcm9wcykuam9pbihcIixcIil9fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGsgPSB0aGlzLmtleSB8fCBcIi5cIjtcbiAgICBpZiAodGhpcy5wcm9wcykge1xuICAgICAgcmV0dXJuIGAke2t9KHske09iamVjdC5rZXlzKHRoaXMucHJvcHMpLmpvaW4oXCIsXCIpfX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke2t9KCR7dGhpcy52YWx1ZX0pYDtcbiAgfVxufVxuXG5leHBvcnQgeyBkaWZmLCBoYXNoLCBpc0VxdWFsLCBtdXJtdXJIYXNoLCBvYmplY3RIYXNoLCBzaGEyNTYsIHNoYTI1NmJhc2U2NCB9O1xuIiwgInZhciB1dGlsO1xuKGZ1bmN0aW9uICh1dGlsKSB7XG4gICAgdXRpbC5hc3NlcnRFcXVhbCA9ICh2YWwpID0+IHZhbDtcbiAgICBmdW5jdGlvbiBhc3NlcnRJcyhfYXJnKSB7IH1cbiAgICB1dGlsLmFzc2VydElzID0gYXNzZXJ0SXM7XG4gICAgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgfVxuICAgIHV0aWwuYXNzZXJ0TmV2ZXIgPSBhc3NlcnROZXZlcjtcbiAgICB1dGlsLmFycmF5VG9FbnVtID0gKGl0ZW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIG9ialtpdGVtXSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZEtleXMgPSB1dGlsLm9iamVjdEtleXMob2JqKS5maWx0ZXIoKGspID0+IHR5cGVvZiBvYmpbb2JqW2tdXSAhPT0gXCJudW1iZXJcIik7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiB2YWxpZEtleXMpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkW2tdID0gb2JqW2tdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyhmaWx0ZXJlZCk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdFZhbHVlcyA9IChvYmopID0+IHtcbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0S2V5cyhvYmopLm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtlXTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB1dGlsLm9iamVjdEtleXMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09IFwiZnVuY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgPyAob2JqKSA9PiBPYmplY3Qua2V5cyhvYmopIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6IChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9O1xuICAgIHV0aWwuZmluZCA9IChhcnIsIGNoZWNrZXIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICAgICAgaWYgKGNoZWNrZXIoaXRlbSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHV0aWwuaXNJbnRlZ2VyID0gdHlwZW9mIE51bWJlci5pc0ludGVnZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/ICh2YWwpID0+IE51bWJlci5pc0ludGVnZXIodmFsKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgOiAodmFsKSA9PiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICYmIGlzRmluaXRlKHZhbCkgJiYgTWF0aC5mbG9vcih2YWwpID09PSB2YWw7XG4gICAgZnVuY3Rpb24gam9pblZhbHVlcyhhcnJheSwgc2VwYXJhdG9yID0gXCIgfCBcIikge1xuICAgICAgICByZXR1cm4gYXJyYXlcbiAgICAgICAgICAgIC5tYXAoKHZhbCkgPT4gKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgPyBgJyR7dmFsfSdgIDogdmFsKSlcbiAgICAgICAgICAgIC5qb2luKHNlcGFyYXRvcik7XG4gICAgfVxuICAgIHV0aWwuam9pblZhbHVlcyA9IGpvaW5WYWx1ZXM7XG4gICAgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIgPSAoXywgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSh1dGlsIHx8ICh1dGlsID0ge30pKTtcbnZhciBvYmplY3RVdGlsO1xuKGZ1bmN0aW9uIChvYmplY3RVdGlsKSB7XG4gICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyA9IChmaXJzdCwgc2Vjb25kKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5maXJzdCxcbiAgICAgICAgICAgIC4uLnNlY29uZCwgLy8gc2Vjb25kIG92ZXJ3cml0ZXMgZmlyc3RcbiAgICAgICAgfTtcbiAgICB9O1xufSkob2JqZWN0VXRpbCB8fCAob2JqZWN0VXRpbCA9IHt9KSk7XG5jb25zdCBab2RQYXJzZWRUeXBlID0gdXRpbC5hcnJheVRvRW51bShbXG4gICAgXCJzdHJpbmdcIixcbiAgICBcIm5hblwiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJmbG9hdFwiLFxuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiZGF0ZVwiLFxuICAgIFwiYmlnaW50XCIsXG4gICAgXCJzeW1ib2xcIixcbiAgICBcImZ1bmN0aW9uXCIsXG4gICAgXCJ1bmRlZmluZWRcIixcbiAgICBcIm51bGxcIixcbiAgICBcImFycmF5XCIsXG4gICAgXCJvYmplY3RcIixcbiAgICBcInVua25vd25cIixcbiAgICBcInByb21pc2VcIixcbiAgICBcInZvaWRcIixcbiAgICBcIm5ldmVyXCIsXG4gICAgXCJtYXBcIixcbiAgICBcInNldFwiLFxuXSk7XG5jb25zdCBnZXRQYXJzZWRUeXBlID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZDtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc3RyaW5nO1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICByZXR1cm4gaXNOYU4oZGF0YSkgPyBab2RQYXJzZWRUeXBlLm5hbiA6IFpvZFBhcnNlZFR5cGUubnVtYmVyO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYm9vbGVhbjtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5mdW5jdGlvbjtcbiAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYmlnaW50O1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zeW1ib2w7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS50aGVuICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGRhdGEudGhlbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgZGF0YS5jYXRjaCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5wcm9taXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm1hcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgU2V0ICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIERhdGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUub2JqZWN0O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUudW5rbm93bjtcbiAgICB9XG59O1xuXG5jb25zdCBab2RJc3N1ZUNvZGUgPSB1dGlsLmFycmF5VG9FbnVtKFtcbiAgICBcImludmFsaWRfdHlwZVwiLFxuICAgIFwiaW52YWxpZF9saXRlcmFsXCIsXG4gICAgXCJjdXN0b21cIixcbiAgICBcImludmFsaWRfdW5pb25cIixcbiAgICBcImludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvclwiLFxuICAgIFwiaW52YWxpZF9lbnVtX3ZhbHVlXCIsXG4gICAgXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgIFwiaW52YWxpZF9hcmd1bWVudHNcIixcbiAgICBcImludmFsaWRfcmV0dXJuX3R5cGVcIixcbiAgICBcImludmFsaWRfZGF0ZVwiLFxuICAgIFwiaW52YWxpZF9zdHJpbmdcIixcbiAgICBcInRvb19zbWFsbFwiLFxuICAgIFwidG9vX2JpZ1wiLFxuICAgIFwiaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXNcIixcbiAgICBcIm5vdF9tdWx0aXBsZV9vZlwiLFxuICAgIFwibm90X2Zpbml0ZVwiLFxuXSk7XG5jb25zdCBxdW90ZWxlc3NKc29uID0gKG9iaikgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShvYmosIG51bGwsIDIpO1xuICAgIHJldHVybiBqc29uLnJlcGxhY2UoL1wiKFteXCJdKylcIjovZywgXCIkMTpcIik7XG59O1xuY2xhc3MgWm9kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoaXNzdWVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaXNzdWVzID0gW107XG4gICAgICAgIHRoaXMuYWRkSXNzdWUgPSAoc3ViKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzc3VlcyA9IFsuLi50aGlzLmlzc3Vlcywgc3ViXTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZXMgPSAoc3VicyA9IFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzc3VlcyA9IFsuLi50aGlzLmlzc3VlcywgLi4uc3Vic107XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdHVhbFByb3RvID0gbmV3LnRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBiYW4vYmFuXG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgYWN0dWFsUHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBhY3R1YWxQcm90bztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hbWUgPSBcIlpvZEVycm9yXCI7XG4gICAgICAgIHRoaXMuaXNzdWVzID0gaXNzdWVzO1xuICAgIH1cbiAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXM7XG4gICAgfVxuICAgIGZvcm1hdChfbWFwcGVyKSB7XG4gICAgICAgIGNvbnN0IG1hcHBlciA9IF9tYXBwZXIgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChpc3N1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWUudW5pb25FcnJvcnMubWFwKHByb2Nlc3NFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcihpc3N1ZS5yZXR1cm5UeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfYXJndW1lbnRzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLmFyZ3VtZW50c0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUucGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGlzc3VlLnBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGlzc3VlLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGlzc3VlLnBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAodHlwZW9mIGVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHR5cGVvZiBlbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29uc3QgZXJyb3JBcnJheTogYW55ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBlcnJvckFycmF5Ll9lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgZXJyb3JBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXS5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3VycltlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3NFcnJvcih0aGlzKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkRXJyb3JzO1xuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0KHZhbHVlKSB7XG4gICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgWm9kRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIFpvZEVycm9yOiAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xuICAgIH1cbiAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgfVxuICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICBmbGF0dGVuKG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCBmb3JtRXJyb3JzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoc3ViLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSA9IGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSB8fCBbXTtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tzdWIucGF0aFswXV0ucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtRXJyb3JzLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGZvcm1FcnJvcnMsIGZpZWxkRXJyb3JzIH07XG4gICAgfVxuICAgIGdldCBmb3JtRXJyb3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0dGVuKCk7XG4gICAgfVxufVxuWm9kRXJyb3IuY3JlYXRlID0gKGlzc3VlcykgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKGlzc3Vlcyk7XG4gICAgcmV0dXJuIGVycm9yO1xufTtcblxuY29uc3QgZXJyb3JNYXAgPSAoaXNzdWUsIF9jdHgpID0+IHtcbiAgICBsZXQgbWVzc2FnZTtcbiAgICBzd2l0Y2ggKGlzc3VlLmNvZGUpIHtcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnJlY2VpdmVkID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIlJlcXVpcmVkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEV4cGVjdGVkICR7aXNzdWUuZXhwZWN0ZWR9LCByZWNlaXZlZCAke2lzc3VlLnJlY2VpdmVkfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGxpdGVyYWwgdmFsdWUsIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoaXNzdWUuZXhwZWN0ZWQsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBVbnJlY29nbml6ZWQga2V5KHMpIGluIG9iamVjdDogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb246XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBlbnVtIHZhbHVlLiBFeHBlY3RlZCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5vcHRpb25zKX0sIHJlY2VpdmVkICcke2lzc3VlLnJlY2VpdmVkfSdgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGZ1bmN0aW9uIGFyZ3VtZW50c2A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBmdW5jdGlvbiByZXR1cm4gdHlwZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9kYXRlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGRhdGVgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwiaW5jbHVkZXNcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBpbmNsdWRlIFwiJHtpc3N1ZS52YWxpZGF0aW9uLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZS52YWxpZGF0aW9uLnBvc2l0aW9uID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYCR7bWVzc2FnZX0gYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2lzc3VlLnZhbGlkYXRpb24ucG9zaXRpb259YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcInN0YXJ0c1dpdGhcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBzdGFydCB3aXRoIFwiJHtpc3N1ZS52YWxpZGF0aW9uLnN0YXJ0c1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcImVuZHNXaXRoXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3QgZW5kIHdpdGggXCIke2lzc3VlLnZhbGlkYXRpb24uZW5kc1dpdGh9XCJgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihpc3N1ZS52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS52YWxpZGF0aW9uICE9PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgJHtpc3N1ZS52YWxpZGF0aW9ufWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX3NtYWxsOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnR5cGUgPT09IFwiYXJyYXlcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEFycmF5IG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG1vcmUgdGhhbmB9ICR7aXNzdWUubWluaW11bX0gZWxlbWVudChzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgU3RyaW5nIG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gXCJleGFjdGx5XCIgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbGVhc3RgIDogYG92ZXJgfSAke2lzc3VlLm1pbmltdW19IGNoYXJhY3RlcihzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5IGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBncmVhdGVyIHRoYW4gYH0ke2lzc3VlLm1pbmltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiZGF0ZVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRGF0ZSBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseSBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgZ3JlYXRlciB0aGFuIGB9JHtuZXcgRGF0ZShOdW1iZXIoaXNzdWUubWluaW11bSkpfWA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnRvb19iaWc6XG4gICAgICAgICAgICBpZiAoaXNzdWUudHlwZSA9PT0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQXJyYXkgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbW9zdGAgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfSBlbGVtZW50KHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBTdHJpbmcgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBgZXhhY3RseWAgOiBpc3N1ZS5pbmNsdXNpdmUgPyBgYXQgbW9zdGAgOiBgdW5kZXJgfSAke2lzc3VlLm1heGltdW19IGNoYXJhY3RlcihzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5YFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgbGVzcyB0aGFuIG9yIGVxdWFsIHRvYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImJpZ2ludFwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQmlnSW50IG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5YFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgbGVzcyB0aGFuIG9yIGVxdWFsIHRvYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgbGVzcyB0aGFuYH0gJHtpc3N1ZS5tYXhpbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImRhdGVcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYERhdGUgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBzbWFsbGVyIHRoYW5gfSAke25ldyBEYXRlKE51bWJlcihpc3N1ZS5tYXhpbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuY3VzdG9tOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlczpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW50ZXJzZWN0aW9uIHJlc3VsdHMgY291bGQgbm90IGJlIG1lcmdlZGA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7aXNzdWUubXVsdGlwbGVPZn1gO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLm5vdF9maW5pdGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJOdW1iZXIgbXVzdCBiZSBmaW5pdGVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbWVzc2FnZSA9IF9jdHguZGVmYXVsdEVycm9yO1xuICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihpc3N1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IG1lc3NhZ2UgfTtcbn07XG5cbmxldCBvdmVycmlkZUVycm9yTWFwID0gZXJyb3JNYXA7XG5mdW5jdGlvbiBzZXRFcnJvck1hcChtYXApIHtcbiAgICBvdmVycmlkZUVycm9yTWFwID0gbWFwO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3JNYXAoKSB7XG4gICAgcmV0dXJuIG92ZXJyaWRlRXJyb3JNYXA7XG59XG5cbmNvbnN0IG1ha2VJc3N1ZSA9IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCB7IGRhdGEsIHBhdGgsIGVycm9yTWFwcywgaXNzdWVEYXRhIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBbLi4ucGF0aCwgLi4uKGlzc3VlRGF0YS5wYXRoIHx8IFtdKV07XG4gICAgY29uc3QgZnVsbElzc3VlID0ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgIH07XG4gICAgaWYgKGlzc3VlRGF0YS5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICAgICAgbWVzc2FnZTogaXNzdWVEYXRhLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGNvbnN0IG1hcHMgPSBlcnJvck1hcHNcbiAgICAgICAgLmZpbHRlcigobSkgPT4gISFtKVxuICAgICAgICAuc2xpY2UoKVxuICAgICAgICAucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgbWFwIG9mIG1hcHMpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gbWFwKGZ1bGxJc3N1ZSwgeyBkYXRhLCBkZWZhdWx0RXJyb3I6IGVycm9yTWVzc2FnZSB9KS5tZXNzYWdlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgIHBhdGg6IGZ1bGxQYXRoLFxuICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgfTtcbn07XG5jb25zdCBFTVBUWV9QQVRIID0gW107XG5mdW5jdGlvbiBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIGlzc3VlRGF0YSkge1xuICAgIGNvbnN0IG92ZXJyaWRlTWFwID0gZ2V0RXJyb3JNYXAoKTtcbiAgICBjb25zdCBpc3N1ZSA9IG1ha2VJc3N1ZSh7XG4gICAgICAgIGlzc3VlRGF0YTogaXNzdWVEYXRhLFxuICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgIGVycm9yTWFwczogW1xuICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICBjdHguc2NoZW1hRXJyb3JNYXAsXG4gICAgICAgICAgICBvdmVycmlkZU1hcCxcbiAgICAgICAgICAgIG92ZXJyaWRlTWFwID09PSBlcnJvck1hcCA/IHVuZGVmaW5lZCA6IGVycm9yTWFwLCAvLyB0aGVuIGdsb2JhbCBkZWZhdWx0IG1hcFxuICAgICAgICBdLmZpbHRlcigoeCkgPT4gISF4KSxcbiAgICB9KTtcbiAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKGlzc3VlKTtcbn1cbmNsYXNzIFBhcnNlU3RhdHVzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFwidmFsaWRcIjtcbiAgICB9XG4gICAgZGlydHkoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09PSBcInZhbGlkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJkaXJ0eVwiO1xuICAgIH1cbiAgICBhYm9ydCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFwiYWJvcnRlZFwiO1xuICAgIH1cbiAgICBzdGF0aWMgbWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChzLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogYXJyYXlWYWx1ZSB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgbWVyZ2VPYmplY3RBc3luYyhzdGF0dXMsIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHN5bmNQYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgc3luY1BhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBzeW5jUGFpcnMpO1xuICAgIH1cbiAgICBzdGF0aWMgbWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IHBhaXI7XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBpZiAodmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBpZiAoa2V5LnZhbHVlICE9PSBcIl9fcHJvdG9fX1wiICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2YWx1ZS52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiB8fCBwYWlyLmFsd2F5c1NldCkpIHtcbiAgICAgICAgICAgICAgICBmaW5hbE9iamVjdFtrZXkudmFsdWVdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE9iamVjdCB9O1xuICAgIH1cbn1cbmNvbnN0IElOVkFMSUQgPSBPYmplY3QuZnJlZXplKHtcbiAgICBzdGF0dXM6IFwiYWJvcnRlZFwiLFxufSk7XG5jb25zdCBESVJUWSA9ICh2YWx1ZSkgPT4gKHsgc3RhdHVzOiBcImRpcnR5XCIsIHZhbHVlIH0pO1xuY29uc3QgT0sgPSAodmFsdWUpID0+ICh7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZSB9KTtcbmNvbnN0IGlzQWJvcnRlZCA9ICh4KSA9PiB4LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCI7XG5jb25zdCBpc0RpcnR5ID0gKHgpID0+IHguc3RhdHVzID09PSBcImRpcnR5XCI7XG5jb25zdCBpc1ZhbGlkID0gKHgpID0+IHguc3RhdHVzID09PSBcInZhbGlkXCI7XG5jb25zdCBpc0FzeW5jID0gKHgpID0+IHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHggaW5zdGFuY2VvZiBQcm9taXNlO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbmZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxudmFyIGVycm9yVXRpbDtcbihmdW5jdGlvbiAoZXJyb3JVdGlsKSB7XG4gICAgZXJyb3JVdGlsLmVyclRvT2JqID0gKG1lc3NhZ2UpID0+IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8geyBtZXNzYWdlIH0gOiBtZXNzYWdlIHx8IHt9O1xuICAgIGVycm9yVXRpbC50b1N0cmluZyA9IChtZXNzYWdlKSA9PiB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBtZXNzYWdlID09PSBudWxsIHx8IG1lc3NhZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1lc3NhZ2UubWVzc2FnZTtcbn0pKGVycm9yVXRpbCB8fCAoZXJyb3JVdGlsID0ge30pKTtcblxudmFyIF9ab2RFbnVtX2NhY2hlLCBfWm9kTmF0aXZlRW51bV9jYWNoZTtcbmNsYXNzIFBhcnNlSW5wdXRMYXp5UGF0aCB7XG4gICAgY29uc3RydWN0b3IocGFyZW50LCB2YWx1ZSwgcGF0aCwga2V5KSB7XG4gICAgICAgIHRoaXMuX2NhY2hlZFBhdGggPSBbXTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuZGF0YSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5fa2V5ID0ga2V5O1xuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRQYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2tleSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsIC4uLnRoaXMuX2tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCwgdGhpcy5fa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkUGF0aDtcbiAgICB9XG59XG5jb25zdCBoYW5kbGVSZXN1bHQgPSAoY3R4LCByZXN1bHQpID0+IHtcbiAgICBpZiAoaXNWYWxpZChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHJlc3VsdC52YWx1ZSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKCFjdHguY29tbW9uLmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZhbGlkYXRpb24gZmFpbGVkIGJ1dCBubyBpc3N1ZXMgZGV0ZWN0ZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihjdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbn07XG5mdW5jdGlvbiBwcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zKVxuICAgICAgICByZXR1cm4ge307XG4gICAgY29uc3QgeyBlcnJvck1hcCwgaW52YWxpZF90eXBlX2Vycm9yLCByZXF1aXJlZF9lcnJvciwgZGVzY3JpcHRpb24gfSA9IHBhcmFtcztcbiAgICBpZiAoZXJyb3JNYXAgJiYgKGludmFsaWRfdHlwZV9lcnJvciB8fCByZXF1aXJlZF9lcnJvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCB1c2UgXCJpbnZhbGlkX3R5cGVfZXJyb3JcIiBvciBcInJlcXVpcmVkX2Vycm9yXCIgaW4gY29uanVuY3Rpb24gd2l0aCBjdXN0b20gZXJyb3IgbWFwLmApO1xuICAgIH1cbiAgICBpZiAoZXJyb3JNYXApXG4gICAgICAgIHJldHVybiB7IGVycm9yTWFwOiBlcnJvck1hcCwgZGVzY3JpcHRpb24gfTtcbiAgICBjb25zdCBjdXN0b21NYXAgPSAoaXNzLCBjdHgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgeyBtZXNzYWdlIH0gPSBwYXJhbXM7XG4gICAgICAgIGlmIChpc3MuY29kZSA9PT0gXCJpbnZhbGlkX2VudW1fdmFsdWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogbWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGEgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IChfYSA9IG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6IHJlcXVpcmVkX2Vycm9yKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzcy5jb2RlICE9PSBcImludmFsaWRfdHlwZVwiKVxuICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICByZXR1cm4geyBtZXNzYWdlOiAoX2IgPSBtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiBpbnZhbGlkX3R5cGVfZXJyb3IpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICB9O1xuICAgIHJldHVybiB7IGVycm9yTWFwOiBjdXN0b21NYXAsIGRlc2NyaXB0aW9uIH07XG59XG5jbGFzcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcihkZWYpIHtcbiAgICAgICAgLyoqIEFsaWFzIG9mIHNhZmVQYXJzZUFzeW5jICovXG4gICAgICAgIHRoaXMuc3BhID0gdGhpcy5zYWZlUGFyc2VBc3luYztcbiAgICAgICAgdGhpcy5fZGVmID0gZGVmO1xuICAgICAgICB0aGlzLnBhcnNlID0gdGhpcy5wYXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZSA9IHRoaXMuc2FmZVBhcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGFyc2VBc3luYyA9IHRoaXMucGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZUFzeW5jID0gdGhpcy5zYWZlUGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNwYSA9IHRoaXMuc3BhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVmaW5lID0gdGhpcy5yZWZpbmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZpbmVtZW50ID0gdGhpcy5yZWZpbmVtZW50LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3VwZXJSZWZpbmUgPSB0aGlzLnN1cGVyUmVmaW5lLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGFibGUgPSB0aGlzLm51bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGlzaCA9IHRoaXMubnVsbGlzaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFycmF5ID0gdGhpcy5hcnJheS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLnByb21pc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vciA9IHRoaXMub3IuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hbmQgPSB0aGlzLmFuZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYnJhbmQgPSB0aGlzLmJyYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVmYXVsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNhdGNoID0gdGhpcy5jYXRjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlID0gdGhpcy5kZXNjcmliZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBpcGUgPSB0aGlzLnBpcGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHkuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc051bGxhYmxlID0gdGhpcy5pc051bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbC5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIF9nZXRUeXBlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBfZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCkge1xuICAgICAgICByZXR1cm4gKGN0eCB8fCB7XG4gICAgICAgICAgICBjb21tb246IGlucHV0LnBhcmVudC5jb21tb24sXG4gICAgICAgICAgICBkYXRhOiBpbnB1dC5kYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IG5ldyBQYXJzZVN0YXR1cygpLFxuICAgICAgICAgICAgY3R4OiB7XG4gICAgICAgICAgICAgICAgY29tbW9uOiBpbnB1dC5wYXJlbnQuY29tbW9uLFxuICAgICAgICAgICAgICAgIGRhdGE6IGlucHV0LmRhdGEsXG4gICAgICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKSxcbiAgICAgICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBpbnB1dC5wYXJlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfcGFyc2VTeW5jKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3luY2hyb25vdXMgcGFyc2UgZW5jb3VudGVyZWQgcHJvbWlzZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX3BhcnNlQXN5bmMoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2UoaW5wdXQpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgfVxuICAgIHBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNhZmVQYXJzZShkYXRhLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgc2FmZVBhcnNlKGRhdGEsIHBhcmFtcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgYXN5bmM6IChfYSA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5hc3luYykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGV4dHVhbEVycm9yTWFwOiBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuZXJyb3JNYXAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5wYXRoKSB8fCBbXSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShkYXRhKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2VTeW5jKHsgZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgICAgICByZXR1cm4gaGFuZGxlUmVzdWx0KGN0eCwgcmVzdWx0KTtcbiAgICB9XG4gICAgYXN5bmMgcGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zYWZlUGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpO1xuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7XG4gICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG4gICAgYXN5bmMgc2FmZVBhcnNlQXN5bmMoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgY29udGV4dHVhbEVycm9yTWFwOiBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5wYXRoKSB8fCBbXSxcbiAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZShkYXRhKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWF5YmVBc3luY1Jlc3VsdCA9IHRoaXMuX3BhcnNlKHsgZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoaXNBc3luYyhtYXliZUFzeW5jUmVzdWx0KVxuICAgICAgICAgICAgPyBtYXliZUFzeW5jUmVzdWx0XG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShtYXliZUFzeW5jUmVzdWx0KSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICByZWZpbmUoY2hlY2ssIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZ2V0SXNzdWVQcm9wZXJ0aWVzID0gKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBtZXNzYWdlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZmluZW1lbnQoKHZhbCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaGVjayh2YWwpO1xuICAgICAgICAgICAgY29uc3Qgc2V0RXJyb3IgPSAoKSA9PiBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICAgICAgLi4uZ2V0SXNzdWVQcm9wZXJ0aWVzKHZhbCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWZpbmVtZW50KGNoZWNrLCByZWZpbmVtZW50RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGlmICghY2hlY2sodmFsKSkge1xuICAgICAgICAgICAgICAgIGN0eC5hZGRJc3N1ZSh0eXBlb2YgcmVmaW5lbWVudERhdGEgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IHJlZmluZW1lbnREYXRhKHZhbCwgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHJlZmluZW1lbnREYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9yZWZpbmVtZW50KHJlZmluZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInJlZmluZW1lbnRcIiwgcmVmaW5lbWVudCB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudChyZWZpbmVtZW50KTtcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBab2RPcHRpb25hbC5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBab2ROdWxsYWJsZS5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGlzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbGFibGUoKS5vcHRpb25hbCgpO1xuICAgIH1cbiAgICBhcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZEFycmF5LmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gWm9kUHJvbWlzZS5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgb3Iob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBab2RVbmlvbi5jcmVhdGUoW3RoaXMsIG9wdGlvbl0sIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIGFuZChpbmNvbWluZykge1xuICAgICAgICByZXR1cm4gWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZSh0aGlzLCBpbmNvbWluZywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgdHJhbnNmb3JtKHRyYW5zZm9ybSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwidHJhbnNmb3JtXCIsIHRyYW5zZm9ybSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVmYXVsdChkZWYpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlRnVuYyA9IHR5cGVvZiBkZWYgPT09IFwiZnVuY3Rpb25cIiA/IGRlZiA6ICgpID0+IGRlZjtcbiAgICAgICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIGlubmVyVHlwZTogdGhpcyxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlRnVuYyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGJyYW5kKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJyYW5kZWQoe1xuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCcmFuZGVkLFxuICAgICAgICAgICAgdHlwZTogdGhpcyxcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoKGRlZikge1xuICAgICAgICBjb25zdCBjYXRjaFZhbHVlRnVuYyA9IHR5cGVvZiBkZWYgPT09IFwiZnVuY3Rpb25cIiA/IGRlZiA6ICgpID0+IGRlZjtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RDYXRjaCh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBpbm5lclR5cGU6IHRoaXMsXG4gICAgICAgICAgICBjYXRjaFZhbHVlOiBjYXRjaFZhbHVlRnVuYyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQ2F0Y2gsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICBjb25zdCBUaGlzID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBUaGlzKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGlwZSh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIFpvZFBpcGVsaW5lLmNyZWF0ZSh0aGlzLCB0YXJnZXQpO1xuICAgIH1cbiAgICByZWFkb25seSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZFJlYWRvbmx5LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG4gICAgaXNPcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZVBhcnNlKHVuZGVmaW5lZCkuc3VjY2VzcztcbiAgICB9XG4gICAgaXNOdWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZVBhcnNlKG51bGwpLnN1Y2Nlc3M7XG4gICAgfVxufVxuY29uc3QgY3VpZFJlZ2V4ID0gL15jW15cXHMtXXs4LH0kL2k7XG5jb25zdCBjdWlkMlJlZ2V4ID0gL15bMC05YS16XSskLztcbmNvbnN0IHVsaWRSZWdleCA9IC9eWzAtOUEtSEpLTU5QLVRWLVpdezI2fSQvO1xuLy8gY29uc3QgdXVpZFJlZ2V4ID1cbi8vICAgL14oW2EtZjAtOV17OH0tW2EtZjAtOV17NH0tWzEtNV1bYS1mMC05XXszfS1bYS1mMC05XXs0fS1bYS1mMC05XXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmNvbnN0IHV1aWRSZWdleCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC9pO1xuY29uc3QgbmFub2lkUmVnZXggPSAvXlthLXowLTlfLV17MjF9JC9pO1xuY29uc3QgZHVyYXRpb25SZWdleCA9IC9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xcZCtZKXwoPzpbLStdP1xcZCtbLixdXFxkK1kkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/Oig/OlstK10/XFxkK1cpfCg/OlstK10/XFxkK1suLF1cXGQrVyQpKT8oPzooPzpbLStdP1xcZCtEKXwoPzpbLStdP1xcZCtbLixdXFxkK0QkKSk/KD86VCg/PVtcXGQrLV0pKD86KD86Wy0rXT9cXGQrSCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtIJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzpbLStdP1xcZCsoPzpbLixdXFxkKyk/Uyk/KT8/JC87XG4vLyBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NjE4MS8xNTUwMTU1XG4vLyBvbGQgdmVyc2lvbjogdG9vIHNsb3csIGRpZG4ndCBzdXBwb3J0IHVuaWNvZGVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPSAvXigoKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSsoXFwuKFthLXpdfFxcZHxbISNcXCQlJidcXCpcXCtcXC1cXC89XFw/XFxeX2B7XFx8fX5dfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSspKil8KChcXHgyMikoKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPygoW1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4N2ZdfFxceDIxfFtcXHgyMy1cXHg1Yl18W1xceDVkLVxceDdlXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KFxcXFwoW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBkLVxceDdmXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSkqKCgoXFx4MjB8XFx4MDkpKihcXHgwZFxceDBhKSk/KFxceDIwfFxceDA5KSspPyhcXHgyMikpKUAoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSkkL2k7XG4vL29sZCBlbWFpbCByZWdleFxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKChbXjw+KClbXFxdLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF0uLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoPyEtKShbXjw+KClbXFxdLiw7Olxcc0BcIl0rXFwuKStbXjw+KClbXFxdLiw7Olxcc0BcIl17MSx9KVteLTw+KClbXFxdLiw7Olxcc0BcIl0kL2k7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChcXFsoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXF0pfChcXFtJUHY2OigoW2EtZjAtOV17MSw0fTopezd9fDo6KFthLWYwLTldezEsNH06KXswLDZ9fChbYS1mMC05XXsxLDR9Oil7MX06KFthLWYwLTldezEsNH06KXswLDV9fChbYS1mMC05XXsxLDR9Oil7Mn06KFthLWYwLTldezEsNH06KXswLDR9fChbYS1mMC05XXsxLDR9Oil7M306KFthLWYwLTldezEsNH06KXswLDN9fChbYS1mMC05XXsxLDR9Oil7NH06KFthLWYwLTldezEsNH06KXswLDJ9fChbYS1mMC05XXsxLDR9Oil7NX06KFthLWYwLTldezEsNH06KXswLDF9KShbYS1mMC05XXsxLDR9fCgoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSlcXF0pfChbQS1aYS16MC05XShbQS1aYS16MC05LV0qW0EtWmEtejAtOV0pKihcXC5bQS1aYS16XXsyLH0pKykpJC87XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16QS1aMC05XFwuXFwhXFwjXFwkXFwlXFwmXFwnXFwqXFwrXFwvXFw9XFw/XFxeXFxfXFxgXFx7XFx8XFx9XFx+XFwtXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXig/OlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pJC9pO1xuY29uc3QgZW1haWxSZWdleCA9IC9eKD8hXFwuKSg/IS4qXFwuXFwuKShbQS1aMC05XycrXFwtXFwuXSopW0EtWjAtOV8rLV1AKFtBLVowLTldW0EtWjAtOVxcLV0qXFwuKStbQS1aXXsyLH0kL2k7XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID1cbi8vICAgL15bYS16MC05LiEjJCUmXHUyMDE5KisvPT9eX2B7fH1+LV0rQFthLXowLTktXSsoPzpcXC5bYS16MC05XFwtXSspKiQvaTtcbi8vIGZyb20gaHR0cHM6Ly90aGVrZXZpbnNjb3R0LmNvbS9lbW9qaXMtaW4tamF2YXNjcmlwdC8jd3JpdGluZy1hLXJlZ3VsYXItZXhwcmVzc2lvblxuY29uc3QgX2Vtb2ppUmVnZXggPSBgXihcXFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxcXFxwe0Vtb2ppX0NvbXBvbmVudH0pKyRgO1xubGV0IGVtb2ppUmVnZXg7XG4vLyBmYXN0ZXIsIHNpbXBsZXIsIHNhZmVyXG5jb25zdCBpcHY0UmVnZXggPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvO1xuY29uc3QgaXB2NlJlZ2V4ID0gL14oKFthLWYwLTldezEsNH06KXs3fXw6OihbYS1mMC05XXsxLDR9Oil7MCw2fXwoW2EtZjAtOV17MSw0fTopezF9OihbYS1mMC05XXsxLDR9Oil7MCw1fXwoW2EtZjAtOV17MSw0fTopezJ9OihbYS1mMC05XXsxLDR9Oil7MCw0fXwoW2EtZjAtOV17MSw0fTopezN9OihbYS1mMC05XXsxLDR9Oil7MCwzfXwoW2EtZjAtOV17MSw0fTopezR9OihbYS1mMC05XXsxLDR9Oil7MCwyfXwoW2EtZjAtOV17MSw0fTopezV9OihbYS1mMC05XXsxLDR9Oil7MCwxfSkoW2EtZjAtOV17MSw0fXwoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkpJC87XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODYwMzkyL2RldGVybWluZS1pZi1zdHJpbmctaXMtaW4tYmFzZTY0LXVzaW5nLWphdmFzY3JpcHRcbmNvbnN0IGJhc2U2NFJlZ2V4ID0gL14oWzAtOWEtekEtWisvXXs0fSkqKChbMC05YS16QS1aKy9dezJ9PT0pfChbMC05YS16QS1aKy9dezN9PSkpPyQvO1xuLy8gc2ltcGxlXG4vLyBjb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn1gO1xuLy8gbm8gbGVhcCB5ZWFyIHZhbGlkYXRpb25cbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS0oKDBbMTM1NzhdfDEwfDEyKS0zMXwoMFsxMy05XXwxWzAtMl0pLTMwfCgwWzEtOV18MVswLTJdKS0oMFsxLTldfDFcXFxcZHwyXFxcXGQpKWA7XG4vLyB3aXRoIGxlYXAgeWVhciB2YWxpZGF0aW9uXG5jb25zdCBkYXRlUmVnZXhTb3VyY2UgPSBgKChcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KDBbNDY5XXwxMSktKDBbMS05XXxbMTJdXFxcXGR8MzApfCgwMiktKDBbMS05XXwxXFxcXGR8MlswLThdKSkpYDtcbmNvbnN0IGRhdGVSZWdleCA9IG5ldyBSZWdFeHAoYF4ke2RhdGVSZWdleFNvdXJjZX0kYCk7XG5mdW5jdGlvbiB0aW1lUmVnZXhTb3VyY2UoYXJncykge1xuICAgIC8vIGxldCByZWdleCA9IGBcXFxcZHsyfTpcXFxcZHsyfTpcXFxcZHsyfWA7XG4gICAgbGV0IHJlZ2V4ID0gYChbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkOlswLTVdXFxcXGRgO1xuICAgIGlmIChhcmdzLnByZWNpc2lvbikge1xuICAgICAgICByZWdleCA9IGAke3JlZ2V4fVxcXFwuXFxcXGR7JHthcmdzLnByZWNpc2lvbn19YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5wcmVjaXNpb24gPT0gbnVsbCkge1xuICAgICAgICByZWdleCA9IGAke3JlZ2V4fShcXFxcLlxcXFxkKyk/YDtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuZnVuY3Rpb24gdGltZVJlZ2V4KGFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfSRgKTtcbn1cbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE0MzIzMVxuZnVuY3Rpb24gZGF0ZXRpbWVSZWdleChhcmdzKSB7XG4gICAgbGV0IHJlZ2V4ID0gYCR7ZGF0ZVJlZ2V4U291cmNlfVQke3RpbWVSZWdleFNvdXJjZShhcmdzKX1gO1xuICAgIGNvbnN0IG9wdHMgPSBbXTtcbiAgICBvcHRzLnB1c2goYXJncy5sb2NhbCA/IGBaP2AgOiBgWmApO1xuICAgIGlmIChhcmdzLm9mZnNldClcbiAgICAgICAgb3B0cy5wdXNoKGAoWystXVxcXFxkezJ9Oj9cXFxcZHsyfSlgKTtcbiAgICByZWdleCA9IGAke3JlZ2V4fSgke29wdHMuam9pbihcInxcIil9KWA7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4fSRgKTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRJUChpcCwgdmVyc2lvbikge1xuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NFwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY0UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICgodmVyc2lvbiA9PT0gXCJ2NlwiIHx8ICF2ZXJzaW9uKSAmJiBpcHY2UmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IFN0cmluZyhpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA8IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gaW5wdXQuZGF0YS5sZW5ndGggPCBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW1haWxcIikge1xuICAgICAgICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVtb2ppXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVtb2ppUmVnZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1vamlSZWdleCA9IG5ldyBSZWdFeHAoX2Vtb2ppUmVnZXgsIFwidVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbW9qaVJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJlbW9qaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidXVpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dWlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInV1aWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW5vaWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwibmFub2lkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjdWlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1aWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgIGlmICghY3VpZDJSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdWxpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1bGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrLnJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IGNoZWNrLnJlZ2V4LnRlc3QoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0ZXN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwicmVnZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRyaW1cIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiaW5jbHVkZXNcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5pbmNsdWRlcyhjaGVjay52YWx1ZSwgY2hlY2sucG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgaW5jbHVkZXM6IGNoZWNrLnZhbHVlLCBwb3NpdGlvbjogY2hlY2sucG9zaXRpb24gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRvTG93ZXJDYXNlXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0b1VwcGVyQ2FzZVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwic3RhcnRzV2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLnN0YXJ0c1dpdGgoY2hlY2sudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgc3RhcnRzV2l0aDogY2hlY2sudmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVuZHNXaXRoXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuZW5kc1dpdGgoY2hlY2sudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgZW5kc1dpdGg6IGNoZWNrLnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkYXRldGltZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBkYXRldGltZVJlZ2V4KGNoZWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBkYXRlUmVnZXg7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSB0aW1lUmVnZXgoY2hlY2spO1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImR1cmF0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWR1cmF0aW9uUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJpcFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSVAoaW5wdXQuZGF0YSwgY2hlY2sudmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJpcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiYmFzZTY0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJiYXNlNjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgX3JlZ2V4KHJlZ2V4LCB2YWxpZGF0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZmluZW1lbnQoKGRhdGEpID0+IHJlZ2V4LnRlc3QoZGF0YSksIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb24sXG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW1haWwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImVtYWlsXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdXJsKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1cmxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBlbW9qaShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1vamlcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1dWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1dWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgbmFub2lkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJuYW5vaWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJjdWlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgY3VpZDIobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWQyXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgdWxpZChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwidWxpZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGJhc2U2NChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiYmFzZTY0XCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgaXAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImlwXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zKSB9KTtcbiAgICB9XG4gICAgZGF0ZXRpbWUob3B0aW9ucykge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxvY2FsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgIHByZWNpc2lvbjogdHlwZW9mIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uKSA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uLFxuICAgICAgICAgICAgb2Zmc2V0OiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMub2Zmc2V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgIGxvY2FsOiAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9jYWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRhdGUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImRhdGVcIiwgbWVzc2FnZSB9KTtcbiAgICB9XG4gICAgdGltZShvcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IG51bGwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInRpbWVcIixcbiAgICAgICAgICAgIHByZWNpc2lvbjogdHlwZW9mIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uKSA9PT0gXCJ1bmRlZmluZWRcIiA/IG51bGwgOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucHJlY2lzaW9uLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGR1cmF0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJkdXJhdGlvblwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHJlZ2V4KHJlZ2V4LCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInJlZ2V4XCIsXG4gICAgICAgICAgICByZWdleDogcmVnZXgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbmNsdWRlcyh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJpbmNsdWRlc1wiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgcG9zaXRpb246IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wb3NpdGlvbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdGFydHNXaXRoKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcInN0YXJ0c1dpdGhcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVuZHNXaXRoKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImVuZHNXaXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtaW4obWluTGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IG1pbkxlbmd0aCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhMZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogbWF4TGVuZ3RoLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGVuZ3RoKGxlbiwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJsZW5ndGhcIixcbiAgICAgICAgICAgIHZhbHVlOiBsZW4sXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Ugei5zdHJpbmcoKS5taW4oMSkgaW5zdGVhZC5cbiAgICAgKiBAc2VlIHtAbGluayBab2RTdHJpbmcubWlufVxuICAgICAqL1xuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIGVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSk7XG4gICAgfVxuICAgIHRyaW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0cmltXCIgfV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b0xvd2VyQ2FzZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRvTG93ZXJDYXNlXCIgfV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b1VwcGVyQ2FzZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRvVXBwZXJDYXNlXCIgfV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgaXNEYXRldGltZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJkYXRldGltZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJkYXRlXCIpO1xuICAgIH1cbiAgICBnZXQgaXNUaW1lKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInRpbWVcIik7XG4gICAgfVxuICAgIGdldCBpc0R1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImR1cmF0aW9uXCIpO1xuICAgIH1cbiAgICBnZXQgaXNFbWFpbCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJlbWFpbFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVVJMKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInVybFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1vamkoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZW1vamlcIik7XG4gICAgfVxuICAgIGdldCBpc1VVSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidXVpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzTkFOT0lEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcIm5hbm9pZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQ1VJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJjdWlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDVUlEMigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJjdWlkMlwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVUxJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1bGlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNJUCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJpcFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4TGVuZ3RoKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kU3RyaW5nLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZyxcbiAgICAgICAgY29lcmNlOiAoX2EgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM5NjY0ODQvd2h5LWRvZXMtbW9kdWx1cy1vcGVyYXRvci1yZXR1cm4tZnJhY3Rpb25hbC1udW1iZXItaW4tamF2YXNjcmlwdC8zMTcxMTAzNCMzMTcxMTAzNFxuZnVuY3Rpb24gZmxvYXRTYWZlUmVtYWluZGVyKHZhbCwgc3RlcCkge1xuICAgIGNvbnN0IHZhbERlY0NvdW50ID0gKHZhbC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3Qgc3RlcERlY0NvdW50ID0gKHN0ZXAudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoO1xuICAgIGNvbnN0IGRlY0NvdW50ID0gdmFsRGVjQ291bnQgPiBzdGVwRGVjQ291bnQgPyB2YWxEZWNDb3VudCA6IHN0ZXBEZWNDb3VudDtcbiAgICBjb25zdCB2YWxJbnQgPSBwYXJzZUludCh2YWwudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIGNvbnN0IHN0ZXBJbnQgPSBwYXJzZUludChzdGVwLnRvRml4ZWQoZGVjQ291bnQpLnJlcGxhY2UoXCIuXCIsIFwiXCIpKTtcbiAgICByZXR1cm4gKHZhbEludCAlIHN0ZXBJbnQpIC8gTWF0aC5wb3coMTAsIGRlY0NvdW50KTtcbn1cbmNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgICAgICB0aGlzLnN0ZXAgPSB0aGlzLm11bHRpcGxlT2Y7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IE51bWJlcihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5udW1iZXIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJpbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0ludGVnZXIoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBcImZsb2F0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChmbG9hdFNhZmVSZW1haW5kZXIoaW5wdXQuZGF0YSwgY2hlY2sudmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2YsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZU9mOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImZpbml0ZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9maW5pdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImludFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25wb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpbml0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImZpbml0ZVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2FmZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KS5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgZ2V0IGlzSW50KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImludFwiIHx8XG4gICAgICAgICAgICAoY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIgJiYgdXRpbC5pc0ludGVnZXIoY2gudmFsdWUpKSk7XG4gICAgfVxuICAgIGdldCBpc0Zpbml0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGwsIG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwiZmluaXRlXCIgfHxcbiAgICAgICAgICAgICAgICBjaC5raW5kID09PSBcImludFwiIHx8XG4gICAgICAgICAgICAgICAgY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG1pbikgJiYgTnVtYmVyLmlzRmluaXRlKG1heCk7XG4gICAgfVxufVxuWm9kTnVtYmVyLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVtYmVyLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEJpZ0ludCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBCaWdJbnQoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5iaWdpbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYmlnaW50LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGNoZWNrLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LmRhdGEgPCBjaGVjay52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0LmRhdGEgPD0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA+IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA+PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YSAlIGNoZWNrLnZhbHVlICE9PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlT2Y6IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBndGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGd0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHRlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIHNldExpbWl0KGtpbmQsIHZhbHVlLCBpbmNsdXNpdmUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCaWdJbnQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLmNoZWNrcyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25wb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbm5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbXVsdGlwbGVPZih2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtdWx0aXBsZU9mXCIsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG59XG5ab2RCaWdJbnQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQmlnSW50LFxuICAgICAgICBjb2VyY2U6IChfYSA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQm9vbGVhbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IEJvb2xlYW4oaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5ib29sZWFuKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kQm9vbGVhbi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RCb29sZWFuKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZERhdGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBuZXcgRGF0ZShpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuZGF0ZSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTihpbnB1dC5kYXRhLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG5ldyBQYXJzZVN0YXR1cygpO1xuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaGVjay5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpIDwgY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmdldFRpbWUoKSA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMudmFsdWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IERhdGUoaW5wdXQuZGF0YS5nZXRUaW1lKCkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2REYXRlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1pbihtaW5EYXRlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IG1pbkRhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heERhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogbWF4RGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluRGF0ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgPyBuZXcgRGF0ZShtaW4pIDogbnVsbDtcbiAgICB9XG4gICAgZ2V0IG1heERhdGUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heCAhPSBudWxsID8gbmV3IERhdGUobWF4KSA6IG51bGw7XG4gICAgfVxufVxuWm9kRGF0ZS5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2REYXRlKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgY29lcmNlOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgfHwgZmFsc2UsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGF0ZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFN5bWJvbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN5bWJvbCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zeW1ib2wsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kU3ltYm9sLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFN5bWJvbCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3ltYm9sLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVW5kZWZpbmVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RVbmRlZmluZWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5kZWZpbmVkKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmRlZmluZWQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROdWxsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5udWxsLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZE51bGwuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVsbCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEFueSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvLyB0byBwcmV2ZW50IGluc3RhbmNlcyBvZiBvdGhlciBjbGFzc2VzIGZyb20gZXh0ZW5kaW5nIFpvZEFueS4gdGhpcyBjYXVzZXMgaXNzdWVzIHdpdGggY2F0Y2hhbGwgaW4gWm9kT2JqZWN0LlxuICAgICAgICB0aGlzLl9hbnkgPSB0cnVlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZEFueS5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RBbnkoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFueSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFVua25vd24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgLy8gcmVxdWlyZWRcbiAgICAgICAgdGhpcy5fdW5rbm93biA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kVW5rbm93bi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmtub3duKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmtub3duLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTmV2ZXIgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5uZXZlcixcbiAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgIH1cbn1cblpvZE5ldmVyLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5ldmVyKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROZXZlcixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFZvaWQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUudm9pZCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RWb2lkLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFZvaWQoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFZvaWQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RBcnJheSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCwgc3RhdHVzIH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLl9kZWY7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5hcnJheSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYuZXhhY3RMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGN0eC5kYXRhLmxlbmd0aCA+IGRlZi5leGFjdExlbmd0aC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY3R4LmRhdGEubGVuZ3RoIDwgZGVmLmV4YWN0TGVuZ3RoLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRvb0JpZyB8fCB0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0b29CaWcgPyBab2RJc3N1ZUNvZGUudG9vX2JpZyA6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06ICh0b29TbWFsbCA/IGRlZi5leGFjdExlbmd0aC52YWx1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06ICh0b29CaWcgPyBkZWYuZXhhY3RMZW5ndGgudmFsdWUgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5leGFjdExlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWluTGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEubGVuZ3RoIDwgZGVmLm1pbkxlbmd0aC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluTGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluTGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5tYXhMZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPiBkZWYubWF4TGVuZ3RoLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBkZWYubWF4TGVuZ3RoLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4TGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWYudHlwZS5fcGFyc2VBc3luYyhuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKTtcbiAgICAgICAgICAgIH0pKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uY3R4LmRhdGFdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi50eXBlLl9wYXJzZVN5bmMobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdCk7XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IHsgdmFsdWU6IG1pbkxlbmd0aCwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4TGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiB7IHZhbHVlOiBtYXhMZW5ndGgsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGVuZ3RoKGxlbiwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGV4YWN0TGVuZ3RoOiB7IHZhbHVlOiBsZW4sIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgbWVzc2FnZSk7XG4gICAgfVxufVxuWm9kQXJyYXkuY3JlYXRlID0gKHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICAgIGV4YWN0TGVuZ3RoOiBudWxsLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gZGVlcFBhcnRpYWxpZnkoc2NoZW1hKSB7XG4gICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE9iamVjdCkge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuc2hhcGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gc2NoZW1hLnNoYXBlW2tleV07XG4gICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gWm9kT3B0aW9uYWwuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KGZpZWxkU2NoZW1hKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4uc2NoZW1hLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RBcnJheSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnNjaGVtYS5fZGVmLFxuICAgICAgICAgICAgdHlwZTogZGVlcFBhcnRpYWxpZnkoc2NoZW1hLmVsZW1lbnQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIFpvZE9wdGlvbmFsLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kTnVsbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZE51bGxhYmxlLmNyZWF0ZShkZWVwUGFydGlhbGlmeShzY2hlbWEudW53cmFwKCkpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kVHVwbGUpIHtcbiAgICAgICAgcmV0dXJuIFpvZFR1cGxlLmNyZWF0ZShzY2hlbWEuaXRlbXMubWFwKChpdGVtKSA9PiBkZWVwUGFydGlhbGlmeShpdGVtKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG59XG5jbGFzcyBab2RPYmplY3QgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5fY2FjaGVkID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIEluIG1vc3QgY2FzZXMsIHRoaXMgaXMgbm8gbG9uZ2VyIG5lZWRlZCAtIHVua25vd24gcHJvcGVydGllcyBhcmUgbm93IHNpbGVudGx5IHN0cmlwcGVkLlxuICAgICAgICAgKiBJZiB5b3Ugd2FudCB0byBwYXNzIHRocm91Z2ggdW5rbm93biBwcm9wZXJ0aWVzLCB1c2UgYC5wYXNzdGhyb3VnaCgpYCBpbnN0ZWFkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ub25zdHJpY3QgPSB0aGlzLnBhc3N0aHJvdWdoO1xuICAgICAgICAvLyBleHRlbmQ8XG4gICAgICAgIC8vICAgQXVnbWVudGF0aW9uIGV4dGVuZHMgWm9kUmF3U2hhcGUsXG4gICAgICAgIC8vICAgTmV3T3V0cHV0IGV4dGVuZHMgdXRpbC5mbGF0dGVuPHtcbiAgICAgICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIE91dHB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfb3V0cHV0XCJdXG4gICAgICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIE91dHB1dFxuICAgICAgICAvLyAgICAgICA/IE91dHB1dFtrXVxuICAgICAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgICAgICAvLyAgIH0+LFxuICAgICAgICAvLyAgIE5ld0lucHV0IGV4dGVuZHMgdXRpbC5mbGF0dGVuPHtcbiAgICAgICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIElucHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgICAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9pbnB1dFwiXVxuICAgICAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBJbnB1dFxuICAgICAgICAvLyAgICAgICA/IElucHV0W2tdXG4gICAgICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgICAgIC8vICAgfT5cbiAgICAgICAgLy8gPihcbiAgICAgICAgLy8gICBhdWdtZW50YXRpb246IEF1Z21lbnRhdGlvblxuICAgICAgICAvLyApOiBab2RPYmplY3Q8XG4gICAgICAgIC8vICAgZXh0ZW5kU2hhcGU8VCwgQXVnbWVudGF0aW9uPixcbiAgICAgICAgLy8gICBVbmtub3duS2V5cyxcbiAgICAgICAgLy8gICBDYXRjaGFsbCxcbiAgICAgICAgLy8gICBOZXdPdXRwdXQsXG4gICAgICAgIC8vICAgTmV3SW5wdXRcbiAgICAgICAgLy8gPiB7XG4gICAgICAgIC8vICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAvLyAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAvLyAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgIC8vICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAvLyAgICAgICAuLi5hdWdtZW50YXRpb24sXG4gICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgLy8gICB9KSBhcyBhbnk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIFVzZSBgLmV4dGVuZGAgaW5zdGVhZFxuICAgICAgICAgKiAgKi9cbiAgICAgICAgdGhpcy5hdWdtZW50ID0gdGhpcy5leHRlbmQ7XG4gICAgfVxuICAgIF9nZXRDYWNoZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYWNoZWQgIT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkO1xuICAgICAgICBjb25zdCBzaGFwZSA9IHRoaXMuX2RlZi5zaGFwZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gdXRpbC5vYmplY3RLZXlzKHNoYXBlKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9jYWNoZWQgPSB7IHNoYXBlLCBrZXlzIH0pO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgeyBzaGFwZSwga2V5czogc2hhcGVLZXlzIH0gPSB0aGlzLl9nZXRDYWNoZWQoKTtcbiAgICAgICAgY29uc3QgZXh0cmFLZXlzID0gW107XG4gICAgICAgIGlmICghKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIFpvZE5ldmVyICYmXG4gICAgICAgICAgICB0aGlzLl9kZWYudW5rbm93bktleXMgPT09IFwic3RyaXBcIikpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGN0eC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFwZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFwZUtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbGlkYXRvciA9IHNoYXBlW2tleV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICB2YWx1ZToga2V5VmFsaWRhdG9yLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBab2ROZXZlcikge1xuICAgICAgICAgICAgY29uc3QgdW5rbm93bktleXMgPSB0aGlzLl9kZWYudW5rbm93bktleXM7XG4gICAgICAgICAgICBpZiAodW5rbm93bktleXMgPT09IFwicGFzc3Rocm91Z2hcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4dHJhS2V5cykge1xuICAgICAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBjdHguZGF0YVtrZXldIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVua25vd25LZXlzID09PSBcInN0cmljdFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dHJhS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnVucmVjb2duaXplZF9rZXlzLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogZXh0cmFLZXlzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5rbm93bktleXMgPT09IFwic3RyaXBcIikgO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBab2RPYmplY3QgZXJyb3I6IGludmFsaWQgdW5rbm93bktleXMgdmFsdWUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBydW4gY2F0Y2hhbGwgdmFsaWRhdGlvblxuICAgICAgICAgICAgY29uc3QgY2F0Y2hhbGwgPSB0aGlzLl9kZWYuY2F0Y2hhbGw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHRyYUtleXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGN0eC5kYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0Y2hhbGwuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIGtleSkgLy8sIGN0eC5jaGlsZChrZXkpLCB2YWx1ZSwgZ2V0UGFyc2VkVHlwZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzeW5jUGFpcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3luY1BhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IHBhaXIuYWx3YXlzU2V0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bmNQYWlycztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHN5bmNQYWlycykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBzeW5jUGFpcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zaGFwZSgpO1xuICAgIH1cbiAgICBzdHJpY3QobWVzc2FnZSkge1xuICAgICAgICBlcnJvclV0aWwuZXJyVG9PYmo7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICAgICAgLi4uKG1lc3NhZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcDogKGlzc3VlLCBjdHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRFcnJvciA9IChfYyA9IChfYiA9IChfYSA9IHRoaXMuX2RlZikuZXJyb3JNYXApID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBpc3N1ZSwgY3R4KS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBjdHguZGVmYXVsdEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc3VlLmNvZGUgPT09IFwidW5yZWNvZ25pemVkX2tleXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAoX2QgPSBlcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkubWVzc2FnZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RyaXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXNzdGhyb3VnaCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwicGFzc3Rocm91Z2hcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGNvbnN0IEF1Z21lbnRGYWN0b3J5ID1cbiAgICAvLyAgIDxEZWYgZXh0ZW5kcyBab2RPYmplY3REZWY+KGRlZjogRGVmKSA9PlxuICAgIC8vICAgPEF1Z21lbnRhdGlvbiBleHRlbmRzIFpvZFJhd1NoYXBlPihcbiAgICAvLyAgICAgYXVnbWVudGF0aW9uOiBBdWdtZW50YXRpb25cbiAgICAvLyAgICk6IFpvZE9iamVjdDxcbiAgICAvLyAgICAgZXh0ZW5kU2hhcGU8UmV0dXJuVHlwZTxEZWZbXCJzaGFwZVwiXT4sIEF1Z21lbnRhdGlvbj4sXG4gICAgLy8gICAgIERlZltcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgICBEZWZbXCJjYXRjaGFsbFwiXVxuICAgIC8vICAgPiA9PiB7XG4gICAgLy8gICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgICAuLi5kZWYsXG4gICAgLy8gICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgLy8gICAgICAgICAuLi5kZWYuc2hhcGUoKSxcbiAgICAvLyAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAvLyAgICAgICB9KSxcbiAgICAvLyAgICAgfSkgYXMgYW55O1xuICAgIC8vICAgfTtcbiAgICBleHRlbmQoYXVnbWVudGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJpb3IgdG8gem9kQDEuMC4xMiB0aGVyZSB3YXMgYSBidWcgaW4gdGhlXG4gICAgICogaW5mZXJyZWQgdHlwZSBvZiBtZXJnZWQgb2JqZWN0cy4gUGxlYXNlXG4gICAgICogdXBncmFkZSBpZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBpc3N1ZXMuXG4gICAgICovXG4gICAgbWVyZ2UobWVyZ2luZykge1xuICAgICAgICBjb25zdCBtZXJnZWQgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgICAgICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICAgICAgLi4ubWVyZ2luZy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG4gICAgLy8gbWVyZ2U8XG4gICAgLy8gICBJbmNvbWluZyBleHRlbmRzIEFueVpvZE9iamVjdCxcbiAgICAvLyAgIEF1Z21lbnRhdGlvbiBleHRlbmRzIEluY29taW5nW1wic2hhcGVcIl0sXG4gICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIE91dHB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBPdXRwdXRcbiAgICAvLyAgICAgICA/IE91dHB1dFtrXVxuICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgLy8gICB9LFxuICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB7XG4gICAgLy8gICAgIFtrIGluIGtleW9mIEF1Z21lbnRhdGlvbiB8IGtleW9mIElucHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgSW5wdXRcbiAgICAvLyAgICAgICA/IElucHV0W2tdXG4gICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAvLyAgIH1cbiAgICAvLyA+KFxuICAgIC8vICAgbWVyZ2luZzogSW5jb21pbmdcbiAgICAvLyApOiBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdLFxuICAgIC8vICAgTmV3T3V0cHV0LFxuICAgIC8vICAgTmV3SW5wdXRcbiAgICAvLyA+IHtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBzZXRLZXkoa2V5LCBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXVnbWVudCh7IFtrZXldOiBzY2hlbWEgfSk7XG4gICAgfVxuICAgIC8vIG1lcmdlPEluY29taW5nIGV4dGVuZHMgQW55Wm9kT2JqZWN0PihcbiAgICAvLyAgIG1lcmdpbmc6IEluY29taW5nXG4gICAgLy8gKTogLy9ab2RPYmplY3Q8VCAmIEluY29taW5nW1wiX3NoYXBlXCJdLCBVbmtub3duS2V5cywgQ2F0Y2hhbGw+ID0gKG1lcmdpbmcpID0+IHtcbiAgICAvLyBab2RPYmplY3Q8XG4gICAgLy8gICBleHRlbmRTaGFwZTxULCBSZXR1cm5UeXBlPEluY29taW5nW1wiX2RlZlwiXVtcInNoYXBlXCJdPj4sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcImNhdGNoYWxsXCJdXG4gICAgLy8gPiB7XG4gICAgLy8gICAvLyBjb25zdCBtZXJnZWRTaGFwZSA9IG9iamVjdFV0aWwubWVyZ2VTaGFwZXMoXG4gICAgLy8gICAvLyAgIHRoaXMuX2RlZi5zaGFwZSgpLFxuICAgIC8vICAgLy8gICBtZXJnaW5nLl9kZWYuc2hhcGUoKVxuICAgIC8vICAgLy8gKTtcbiAgICAvLyAgIGNvbnN0IG1lcmdlZDogYW55ID0gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgIHVua25vd25LZXlzOiBtZXJnaW5nLl9kZWYudW5rbm93bktleXMsXG4gICAgLy8gICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgLy8gICAgIHNoYXBlOiAoKSA9PlxuICAgIC8vICAgICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXModGhpcy5fZGVmLnNoYXBlKCksIG1lcmdpbmcuX2RlZi5zaGFwZSgpKSxcbiAgICAvLyAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgLy8gICB9KSBhcyBhbnk7XG4gICAgLy8gICByZXR1cm4gbWVyZ2VkO1xuICAgIC8vIH1cbiAgICBjYXRjaGFsbChpbmRleCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjYXRjaGFsbDogaW5kZXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaWNrKG1hc2spIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKG1hc2spLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1hc2tba2V5XSAmJiB0aGlzLnNoYXBlW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb21pdChtYXNrKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZGVlcFBhcnRpYWwoKSB7XG4gICAgICAgIHJldHVybiBkZWVwUGFydGlhbGlmeSh0aGlzKTtcbiAgICB9XG4gICAgcGFydGlhbChtYXNrKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgaWYgKG1hc2sgJiYgIW1hc2tba2V5XSkge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBmaWVsZFNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBmaWVsZFNjaGVtYS5vcHRpb25hbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWlyZWQobWFzaykge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgICAgIGxldCBuZXdGaWVsZCA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXdGaWVsZCBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0ZpZWxkID0gbmV3RmllbGQuX2RlZi5pbm5lclR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBuZXdGaWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGtleW9mKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlWm9kRW51bSh1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkpO1xuICAgIH1cbn1cblpvZE9iamVjdC5jcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LnN0cmljdENyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmljdFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kT2JqZWN0LmxhenljcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RVbmlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2RlZi5vcHRpb25zO1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVSZXN1bHRzKHJlc3VsdHMpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBmaXJzdCBpc3N1ZS1mcmVlIHZhbGlkYXRpb24gaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBpc3N1ZXMgZnJvbSBkaXJ0eSBvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaCguLi5yZXN1bHQuY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXR1cm4gaW52YWxpZFxuICAgICAgICAgICAgY29uc3QgdW5pb25FcnJvcnMgPSByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiBuZXcgWm9kRXJyb3IocmVzdWx0LmN0eC5jb21tb24uaXNzdWVzKSk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbixcbiAgICAgICAgICAgICAgICB1bmlvbkVycm9ycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChvcHRpb25zLm1hcChhc3luYyAob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHggPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBhd2FpdCBvcHRpb24uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBjdHg6IGNoaWxkQ3R4LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSkudGhlbihoYW5kbGVSZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaXJ0eSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGlzc3VlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3R4ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LmNvbW1vbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGNoaWxkQ3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiICYmICFkaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHsgcmVzdWx0LCBjdHg6IGNoaWxkQ3R4IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjaGlsZEN0eC5jb21tb24uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXMucHVzaChjaGlsZEN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGlydHkpIHtcbiAgICAgICAgICAgICAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKC4uLmRpcnR5LmN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGlydHkucmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdW5pb25FcnJvcnMgPSBpc3N1ZXMubWFwKChpc3N1ZXMpID0+IG5ldyBab2RFcnJvcihpc3N1ZXMpKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uLFxuICAgICAgICAgICAgICAgIHVuaW9uRXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zO1xuICAgIH1cbn1cblpvZFVuaW9uLmNyZWF0ZSA9ICh0eXBlcywgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmlvbih7XG4gICAgICAgIG9wdGlvbnM6IHR5cGVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuaW9uLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmNvbnN0IGdldERpc2NyaW1pbmF0b3IgPSAodHlwZSkgPT4ge1xuICAgIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTGF6eSkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnNjaGVtYSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RFZmZlY3RzKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuaW5uZXJUeXBlKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTGl0ZXJhbCkge1xuICAgICAgICByZXR1cm4gW3R5cGUudmFsdWVdO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRW51bSkge1xuICAgICAgICByZXR1cm4gdHlwZS5vcHRpb25zO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTmF0aXZlRW51bSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYmFuL2JhblxuICAgICAgICByZXR1cm4gdXRpbC5vYmplY3RWYWx1ZXModHlwZS5lbnVtKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZERlZmF1bHQpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5fZGVmLmlubmVyVHlwZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RVbmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTnVsbCkge1xuICAgICAgICByZXR1cm4gW251bGxdO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIC4uLmdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSldO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kTnVsbGFibGUpIHtcbiAgICAgICAgcmV0dXJuIFtudWxsLCAuLi5nZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEJyYW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RSZWFkb25seSkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZENhdGNoKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuX2RlZi5pbm5lclR5cGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn07XG5jbGFzcyBab2REaXNjcmltaW5hdGVkVW5pb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvciA9IHRoaXMuZGlzY3JpbWluYXRvcjtcbiAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclZhbHVlID0gY3R4LmRhdGFbZGlzY3JpbWluYXRvcl07XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMub3B0aW9uc01hcC5nZXQoZGlzY3JpbWluYXRvclZhbHVlKTtcbiAgICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogQXJyYXkuZnJvbSh0aGlzLm9wdGlvbnNNYXAua2V5cygpKSxcbiAgICAgICAgICAgICAgICBwYXRoOiBbZGlzY3JpbWluYXRvcl0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkaXNjcmltaW5hdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmRpc2NyaW1pbmF0b3I7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBvcHRpb25zTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnNNYXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgZGlzY3JpbWluYXRlZCB1bmlvbiBzY2hlbWEuIEl0cyBiZWhhdmlvdXIgaXMgdmVyeSBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIG5vcm1hbCB6LnVuaW9uKCkgY29uc3RydWN0b3IuXG4gICAgICogSG93ZXZlciwgaXQgb25seSBhbGxvd3MgYSB1bmlvbiBvZiBvYmplY3RzLCBhbGwgb2Ygd2hpY2ggbmVlZCB0byBzaGFyZSBhIGRpc2NyaW1pbmF0b3IgcHJvcGVydHkuIFRoaXMgcHJvcGVydHkgbXVzdFxuICAgICAqIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIGVhY2ggb2JqZWN0IGluIHRoZSB1bmlvbi5cbiAgICAgKiBAcGFyYW0gZGlzY3JpbWluYXRvciB0aGUgbmFtZSBvZiB0aGUgZGlzY3JpbWluYXRvciBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0eXBlcyBhbiBhcnJheSBvZiBvYmplY3Qgc2NoZW1hc1xuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKi9cbiAgICBzdGF0aWMgY3JlYXRlKGRpc2NyaW1pbmF0b3IsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgICAvLyBHZXQgYWxsIHRoZSB2YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlc1xuICAgICAgICBjb25zdCBvcHRpb25zTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAvLyB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclZhbHVlcyA9IGdldERpc2NyaW1pbmF0b3IodHlwZS5zaGFwZVtkaXNjcmltaW5hdG9yXSk7XG4gICAgICAgICAgICBpZiAoIWRpc2NyaW1pbmF0b3JWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGRpc2NyaW1pbmF0b3IgdmFsdWUgZm9yIGtleSBcXGAke2Rpc2NyaW1pbmF0b3J9XFxgIGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQgZnJvbSBhbGwgc2NoZW1hIG9wdGlvbnNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgZGlzY3JpbWluYXRvclZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zTWFwLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjcmltaW5hdG9yIHByb3BlcnR5ICR7U3RyaW5nKGRpc2NyaW1pbmF0b3IpfSBoYXMgZHVwbGljYXRlIHZhbHVlICR7U3RyaW5nKHZhbHVlKX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9uc01hcC5zZXQodmFsdWUsIHR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kRGlzY3JpbWluYXRlZFVuaW9uKHtcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGlzY3JpbWluYXRlZFVuaW9uLFxuICAgICAgICAgICAgZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zTWFwLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlcyhhLCBiKSB7XG4gICAgY29uc3QgYVR5cGUgPSBnZXRQYXJzZWRUeXBlKGEpO1xuICAgIGNvbnN0IGJUeXBlID0gZ2V0UGFyc2VkVHlwZShiKTtcbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGJLZXlzID0gdXRpbC5vYmplY3RLZXlzKGIpO1xuICAgICAgICBjb25zdCBzaGFyZWRLZXlzID0gdXRpbFxuICAgICAgICAgICAgLm9iamVjdEtleXMoYSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGtleSkgPT4gYktleXMuaW5kZXhPZihrZXkpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IG5ld09iaiA9IHsgLi4uYSwgLi4uYiB9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFyZWRLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRWYWx1ZSA9IG1lcmdlVmFsdWVzKGFba2V5XSwgYltrZXldKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld09ialtrZXldID0gc2hhcmVkVmFsdWUuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3T2JqIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLmFycmF5ICYmIGJUeXBlID09PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0FycmF5ID0gW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbUEgPSBhW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1CID0gYltpbmRleF07XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRWYWx1ZSA9IG1lcmdlVmFsdWVzKGl0ZW1BLCBpdGVtQik7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdBcnJheS5wdXNoKHNoYXJlZFZhbHVlLmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdBcnJheSB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5kYXRlICYmXG4gICAgICAgIGJUeXBlID09PSBab2RQYXJzZWRUeXBlLmRhdGUgJiZcbiAgICAgICAgK2EgPT09ICtiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICB9XG59XG5jbGFzcyBab2RJbnRlcnNlY3Rpb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgaGFuZGxlUGFyc2VkID0gKHBhcnNlZExlZnQsIHBhcnNlZFJpZ2h0KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNBYm9ydGVkKHBhcnNlZExlZnQpIHx8IGlzQWJvcnRlZChwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlVmFsdWVzKHBhcnNlZExlZnQudmFsdWUsIHBhcnNlZFJpZ2h0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmICghbWVyZ2VkLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RpcnR5KHBhcnNlZExlZnQpIHx8IGlzRGlydHkocGFyc2VkUmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IG1lcmdlZC5kYXRhIH07XG4gICAgICAgIH07XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5sZWZ0Ll9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWYucmlnaHQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSkudGhlbigoW2xlZnQsIHJpZ2h0XSkgPT4gaGFuZGxlUGFyc2VkKGxlZnQsIHJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUGFyc2VkKHRoaXMuX2RlZi5sZWZ0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSksIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblpvZEludGVyc2VjdGlvbi5jcmVhdGUgPSAobGVmdCwgcmlnaHQsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kSW50ZXJzZWN0aW9uKHtcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEludGVyc2VjdGlvbixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFR1cGxlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5hcnJheSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPCB0aGlzLl9kZWYuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgIG1pbmltdW06IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3QgPSB0aGlzLl9kZWYucmVzdDtcbiAgICAgICAgaWYgKCFyZXN0ICYmIGN0eC5kYXRhLmxlbmd0aCA+IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgIG1heGltdW06IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLmN0eC5kYXRhXVxuICAgICAgICAgICAgLm1hcCgoaXRlbSwgaXRlbUluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLl9kZWYuaXRlbXNbaXRlbUluZGV4XSB8fCB0aGlzLl9kZWYucmVzdDtcbiAgICAgICAgICAgIGlmICghc2NoZW1hKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpdGVtSW5kZXgpKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+ICEheCk7IC8vIGZpbHRlciBudWxsc1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGl0ZW1zKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCBpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLml0ZW1zO1xuICAgIH1cbiAgICByZXN0KHJlc3QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RUdXBsZSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXN0LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5ab2RUdXBsZS5jcmVhdGUgPSAoc2NoZW1hcywgcGFyYW1zKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgb2Ygc2NoZW1hcyB0byB6LnR1cGxlKFsgLi4uIF0pXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgaXRlbXM6IHNjaGVtYXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVHVwbGUsXG4gICAgICAgIHJlc3Q6IG51bGwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RSZWNvcmQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBnZXQga2V5U2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgfVxuICAgIGdldCB2YWx1ZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgICAgIGNvbnN0IGtleVR5cGUgPSB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3R4LmRhdGEpIHtcbiAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleToga2V5VHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGtleSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBjdHguZGF0YVtrZXldLCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0QXN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShmaXJzdCwgc2Vjb25kLCB0aGlyZCkge1xuICAgICAgICBpZiAoc2Vjb25kIGluc3RhbmNlb2YgWm9kVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAgICAgIGtleVR5cGU6IGZpcnN0LFxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZTogc2Vjb25kLFxuICAgICAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcmQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAga2V5VHlwZTogWm9kU3RyaW5nLmNyZWF0ZSgpLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiBmaXJzdCxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVjb3JkLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhzZWNvbmQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBab2RNYXAgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBnZXQga2V5U2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgfVxuICAgIGdldCB2YWx1ZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubWFwKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm1hcCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleVR5cGUgPSB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICAgICAgY29uc3QgcGFpcnMgPSBbLi4uY3R4LmRhdGEuZW50cmllcygpXS5tYXAoKFtrZXksIHZhbHVlXSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5OiBrZXlUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwga2V5LCBjdHgucGF0aCwgW2luZGV4LCBcImtleVwiXSkpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIFtpbmRleCwgXCJ2YWx1ZVwiXSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsTWFwLnNldChrZXkudmFsdWUsIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE1hcCB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmaW5hbE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxNYXAuc2V0KGtleS52YWx1ZSwgdmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBmaW5hbE1hcCB9O1xuICAgICAgICB9XG4gICAgfVxufVxuWm9kTWFwLmNyZWF0ZSA9IChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTWFwKHtcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE1hcCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFNldCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc2V0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnNldCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuX2RlZjtcbiAgICAgICAgaWYgKGRlZi5taW5TaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEuc2l6ZSA8IGRlZi5taW5TaXplLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5TaXplLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1pblNpemUubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1heFNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplID4gZGVmLm1heFNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhTaXplLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1heFNpemUubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBmdW5jdGlvbiBmaW5hbGl6ZVNldChlbGVtZW50cykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIHBhcnNlZFNldC5hZGQoZWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IHBhcnNlZFNldCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gWy4uLmN0eC5kYXRhLnZhbHVlcygpXS5tYXAoKGl0ZW0sIGkpID0+IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSkpO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGVsZW1lbnRzKS50aGVuKChlbGVtZW50cykgPT4gZmluYWxpemVTZXQoZWxlbWVudHMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGl6ZVNldChlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWluKG1pblNpemUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWluU2l6ZTogeyB2YWx1ZTogbWluU2l6ZSwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4U2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtYXhTaXplOiB7IHZhbHVlOiBtYXhTaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNpemUoc2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oc2l6ZSwgbWVzc2FnZSkubWF4KHNpemUsIG1lc3NhZ2UpO1xuICAgIH1cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBtZXNzYWdlKTtcbiAgICB9XG59XG5ab2RTZXQuY3JlYXRlID0gKHZhbHVlVHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIG1pblNpemU6IG51bGwsXG4gICAgICAgIG1heFNpemU6IG51bGwsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU2V0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRnVuY3Rpb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZSA9IHRoaXMuaW1wbGVtZW50O1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5mdW5jdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VBcmdzSXNzdWUoYXJncywgZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSXNzdWUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGFyZ3MsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICAgICAgICAgIGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLFxuICAgICAgICAgICAgICAgICAgICBjdHguc2NoZW1hRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGdldEVycm9yTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWFwLFxuICAgICAgICAgICAgICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9hcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0Vycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWFrZVJldHVybnNJc3N1ZShyZXR1cm5zLCBlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VJc3N1ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogcmV0dXJucyxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcHM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3JNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3JldHVybl90eXBlLFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IGVycm9yTWFwOiBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCB9O1xuICAgICAgICBjb25zdCBmbiA9IGN0eC5kYXRhO1xuICAgICAgICBpZiAodGhpcy5fZGVmLnJldHVybnMgaW5zdGFuY2VvZiBab2RQcm9taXNlKSB7XG4gICAgICAgICAgICAvLyBXb3VsZCBsb3ZlIGEgd2F5IHRvIGF2b2lkIGRpc2FibGluZyB0aGlzIHJ1bGUsIGJ1dCB3ZSBuZWVkXG4gICAgICAgICAgICAvLyBhbiBhbGlhcyAodXNpbmcgYW4gYXJyb3cgZnVuY3Rpb24gd2FzIHdoYXQgY2F1c2VkIDI2NTEpLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT0soYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihbXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IGF3YWl0IG1lLl9kZWYuYXJnc1xuICAgICAgICAgICAgICAgICAgICAucGFyc2VBc3luYyhhcmdzLCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5hZGRJc3N1ZShtYWtlQXJnc0lzc3VlKGFyZ3MsIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUmVmbGVjdC5hcHBseShmbiwgdGhpcywgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmV0dXJucyA9IGF3YWl0IG1lLl9kZWYucmV0dXJucy5fZGVmLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgLnBhcnNlQXN5bmMocmVzdWx0LCBwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5hZGRJc3N1ZShtYWtlUmV0dXJuc0lzc3VlKHJlc3VsdCwgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV291bGQgbG92ZSBhIHdheSB0byBhdm9pZCBkaXNhYmxpbmcgdGhpcyBydWxlLCBidXQgd2UgbmVlZFxuICAgICAgICAgICAgLy8gYW4gYWxpYXMgKHVzaW5nIGFuIGFycm93IGZ1bmN0aW9uIHdhcyB3aGF0IGNhdXNlZCAyNjUxKS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIE9LKGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IG1lLl9kZWYuYXJncy5zYWZlUGFyc2UoYXJncywgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZEFyZ3Muc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VBcmdzSXNzdWUoYXJncywgcGFyc2VkQXJncy5lcnJvcildKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5hcHBseShmbiwgdGhpcywgcGFyc2VkQXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gbWUuX2RlZi5yZXR1cm5zLnNhZmVQYXJzZShyZXN1bHQsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRSZXR1cm5zLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFpvZEVycm9yKFttYWtlUmV0dXJuc0lzc3VlKHJlc3VsdCwgcGFyc2VkUmV0dXJucy5lcnJvcildKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFJldHVybnMuZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhcmFtZXRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuYXJncztcbiAgICB9XG4gICAgcmV0dXJuVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5yZXR1cm5zO1xuICAgIH1cbiAgICBhcmdzKC4uLml0ZW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgYXJnczogWm9kVHVwbGUuY3JlYXRlKGl0ZW1zKS5yZXN0KFpvZFVua25vd24uY3JlYXRlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJucyhyZXR1cm5UeXBlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgcmV0dXJuczogcmV0dXJuVHlwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGltcGxlbWVudChmdW5jKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZ1bmMgPSB0aGlzLnBhcnNlKGZ1bmMpO1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVkRnVuYztcbiAgICB9XG4gICAgc3RyaWN0SW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGFyZ3MsIHJldHVybnMsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgIGFyZ3M6IChhcmdzXG4gICAgICAgICAgICAgICAgPyBhcmdzXG4gICAgICAgICAgICAgICAgOiBab2RUdXBsZS5jcmVhdGUoW10pLnJlc3QoWm9kVW5rbm93bi5jcmVhdGUoKSkpLFxuICAgICAgICAgICAgcmV0dXJuczogcmV0dXJucyB8fCBab2RVbmtub3duLmNyZWF0ZSgpLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RGdW5jdGlvbixcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY2xhc3MgWm9kTGF6eSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBzY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZ2V0dGVyKCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgbGF6eVNjaGVtYSA9IHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICAgICAgcmV0dXJuIGxhenlTY2hlbWEuX3BhcnNlKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICB9XG59XG5ab2RMYXp5LmNyZWF0ZSA9IChnZXR0ZXIsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTGF6eSh7XG4gICAgICAgIGdldHRlcjogZ2V0dGVyLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZExhenksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RMaXRlcmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5kYXRhICE9PSB0aGlzLl9kZWYudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9saXRlcmFsLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB0aGlzLl9kZWYudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWU7XG4gICAgfVxufVxuWm9kTGl0ZXJhbC5jcmVhdGUgPSAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTGl0ZXJhbCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RMaXRlcmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gY3JlYXRlWm9kRW51bSh2YWx1ZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFbnVtLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5jbGFzcyBab2RFbnVtIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIF9ab2RFbnVtX2NhY2hlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5kYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdXRpbC5qb2luVmFsdWVzKGV4cGVjdGVkVmFsdWVzKSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ab2RFbnVtX2NhY2hlLCBcImZcIikpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1pvZEVudW1fY2FjaGUsIG5ldyBTZXQodGhpcy5fZGVmLnZhbHVlcyksIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZEVudW1fY2FjaGUsIFwiZlwiKS5oYXMoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG4gICAgZ2V0IGVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBnZXQgVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZ2V0IEVudW0oKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBleHRyYWN0KHZhbHVlcywgbmV3RGVmID0gdGhpcy5fZGVmKSB7XG4gICAgICAgIHJldHVybiBab2RFbnVtLmNyZWF0ZSh2YWx1ZXMsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIC4uLm5ld0RlZixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4Y2x1ZGUodmFsdWVzLCBuZXdEZWYgPSB0aGlzLl9kZWYpIHtcbiAgICAgICAgcmV0dXJuIFpvZEVudW0uY3JlYXRlKHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gIXZhbHVlcy5pbmNsdWRlcyhvcHQpKSwge1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgLi4ubmV3RGVmLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5fWm9kRW51bV9jYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5ab2RFbnVtLmNyZWF0ZSA9IGNyZWF0ZVpvZEVudW07XG5jbGFzcyBab2ROYXRpdmVFbnVtIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIF9ab2ROYXRpdmVFbnVtX2NhY2hlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRW51bVZhbHVlcyA9IHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpO1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zdHJpbmcgJiZcbiAgICAgICAgICAgIGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB1dGlsLm9iamVjdFZhbHVlcyhuYXRpdmVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB1dGlsLmpvaW5WYWx1ZXMoZXhwZWN0ZWRWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZE5hdGl2ZUVudW1fY2FjaGUsIFwiZlwiKSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgbmV3IFNldCh1dGlsLmdldFZhbGlkRW51bVZhbHVlcyh0aGlzLl9kZWYudmFsdWVzKSksIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZE5hdGl2ZUVudW1fY2FjaGUsIFwiZlwiKS5oYXMoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdXRpbC5vYmplY3RWYWx1ZXMobmF0aXZlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBleHBlY3RlZFZhbHVlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBnZXQgZW51bSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgfVxufVxuX1pvZE5hdGl2ZUVudW1fY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuWm9kTmF0aXZlRW51bS5jcmVhdGUgPSAodmFsdWVzLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5hdGl2ZUVudW0oe1xuICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROYXRpdmVFbnVtLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kUHJvbWlzZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5wcm9taXNlICYmXG4gICAgICAgICAgICBjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5wcm9taXNlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzaWZpZWQgPSBjdHgucGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5wcm9taXNlXG4gICAgICAgICAgICA/IGN0eC5kYXRhXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShjdHguZGF0YSk7XG4gICAgICAgIHJldHVybiBPSyhwcm9taXNpZmllZC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGUucGFyc2VBc3luYyhkYXRhLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5ab2RQcm9taXNlLmNyZWF0ZSA9IChzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kUHJvbWlzZSh7XG4gICAgICAgIHR5cGU6IHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQcm9taXNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRWZmZWN0cyBleHRlbmRzIFpvZFR5cGUge1xuICAgIGlubmVyVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWE7XG4gICAgfVxuICAgIHNvdXJjZVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gICAgICAgICAgICA/IHRoaXMuX2RlZi5zY2hlbWEuc291cmNlVHlwZSgpXG4gICAgICAgICAgICA6IHRoaXMuX2RlZi5zY2hlbWE7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBlZmZlY3QgPSB0aGlzLl9kZWYuZWZmZWN0IHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGNoZWNrQ3R4ID0ge1xuICAgICAgICAgICAgYWRkSXNzdWU6IChhcmcpID0+IHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIGFyZyk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZy5mYXRhbCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgcGF0aCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnBhdGg7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjaGVja0N0eC5hZGRJc3N1ZSA9IGNoZWNrQ3R4LmFkZElzc3VlLmJpbmQoY2hlY2tDdHgpO1xuICAgICAgICBpZiAoZWZmZWN0LnR5cGUgPT09IFwicHJlcHJvY2Vzc1wiKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBlZmZlY3QudHJhbnNmb3JtKGN0eC5kYXRhLCBjaGVja0N0eCk7XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocHJvY2Vzc2VkKS50aGVuKGFzeW5jIChwcm9jZXNzZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBwcm9jZXNzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcHJvY2Vzc2VkLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInJlZmluZW1lbnRcIikge1xuICAgICAgICAgICAgY29uc3QgZXhlY3V0ZVJlZmluZW1lbnQgPSAoYWNjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZWZmZWN0LnJlZmluZW1lbnQoYWNjLCBjaGVja0N0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3luYyByZWZpbmVtZW50IGVuY291bnRlcmVkIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZSBvcGVyYXRpb24uIFVzZSAucGFyc2VBc3luYyBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbm5lciA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChpbm5lci5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWRcbiAgICAgICAgICAgICAgICBleGVjdXRlUmVmaW5lbWVudChpbm5lci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbm5lci52YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgLl9wYXJzZUFzeW5jKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoaW5uZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleGVjdXRlUmVmaW5lbWVudChpbm5lci52YWx1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlubmVyLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKGJhc2UpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlZmZlY3QudHJhbnNmb3JtKGJhc2UudmFsdWUsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzeW5jaHJvbm91cyB0cmFuc2Zvcm0gZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcmVzdWx0IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAuX3BhcnNlQXN5bmMoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChiYXNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZChiYXNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpKS50aGVuKChyZXN1bHQpID0+ICh7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcmVzdWx0IH0pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGVmZmVjdCk7XG4gICAgfVxufVxuWm9kRWZmZWN0cy5jcmVhdGUgPSAoc2NoZW1hLCBlZmZlY3QsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICBlZmZlY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RFZmZlY3RzLmNyZWF0ZVdpdGhQcmVwcm9jZXNzID0gKHByZXByb2Nlc3MsIHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJwcmVwcm9jZXNzXCIsIHRyYW5zZm9ybTogcHJlcHJvY2VzcyB9LFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RPcHRpb25hbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIE9LKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RPcHRpb25hbC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPcHRpb25hbCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPcHRpb25hbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE51bGxhYmxlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUubnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIE9LKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kTnVsbGFibGUuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVsbGFibGUoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVsbGFibGUsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2REZWZhdWx0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBsZXQgZGF0YSA9IGN0eC5kYXRhO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGVmLmRlZmF1bHRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZURlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZERlZmF1bHQuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRGVmYXVsdCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHR5cGVvZiBwYXJhbXMuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHBhcmFtcy5kZWZhdWx0XG4gICAgICAgICAgICA6ICgpID0+IHBhcmFtcy5kZWZhdWx0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQ2F0Y2ggZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIC8vIG5ld0N0eCBpcyB1c2VkIHRvIG5vdCBjb2xsZWN0IGlzc3VlcyBmcm9tIGlubmVyIHR5cGVzIGluIGN0eFxuICAgICAgICBjb25zdCBuZXdDdHggPSB7XG4gICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhOiBuZXdDdHguZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IG5ld0N0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiB7XG4gICAgICAgICAgICAgICAgLi4ubmV3Q3R4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0FzeW5jKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBcInZhbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzdWx0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZi5jYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWm9kRXJyb3IobmV3Q3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVzdWx0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWm9kRXJyb3IobmV3Q3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBuZXdDdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUNhdGNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RDYXRjaC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RDYXRjaCh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RDYXRjaCxcbiAgICAgICAgY2F0Y2hWYWx1ZTogdHlwZW9mIHBhcmFtcy5jYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gcGFyYW1zLmNhdGNoIDogKCkgPT4gcGFyYW1zLmNhdGNoLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTmFOIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubmFuKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5hbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbn1cblpvZE5hTi5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROYU4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hTixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNvbnN0IEJSQU5EID0gU3ltYm9sKFwiem9kX2JyYW5kXCIpO1xuY2xhc3MgWm9kQnJhbmRlZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGN0eC5kYXRhO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxufVxuY2xhc3MgWm9kUGlwZWxpbmUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUFzeW5jID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluUmVzdWx0ID0gYXdhaXQgdGhpcy5fZGVmLmluLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkoaW5SZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vdXQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUFzeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpblJlc3VsdCA9IHRoaXMuX2RlZi5pbi5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwiZGlydHlcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm91dC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RQaXBlbGluZSh7XG4gICAgICAgICAgICBpbjogYSxcbiAgICAgICAgICAgIG91dDogYixcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUGlwZWxpbmUsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNsYXNzIFpvZFJlYWRvbmx5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgY29uc3QgZnJlZXplID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YS52YWx1ZSA9IE9iamVjdC5mcmVlemUoZGF0YS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGlzQXN5bmMocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHQudGhlbigoZGF0YSkgPT4gZnJlZXplKGRhdGEpKVxuICAgICAgICAgICAgOiBmcmVlemUocmVzdWx0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2RSZWFkb25seS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RSZWFkb25seSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWFkb25seSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGN1c3RvbShjaGVjaywgcGFyYW1zID0ge30sIFxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICpcbiAqIFBhc3MgYGZhdGFsYCBpbnRvIHRoZSBwYXJhbXMgb2JqZWN0IGluc3RlYWQ6XG4gKlxuICogYGBgdHNcbiAqIHouc3RyaW5nKCkuY3VzdG9tKCh2YWwpID0+IHZhbC5sZW5ndGggPiA1LCB7IGZhdGFsOiBmYWxzZSB9KVxuICogYGBgXG4gKlxuICovXG5mYXRhbCkge1xuICAgIGlmIChjaGVjaylcbiAgICAgICAgcmV0dXJuIFpvZEFueS5jcmVhdGUoKS5zdXBlclJlZmluZSgoZGF0YSwgY3R4KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgaWYgKCFjaGVjayhkYXRhKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSB0eXBlb2YgcGFyYW1zID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJhbXMoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgcGFyYW1zID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHsgbWVzc2FnZTogcGFyYW1zIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyYW1zO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9mYXRhbCA9IChfYiA9IChfYSA9IHAuZmF0YWwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhdGFsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHAyID0gdHlwZW9mIHAgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2U6IHAgfSA6IHA7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHsgY29kZTogXCJjdXN0b21cIiwgLi4ucDIsIGZhdGFsOiBfZmF0YWwgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBab2RBbnkuY3JlYXRlKCk7XG59XG5jb25zdCBsYXRlID0ge1xuICAgIG9iamVjdDogWm9kT2JqZWN0LmxhenljcmVhdGUsXG59O1xudmFyIFpvZEZpcnN0UGFydHlUeXBlS2luZDtcbihmdW5jdGlvbiAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKSB7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU3RyaW5nXCJdID0gXCJab2RTdHJpbmdcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdW1iZXJcIl0gPSBcIlpvZE51bWJlclwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5hTlwiXSA9IFwiWm9kTmFOXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQmlnSW50XCJdID0gXCJab2RCaWdJbnRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCb29sZWFuXCJdID0gXCJab2RCb29sZWFuXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGF0ZVwiXSA9IFwiWm9kRGF0ZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFN5bWJvbFwiXSA9IFwiWm9kU3ltYm9sXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5kZWZpbmVkXCJdID0gXCJab2RVbmRlZmluZWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdWxsXCJdID0gXCJab2ROdWxsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQW55XCJdID0gXCJab2RBbnlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmtub3duXCJdID0gXCJab2RVbmtub3duXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmV2ZXJcIl0gPSBcIlpvZE5ldmVyXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVm9pZFwiXSA9IFwiWm9kVm9pZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEFycmF5XCJdID0gXCJab2RBcnJheVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE9iamVjdFwiXSA9IFwiWm9kT2JqZWN0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5pb25cIl0gPSBcIlpvZFVuaW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCJdID0gXCJab2REaXNjcmltaW5hdGVkVW5pb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RJbnRlcnNlY3Rpb25cIl0gPSBcIlpvZEludGVyc2VjdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFR1cGxlXCJdID0gXCJab2RUdXBsZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFJlY29yZFwiXSA9IFwiWm9kUmVjb3JkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTWFwXCJdID0gXCJab2RNYXBcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTZXRcIl0gPSBcIlpvZFNldFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEZ1bmN0aW9uXCJdID0gXCJab2RGdW5jdGlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZExhenlcIl0gPSBcIlpvZExhenlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RMaXRlcmFsXCJdID0gXCJab2RMaXRlcmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRW51bVwiXSA9IFwiWm9kRW51bVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEVmZmVjdHNcIl0gPSBcIlpvZEVmZmVjdHNcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROYXRpdmVFbnVtXCJdID0gXCJab2ROYXRpdmVFbnVtXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kT3B0aW9uYWxcIl0gPSBcIlpvZE9wdGlvbmFsXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVsbGFibGVcIl0gPSBcIlpvZE51bGxhYmxlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRGVmYXVsdFwiXSA9IFwiWm9kRGVmYXVsdFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZENhdGNoXCJdID0gXCJab2RDYXRjaFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFByb21pc2VcIl0gPSBcIlpvZFByb21pc2VcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCcmFuZGVkXCJdID0gXCJab2RCcmFuZGVkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUGlwZWxpbmVcIl0gPSBcIlpvZFBpcGVsaW5lXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUmVhZG9ubHlcIl0gPSBcIlpvZFJlYWRvbmx5XCI7XG59KShab2RGaXJzdFBhcnR5VHlwZUtpbmQgfHwgKFpvZEZpcnN0UGFydHlUeXBlS2luZCA9IHt9KSk7XG5jb25zdCBpbnN0YW5jZU9mVHlwZSA9IChcbi8vIGNvbnN0IGluc3RhbmNlT2ZUeXBlID0gPFQgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk+KFxuY2xzLCBwYXJhbXMgPSB7XG4gICAgbWVzc2FnZTogYElucHV0IG5vdCBpbnN0YW5jZSBvZiAke2Nscy5uYW1lfWAsXG59KSA9PiBjdXN0b20oKGRhdGEpID0+IGRhdGEgaW5zdGFuY2VvZiBjbHMsIHBhcmFtcyk7XG5jb25zdCBzdHJpbmdUeXBlID0gWm9kU3RyaW5nLmNyZWF0ZTtcbmNvbnN0IG51bWJlclR5cGUgPSBab2ROdW1iZXIuY3JlYXRlO1xuY29uc3QgbmFuVHlwZSA9IFpvZE5hTi5jcmVhdGU7XG5jb25zdCBiaWdJbnRUeXBlID0gWm9kQmlnSW50LmNyZWF0ZTtcbmNvbnN0IGJvb2xlYW5UeXBlID0gWm9kQm9vbGVhbi5jcmVhdGU7XG5jb25zdCBkYXRlVHlwZSA9IFpvZERhdGUuY3JlYXRlO1xuY29uc3Qgc3ltYm9sVHlwZSA9IFpvZFN5bWJvbC5jcmVhdGU7XG5jb25zdCB1bmRlZmluZWRUeXBlID0gWm9kVW5kZWZpbmVkLmNyZWF0ZTtcbmNvbnN0IG51bGxUeXBlID0gWm9kTnVsbC5jcmVhdGU7XG5jb25zdCBhbnlUeXBlID0gWm9kQW55LmNyZWF0ZTtcbmNvbnN0IHVua25vd25UeXBlID0gWm9kVW5rbm93bi5jcmVhdGU7XG5jb25zdCBuZXZlclR5cGUgPSBab2ROZXZlci5jcmVhdGU7XG5jb25zdCB2b2lkVHlwZSA9IFpvZFZvaWQuY3JlYXRlO1xuY29uc3QgYXJyYXlUeXBlID0gWm9kQXJyYXkuY3JlYXRlO1xuY29uc3Qgb2JqZWN0VHlwZSA9IFpvZE9iamVjdC5jcmVhdGU7XG5jb25zdCBzdHJpY3RPYmplY3RUeXBlID0gWm9kT2JqZWN0LnN0cmljdENyZWF0ZTtcbmNvbnN0IHVuaW9uVHlwZSA9IFpvZFVuaW9uLmNyZWF0ZTtcbmNvbnN0IGRpc2NyaW1pbmF0ZWRVbmlvblR5cGUgPSBab2REaXNjcmltaW5hdGVkVW5pb24uY3JlYXRlO1xuY29uc3QgaW50ZXJzZWN0aW9uVHlwZSA9IFpvZEludGVyc2VjdGlvbi5jcmVhdGU7XG5jb25zdCB0dXBsZVR5cGUgPSBab2RUdXBsZS5jcmVhdGU7XG5jb25zdCByZWNvcmRUeXBlID0gWm9kUmVjb3JkLmNyZWF0ZTtcbmNvbnN0IG1hcFR5cGUgPSBab2RNYXAuY3JlYXRlO1xuY29uc3Qgc2V0VHlwZSA9IFpvZFNldC5jcmVhdGU7XG5jb25zdCBmdW5jdGlvblR5cGUgPSBab2RGdW5jdGlvbi5jcmVhdGU7XG5jb25zdCBsYXp5VHlwZSA9IFpvZExhenkuY3JlYXRlO1xuY29uc3QgbGl0ZXJhbFR5cGUgPSBab2RMaXRlcmFsLmNyZWF0ZTtcbmNvbnN0IGVudW1UeXBlID0gWm9kRW51bS5jcmVhdGU7XG5jb25zdCBuYXRpdmVFbnVtVHlwZSA9IFpvZE5hdGl2ZUVudW0uY3JlYXRlO1xuY29uc3QgcHJvbWlzZVR5cGUgPSBab2RQcm9taXNlLmNyZWF0ZTtcbmNvbnN0IGVmZmVjdHNUeXBlID0gWm9kRWZmZWN0cy5jcmVhdGU7XG5jb25zdCBvcHRpb25hbFR5cGUgPSBab2RPcHRpb25hbC5jcmVhdGU7XG5jb25zdCBudWxsYWJsZVR5cGUgPSBab2ROdWxsYWJsZS5jcmVhdGU7XG5jb25zdCBwcmVwcm9jZXNzVHlwZSA9IFpvZEVmZmVjdHMuY3JlYXRlV2l0aFByZXByb2Nlc3M7XG5jb25zdCBwaXBlbGluZVR5cGUgPSBab2RQaXBlbGluZS5jcmVhdGU7XG5jb25zdCBvc3RyaW5nID0gKCkgPT4gc3RyaW5nVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvbnVtYmVyID0gKCkgPT4gbnVtYmVyVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBvYm9vbGVhbiA9ICgpID0+IGJvb2xlYW5UeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IGNvZXJjZSA9IHtcbiAgICBzdHJpbmc6ICgoYXJnKSA9PiBab2RTdHJpbmcuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIG51bWJlcjogKChhcmcpID0+IFpvZE51bWJlci5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgYm9vbGVhbjogKChhcmcpID0+IFpvZEJvb2xlYW4uY3JlYXRlKHtcbiAgICAgICAgLi4uYXJnLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgfSkpLFxuICAgIGJpZ2ludDogKChhcmcpID0+IFpvZEJpZ0ludC5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgZGF0ZTogKChhcmcpID0+IFpvZERhdGUuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxufTtcbmNvbnN0IE5FVkVSID0gSU5WQUxJRDtcblxudmFyIHogPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGRlZmF1bHRFcnJvck1hcDogZXJyb3JNYXAsXG4gICAgc2V0RXJyb3JNYXA6IHNldEVycm9yTWFwLFxuICAgIGdldEVycm9yTWFwOiBnZXRFcnJvck1hcCxcbiAgICBtYWtlSXNzdWU6IG1ha2VJc3N1ZSxcbiAgICBFTVBUWV9QQVRIOiBFTVBUWV9QQVRILFxuICAgIGFkZElzc3VlVG9Db250ZXh0OiBhZGRJc3N1ZVRvQ29udGV4dCxcbiAgICBQYXJzZVN0YXR1czogUGFyc2VTdGF0dXMsXG4gICAgSU5WQUxJRDogSU5WQUxJRCxcbiAgICBESVJUWTogRElSVFksXG4gICAgT0s6IE9LLFxuICAgIGlzQWJvcnRlZDogaXNBYm9ydGVkLFxuICAgIGlzRGlydHk6IGlzRGlydHksXG4gICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICBpc0FzeW5jOiBpc0FzeW5jLFxuICAgIGdldCB1dGlsICgpIHsgcmV0dXJuIHV0aWw7IH0sXG4gICAgZ2V0IG9iamVjdFV0aWwgKCkgeyByZXR1cm4gb2JqZWN0VXRpbDsgfSxcbiAgICBab2RQYXJzZWRUeXBlOiBab2RQYXJzZWRUeXBlLFxuICAgIGdldFBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUsXG4gICAgWm9kVHlwZTogWm9kVHlwZSxcbiAgICBkYXRldGltZVJlZ2V4OiBkYXRldGltZVJlZ2V4LFxuICAgIFpvZFN0cmluZzogWm9kU3RyaW5nLFxuICAgIFpvZE51bWJlcjogWm9kTnVtYmVyLFxuICAgIFpvZEJpZ0ludDogWm9kQmlnSW50LFxuICAgIFpvZEJvb2xlYW46IFpvZEJvb2xlYW4sXG4gICAgWm9kRGF0ZTogWm9kRGF0ZSxcbiAgICBab2RTeW1ib2w6IFpvZFN5bWJvbCxcbiAgICBab2RVbmRlZmluZWQ6IFpvZFVuZGVmaW5lZCxcbiAgICBab2ROdWxsOiBab2ROdWxsLFxuICAgIFpvZEFueTogWm9kQW55LFxuICAgIFpvZFVua25vd246IFpvZFVua25vd24sXG4gICAgWm9kTmV2ZXI6IFpvZE5ldmVyLFxuICAgIFpvZFZvaWQ6IFpvZFZvaWQsXG4gICAgWm9kQXJyYXk6IFpvZEFycmF5LFxuICAgIFpvZE9iamVjdDogWm9kT2JqZWN0LFxuICAgIFpvZFVuaW9uOiBab2RVbmlvbixcbiAgICBab2REaXNjcmltaW5hdGVkVW5pb246IFpvZERpc2NyaW1pbmF0ZWRVbmlvbixcbiAgICBab2RJbnRlcnNlY3Rpb246IFpvZEludGVyc2VjdGlvbixcbiAgICBab2RUdXBsZTogWm9kVHVwbGUsXG4gICAgWm9kUmVjb3JkOiBab2RSZWNvcmQsXG4gICAgWm9kTWFwOiBab2RNYXAsXG4gICAgWm9kU2V0OiBab2RTZXQsXG4gICAgWm9kRnVuY3Rpb246IFpvZEZ1bmN0aW9uLFxuICAgIFpvZExhenk6IFpvZExhenksXG4gICAgWm9kTGl0ZXJhbDogWm9kTGl0ZXJhbCxcbiAgICBab2RFbnVtOiBab2RFbnVtLFxuICAgIFpvZE5hdGl2ZUVudW06IFpvZE5hdGl2ZUVudW0sXG4gICAgWm9kUHJvbWlzZTogWm9kUHJvbWlzZSxcbiAgICBab2RFZmZlY3RzOiBab2RFZmZlY3RzLFxuICAgIFpvZFRyYW5zZm9ybWVyOiBab2RFZmZlY3RzLFxuICAgIFpvZE9wdGlvbmFsOiBab2RPcHRpb25hbCxcbiAgICBab2ROdWxsYWJsZTogWm9kTnVsbGFibGUsXG4gICAgWm9kRGVmYXVsdDogWm9kRGVmYXVsdCxcbiAgICBab2RDYXRjaDogWm9kQ2F0Y2gsXG4gICAgWm9kTmFOOiBab2ROYU4sXG4gICAgQlJBTkQ6IEJSQU5ELFxuICAgIFpvZEJyYW5kZWQ6IFpvZEJyYW5kZWQsXG4gICAgWm9kUGlwZWxpbmU6IFpvZFBpcGVsaW5lLFxuICAgIFpvZFJlYWRvbmx5OiBab2RSZWFkb25seSxcbiAgICBjdXN0b206IGN1c3RvbSxcbiAgICBTY2hlbWE6IFpvZFR5cGUsXG4gICAgWm9kU2NoZW1hOiBab2RUeXBlLFxuICAgIGxhdGU6IGxhdGUsXG4gICAgZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCAoKSB7IHJldHVybiBab2RGaXJzdFBhcnR5VHlwZUtpbmQ7IH0sXG4gICAgY29lcmNlOiBjb2VyY2UsXG4gICAgYW55OiBhbnlUeXBlLFxuICAgIGFycmF5OiBhcnJheVR5cGUsXG4gICAgYmlnaW50OiBiaWdJbnRUeXBlLFxuICAgIGJvb2xlYW46IGJvb2xlYW5UeXBlLFxuICAgIGRhdGU6IGRhdGVUeXBlLFxuICAgIGRpc2NyaW1pbmF0ZWRVbmlvbjogZGlzY3JpbWluYXRlZFVuaW9uVHlwZSxcbiAgICBlZmZlY3Q6IGVmZmVjdHNUeXBlLFxuICAgICdlbnVtJzogZW51bVR5cGUsXG4gICAgJ2Z1bmN0aW9uJzogZnVuY3Rpb25UeXBlLFxuICAgICdpbnN0YW5jZW9mJzogaW5zdGFuY2VPZlR5cGUsXG4gICAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25UeXBlLFxuICAgIGxhenk6IGxhenlUeXBlLFxuICAgIGxpdGVyYWw6IGxpdGVyYWxUeXBlLFxuICAgIG1hcDogbWFwVHlwZSxcbiAgICBuYW46IG5hblR5cGUsXG4gICAgbmF0aXZlRW51bTogbmF0aXZlRW51bVR5cGUsXG4gICAgbmV2ZXI6IG5ldmVyVHlwZSxcbiAgICAnbnVsbCc6IG51bGxUeXBlLFxuICAgIG51bGxhYmxlOiBudWxsYWJsZVR5cGUsXG4gICAgbnVtYmVyOiBudW1iZXJUeXBlLFxuICAgIG9iamVjdDogb2JqZWN0VHlwZSxcbiAgICBvYm9vbGVhbjogb2Jvb2xlYW4sXG4gICAgb251bWJlcjogb251bWJlcixcbiAgICBvcHRpb25hbDogb3B0aW9uYWxUeXBlLFxuICAgIG9zdHJpbmc6IG9zdHJpbmcsXG4gICAgcGlwZWxpbmU6IHBpcGVsaW5lVHlwZSxcbiAgICBwcmVwcm9jZXNzOiBwcmVwcm9jZXNzVHlwZSxcbiAgICBwcm9taXNlOiBwcm9taXNlVHlwZSxcbiAgICByZWNvcmQ6IHJlY29yZFR5cGUsXG4gICAgc2V0OiBzZXRUeXBlLFxuICAgIHN0cmljdE9iamVjdDogc3RyaWN0T2JqZWN0VHlwZSxcbiAgICBzdHJpbmc6IHN0cmluZ1R5cGUsXG4gICAgc3ltYm9sOiBzeW1ib2xUeXBlLFxuICAgIHRyYW5zZm9ybWVyOiBlZmZlY3RzVHlwZSxcbiAgICB0dXBsZTogdHVwbGVUeXBlLFxuICAgICd1bmRlZmluZWQnOiB1bmRlZmluZWRUeXBlLFxuICAgIHVuaW9uOiB1bmlvblR5cGUsXG4gICAgdW5rbm93bjogdW5rbm93blR5cGUsXG4gICAgJ3ZvaWQnOiB2b2lkVHlwZSxcbiAgICBORVZFUjogTkVWRVIsXG4gICAgWm9kSXNzdWVDb2RlOiBab2RJc3N1ZUNvZGUsXG4gICAgcXVvdGVsZXNzSnNvbjogcXVvdGVsZXNzSnNvbixcbiAgICBab2RFcnJvcjogWm9kRXJyb3Jcbn0pO1xuXG5leHBvcnQgeyBCUkFORCwgRElSVFksIEVNUFRZX1BBVEgsIElOVkFMSUQsIE5FVkVSLCBPSywgUGFyc2VTdGF0dXMsIFpvZFR5cGUgYXMgU2NoZW1hLCBab2RBbnksIFpvZEFycmF5LCBab2RCaWdJbnQsIFpvZEJvb2xlYW4sIFpvZEJyYW5kZWQsIFpvZENhdGNoLCBab2REYXRlLCBab2REZWZhdWx0LCBab2REaXNjcmltaW5hdGVkVW5pb24sIFpvZEVmZmVjdHMsIFpvZEVudW0sIFpvZEVycm9yLCBab2RGaXJzdFBhcnR5VHlwZUtpbmQsIFpvZEZ1bmN0aW9uLCBab2RJbnRlcnNlY3Rpb24sIFpvZElzc3VlQ29kZSwgWm9kTGF6eSwgWm9kTGl0ZXJhbCwgWm9kTWFwLCBab2ROYU4sIFpvZE5hdGl2ZUVudW0sIFpvZE5ldmVyLCBab2ROdWxsLCBab2ROdWxsYWJsZSwgWm9kTnVtYmVyLCBab2RPYmplY3QsIFpvZE9wdGlvbmFsLCBab2RQYXJzZWRUeXBlLCBab2RQaXBlbGluZSwgWm9kUHJvbWlzZSwgWm9kUmVhZG9ubHksIFpvZFJlY29yZCwgWm9kVHlwZSBhcyBab2RTY2hlbWEsIFpvZFNldCwgWm9kU3RyaW5nLCBab2RTeW1ib2wsIFpvZEVmZmVjdHMgYXMgWm9kVHJhbnNmb3JtZXIsIFpvZFR1cGxlLCBab2RUeXBlLCBab2RVbmRlZmluZWQsIFpvZFVuaW9uLCBab2RVbmtub3duLCBab2RWb2lkLCBhZGRJc3N1ZVRvQ29udGV4dCwgYW55VHlwZSBhcyBhbnksIGFycmF5VHlwZSBhcyBhcnJheSwgYmlnSW50VHlwZSBhcyBiaWdpbnQsIGJvb2xlYW5UeXBlIGFzIGJvb2xlYW4sIGNvZXJjZSwgY3VzdG9tLCBkYXRlVHlwZSBhcyBkYXRlLCBkYXRldGltZVJlZ2V4LCB6IGFzIGRlZmF1bHQsIGVycm9yTWFwIGFzIGRlZmF1bHRFcnJvck1hcCwgZGlzY3JpbWluYXRlZFVuaW9uVHlwZSBhcyBkaXNjcmltaW5hdGVkVW5pb24sIGVmZmVjdHNUeXBlIGFzIGVmZmVjdCwgZW51bVR5cGUgYXMgZW51bSwgZnVuY3Rpb25UeXBlIGFzIGZ1bmN0aW9uLCBnZXRFcnJvck1hcCwgZ2V0UGFyc2VkVHlwZSwgaW5zdGFuY2VPZlR5cGUgYXMgaW5zdGFuY2VvZiwgaW50ZXJzZWN0aW9uVHlwZSBhcyBpbnRlcnNlY3Rpb24sIGlzQWJvcnRlZCwgaXNBc3luYywgaXNEaXJ0eSwgaXNWYWxpZCwgbGF0ZSwgbGF6eVR5cGUgYXMgbGF6eSwgbGl0ZXJhbFR5cGUgYXMgbGl0ZXJhbCwgbWFrZUlzc3VlLCBtYXBUeXBlIGFzIG1hcCwgbmFuVHlwZSBhcyBuYW4sIG5hdGl2ZUVudW1UeXBlIGFzIG5hdGl2ZUVudW0sIG5ldmVyVHlwZSBhcyBuZXZlciwgbnVsbFR5cGUgYXMgbnVsbCwgbnVsbGFibGVUeXBlIGFzIG51bGxhYmxlLCBudW1iZXJUeXBlIGFzIG51bWJlciwgb2JqZWN0VHlwZSBhcyBvYmplY3QsIG9iamVjdFV0aWwsIG9ib29sZWFuLCBvbnVtYmVyLCBvcHRpb25hbFR5cGUgYXMgb3B0aW9uYWwsIG9zdHJpbmcsIHBpcGVsaW5lVHlwZSBhcyBwaXBlbGluZSwgcHJlcHJvY2Vzc1R5cGUgYXMgcHJlcHJvY2VzcywgcHJvbWlzZVR5cGUgYXMgcHJvbWlzZSwgcXVvdGVsZXNzSnNvbiwgcmVjb3JkVHlwZSBhcyByZWNvcmQsIHNldFR5cGUgYXMgc2V0LCBzZXRFcnJvck1hcCwgc3RyaWN0T2JqZWN0VHlwZSBhcyBzdHJpY3RPYmplY3QsIHN0cmluZ1R5cGUgYXMgc3RyaW5nLCBzeW1ib2xUeXBlIGFzIHN5bWJvbCwgZWZmZWN0c1R5cGUgYXMgdHJhbnNmb3JtZXIsIHR1cGxlVHlwZSBhcyB0dXBsZSwgdW5kZWZpbmVkVHlwZSBhcyB1bmRlZmluZWQsIHVuaW9uVHlwZSBhcyB1bmlvbiwgdW5rbm93blR5cGUgYXMgdW5rbm93biwgdXRpbCwgdm9pZFR5cGUgYXMgdm9pZCwgeiB9O1xuIiwgIi8vIHNyYy9wYWNrYWdlLWpzb24udHNcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG52YXIgQnVncyA9IHoudW5pb24oW1xuICB6LnN0cmluZygpLFxuICB6Lm9iamVjdCh7XG4gICAgdXJsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxuXSk7XG52YXIgRnVuZGluZyA9IHoudW5pb24oW1xuICB6LnN0cmluZygpLFxuICB6Lm9iamVjdCh7XG4gICAgdXJsOiB6LnN0cmluZygpLFxuICAgIHR5cGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KSxcbiAgei5hcnJheShcbiAgICB6LnVuaW9uKFtcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHVybDogei5zdHJpbmcoKSxcbiAgICAgICAgdHlwZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gICAgICB9KVxuICAgIF0pXG4gIClcbl0pO1xudmFyIFBlcnNvbiA9IHoudW5pb24oW1xuICB6LnN0cmluZygpLFxuICB6Lm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICBlbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHVybDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG5dKTtcbnZhciBSZXBvc2l0b3J5ID0gei51bmlvbihbXG4gIHouc3RyaW5nKCksXG4gIHoub2JqZWN0KHtcbiAgICAvKiogUmVwb3NpdG9yeSB0eXBlIChlLmcuLCBgZ2l0YCkuICovXG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICAvKiogTWFjaGluZS1yZWFkYWJsZSByZXBvc2l0b3J5IFVSTCAoZS5nLiwgYGh0dHBzOi8vZ2l0aHViLmNvbS91c2VyL3JlcG8uZ2l0YCkuICovXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICAgIC8qKiBEaXJlY3RvcnkgaW4gYSBtb25vcmVwbyB3aGVyZSB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGlzIGxvY2F0ZWQuICovXG4gICAgZGlyZWN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbl0pO1xudmFyIFBhY2thZ2VKc29uID0gei5vYmplY3Qoe1xuICAvKiogUGFja2FnZSBuYW1lLiAqL1xuICBuYW1lOiB6LnN0cmluZygpLFxuICAvKiogUGFja2FnZSBzZW12ZXIgdmVyc2lvbiBudW1iZXIuICovXG4gIHZlcnNpb246IHouc3RyaW5nKCksXG4gIC8qKiBEZXNjcmlwdGlvbiBmb3IgdGhlIHBhY2thZ2UuICovXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBMaXN0IG9mIGtleXdvcmRzIGZvciBzZWFyY2hpbmcgdGhlIHBhY2thZ2UuICovXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBVUkwgb2YgdGhlIHBhY2thZ2UncyBob21lcGFnZS4gKi9cbiAgaG9tZXBhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIElzc3VlIHRyYWNrZXIgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICBidWdzOiBCdWdzLm9wdGlvbmFsKCksXG4gIC8qKiBTUERYIGxpY2Vuc2UgZXhwcmVzc2lvbiBvciBhIGN1c3RvbSBsaWNlbnNlLiAqL1xuICBsaWNlbnNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBBdXRob3Igb2YgdGhlIHBhY2thZ2UuICovXG4gIGF1dGhvcjogUGVyc29uLm9wdGlvbmFsKCksXG4gIC8qKiBDb250cmlidXRvcnMgdG8gdGhlIHBhY2thZ2UuICovXG4gIGNvbnRyaWJ1dG9yczogei5hcnJheShQZXJzb24pLm9wdGlvbmFsKCksXG4gIC8qKiBNYWludGFpbmVycyBvZiB0aGUgcGFja2FnZS4gKi9cbiAgbWFpbnRhaW5lcnM6IHouYXJyYXkoUGVyc29uKS5vcHRpb25hbCgpLFxuICAvKiogRnVuZGluZyBvcHRpb25zIGZvciB0aGUgcGFja2FnZS4gKi9cbiAgZnVuZGluZzogRnVuZGluZy5vcHRpb25hbCgpLFxuICAvKiogRmlsZSBwYXR0ZXJucyBmb3IgZmlsZXMgdG8gYmUgaW5jbHVkZWQgd2hlbiBwdWJsaXNoaW5nIHRoZSBwYWNrYWdlLiAqL1xuICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogTWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHBhY2thZ2UsIHVzdWFsbHkgQ29tbW9uSlMuICovXG4gIG1haW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gIE1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBwYWNrYWdlIHdoZW4gdXNlZCBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIEBzZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5ucG1qcy5jb20vY2xpL3YxMC9jb25maWd1cmluZy1ucG0vcGFja2FnZS1qc29uI2Jyb3dzZXJ9XG4gIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RlZnVuY3R6b21iaWUvNDMzOTkwMS80OTQ5MzgzNmZiODczZGRhYTRiOGE3YWEwZWYyMzUyMTE5ZjY5MjExfVxuICAqL1xuICBicm93c2VyOiB6LnVuaW9uKFt6LnN0cmluZygpLCB6LnJlY29yZCh6LnVuaW9uKFt6LnN0cmluZygpLCB6LmJvb2xlYW4oKV0pKV0pLm9wdGlvbmFsKCksXG4gIC8qKiBFeGVjdXRhYmxlIGZpbGVzLiAqL1xuICBiaW46IHoudW5pb24oW3ouc3RyaW5nKCksIHoucmVjb3JkKHouc3RyaW5nKCkpXSkub3B0aW9uYWwoKSxcbiAgLyoqIERvY3VtZW50YXRpb24gdG8gYmUgdXNlZCB3aXRoIHRoZSBgbWFuYCBjb21tYW5kLiAqL1xuICBtYW46IHoudW5pb24oW3ouc3RyaW5nKCksIHouYXJyYXkoei5zdHJpbmcoKSldKS5vcHRpb25hbCgpLFxuICAvKiogRGlyZWN0b3JpZXMgaW4gdGhlIHBhY2thZ2UuICovXG4gIGRpcmVjdG9yaWVzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogUmVwb3NpdG9yeSBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZS4gKi9cbiAgcmVwb3NpdG9yeTogUmVwb3NpdG9yeS5vcHRpb25hbCgpLFxuICAvKiogU2NyaXB0cyB1c2VkIGluIHRoZSBwYWNrYWdlLiAqL1xuICBzY3JpcHRzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogQ29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIHNjcmlwdHMuICovXG4gIGNvbmZpZzogei5yZWNvcmQoei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBQcm9kdWN0aW9uIGRlcGVuZGVuY2llcy4gKi9cbiAgZGVwZW5kZW5jaWVzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogRGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzLiAqL1xuICBkZXZEZXBlbmRlbmNpZXM6IHoucmVjb3JkKHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBQZWVyIGRlcGVuZGVuY2llcy4gKi9cbiAgcGVlckRlcGVuZGVuY2llczogei5yZWNvcmQoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLyoqIE1ldGFkYXRhIGFib3V0IHBlZXIgZGVwZW5kZW5jaWVzLiAqL1xuICBwZWVyRGVwZW5kZW5jaWVzTWV0YTogei5yZWNvcmQoei5vYmplY3QoeyBvcHRpb25hbDogei5ib29sZWFuKCkgfSkpLm9wdGlvbmFsKCksXG4gIC8qKiBEZXBlbmRlbmNpZXMgYnVuZGxlZCB3aXRoIHRoZSBwYWNrYWdlLiAqL1xuICBidW5kbGVEZXBlbmRlbmNpZXM6IHoudW5pb24oW3ouYm9vbGVhbigpLCB6LmFycmF5KHouc3RyaW5nKCkpXSkub3B0aW9uYWwoKSxcbiAgLyoqIERlcGVuZGVuY2llcyBidW5kbGVkIHdpdGggdGhlIHBhY2thZ2UgKGVxdWl2YWxlbnQgdG8gYGJ1bmRsZURlcGVuZGVuY2llc2ApLiAqL1xuICBidW5kbGVkRGVwZW5kZW5jaWVzOiB6LnVuaW9uKFt6LmJvb2xlYW4oKSwgei5hcnJheSh6LnN0cmluZygpKV0pLm9wdGlvbmFsKCksXG4gIC8qKiBPcHRpb25hbCBkZXBlbmRlbmNpZXMuICovXG4gIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB6LnJlY29yZCh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogT3ZlcnJpZGVzIGZvciBkZXBlbmRlbmN5IHJlc29sdXRpb24gdXNpbmcgbnBtLiAqL1xuICBvdmVycmlkZXM6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAvKiogUnVudGltZSBzeXN0ZW1zIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbiAgZW5naW5lczogei5yZWNvcmQoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLyoqIE9wZXJhdGluZyBzeXN0ZW1zIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbiAgb3M6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLyoqIENQVSBhcmNoaXRlY3R1cmVzIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbiAgY3B1OiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBUcnVlIGlmIHRoZSBwYWNrYWdlIHNob3VsZCBub3QgYmUgcHVibGlzaGVkLiAqL1xuICBwcml2YXRlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvKiogQ29uZmlndXJhdGlvbiB2YWx1ZXMgdXNlZCBhdCBwdWJsaXNoaW5nIHRpbWUuICovXG4gIHB1Ymxpc2hDb25maWc6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAvKiogRmlsZSBwYXR0ZXJucyBmb3IgbG9jYXRpbmcgbG9jYWwgd29ya3NwYWNlcy4gKi9cbiAgd29ya3NwYWNlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAvKiogRGVwcmVjYXRpb24gbWVzc2FnZS4gKi9cbiAgZGVwcmVjYXRlZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogTWFpbiBFU00gZW50cnkgcG9pbnQgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICBtb2R1bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFR5cGUgZm9yIGFsbCB0aGUgYC5qc2AgZmlsZXMgaW4gdGhlIHBhY2thZ2UsIHVzdWFsbHkgYG1vZHVsZWAuICovXG4gIHR5cGU6IHoudW5pb24oW3oubGl0ZXJhbChcIm1vZHVsZVwiKSwgei5saXRlcmFsKFwiY29tbW9uanNcIildKS5vcHRpb25hbCgpLFxuICAvKiogTWFpbiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGZpbGUuICovXG4gIHR5cGVzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBNYWluIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZSAoZXF1aXZhbGVudCB0byBgdHlwZXNgKS4gKi9cbiAgdHlwaW5nczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgVHlwZVNjcmlwdCB0eXBlcyByZXNvbHV0aW9ucy5cbiAgXHRAc2VlIHtAbGluayBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9kZWNsYXJhdGlvbi1maWxlcy9wdWJsaXNoaW5nLmh0bWwjdmVyc2lvbi1zZWxlY3Rpb24td2l0aC10eXBlc3ZlcnNpb25zfVxuICBcdCovXG4gIHR5cGVzVmVyc2lvbnM6IHoucmVjb3JkKHoucmVjb3JkKHouYXJyYXkoei5zdHJpbmcoKSkpKS5vcHRpb25hbCgpLFxuICAvKipcbiAgXHRDb3JlcGFjayBwYWNrYWdlIG1hbmFnZXIuXG4gIFx0QHNlZSB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jb3JlcGFjay5odG1sfVxuICBcdCovXG4gIHBhY2thZ2VNYW5hZ2VyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBUcnVlIGlmIGltcG9ydGluZyBtb2R1bGVzIGZyb20gdGhlIHBhY2thZ2UgY2F1c2VzIHNpZGUgZWZmZWN0cy4gKi9cbiAgc2lkZUVmZmVjdHM6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIC8qKlxuICBJbXBvcnRzIG1hcC5cbiAgQHNlZSB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wYWNrYWdlcy5odG1sI2ltcG9ydHN9XG4gICovXG4gIGltcG9ydHM6IHoucmVjb3JkKHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICAvKipcbiAgUGFja2FnZSBleHBvcnRzLlxuICBAc2VlIHtAbGluayBodHRwczovL25vZGVqcy5vcmcvYXBpL3BhY2thZ2VzLmh0bWwjZXhwb3J0c31cbiAgKi9cbiAgZXhwb3J0czogei51bmlvbihbei5udWxsKCksIHouc3RyaW5nKCksIHouYXJyYXkoei5zdHJpbmcoKSksIHoucmVjb3JkKHoudW5rbm93bigpKV0pLm9wdGlvbmFsKClcbn0pLnBhc3N0aHJvdWdoKCk7XG5leHBvcnQge1xuICBQYWNrYWdlSnNvblxufTtcbiIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBRdWlja0xSVSBleHRlbmRzIE1hcCB7XG5cdCNzaXplID0gMDtcblx0I2NhY2hlID0gbmV3IE1hcCgpO1xuXHQjb2xkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cdCNtYXhTaXplO1xuXHQjbWF4QWdlO1xuXHQjb25FdmljdGlvbjtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKCEob3B0aW9ucy5tYXhTaXplICYmIG9wdGlvbnMubWF4U2l6ZSA+IDApKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgbWF4U2l6ZWAgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCcpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhBZ2UgPT09ICdudW1iZXInICYmIG9wdGlvbnMubWF4QWdlID09PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgbWF4QWdlYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy4jbWF4U2l6ZSA9IG9wdGlvbnMubWF4U2l6ZTtcblx0XHR0aGlzLiNtYXhBZ2UgPSBvcHRpb25zLm1heEFnZSB8fCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cdFx0dGhpcy4jb25FdmljdGlvbiA9IG9wdGlvbnMub25FdmljdGlvbjtcblx0fVxuXG5cdC8vIEZvciB0ZXN0cy5cblx0Z2V0IF9fb2xkQ2FjaGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI29sZENhY2hlO1xuXHR9XG5cblx0I2VtaXRFdmljdGlvbnMoY2FjaGUpIHtcblx0XHRpZiAodHlwZW9mIHRoaXMuI29uRXZpY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIGNhY2hlKSB7XG5cdFx0XHR0aGlzLiNvbkV2aWN0aW9uKGtleSwgaXRlbS52YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0I2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIHtcblx0XHRpZiAodHlwZW9mIGl0ZW0uZXhwaXJ5ID09PSAnbnVtYmVyJyAmJiBpdGVtLmV4cGlyeSA8PSBEYXRlLm5vdygpKSB7XG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuI29uRXZpY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0dGhpcy4jb25FdmljdGlvbihrZXksIGl0ZW0udmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5kZWxldGUoa2V5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQjZ2V0T3JEZWxldGVJZkV4cGlyZWQoa2V5LCBpdGVtKSB7XG5cdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pO1xuXHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIGl0ZW0udmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0I2dldEl0ZW1WYWx1ZShrZXksIGl0ZW0pIHtcblx0XHRyZXR1cm4gaXRlbS5leHBpcnkgPyB0aGlzLiNnZXRPckRlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pIDogaXRlbS52YWx1ZTtcblx0fVxuXG5cdCNwZWVrKGtleSwgY2FjaGUpIHtcblx0XHRjb25zdCBpdGVtID0gY2FjaGUuZ2V0KGtleSk7XG5cblx0XHRyZXR1cm4gdGhpcy4jZ2V0SXRlbVZhbHVlKGtleSwgaXRlbSk7XG5cdH1cblxuXHQjc2V0KGtleSwgdmFsdWUpIHtcblx0XHR0aGlzLiNjYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG5cdFx0dGhpcy4jc2l6ZSsrO1xuXG5cdFx0aWYgKHRoaXMuI3NpemUgPj0gdGhpcy4jbWF4U2l6ZSkge1xuXHRcdFx0dGhpcy4jc2l6ZSA9IDA7XG5cdFx0XHR0aGlzLiNlbWl0RXZpY3Rpb25zKHRoaXMuI29sZENhY2hlKTtcblx0XHRcdHRoaXMuI29sZENhY2hlID0gdGhpcy4jY2FjaGU7XG5cdFx0XHR0aGlzLiNjYWNoZSA9IG5ldyBNYXAoKTtcblx0XHR9XG5cdH1cblxuXHQjbW92ZVRvUmVjZW50KGtleSwgaXRlbSkge1xuXHRcdHRoaXMuI29sZENhY2hlLmRlbGV0ZShrZXkpO1xuXHRcdHRoaXMuI3NldChrZXksIGl0ZW0pO1xuXHR9XG5cblx0KiAjZW50cmllc0FzY2VuZGluZygpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy4jb2xkQ2FjaGUpIHtcblx0XHRcdGNvbnN0IFtrZXksIHZhbHVlXSA9IGl0ZW07XG5cdFx0XHRpZiAoIXRoaXMuI2NhY2hlLmhhcyhrZXkpKSB7XG5cdFx0XHRcdGNvbnN0IGRlbGV0ZWQgPSB0aGlzLiNkZWxldGVJZkV4cGlyZWQoa2V5LCB2YWx1ZSk7XG5cdFx0XHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdHlpZWxkIGl0ZW07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy4jY2FjaGUpIHtcblx0XHRcdGNvbnN0IFtrZXksIHZhbHVlXSA9IGl0ZW07XG5cdFx0XHRjb25zdCBkZWxldGVkID0gdGhpcy4jZGVsZXRlSWZFeHBpcmVkKGtleSwgdmFsdWUpO1xuXHRcdFx0aWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHlpZWxkIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGtleSkge1xuXHRcdGlmICh0aGlzLiNjYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuI2NhY2hlLmdldChrZXkpO1xuXHRcdFx0cmV0dXJuIHRoaXMuI2dldEl0ZW1WYWx1ZShrZXksIGl0ZW0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvbGRDYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuI29sZENhY2hlLmdldChrZXkpO1xuXHRcdFx0aWYgKHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIGl0ZW0pID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLiNtb3ZlVG9SZWNlbnQoa2V5LCBpdGVtKTtcblx0XHRcdFx0cmV0dXJuIGl0ZW0udmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2V0KGtleSwgdmFsdWUsIHttYXhBZ2UgPSB0aGlzLiNtYXhBZ2V9ID0ge30pIHtcblx0XHRjb25zdCBleHBpcnkgPSB0eXBlb2YgbWF4QWdlID09PSAnbnVtYmVyJyAmJiBtYXhBZ2UgIT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuXHRcdFx0PyAoRGF0ZS5ub3coKSArIG1heEFnZSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHRoaXMuI2NhY2hlLmhhcyhrZXkpKSB7XG5cdFx0XHR0aGlzLiNjYWNoZS5zZXQoa2V5LCB7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRleHBpcnksXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4jc2V0KGtleSwge3ZhbHVlLCBleHBpcnl9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGhhcyhrZXkpIHtcblx0XHRpZiAodGhpcy4jY2FjaGUuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiAhdGhpcy4jZGVsZXRlSWZFeHBpcmVkKGtleSwgdGhpcy4jY2FjaGUuZ2V0KGtleSkpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvbGRDYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0cmV0dXJuICF0aGlzLiNkZWxldGVJZkV4cGlyZWQoa2V5LCB0aGlzLiNvbGRDYWNoZS5nZXQoa2V5KSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cGVlayhrZXkpIHtcblx0XHRpZiAodGhpcy4jY2FjaGUuaGFzKGtleSkpIHtcblx0XHRcdHJldHVybiB0aGlzLiNwZWVrKGtleSwgdGhpcy4jY2FjaGUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLiNvbGRDYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuI3BlZWsoa2V5LCB0aGlzLiNvbGRDYWNoZSk7XG5cdFx0fVxuXHR9XG5cblx0ZGVsZXRlKGtleSkge1xuXHRcdGNvbnN0IGRlbGV0ZWQgPSB0aGlzLiNjYWNoZS5kZWxldGUoa2V5KTtcblx0XHRpZiAoZGVsZXRlZCkge1xuXHRcdFx0dGhpcy4jc2l6ZS0tO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLiNvbGRDYWNoZS5kZWxldGUoa2V5KSB8fCBkZWxldGVkO1xuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy4jY2FjaGUuY2xlYXIoKTtcblx0XHR0aGlzLiNvbGRDYWNoZS5jbGVhcigpO1xuXHRcdHRoaXMuI3NpemUgPSAwO1xuXHR9XG5cblx0cmVzaXplKG5ld1NpemUpIHtcblx0XHRpZiAoIShuZXdTaXplICYmIG5ld1NpemUgPiAwKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignYG1heFNpemVgIG11c3QgYmUgYSBudW1iZXIgZ3JlYXRlciB0aGFuIDAnKTtcblx0XHR9XG5cblx0XHRjb25zdCBpdGVtcyA9IFsuLi50aGlzLiNlbnRyaWVzQXNjZW5kaW5nKCldO1xuXHRcdGNvbnN0IHJlbW92ZUNvdW50ID0gaXRlbXMubGVuZ3RoIC0gbmV3U2l6ZTtcblx0XHRpZiAocmVtb3ZlQ291bnQgPCAwKSB7XG5cdFx0XHR0aGlzLiNjYWNoZSA9IG5ldyBNYXAoaXRlbXMpO1xuXHRcdFx0dGhpcy4jb2xkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cdFx0XHR0aGlzLiNzaXplID0gaXRlbXMubGVuZ3RoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAocmVtb3ZlQ291bnQgPiAwKSB7XG5cdFx0XHRcdHRoaXMuI2VtaXRFdmljdGlvbnMoaXRlbXMuc2xpY2UoMCwgcmVtb3ZlQ291bnQpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy4jb2xkQ2FjaGUgPSBuZXcgTWFwKGl0ZW1zLnNsaWNlKHJlbW92ZUNvdW50KSk7XG5cdFx0XHR0aGlzLiNjYWNoZSA9IG5ldyBNYXAoKTtcblx0XHRcdHRoaXMuI3NpemUgPSAwO1xuXHRcdH1cblxuXHRcdHRoaXMuI21heFNpemUgPSBuZXdTaXplO1xuXHR9XG5cblx0KiBrZXlzKCkge1xuXHRcdGZvciAoY29uc3QgW2tleV0gb2YgdGhpcykge1xuXHRcdFx0eWllbGQga2V5O1xuXHRcdH1cblx0fVxuXG5cdCogdmFsdWVzKCkge1xuXHRcdGZvciAoY29uc3QgWywgdmFsdWVdIG9mIHRoaXMpIHtcblx0XHRcdHlpZWxkIHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdCogW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMuI2NhY2hlKSB7XG5cdFx0XHRjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtO1xuXHRcdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTtcblx0XHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0XHR5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMuI29sZENhY2hlKSB7XG5cdFx0XHRjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtO1xuXHRcdFx0aWYgKCF0aGlzLiNjYWNoZS5oYXMoa2V5KSkge1xuXHRcdFx0XHRjb25zdCBkZWxldGVkID0gdGhpcy4jZGVsZXRlSWZFeHBpcmVkKGtleSwgdmFsdWUpO1xuXHRcdFx0XHRpZiAoZGVsZXRlZCA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHR5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQqIGVudHJpZXNEZXNjZW5kaW5nKCkge1xuXHRcdGxldCBpdGVtcyA9IFsuLi50aGlzLiNjYWNoZV07XG5cdFx0Zm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaV07XG5cdFx0XHRjb25zdCBba2V5LCB2YWx1ZV0gPSBpdGVtO1xuXHRcdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTtcblx0XHRcdGlmIChkZWxldGVkID09PSBmYWxzZSkge1xuXHRcdFx0XHR5aWVsZCBba2V5LCB2YWx1ZS52YWx1ZV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aXRlbXMgPSBbLi4udGhpcy4jb2xkQ2FjaGVdO1xuXHRcdGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuXHRcdFx0Y29uc3QgW2tleSwgdmFsdWVdID0gaXRlbTtcblx0XHRcdGlmICghdGhpcy4jY2FjaGUuaGFzKGtleSkpIHtcblx0XHRcdFx0Y29uc3QgZGVsZXRlZCA9IHRoaXMuI2RlbGV0ZUlmRXhwaXJlZChrZXksIHZhbHVlKTtcblx0XHRcdFx0aWYgKGRlbGV0ZWQgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0eWllbGQgW2tleSwgdmFsdWUudmFsdWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0KiBlbnRyaWVzQXNjZW5kaW5nKCkge1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuI2VudHJpZXNBc2NlbmRpbmcoKSkge1xuXHRcdFx0eWllbGQgW2tleSwgdmFsdWUudmFsdWVdO1xuXHRcdH1cblx0fVxuXG5cdGdldCBzaXplKCkge1xuXHRcdGlmICghdGhpcy4jc2l6ZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuI29sZENhY2hlLnNpemU7XG5cdFx0fVxuXG5cdFx0bGV0IG9sZENhY2hlU2l6ZSA9IDA7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgdGhpcy4jb2xkQ2FjaGUua2V5cygpKSB7XG5cdFx0XHRpZiAoIXRoaXMuI2NhY2hlLmhhcyhrZXkpKSB7XG5cdFx0XHRcdG9sZENhY2hlU2l6ZSsrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBNYXRoLm1pbih0aGlzLiNzaXplICsgb2xkQ2FjaGVTaXplLCB0aGlzLiNtYXhTaXplKTtcblx0fVxuXG5cdGdldCBtYXhTaXplKCkge1xuXHRcdHJldHVybiB0aGlzLiNtYXhTaXplO1xuXHR9XG5cblx0ZW50cmllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzQXNjZW5kaW5nKCk7XG5cdH1cblxuXHRmb3JFYWNoKGNhbGxiYWNrRnVuY3Rpb24sIHRoaXNBcmd1bWVudCA9IHRoaXMpIHtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmVudHJpZXNBc2NlbmRpbmcoKSkge1xuXHRcdFx0Y2FsbGJhY2tGdW5jdGlvbi5jYWxsKHRoaXNBcmd1bWVudCwgdmFsdWUsIGtleSwgdGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShbLi4udGhpcy5lbnRyaWVzQXNjZW5kaW5nKCldKTtcblx0fVxufVxuIiwgImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gIH1cblxuICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgIGlmIChpID4gMCkge1xuICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICB9XG4gICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICB9XG5cbiAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgfVxuXG4gIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXJsSm9pbigpIHtcbiAgdmFyIGlucHV0O1xuXG4gIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG59XG4iLCAiLy8gc3JjL2luZGV4LnRzXG5pbXBvcnQgeyBQYWNrYWdlSnNvbiBhcyBQYWNrYWdlSnNvbjQgfSBmcm9tIFwiem9kLXBhY2thZ2UtanNvblwiO1xuXG4vLyBzcmMvY2FjaGUudHNcbmltcG9ydCBRdWlja0xSVSBmcm9tIFwicXVpY2stbHJ1XCI7XG52YXIgY2FjaGUgPSBuZXcgUXVpY2tMUlUoe1xuICAvLyAxMDAgaXRlbXMuXG4gIG1heFNpemU6IDEwMCxcbiAgLy8gNSBtaW51dGVzLlxuICBtYXhBZ2U6IDUgKiA2MCAqIDFlM1xufSk7XG5cbi8vIHNyYy9kb3dubG9hZC1wZXJpb2QudHNcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG52YXIgRG93bmxvYWRQZXJpb2QgPSB6LnVuaW9uKFtcbiAgei5saXRlcmFsKFwibGFzdC1kYXlcIiksXG4gIHoubGl0ZXJhbChcImxhc3Qtd2Vla1wiKSxcbiAgei5saXRlcmFsKFwibGFzdC1tb250aFwiKSxcbiAgei5saXRlcmFsKFwibGFzdC15ZWFyXCIpLFxuICB6LnN0cmluZygpLnJlZ2V4KC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oOlxcZHs0fS1cXGR7Mn0tXFxkezJ9KT8kLylcbl0pO1xuXG4vLyBzcmMvZ2V0LWFiYnJldmlhdGVkLXBhY2t1bWVudC50c1xuaW1wb3J0IHVybEpvaW4yIGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6NCB9IGZyb20gXCJ6b2RcIjtcblxuLy8gc3JjL2Fzc2VydC12YWxpZC1wYWNrYWdlLW5hbWUudHNcbmltcG9ydCB2YWxpZGF0ZVBhY2thZ2VOYW1lIGZyb20gXCJ2YWxpZGF0ZS1ucG0tcGFja2FnZS1uYW1lXCI7XG52YXIgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZSA9IChuYW1lKSA9PiB7XG4gIGNvbnN0IHsgdmFsaWRGb3JPbGRQYWNrYWdlcywgdmFsaWRGb3JOZXdQYWNrYWdlcywgd2FybmluZ3MsIGVycm9ycyB9ID0gdmFsaWRhdGVQYWNrYWdlTmFtZShuYW1lKTtcbiAgY29uc3QgaXNWYWxpZCA9IHZhbGlkRm9yT2xkUGFja2FnZXMgfHwgdmFsaWRGb3JOZXdQYWNrYWdlcztcbiAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwYWNrYWdlIG5hbWVcIiwgeyBjYXVzZTogeyBuYW1lLCB3YXJuaW5ncywgZXJyb3JzIH0gfSk7XG4gIH1cbn07XG5cbi8vIHNyYy9kaXN0LXRhZ3MudHNcbmltcG9ydCB7IHogYXMgejIgfSBmcm9tIFwiem9kXCI7XG52YXIgRGlzdFRhZ3MgPSB6Mi5vYmplY3Qoe1xuICAvKiogTGF0ZXN0IHNlbXZlciB2ZXJzaW9uIG51bWJlci4gKi9cbiAgbGF0ZXN0OiB6Mi5zdHJpbmcoKSxcbiAgLy8gVGhlIGZvbGxvd2luZyB0YWdzIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nIGZvciB0aGUgbnBtIHJlZ2lzdHJ5XG4gIC8vIGJ1dCB0aGV5IGFyZSBjb21tb25seSB1c2VkIGJ5IHBhY2thZ2VzLlxuICBuZXh0OiB6Mi5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhbHBoYTogejIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYmV0YTogejIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmM6IHoyLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNhbmFyeTogejIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGV2OiB6Mi5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5jYXRjaGFsbCh6Mi5zdHJpbmcoKSk7XG5cbi8vIHNyYy9mZXRjaC1kYXRhLnRzXG52YXIgZmV0Y2hEYXRhID0gYXN5bmMgKHNjaGVtYSwgdXJsLCBoZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGNhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkoeyB1cmwsIGhlYWRlcnMgfSk7XG4gIGNvbnN0IGNhY2hlZEpzb24gPSBjYWNoZS5nZXQoY2FjaGVLZXkpO1xuICBpZiAoY2FjaGVkSnNvbikge1xuICAgIHJldHVybiBzY2hlbWEucGFyc2UoY2FjaGVkSnNvbik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVycyB9KTtcbiAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgY2FjaGUuc2V0KGNhY2hlS2V5LCBqc29uKTtcbiAgcmV0dXJuIHNjaGVtYS5wYXJzZShqc29uKTtcbn07XG5cbi8vIHNyYy9nZXQtcGFja2FnZS1tYW5pZmVzdC50c1xuaW1wb3J0IHVybEpvaW4gZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHozIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiem9kLXBhY2thZ2UtanNvblwiO1xuXG4vLyBzcmMvbnBtLXJlZ2lzdHJ5LnRzXG52YXIgbnBtUmVnaXN0cnlVcmwgPSBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCI7XG52YXIgbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwgPSBcImh0dHBzOi8vYXBpLm5wbWpzLm9yZ1wiO1xuXG4vLyBzcmMvZ2V0LXBhY2thZ2UtbWFuaWZlc3QudHNcbnZhciBEaXN0ID0gejMub2JqZWN0KHtcbiAgLyoqIFRhcmJhbGwgVVJMLiAqL1xuICB0YXJiYWxsOiB6My5zdHJpbmcoKSxcbiAgLyoqIFNIQTEgc3VtIG9mIHRoZSB0YXJiYWxsLiAqL1xuICBzaGFzdW06IHozLnN0cmluZygpLFxuICAvKiogU3RyaW5nIGluIHRoZSBmb3JtYXQgYDxoYXNoQWxnb3JpdGhtPi08YmFzZTY0LWhhc2g+YC4gKi9cbiAgaW50ZWdyaXR5OiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogTnVtYmVyIG9mIGZpbGVzIGluIHRoZSB0YXJiYWxsLiAqL1xuICBmaWxlQ291bnQ6IHozLm51bWJlcigpLm9wdGlvbmFsKCksXG4gIC8qKiBUb3RhbCB1bnBhY2tlZCBzaXplIGluIGJ5dGVzIG9mIHRoZSBmaWxlcyBpbiB0aGUgdGFyYmFsbC4gKi9cbiAgdW5wYWNrZWRTaXplOiB6My5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgIFBHUCBzaWduYXR1cmUgaW4gdGhlIGZvcm1hdCBgPHBhY2thZ2U+QDx2ZXJzaW9uPjo8aW50ZWdyaXR5PmAuXG4gIEBkZXByZWNhdGVkIHtAbGluayBodHRwczovL2RvY3MubnBtanMuY29tL2Fib3V0LXJlZ2lzdHJ5LXNpZ25hdHVyZXMjbWlncmF0aW5nLWZyb20tcGdwLXRvLWVjZHNhLXNpZ25hdHVyZXN9XG4gICovXG4gIFwibnBtLXNpZ25hdHVyZVwiOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgRUNEU0EgcmVnaXN0cnkgc2lnbmF0dXJlcy5cbiAgQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9hYm91dC1yZWdpc3RyeS1zaWduYXR1cmVzfVxuICAgKi9cbiAgc2lnbmF0dXJlczogejMuYXJyYXkoXG4gICAgejMub2JqZWN0KHtcbiAgICAgIGtleWlkOiB6My5zdHJpbmcoKSxcbiAgICAgIHNpZzogejMuc3RyaW5nKClcbiAgICB9KVxuICApLm9wdGlvbmFsKClcbn0pO1xudmFyIFBhY2thZ2VNYW5pZmVzdCA9IFBhY2thZ2VKc29uLmV4dGVuZCh7XG4gIC8qKiBQYWNrYWdlIHZlcnNpb24gSUQgaW4gdGhlIGZvcm1hdCBgPG5hbWU+QDx2ZXJzaW9uPmAgKGUuZy4sIGBmb29AMS4wLjBgKS4gKi9cbiAgX2lkOiB6My5zdHJpbmcoKSxcbiAgLyoqIERpc3RyaWJ1dGlvbiBtZXRhZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIHJlZ2lzdHJ5LiAqL1xuICBkaXN0OiBEaXN0LFxuICAvKiogVGV4dCBleHRyYWN0ZWQgZnJvbSB0aGUgUkVBRE1FIGZpbGUuICovXG4gIHJlYWRtZTogejMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIE5hbWUgb2YgdGhlIFJFQURNRSBmaWxlLiAqL1xuICByZWFkbWVGaWxlbmFtZTogejMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIENvbW1pdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwdWJsaXNoZWQgcGFja2FnZSB2ZXJzaW9uLiAqL1xuICBnaXRIZWFkOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogVHJ1ZSBpZiB0aGUgcGFja2FnZSBjb250YWlucyBhIHNocmlua3dyYXAgZmlsZS4gKi9cbiAgX2hhc1Nocmlua3dyYXA6IHozLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvKiogTm9kZS5qcyB2ZXJzaW9uIHVzZWQgdG8gcHVibGlzaCB0aGUgcGFja2FnZS4gKi9cbiAgX25vZGVWZXJzaW9uOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogbnBtIENMSSB2ZXJzaW9uIHVzZWQgdG8gcHVibGlzaCB0aGUgcGFja2FnZS4gKi9cbiAgX25wbVZlcnNpb246IHozLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBucG0gdXNlciB3aG8gcHVibGlzaGVkIHRoZSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiAqL1xuICBfbnBtVXNlcjogUGFja2FnZUpzb24uc2hhcGUuYXV0aG9yLm9wdGlvbmFsKCksXG4gIC8qKiBJbnRlcm5hbCBucG0gcmVnaXN0cnkgZGF0YS4gKi9cbiAgX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6IHozLm9iamVjdCh7XG4gICAgaG9zdDogejMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB0bXA6IHozLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKSxcbiAgLyoqXG4gIFx0UnVudGltZSBzeXN0ZW1zIHN1cHBvcnRlZCBieSB0aGUgcGFja2FnZS5cbiAgXG4gIFx0QHJlbWFya3NcbiAgXHRJbiBzb21lIG9sZCBwYWNrYWdlcyAobGlrZSBgbG9kYXNoQDAuMS4wYCkgdGhlIGBlbmdpbmVzYCBwcm9wZXJ0eSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzXG4gIFx0aW5zdGVhZCBvZiBhbiBvYmplY3QgYW5kIHdpdGggY2F0Y2ggaXQgYmVjb21lcyBgdW5kZWZpbmVkYC5cbiAgXHQqL1xuICBlbmdpbmVzOiB6My5yZWNvcmQoejMuc3RyaW5nKCkpLm9wdGlvbmFsKCkuY2F0Y2godm9pZCAwKSxcbiAgLyoqXG4gIFx0U1BEWCBsaWNlbnNlIGV4cHJlc3Npb24gb3IgYSBjdXN0b20gbGljZW5zZS5cbiAgXG4gIFx0QHJlbWFya3NcbiAgXHRJbiBzb21lIG9sZCBwYWNrYWdlcyAobGlrZSBgZXNsaW50QDAuMC42YCkgdGhlIGBsaWNlbnNlYCBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcbiAgXHRhbmQgd2l0aCBjYXRjaCBgbGljZW5zZWAgYmVjb21lcyBgdW5kZWZpbmVkYC5cbiAgXHQqL1xuICBsaWNlbnNlOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLmNhdGNoKHZvaWQgMCksXG4gIC8qKlxuICBcdFVSTCBvZiB0aGUgcGFja2FnZSdzIGhvbWVwYWdlLlxuICBcbiAgXHRAcmVtYXJrc1xuICBcdEluIHNvbWUgb2xkIHBhY2thZ2VzIChsaWtlIGBmcy1leHRyYUAwLjAuMWApIHRoZSBgaG9tZXBhZ2VgIHByb3BlcnR5IGlzIGFuIGFycmF5XG4gIFx0b2Ygc3RyaW5ncyBhbmQgd2l0aCBjYXRjaCBpdCBiZWNvbWVzIGB1bmRlZmluZWRgLlxuICBcdCovXG4gIGhvbWVwYWdlOiB6My5zdHJpbmcoKS5vcHRpb25hbCgpLmNhdGNoKHZvaWQgMCksXG4gIC8qKlxuICBcdERlcHJlY2F0aW9uIHN0YXR1cy9tZXNzYWdlLlxuICBcbiAgXHRAcmVtYXJrc1xuICBcdEluIHNvbWUgcGFja2FnZXMgKGxpa2UgYHJlYWN0QDE2LjE0LjBgKSB0aGUgYGRlcHJlY2F0ZWRgIHByb3BlcnR5IGlzIGEgYm9vbGVhblxuICBcdGluc3RlYWQgb2YgYSBkZXByZWNhdGlvbiBtZXNzYWdlLlxuICBcdCovXG4gIGRlcHJlY2F0ZWQ6IHozLnVuaW9uKFt6My5zdHJpbmcoKSwgejMuYm9vbGVhbigpXSkub3B0aW9uYWwoKVxufSk7XG52YXIgZ2V0UGFja2FnZU1hbmlmZXN0ID0gYXN5bmMgKG5hbWUsIHZlcnNpb25PclRhZyA9IFwibGF0ZXN0XCIsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShQYWNrYWdlTWFuaWZlc3QsIHVybEpvaW4ocmVnaXN0cnksIG5hbWUsIHZlcnNpb25PclRhZykpO1xufTtcblxuLy8gc3JjL2dldC1hYmJyZXZpYXRlZC1wYWNrdW1lbnQudHNcbnZhciBBYmJyZXZpYXRlZFBhY2t1bWVudCA9IHo0Lm9iamVjdCh7XG4gIC8qKiBQYWNrYWdlIG5hbWUuICovXG4gIG5hbWU6IHo0LnN0cmluZygpLFxuICAvKiogVGltZXN0YW1wIG9mIHdoZW4gdGhlIHBhY2thZ2Ugd2FzIGxhc3QgbW9kaWZpZWQgaW4gSVNPIDg2MDEgZm9ybWF0IChlLmcuLCBgMjAyMS0xMS0yM1QxOToxMjoyNC4wMDZaYCkuICovXG4gIG1vZGlmaWVkOiB6NC5zdHJpbmcoKSxcbiAgLyoqIE1hcHBpbmcgb2YgZGlzdHJpYnV0aW9uIHRhZ3MgdG8gc2VtdmVyIHZlcnNpb24gbnVtYmVycyBlLmcuLCBgeyBcImxhdGVzdFwiOiBcIjEuMC4wXCIgfWApLiAqL1xuICBcImRpc3QtdGFnc1wiOiBEaXN0VGFncyxcbiAgLyoqIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byB0aGUgcmVxdWlyZWQgbWV0YWRhdGEgZm9yIGluc3RhbGxpbmcgYSBwYWNrYWdlIHZlcnNpb24uICovXG4gIHZlcnNpb25zOiB6NC5yZWNvcmQoXG4gICAgejQuc3RyaW5nKCksXG4gICAgUGFja2FnZU1hbmlmZXN0LnBpY2soe1xuICAgICAgbmFtZTogdHJ1ZSxcbiAgICAgIHZlcnNpb246IHRydWUsXG4gICAgICBkaXN0OiB0cnVlLFxuICAgICAgZGVwcmVjYXRlZDogdHJ1ZSxcbiAgICAgIGRlcGVuZGVuY2llczogdHJ1ZSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB0cnVlLFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB0cnVlLFxuICAgICAgYnVuZGxlRGVwZW5kZW5jaWVzOiB0cnVlLFxuICAgICAgcGVlckRlcGVuZGVuY2llczogdHJ1ZSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXNNZXRhOiB0cnVlLFxuICAgICAgYmluOiB0cnVlLFxuICAgICAgZGlyZWN0b3JpZXM6IHRydWUsXG4gICAgICBlbmdpbmVzOiB0cnVlLFxuICAgICAgY3B1OiB0cnVlLFxuICAgICAgb3M6IHRydWUsXG4gICAgICBfaGFzU2hyaW5rd3JhcDogdHJ1ZVxuICAgIH0pLmV4dGVuZCh7XG4gICAgICAvKiogVHJ1ZSBpZiB0aGUgcGFja2FnZSBjb250YWlucyBhbiBgaW5zdGFsbGAgc2NyaXB0LiAqL1xuICAgICAgaGFzSW5zdGFsbFNjcmlwdDogejQuYm9vbGVhbigpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnZhciBnZXRBYmJyZXZpYXRlZFBhY2t1bWVudCA9IGFzeW5jIChuYW1lLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5VXJsKSA9PiB7XG4gIGFzc2VydFZhbGlkUGFja2FnZU5hbWUobmFtZSk7XG4gIHJldHVybiBmZXRjaERhdGEoQWJicmV2aWF0ZWRQYWNrdW1lbnQsIHVybEpvaW4yKHJlZ2lzdHJ5LCBuYW1lKSwge1xuICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQubnBtLmluc3RhbGwtdjEranNvblwiXG4gIH0pO1xufTtcblxuLy8gc3JjL2dldC1idWxrLWRhaWx5LXBhY2thZ2UtZG93bmxvYWRzLnRzXG5pbXBvcnQgdXJsSm9pbjUgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHo3IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBzcmMvZ2V0LWRhaWx5LXBhY2thZ2UtZG93bmxvYWRzLnRzXG5pbXBvcnQgdXJsSm9pbjQgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHo2IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBzcmMvZ2V0LWRhaWx5LXJlZ2lzdHJ5LWRvd25sb2Fkcy50c1xuaW1wb3J0IHVybEpvaW4zIGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6NSB9IGZyb20gXCJ6b2RcIjtcbnZhciBEYWlseVJlZ2lzdHJ5RG93bmxvYWRzID0gejUub2JqZWN0KHtcbiAgLyoqIERhdGUgb2YgdGhlIGZpcnN0IGRheSAoaW5jbHVzaXZlKSBpbiB0aGUgZm9ybWF0IGBZWVlZLU1NLUREYC4gKi9cbiAgc3RhcnQ6IHo1LnN0cmluZygpLFxuICAvKiogRGF0ZSBvZiB0aGUgbGFzdCBkYXkgKGluY2x1c2l2ZSkgaW4gdGhlIGZvcm1hdCBgWVlZWS1NTS1ERGAuICovXG4gIGVuZDogejUuc3RyaW5nKCksXG4gIC8qKiBEb3dubG9hZCBjb3VudHMgZm9yIGVhY2ggZGF5LiAqL1xuICBkb3dubG9hZHM6IHo1LmFycmF5KFxuICAgIHo1Lm9iamVjdCh7XG4gICAgICAvKiogVG90YWwgbnVtYmVyIG9mIGRvd25sb2FkcyBmb3IgdGhlIGRheS4gKi9cbiAgICAgIGRvd25sb2FkczogejUubnVtYmVyKCksXG4gICAgICAvKiogRGF0ZSBvZiB0aGUgZGF5IGluIHRoZSBmb3JtYXQgYFlZWVktTU0tRERgLiAqL1xuICAgICAgZGF5OiB6NS5zdHJpbmcoKVxuICAgIH0pXG4gIClcbn0pO1xudmFyIGdldERhaWx5UmVnaXN0cnlEb3dubG9hZHMgPSBhc3luYyAocGVyaW9kLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5RG93bmxvYWRzQXBpVXJsKSA9PiBmZXRjaERhdGEoRGFpbHlSZWdpc3RyeURvd25sb2FkcywgdXJsSm9pbjMocmVnaXN0cnksIGAvZG93bmxvYWRzL3JhbmdlLyR7cGVyaW9kfWApKTtcblxuLy8gc3JjL2dldC1kYWlseS1wYWNrYWdlLWRvd25sb2Fkcy50c1xudmFyIERhaWx5UGFja2FnZURvd25sb2FkcyA9IERhaWx5UmVnaXN0cnlEb3dubG9hZHMuZXh0ZW5kKHtcbiAgLyoqIFBhY2thZ2UgbmFtZS4gKi9cbiAgcGFja2FnZTogejYuc3RyaW5nKClcbn0pO1xudmFyIGdldERhaWx5UGFja2FnZURvd25sb2FkcyA9IGFzeW5jIChuYW1lLCBwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShEYWlseVBhY2thZ2VEb3dubG9hZHMsIHVybEpvaW40KHJlZ2lzdHJ5LCBgL2Rvd25sb2Fkcy9yYW5nZS8ke3BlcmlvZH0vJHtuYW1lfWApKTtcbn07XG5cbi8vIHNyYy9nZXQtYnVsay1kYWlseS1wYWNrYWdlLWRvd25sb2Fkcy50c1xudmFyIEJ1bGtEYWlseVBhY2thZ2VEb3dubG9hZHMgPSB6Ny5yZWNvcmQoejcudW5pb24oW3o3Lm51bGwoKSwgRGFpbHlQYWNrYWdlRG93bmxvYWRzXSkpO1xudmFyIGdldEJ1bGtEYWlseVBhY2thZ2VEb3dubG9hZHMgPSBhc3luYyAobmFtZXMsIHBlcmlvZCwgcmVnaXN0cnkgPSBucG1SZWdpc3RyeURvd25sb2Fkc0FwaVVybCkgPT4ge1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICBhc3NlcnRWYWxpZFBhY2thZ2VOYW1lKG5hbWUpO1xuICB9XG4gIHJldHVybiBmZXRjaERhdGEoXG4gICAgQnVsa0RhaWx5UGFja2FnZURvd25sb2FkcyxcbiAgICB1cmxKb2luNShyZWdpc3RyeSwgYC9kb3dubG9hZHMvcmFuZ2UvJHtwZXJpb2R9LyR7bmFtZXMuam9pbihcIixcIil9YClcbiAgKTtcbn07XG5cbi8vIHNyYy9nZXQtYnVsay1wYWNrYWdlLWRvd25sb2Fkcy50c1xuaW1wb3J0IHVybEpvaW44IGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6MTAgfSBmcm9tIFwiem9kXCI7XG5cbi8vIHNyYy9nZXQtcGFja2FnZS1kb3dubG9hZHMudHNcbmltcG9ydCB1cmxKb2luNyBmcm9tIFwidXJsLWpvaW5cIjtcbmltcG9ydCB7IHogYXMgejkgfSBmcm9tIFwiem9kXCI7XG5cbi8vIHNyYy9nZXQtcmVnaXN0cnktZG93bmxvYWRzLnRzXG5pbXBvcnQgdXJsSm9pbjYgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHo4IH0gZnJvbSBcInpvZFwiO1xudmFyIFJlZ2lzdHJ5RG93bmxvYWRzID0gejgub2JqZWN0KHtcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBkb3dubG9hZHMuICovXG4gIGRvd25sb2FkczogejgubnVtYmVyKCksXG4gIC8qKiBEYXRlIG9mIHRoZSBmaXJzdCBkYXkgKGluY2x1c2l2ZSkgaW4gdGhlIGZvcm1hdCBgWVlZWS1NTS1ERGAuICovXG4gIHN0YXJ0OiB6OC5zdHJpbmcoKSxcbiAgLyoqIERhdGUgb2YgdGhlIGxhc3QgZGF5IChpbmNsdXNpdmUpIGluIHRoZSBmb3JtYXQgYFlZWVktTU0tRERgLiAqL1xuICBlbmQ6IHo4LnN0cmluZygpXG59KTtcbnZhciBnZXRSZWdpc3RyeURvd25sb2FkcyA9IGFzeW5jIChwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IGZldGNoRGF0YShSZWdpc3RyeURvd25sb2FkcywgdXJsSm9pbjYocmVnaXN0cnksIGAvZG93bmxvYWRzL3BvaW50LyR7cGVyaW9kfWApKTtcblxuLy8gc3JjL2dldC1wYWNrYWdlLWRvd25sb2Fkcy50c1xudmFyIFBhY2thZ2VEb3dubG9hZHMgPSBSZWdpc3RyeURvd25sb2Fkcy5leHRlbmQoe1xuICAvKiogUGFja2FnZSBuYW1lLiAqL1xuICBwYWNrYWdlOiB6OS5zdHJpbmcoKVxufSk7XG52YXIgZ2V0UGFja2FnZURvd25sb2FkcyA9IGFzeW5jIChuYW1lLCBwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShQYWNrYWdlRG93bmxvYWRzLCB1cmxKb2luNyhyZWdpc3RyeSwgYC9kb3dubG9hZHMvcG9pbnQvJHtwZXJpb2R9LyR7bmFtZX1gKSk7XG59O1xuXG4vLyBzcmMvZ2V0LWJ1bGstcGFja2FnZS1kb3dubG9hZHMudHNcbnZhciBCdWxrUGFja2FnZURvd25sb2FkcyA9IHoxMC5yZWNvcmQoejEwLnVuaW9uKFt6MTAubnVsbCgpLCBQYWNrYWdlRG93bmxvYWRzXSkpO1xudmFyIGdldEJ1bGtQYWNrYWdlRG93bmxvYWRzID0gYXN5bmMgKG5hbWVzLCBwZXJpb2QsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgZm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgfVxuICByZXR1cm4gZmV0Y2hEYXRhKFxuICAgIEJ1bGtQYWNrYWdlRG93bmxvYWRzLFxuICAgIHVybEpvaW44KHJlZ2lzdHJ5LCBgL2Rvd25sb2Fkcy9wb2ludC8ke3BlcmlvZH0vJHtuYW1lcy5qb2luKFwiLFwiKX1gKVxuICApO1xufTtcblxuLy8gc3JjL2dldC1wYWNrYWdlLXZlcnNpb25zLWRvd25sb2Fkcy50c1xuaW1wb3J0IHVybEpvaW45IGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6MTEgfSBmcm9tIFwiem9kXCI7XG52YXIgUGFja2FnZVZlcnNpb25zRG93bmxvYWRzID0gejExLm9iamVjdCh7XG4gIC8qKiBQYWNrYWdlIG5hbWUuICovXG4gIHBhY2thZ2U6IHoxMS5zdHJpbmcoKSxcbiAgLyoqIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byB0b3RhbCBudW1iZXIgb2YgZG93bmxvYWRzLiAqL1xuICBkb3dubG9hZHM6IHoxMS5yZWNvcmQoejExLm51bWJlcigpKVxufSk7XG52YXIgZ2V0UGFja2FnZVZlcnNpb25zRG93bmxvYWRzID0gYXN5bmMgKG5hbWUsIHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlEb3dubG9hZHNBcGlVcmwpID0+IHtcbiAgYXNzZXJ0VmFsaWRQYWNrYWdlTmFtZShuYW1lKTtcbiAgcmV0dXJuIGZldGNoRGF0YShcbiAgICBQYWNrYWdlVmVyc2lvbnNEb3dubG9hZHMsXG4gICAgdXJsSm9pbjkocmVnaXN0cnksIGAvdmVyc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9L2xhc3Qtd2Vla2ApXG4gICk7XG59O1xuXG4vLyBzcmMvZ2V0LXBhY2t1bWVudC50c1xuaW1wb3J0IHVybEpvaW4xMCBmcm9tIFwidXJsLWpvaW5cIjtcbmltcG9ydCB7IHogYXMgejEyIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gYXMgUGFja2FnZUpzb24yIH0gZnJvbSBcInpvZC1wYWNrYWdlLWpzb25cIjtcbnZhciBUaW1lID0gejEyLm9iamVjdCh7XG4gIC8qKiBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcGFja2FnZSB3YXMgY3JlYXRlZCBpbiBJU08gODYwMSBmb3JtYXQgKGUuZy4sIGAyMDIxLTExLTIzVDE5OjEyOjI0LjAwNlpgKS4gKi9cbiAgY3JlYXRlZDogejEyLnN0cmluZygpLFxuICAvKiogVGltZXN0YW1wIG9mIHdoZW4gdGhlIHBhY2thZ2Ugd2FzIGxhc3QgbW9kaWZpZWQgaW4gSVNPIDg2MDEgZm9ybWF0IChlLmcuLCBgMjAyMS0xMS0yM1QxOToxMjoyNC4wMDZaYCkuICovXG4gIG1vZGlmaWVkOiB6MTIuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHoxMi5zdHJpbmcoKSk7XG52YXIgUGFja3VtZW50ID0gUGFja2FnZUpzb24yLnBpY2soe1xuICBhdXRob3I6IHRydWUsXG4gIGJ1Z3M6IHRydWUsXG4gIGNvbnRyaWJ1dG9yczogdHJ1ZSxcbiAgZGVzY3JpcHRpb246IHRydWUsXG4gIGhvbWVwYWdlOiB0cnVlLFxuICBrZXl3b3JkczogdHJ1ZSxcbiAgbGljZW5zZTogdHJ1ZSxcbiAgbWFpbnRhaW5lcnM6IHRydWUsXG4gIHJlcG9zaXRvcnk6IHRydWVcbn0pLmV4dGVuZCh7XG4gIC8qKiBQYWNrYWdlIG5hbWUgdXNlZCBhcyB0aGUgSUQgaW4gQ291Y2hEQi4gKi9cbiAgX2lkOiB6MTIuc3RyaW5nKCksXG4gIC8qKiBQYWNrYWdlIG5hbWUuICovXG4gIG5hbWU6IHoxMi5zdHJpbmcoKSxcbiAgLyoqIE1hcHBpbmcgb2YgZGlzdHJpYnV0aW9uIHRhZ3MgdG8gc2VtdmVyIHZlcnNpb24gbnVtYmVycyBlLmcuLCBgeyBcImxhdGVzdFwiOiBcIjEuMC4wXCIgfWApLiAqL1xuICBcImRpc3QtdGFnc1wiOiBEaXN0VGFncyxcbiAgLyoqXG4gIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byB0aW1lc3RhbXBzIGluIElTTyA4NjAxIGZvcm1hdCByZXByZXNlbnRpbmdcbiAgdGhlIHB1Ymxpc2hpbmcgdGltZSAoZS5nLiwgYHsgXCIxLjAuMFwiOiBcIjIwMjEtMTEtMjNUMTk6MTI6MjQuMDA2WlwiIH1gKS5cbiAgQWxzbyBpbmNsdWRlcyB0aGUgdGltZXN0YW1wcyBvZiB3aGVuIHRoZSBwYWNrYWdlIHdhcyBgY3JlYXRlZGAgYW5kIGxhc3QgYG1vZGlmaWVkYC5cbiAgKi9cbiAgdGltZTogVGltZSxcbiAgLyoqXG4gIE1hcHBpbmcgb2Ygc2VtdmVyIHZlcnNpb24gbnVtYmVycyB0byBwYWNrYWdlIG1hbmlmZXN0cy5cbiAgQHNlZSB7QGxpbmsgUGFja2FnZU1hbmlmZXN0fVxuICAqL1xuICB2ZXJzaW9uczogejEyLnJlY29yZChQYWNrYWdlTWFuaWZlc3QpLFxuICAvKiogUmV2aXNpb24gSUQgb2YgdGhlIGRvY3VtZW50IGluIENvdWNoREIuICovXG4gIF9yZXY6IHoxMi5jb2VyY2Uuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIE1hcHBpbmcgb2YgbnBtIHVzZXJuYW1lcyBvZiB1c2VycyB3aG8gc3RhcnJlZCB0aGUgcGFja2FnZSB0byBgdHJ1ZWAuICovXG4gIHVzZXJzOiB6MTIucmVjb3JkKHoxMi5ib29sZWFuKCkpLm9wdGlvbmFsKCksXG4gIC8qKiBUZXh0IGV4dHJhY3RlZCBmcm9tIHRoZSBSRUFETUUgZmlsZS4gKi9cbiAgcmVhZG1lOiB6MTIuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIE5hbWUgb2YgdGhlIFJFQURNRSBmaWxlLiAqL1xuICByZWFkbWVGaWxlbmFtZTogejEyLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xudmFyIGdldFBhY2t1bWVudCA9IGFzeW5jIChuYW1lLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5VXJsKSA9PiB7XG4gIGFzc2VydFZhbGlkUGFja2FnZU5hbWUobmFtZSk7XG4gIHJldHVybiBmZXRjaERhdGEoUGFja3VtZW50LCB1cmxKb2luMTAocmVnaXN0cnksIG5hbWUpKTtcbn07XG5cbi8vIHNyYy9nZXQtcmVnaXN0cnktbWV0YWRhdGEudHNcbmltcG9ydCB7IHogYXMgejEzIH0gZnJvbSBcInpvZFwiO1xudmFyIFJlZ2lzdHJ5TWV0YWRhdGEgPSB6MTMub2JqZWN0KHtcbiAgLyoqIERhdGFiYXNlIG5hbWUsIHVzdWFsbHkgYHJlZ2lzdHJ5YCAqL1xuICBkYl9uYW1lOiB6MTMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9jX2NvdW50OiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgZG9jX2RlbF9jb3VudDogejEzLm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHVwZGF0ZV9zZXE6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBwdXJnZV9zZXE6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb21wYWN0X3J1bm5pbmc6IHoxMy5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZGlza19zaXplOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgZGF0YV9zaXplOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5zdGFuY2Vfc3RhcnRfdGltZTogejEzLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc2tfZm9ybWF0X3ZlcnNpb246IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb21taXR0ZWRfdXBkYXRlX3NlcTogejEzLm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvbXBhY3RlZF9zZXE6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB1dWlkOiB6MTMuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3RoZXI6IHoxMy5vYmplY3QoeyBkYXRhX3NpemU6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpIH0pLm9wdGlvbmFsKCksXG4gIHNpemVzOiB6MTMub2JqZWN0KHtcbiAgICBmaWxlOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBhY3RpdmU6IHoxMy5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGV4dGVybmFsOiB6MTMubnVtYmVyKCkub3B0aW9uYWwoKVxuICB9KS5vcHRpb25hbCgpXG59KTtcbnZhciBnZXRSZWdpc3RyeU1ldGFkYXRhID0gYXN5bmMgKHJlZ2lzdHJ5ID0gbnBtUmVnaXN0cnlVcmwpID0+IGZldGNoRGF0YShSZWdpc3RyeU1ldGFkYXRhLCByZWdpc3RyeSk7XG5cbi8vIHNyYy9nZXQtcmVnaXN0cnktc2lnbmluZy1rZXlzLnRzXG5pbXBvcnQgdXJsSm9pbjExIGZyb20gXCJ1cmwtam9pblwiO1xuaW1wb3J0IHsgeiBhcyB6MTQgfSBmcm9tIFwiem9kXCI7XG52YXIgUmVnaXN0cnlTaWduaW5nS2V5cyA9IHoxNC5vYmplY3Qoe1xuICBrZXlzOiB6MTQuYXJyYXkoXG4gICAgejE0Lm9iamVjdCh7XG4gICAgICAvKipcbiAgICAgICAgIFN0cmluZyBpbiB0aGUgc2ltcGxpZmllZCBleHRlbmRlZCBJU08gODYwMSBmb3JtYXRcbiAgICAgIChlLmcuLCBgWVlZWS1NTS1ERFRISDptbTpzcy5zc3NaYCkgb3IgYG51bGxgLlxuICAgICAgICAgKi9cbiAgICAgIGV4cGlyZXM6IHoxNC5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgICAgLyoqIFNIQTI1NiBmaW5nZXJwcmludCBvZiB0aGUgcHVibGljIGtleS4gKi9cbiAgICAgIGtleWlkOiB6MTQuc3RyaW5nKCksXG4gICAgICAvKiogS2V5IHR5cGU7IG9ubHkgYGVjZHNhLXNoYTItbmlzdHAyNTZgIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIG5wbSBDTEkuICovXG4gICAgICBrZXl0eXBlOiB6MTQuc3RyaW5nKCksXG4gICAgICAvKiogS2V5IHNjaGVtZTsgb25seSBgZWNkc2Etc2hhMi1uaXN0cDI1NmAgaXMgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgbnBtIENMSS4gKi9cbiAgICAgIHNjaGVtZTogejE0LnN0cmluZygpLFxuICAgICAgLyoqIFB1YmxpYyBrZXkgZW5jb2RlZCBpbiBiYXNlNjQuICovXG4gICAgICBrZXk6IHoxNC5zdHJpbmcoKVxuICAgIH0pXG4gIClcbn0pO1xudmFyIGdldFJlZ2lzdHJ5U2lnbmluZ0tleXMgPSBhc3luYyAocmVnaXN0cnkgPSBucG1SZWdpc3RyeVVybCkgPT4gZmV0Y2hEYXRhKFJlZ2lzdHJ5U2lnbmluZ0tleXMsIHVybEpvaW4xMShyZWdpc3RyeSwgXCItL25wbS92MS9rZXlzXCIpKTtcblxuLy8gc3JjL3NlYXJjaC1wYWNrYWdlcy50c1xuaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gXCJxdWVyeS1zdHJpbmdcIjtcbmltcG9ydCB1cmxKb2luMTIgZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB6IGFzIHoxNSB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IFBhY2thZ2VKc29uIGFzIFBhY2thZ2VKc29uMyB9IGZyb20gXCJ6b2QtcGFja2FnZS1qc29uXCI7XG52YXIgU2VhcmNoQ3JpdGVyaWEgPSB6MTUub2JqZWN0KHtcbiAgLyoqXG4gIFx0UXVlcnkgdGV4dC5cbiAgXG4gIFx0QHJlbWFya3NcbiAgXHRUaGUgZm9sbG93aW5nIHNwZWNpYWwgdGV4dCBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIHRvIHJlZmluZSByZXN1bHRzOlxuICBcdCAtIGBhdXRob3I6PG5hbWU+YDogc2hvdyBwYWNrYWdlcyBmcm9tIHRoZSBnaXZlbiBhdXRob3IgKGUuZy4sIGBhdXRob3I6c29tZW9uZWApXG4gICAgIC0gYG1haW50YWluZXI6PG5hbWU+YDogc2hvdyBwYWNrYWdlcyB3aXRoIHRoZSBnaXZlbiBtYWludGFpbmVyIChlLmcuLCBgbWFpbnRhaW5lcjpzb21lb25lYClcbiAgXHQgLSBga2V5d29yZHM6PGtleXdvcmQgbGlzdD5gOiBzaG93IHBhY2thZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBrZXl3b3JkKHMpO1xuICAgICBzZXBhcmF0b3JzIGAsYCwgYCtgIGFuZCBgLC1gIGFjdCByZXNwZWN0aXZlbHkgYXMgYE9SYCwgYEFORGAgYW5kIGBOT1RgXG4gICAgIChlLmcuLCB1c2UgYGtleXdvcmRzOmZvbyxiYXIrYmF6LC1xdXV4YCB0byBpbmNsdWRlIGtleXdvcmRzIGBmb29gIE9SIChgYmFyYCBBTkQgYGJhemApIGJ1dCBOT1QgYHF1dXhgKVxuICBcdCAtIGBub3Q6dW5zdGFibGVgOiBleGNsdWRlIHVuc3RhYmxlIHBhY2thZ2VzIChzZW12ZXIgdmVyc2lvbiBgPDEuMC4wYClcbiAgXHQgLSBgbm90Omluc2VjdXJlYDogZXhjbHVkZSBpbnNlY3VyZSBwYWNrYWdlc1xuICBcdCAtIGBpczp1bnN0YWJsZWA6IGluY2x1ZGUgb25seSB1bnN0YWJsZSBwYWNrYWdlcyAoc2VtdmVyIHZlcnNpb24gYDwxLjAuMGApXG4gIFx0IC0gYGlzOmluc2VjdXJlYDogaW5jbHVkZSBvbmx5IGluc2VjdXJlIHBhY2thZ2VzXG4gIFx0IC0gYGJvb3N0LWV4YWN0Ojx0cnVlL2ZhbHNlPmA6IGJvb3N0IHBhY2thZ2VzIHdpdGggZXhhY3QgbmFtZSBtYXRjaCAoZGVmYXVsdDogYHRydWVgKVxuICBcdCovXG4gIHRleHQ6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogTnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuICh0aGUgbnBtIHJlZ2lzdHJ5IGFjY2VwdHMgYSBtYXhpbXVtIG9mIGAyNTBgIHdpdGggYSBkZWZhdWx0IG9mIGAyMGApLiAqL1xuICBzaXplOiB6MTUubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgLyoqIFJldHVybiByZXN1bHRzIGZyb20gdGhpcyBvZmZzZXQuICovXG4gIGZyb206IHoxNS5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKiogUGFja2FnZSBxdWFsaXR5IHdlaWdodCAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gIHF1YWxpdHk6IHoxNS5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKiogUGFja2FnZSBwb3B1bGFyaXR5IHdlaWdodCAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gIHBvcHVsYXJpdHk6IHoxNS5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAvKiogUGFja2FnZSBtYWludGVuYW5jZSB3ZWlnaHQgKGZyb20gYDAuMGAgdG8gYDEuMGApLiAqL1xuICBtYWludGVuYW5jZTogejE1Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pO1xudmFyIFNlYXJjaFJlc3VsdCA9IHoxNS5vYmplY3Qoe1xuICAvKiogUGFja2FnZSBtZXRhZGF0YS4gKi9cbiAgcGFja2FnZTogUGFja2FnZUpzb24zLnBpY2soe1xuICAgIG5hbWU6IHRydWUsXG4gICAgdmVyc2lvbjogdHJ1ZSxcbiAgICBkZXNjcmlwdGlvbjogdHJ1ZSxcbiAgICBrZXl3b3JkczogdHJ1ZVxuICB9KS5leHRlbmQoe1xuICAgIC8qKlxuICAgIEVpdGhlciBgdW5zY29wZWRgIGZvciB1bnNjb3BlZCBwYWNrYWdlcyAoZS5nLiwgYGZvb2AgLT4gYHVuc2NvcGVkYCkgb3JcbiAgICB0aGUgcGFja2FnZSdzIHNjb3BlIGZvciBzY29wZWQgcGFja2FnZXMgKGUuZy4sIGBAZm9vL2JhcmAgLT4gYGZvb2ApLlxuICAgICovXG4gICAgc2NvcGU6IHoxNS5zdHJpbmcoKSxcbiAgICAvKipcbiAgICBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgYGxhdGVzdGAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSB3YXMgcHVibGlzaGVkXG4gICAgaW4gSVNPIDg2MDEgZm9ybWF0IChlLmcuLCBgMjAyMS0xMS0yM1QxOToxMjoyNC4wMDZaYCkuXG4gICAgKi9cbiAgICBkYXRlOiB6MTUuc3RyaW5nKCksXG4gICAgLyoqIEF1dGhvciBvZiB0aGUgcGFja2FnZS4gKi9cbiAgICBhdXRob3I6IHoxNS5vYmplY3Qoe1xuICAgICAgdXNlcm5hbWU6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgbmFtZTogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBlbWFpbDogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICB1cmw6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gICAgfSkub3B0aW9uYWwoKSxcbiAgICAvKiogVXNlciB3aG8gcHVibGlzaGVkIHRoZSBgbGF0ZXN0YCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiAqL1xuICAgIHB1Ymxpc2hlcjogejE1Lm9iamVjdCh7XG4gICAgICB1c2VybmFtZTogejE1LnN0cmluZygpLFxuICAgICAgZW1haWw6IHoxNS5zdHJpbmcoKVxuICAgIH0pLFxuICAgIC8qKiBNYWludGFpbmVycyBvZiB0aGUgYGxhdGVzdGAgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gKi9cbiAgICBtYWludGFpbmVyczogejE1LmFycmF5KFxuICAgICAgejE1Lm9iamVjdCh7XG4gICAgICAgIHVzZXJuYW1lOiB6MTUuc3RyaW5nKCksXG4gICAgICAgIGVtYWlsOiB6MTUuc3RyaW5nKClcbiAgICAgIH0pXG4gICAgKSxcbiAgICAvKiogTGlua3MgdG8gcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gdGhlIHBhY2thZ2UuICovXG4gICAgbGlua3M6IHoxNS5vYmplY3Qoe1xuICAgICAgLyoqIFBhZ2UgZm9yIHRoZSBwYWNrYWdlIG9uIG5wbWpzLmNvbS4gKi9cbiAgICAgIG5wbTogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAvKiogSG9tZXBhZ2UgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICAgICAgaG9tZXBhZ2U6IHoxNS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgLyoqIFJlcG9zaXRvcnkgZm9yIHRoZSBwYWNrYWdlLiAqL1xuICAgICAgcmVwb3NpdG9yeTogejE1LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAvKiogSXNzdWUgdHJhY2tlciBmb3IgdGhlIHBhY2thZ2UuICovXG4gICAgICBidWdzOiB6MTUuc3RyaW5nKCkub3B0aW9uYWwoKVxuICAgIH0pXG4gIH0pLFxuICAvKiogRmluYWwgYW5kIGRldGFpbGVkIHNlYXJjaCBzY29yZSB2YWx1ZXMuICovXG4gIHNjb3JlOiB6MTUub2JqZWN0KHtcbiAgICAvKiogRmluYWwgc2VhcmNoIHNjb3JlIHZhbHVlIChmcm9tIGAwLjBgIHRvIGAxLjBgKSwgY29tcHV0ZWQgZnJvbSB0aGUgZGV0YWlsZWQgc2NvcmVzLiAqL1xuICAgIGZpbmFsOiB6MTUubnVtYmVyKCksXG4gICAgLyoqIERldGFpbGVkIHNlYXJjaCBzY29yZSB2YWx1ZXMuICovXG4gICAgZGV0YWlsOiB6MTUub2JqZWN0KHtcbiAgICAgIC8qKiBRdWFsaXR5IHNlYXJjaCBzY29yZSB2YWx1ZSAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gICAgICBxdWFsaXR5OiB6MTUubnVtYmVyKCksXG4gICAgICAvKiogUG9wdWxhcml0eSBzZWFyY2ggc2NvcmUgdmFsdWUgKGZyb20gYDAuMGAgdG8gYDEuMGApLiAqL1xuICAgICAgcG9wdWxhcml0eTogejE1Lm51bWJlcigpLFxuICAgICAgLyoqIE1haW50ZW5hbmNlIHNlYXJjaCBzY29yZSB2YWx1ZSAoZnJvbSBgMC4wYCB0byBgMS4wYCkuICovXG4gICAgICBtYWludGVuYW5jZTogejE1Lm51bWJlcigpXG4gICAgfSlcbiAgfSksXG4gIC8qKiBTZWFyY2ggc2NvcmUgdmFsdWU7IG1heSBiZSBkaWZmZXJlbnQgZnJvbSBgc2NvcmUuZmluYWxgLiAqL1xuICBzZWFyY2hTY29yZTogejE1Lm51bWJlcigpLFxuICAvKiogRmxhZyBhdHRyaWJ1dGVzIGZvciB0aGUgcGFja2FnZS4gKi9cbiAgZmxhZ3M6IHoxNS5vYmplY3Qoe1xuICAgIC8qKiBUcnVlIGlmIHRoZSBwYWNrYWdlIHNlbXZlciB2ZXJzaW9uIG51bWJlciBpcyBgPDEuMC4wYC4gKi9cbiAgICB1bnN0YWJsZTogejE1LmNvZXJjZS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgICAvKiogVHJ1ZSBpZiB0aGUgcGFja2FnZSBpcyBpbnNlY3VyZSBvciBoYXMgdnVsbmVyYWJsZSBkZXBlbmRlbmNpZXMuICovXG4gICAgaW5zZWN1cmU6IHoxNS5jb2VyY2UuYm9vbGVhbigpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG52YXIgU2VhcmNoUmVzdWx0cyA9IHoxNS5vYmplY3Qoe1xuICBvYmplY3RzOiB6MTUuYXJyYXkoU2VhcmNoUmVzdWx0KSxcbiAgLyoqXG4gIFRvdGFsIG51bWJlciBvZiBjb3JyZXNwb25kaW5nIHNlYXJjaCByZXN1bHRzIGF2YWlsYWJsZTtcbiAgbWF5IGJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YgYG9iamVjdHNgIHJldHVybmVkLlxuICAqL1xuICB0b3RhbDogejE1Lm51bWJlcigpLFxuICAvKiogRGF0ZSBhdCB3aGljaCB0aGUgc2VhcmNoIGhhcHBlbmVkLiAqL1xuICB0aW1lOiB6MTUuc3RyaW5nKClcbn0pO1xudmFyIHNlYXJjaFBhY2thZ2VzID0gYXN5bmMgKGNyaXRlcmlhLCByZWdpc3RyeSA9IG5wbVJlZ2lzdHJ5VXJsKSA9PiBmZXRjaERhdGEoU2VhcmNoUmVzdWx0cywgdXJsSm9pbjEyKHJlZ2lzdHJ5LCBcIi0vdjEvc2VhcmNoXCIsIGA/JHtxdWVyeVN0cmluZy5zdHJpbmdpZnkoY3JpdGVyaWEpfWApKTtcbmV4cG9ydCB7XG4gIEFiYnJldmlhdGVkUGFja3VtZW50LFxuICBCdWxrRGFpbHlQYWNrYWdlRG93bmxvYWRzLFxuICBCdWxrUGFja2FnZURvd25sb2FkcyxcbiAgRGFpbHlQYWNrYWdlRG93bmxvYWRzLFxuICBEYWlseVJlZ2lzdHJ5RG93bmxvYWRzLFxuICBEb3dubG9hZFBlcmlvZCxcbiAgUGFja2FnZURvd25sb2FkcyxcbiAgUGFja2FnZUpzb240IGFzIFBhY2thZ2VKc29uLFxuICBQYWNrYWdlTWFuaWZlc3QsXG4gIFBhY2thZ2VWZXJzaW9uc0Rvd25sb2FkcyxcbiAgUGFja3VtZW50LFxuICBSZWdpc3RyeURvd25sb2FkcyxcbiAgUmVnaXN0cnlNZXRhZGF0YSxcbiAgUmVnaXN0cnlTaWduaW5nS2V5cyxcbiAgU2VhcmNoQ3JpdGVyaWEsXG4gIFNlYXJjaFJlc3VsdHMsXG4gIGNhY2hlLFxuICBnZXRBYmJyZXZpYXRlZFBhY2t1bWVudCxcbiAgZ2V0QnVsa0RhaWx5UGFja2FnZURvd25sb2FkcyxcbiAgZ2V0QnVsa1BhY2thZ2VEb3dubG9hZHMsXG4gIGdldERhaWx5UGFja2FnZURvd25sb2FkcyxcbiAgZ2V0RGFpbHlSZWdpc3RyeURvd25sb2FkcyxcbiAgZ2V0UGFja2FnZURvd25sb2FkcyxcbiAgZ2V0UGFja2FnZU1hbmlmZXN0LFxuICBnZXRQYWNrYWdlVmVyc2lvbnNEb3dubG9hZHMsXG4gIGdldFBhY2t1bWVudCxcbiAgZ2V0UmVnaXN0cnlEb3dubG9hZHMsXG4gIGdldFJlZ2lzdHJ5TWV0YWRhdGEsXG4gIGdldFJlZ2lzdHJ5U2lnbmluZ0tleXMsXG4gIG5wbVJlZ2lzdHJ5RG93bmxvYWRzQXBpVXJsLFxuICBucG1SZWdpc3RyeVVybCxcbiAgc2VhcmNoUGFja2FnZXNcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuaWZlc3QgfSBmcm9tIFwicXVlcnktcmVnaXN0cnlcIjtcblxuY29uc3QgZ2l0aHViVXJsUmVnZXggPVxuICAvKD86Z2l0XFwrKT9odHRwcz86XFwvXFwvZ2l0aHViXFwuY29tXFwvKFteXFwvXStcXC9bXlxcL10rKVxcLmdpdC87IC8vIFRPRE86IERvbid0IHRydXN0IHRoaXMsIGl0J3MgY2hhdGdiZCA6KVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdE93bmVyQW5kUmVwbyhcbiAgcmVwb3NpdG9yeVVybDogc3RyaW5nLFxuKTogW3N0cmluZywgc3RyaW5nXSB8IG51bGwge1xuICBjb25zdCBtYXRjaCA9IHJlcG9zaXRvcnlVcmwubWF0Y2goZ2l0aHViVXJsUmVnZXgpO1xuXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFtvd25lciwgcmVwb10gPSBtYXRjaFsxXS5zcGxpdChcIi9cIik7XG4gICAgcmV0dXJuIFtvd25lciwgcmVwb107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSZXBvc2l0b3J5KG1hbmlmZXN0OiBQYWNrYWdlTWFuaWZlc3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYW5pZmVzdC5yZXBvc2l0b3J5ID09PSBcInN0cmluZ1wiXG4gICAgPyBtYW5pZmVzdC5yZXBvc2l0b3J5XG4gICAgOiBtYW5pZmVzdC5yZXBvc2l0b3J5Py51cmw7XG59XG5cbmNvbnN0IGNvbW1pdExlbmd0aCA9IDc7XG5cbi8qXG4gKiBcIjA5ZWZkMDU1MzM3NGZmN2QzZTYyYjc5Mzc4ZTMxODRmNWViNTc1NzFcIiA9PiBcIjA5ZWZkMDVcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWJicmV2aWF0ZUNvbW1pdEhhc2goZnVsbEhhc2g6IHN0cmluZykge1xuICByZXR1cm4gZnVsbEhhc2guc3Vic3RyaW5nKDAsIGNvbW1pdExlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1B1bGxSZXF1ZXN0KHJlZjogc3RyaW5nKSB7XG4gIHJldHVybiAhTnVtYmVyLmlzTmFOKE51bWJlcihyZWYpKVxufVxuIiwgIntcbiAgXCJuYW1lXCI6IFwicGtnLXByLW5ld1wiLFxuICBcInZlcnNpb25cIjogXCIwLjAuMlwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXG4gIFwibWFpblwiOiBcImluZGV4LmpzXCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcImJpblwiOiB7XG4gICAgXCJwa2ctcHItbmV3XCI6IFwiYmluL2NsaS5qc1wiXG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJkZXZcIjogXCJ0c3VwIC0td2F0Y2hcIixcbiAgICBcImJ1aWxkXCI6IFwidHN1cFwiLFxuICAgIFwiYnVpbGQ6cHVibGlzaFwiOiBcIkFQSV9VUkw9aHR0cHM6Ly9wa2cucHIubmV3LyB0c3VwXCJcbiAgfSxcbiAgXCJrZXl3b3Jkc1wiOiBbXSxcbiAgXCJhdXRob3JcIjogXCJcIixcbiAgXCJsaWNlbnNlXCI6IFwiSVNDXCIsXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBqc2RldnRvb2xzL2V6LXNwYXduXCI6IFwiXjMuMC40XCIsXG4gICAgXCJAb2N0b2tpdC9hY3Rpb25cIjogXCJeNi4wLjdcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAcGtnLXByLW5ldy91dGlsc1wiOiBcIndvcmtzcGFjZTpeXCIsXG4gICAgXCJjaXR0eVwiOiBcIl4wLjEuNlwiLFxuICAgIFwicXVlcnktcmVnaXN0cnlcIjogXCJeMy4wLjBcIixcbiAgICBcInRzdXBcIjogXCJeOC4wLjJcIlxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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TyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFVBQVEsVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFVBQVEsVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFNBQU8sTUFBSSxNQUFJLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsUUFBTSxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLEtBQUcsT0FBSyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLE9BQUssS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxPQUFLLEtBQUcsS0FBRyxPQUFLLE9BQUssS0FBRyxLQUFHLE9BQUssT0FBSyxLQUFHLEtBQUcsT0FBSyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sS0FBRyxRQUFNLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxRQUFNLEtBQUcsS0FBRyxRQUFNLFFBQU0sS0FBRyxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFFBQU0sUUFBTSxLQUFHLEtBQUcsUUFBTSxLQUFHLFNBQU8sS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxTQUFPLEtBQUcsS0FBRyxTQUFPLFNBQU8sS0FBRyxLQUFHLFNBQU8sU0FBTyxLQUFHLEtBQUcsU0FBTyxLQUFHLFNBQU8sVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFVBQVEsVUFBUSxLQUFHLEtBQUcsVUFBUSxVQUFRLEtBQUcsS0FBRyxVQUFRLFVBQVEsS0FBRyxLQUFHLFdBQVMsV0FBUyxLQUFHLEtBQUcsVUFBUSxNQUFJO0FBQUEsTUFBRyxHQUFFLEVBQUUsa0JBQWdCLFNBQVMsR0FBRTtBQUFDLFlBQUlBLEtBQUUsS0FBSyxlQUFlLENBQUM7QUFBRSxlQUFPQSxNQUFHLE9BQUtBLE1BQUcsT0FBS0EsTUFBRyxNQUFJLElBQUU7QUFBQSxNQUFDO0FBQUUsZUFBUyxFQUFFLEdBQUU7QUFBQyxlQUFPLEVBQUUsTUFBTSxrREFBa0QsS0FBRyxDQUFDO0FBQUEsTUFBQztBQUFDLFFBQUUsU0FBTyxTQUFTLEdBQUU7QUFBQyxpQkFBUUEsS0FBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUVBLEdBQUUsUUFBTztBQUFJLGNBQUUsSUFBRSxLQUFLLGdCQUFnQkEsR0FBRSxDQUFDLENBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQyxHQUFFLEVBQUUsUUFBTSxTQUFTLEdBQUVBLElBQUUsR0FBRTtBQUFDLGtCQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUVBLEtBQUVBLE1BQUcsR0FBRSxJQUFFLEtBQUcsR0FBRUEsS0FBRSxNQUFJQSxLQUFFLFVBQVFBLEtBQUcsSUFBRSxNQUFJLElBQUUsVUFBUTtBQUFHLGlCQUFRLElBQUUsSUFBRyxJQUFFLEdBQUUsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sS0FBSTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsT0FBTyxDQUFDO0FBQUUsY0FBRyxLQUFHQSxNQUFHLEtBQUcsSUFBRSxJQUFFO0FBQUcsZ0JBQUcsSUFBRSxLQUFHO0FBQUUsbUJBQUc7QUFBQTtBQUFPO0FBQU0sZUFBRztBQUFBLFFBQUU7QUFBQyxlQUFPO0FBQUEsTUFBQztBQUFBLElBQUUsR0FBRyxDQUFDO0FBQUUsSUFBTSxJQUFFO0FBQUUsSUFBSSxJQUFFLFdBQVU7QUFBQyxhQUFPO0FBQUEsSUFBZ3llO0FBQW9YLElBQU0sSUFBRTtBQUFSLElBQVcsSUFBRSxDQUFDLElBQUUsTUFBSSxPQUFHLFFBQVEsSUFBRSxDQUFDO0FBQWxDLElBQXNDLElBQUUsQ0FBQyxJQUFFLE1BQUksT0FBRyxRQUFRLEtBQUcsQ0FBQyxNQUFNLENBQUM7QUFBckUsSUFBeUUsSUFBRSxDQUFDLElBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLFFBQVEsS0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQXhILElBQTRILElBQUUsRUFBQyxVQUFTLEVBQUMsT0FBTSxDQUFDLEdBQUUsQ0FBQyxHQUFFLE1BQUssQ0FBQyxHQUFFLEVBQUUsR0FBRSxLQUFJLENBQUMsR0FBRSxFQUFFLEdBQUUsUUFBTyxDQUFDLEdBQUUsRUFBRSxHQUFFLFdBQVUsQ0FBQyxHQUFFLEVBQUUsR0FBRSxVQUFTLENBQUMsSUFBRyxFQUFFLEdBQUUsU0FBUSxDQUFDLEdBQUUsRUFBRSxHQUFFLFFBQU8sQ0FBQyxHQUFFLEVBQUUsR0FBRSxlQUFjLENBQUMsR0FBRSxFQUFFLEVBQUMsR0FBRSxPQUFNLEVBQUMsT0FBTSxDQUFDLElBQUcsRUFBRSxHQUFFLEtBQUksQ0FBQyxJQUFHLEVBQUUsR0FBRSxPQUFNLENBQUMsSUFBRyxFQUFFLEdBQUUsUUFBTyxDQUFDLElBQUcsRUFBRSxHQUFFLE1BQUssQ0FBQyxJQUFHLEVBQUUsR0FBRSxTQUFRLENBQUMsSUFBRyxFQUFFLEdBQUUsTUFBSyxDQUFDLElBQUcsRUFBRSxHQUFFLE9BQU0sQ0FBQyxJQUFHLEVBQUUsR0FBRSxhQUFZLENBQUMsSUFBRyxFQUFFLEdBQUUsTUFBSyxDQUFDLElBQUcsRUFBRSxHQUFFLE1BQUssQ0FBQyxJQUFHLEVBQUUsR0FBRSxXQUFVLENBQUMsSUFBRyxFQUFFLEdBQUUsYUFBWSxDQUFDLElBQUcsRUFBRSxHQUFFLGNBQWEsQ0FBQyxJQUFHLEVBQUUsR0FBRSxZQUFXLENBQUMsSUFBRyxFQUFFLEdBQUUsZUFBYyxDQUFDLElBQUcsRUFBRSxHQUFFLFlBQVcsQ0FBQyxJQUFHLEVBQUUsR0FBRSxhQUFZLENBQUMsSUFBRyxFQUFFLEVBQUMsR0FBRSxTQUFRLEVBQUMsU0FBUSxDQUFDLElBQUcsRUFBRSxHQUFFLE9BQU0sQ0FBQyxJQUFHLEVBQUUsR0FBRSxTQUFRLENBQUMsSUFBRyxFQUFFLEdBQUUsVUFBUyxDQUFDLElBQUcsRUFBRSxHQUFFLFFBQU8sQ0FBQyxJQUFHLEVBQUUsR0FBRSxXQUFVLENBQUMsSUFBRyxFQUFFLEdBQUUsUUFBTyxDQUFDLElBQUcsRUFBRSxHQUFFLFNBQVEsQ0FBQyxJQUFHLEVBQUUsR0FBRSxlQUFjLENBQUMsS0FBSSxFQUFFLEdBQUUsUUFBTyxDQUFDLEtBQUksRUFBRSxHQUFFLFFBQU8sQ0FBQyxLQUFJLEVBQUUsR0FBRSxhQUFZ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QUFFO0FBQUUsaUJBQVMsQ0FBQyxHQUFFLENBQUMsS0FBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLFFBQVEsR0FBRTtBQUFDLFVBQUUsU0FBTyxVQUFLLEVBQUUsRUFBRSxTQUFPLENBQUMsSUFBRSxFQUFFLEVBQUUsU0FBTyxDQUFDLEVBQUUsVUFBVTtBQUFHLFlBQUksSUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFPLENBQUMsQ0FBQztBQUFFLFlBQUcsTUFBSSxNQUFJLEtBQUcsTUFBSSxFQUFFLGFBQVcsU0FBSSxFQUFFLFNBQU8sV0FBTSxFQUFFLEtBQUssRUFBRSxHQUFFLElBQUUsS0FBSSxJQUFFLEtBQUcsRUFBRSxTQUFPLFdBQU0sRUFBRSxFQUFFLFNBQU8sQ0FBQyxLQUFHLEtBQUksT0FBTSxFQUFFLFFBQU0sRUFBRSxDQUFDLElBQUUsR0FBRTtBQUFDLGdCQUFNLElBQUUsSUFBRSxHQUFFLElBQUUsSUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLElBQUUsSUFBRSxLQUFHLENBQUM7QUFBRSxlQUFLLE9BQU8sRUFBRSxDQUFDLElBQUUsS0FBRyxDQUFDLElBQUUsS0FBRyxFQUFFLEtBQUssRUFBRSxHQUFFLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBRTtBQUFBLFFBQVE7QUFBQyxZQUFHLElBQUUsRUFBRSxDQUFDLElBQUUsS0FBRyxJQUFFLEtBQUcsRUFBRSxDQUFDLElBQUUsR0FBRTtBQUFDLGNBQUcsRUFBRSxhQUFXLFNBQUksSUFBRSxHQUFFO0FBQUMsY0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFFO0FBQUEsVUFBUTtBQUFDLFlBQUUsS0FBSyxFQUFFO0FBQUEsUUFBRTtBQUFDLFlBQUcsSUFBRSxFQUFFLENBQUMsSUFBRSxLQUFHLEVBQUUsYUFBVyxPQUFHO0FBQUMsWUFBRSxHQUFFLEdBQUUsQ0FBQztBQUFFO0FBQUEsUUFBUTtBQUFDLFVBQUUsRUFBRSxTQUFPLENBQUMsS0FBRztBQUFBLE1BQUU7QUFBQyxRQUFFLFNBQU8sVUFBSyxJQUFFLEVBQUUsSUFBSSxPQUFHLEdBQUcsQ0FBQyxDQUFD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QUFVLEdBQUUsRUFBRSxLQUFLLE9BQU0sSUFBRSxHQUFFLEtBQUssT0FBTyxHQUFHLFVBQVMsS0FBSyxNQUFNLEdBQUUsS0FBSyxPQUFPLEdBQUUsSUFBSSxRQUFRLENBQUMsR0FBRSxNQUFJO0FBQUMsZUFBSyxLQUFLLFVBQVMsTUFBSTtBQUFDLGlCQUFLLE9BQU8sTUFBTSxJQUFJLE9BQU8sSUFBSSxHQUFFLEtBQUssT0FBTyxJQUFJLFVBQVMsS0FBSyxNQUFNLEdBQUUsRUFBRSxLQUFLLE9BQU0sS0FBRSxHQUFFLEVBQUUsS0FBSyxLQUFLO0FBQUEsVUFBRSxDQUFDLEdBQUUsS0FBSyxLQUFLLFVBQVMsTUFBSTtBQUFDLGlCQUFLLE9BQU8sTUFBTSxJQUFJLE9BQU8sSUFBSSxHQUFFLEtBQUssT0FBTyxJQUFJLFVBQVMsS0FBSyxNQUFNLEdBQUUsRUFBRSxLQUFLLE9BQU0sS0FBRSxHQUFFLEVBQUUsQ0FBQztBQUFBLFVBQUUsQ0FBQztBQUFBLFFBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQSxNQUFDLEdBQUcsR0FBRSxHQUFFO0FBQUMsY0FBTSxJQUFFLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBRyxDQUFDO0FBQUUsVUFBRSxLQUFLLEVBQUMsSUFBRyxFQUFDLENBQUMsR0FBRSxLQUFLLFlBQVksSUFBSSxHQUFFLENBQUM7QUFBQSxNQUFFO0FBQUEsTUFBQyxLQUFLLEdBQUUsR0FBRTtBQUFDLGNBQU0sSUFBRSxLQUFLLFlBQVksSUFBSSxDQUFDLEtBQUcsQ0FBQztBQUFFLFVBQUUsS0FBSyxFQUFDLElBQUcsR0FBRSxNQUFLLEtBQUUsQ0FBQyxHQUFFLEtBQUssWUFBWSxJQUFJLEdBQUUsQ0FBQztBQUFBLE1BQUU7QUFBQSxNQUFDLEtBQUssTUFBSyxHQUFFO0FBQUMsY0FBTSxJQUFFLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBRyxDQUFDLEdBQUVBLEtBQUUsQ0FBQztBQUFFLG1CQUFVLEtBQUs7QUFBRSxZQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUUsRUFBRSxRQUFNQSxHQUFFLEtBQUssTUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRSxDQUFDLENBQUM7QUFBRSxtQkFBVSxLQUFLQTtBQUFFLFlBQUU7QUFBQSxNQUFFO0FBQUEsTUFBQyxjQUFhO0FBQUMsYUFBSyxZQUFZLE1BQU07QUFBQSxNQUFFO0FBQUEsTUFBQyxXQUFXLEdBQUUsR0FBRTtBQUFDLFlBQUcsS0FBSyxVQUFRLFlBQVUsS0FBSyxRQUFNLFdBQVUsR0FBRyxRQUFNLENBQUMsS0FBSyxVQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksS0FBRyxLQUFLLEtBQUssVUFBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRSxHQUFHLFFBQU0sR0FBRyxJQUFJLEVBQUUsSUFBSSxLQUFHLEtBQUssS0FBSyxVQUFTLEVBQUUsSUFBSSxHQUFFLE1BQUksRUFBRSxZQUFZLE1BQUksT0FBSyxFQUFFLFlBQVksTUFBSSxRQUFNLEtBQUssS0FBSyxXQUFVLEVBQUUsWUFBWSxNQUFJLEdBQUcsR0FBRSxLQUFHLEtBQUssS0FBSyxPQUFNLEVBQUUsWUFBWSxDQUFDLEdBQUUsR0FBRyxTQUFPLFVBQVM7QUFBQyxjQUFHLEtBQUssS0FBSyxVQUFTO0FBQUMsa0JBQU0sSUFBRSxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUs7QUFBRSxrQkFBSSxLQUFLLFFBQU0sR0FBRSxLQUFLLFFBQU0sU0FBUSxLQUFLLEdBQUcsTUFBTSxLQUFLLEtBQUs7QUFBQSxVQUFHO0FBQUMsZUFBSyxVQUFRLFlBQVUsS0FBSyxRQUFNO0FBQUEsUUFBVTtBQUFDLGNBQUksUUFBTSxLQUFLLFFBQU0sWUFBVyxLQUFLLFVBQVEsWUFBVSxLQUFLLFVBQVEsYUFBVyxLQUFLLEtBQUssVUFBVSxHQUFFLEtBQUssT0FBTyxJQUFHLEtBQUssVUFBUSxZQUFVLEtBQUssVUFBUSxhQUFXLEtBQUssTUFBTTtBQUFBLE1BQUU7QUFBQSxNQUFDLFFBQU87QUFBQyxhQUFLLE1BQU0sT0FBTyxHQUFFLEtBQUssTUFBTSxlQUFlLFlBQVcsS0FBSyxVQUFVLEdBQUUsS0FBSyxPQUFPLE1B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QSxNQUFDLFlBQVksR0FBRTtBQUFDLGNBQU0sR0FBRSxLQUFFLEdBQUUsS0FBSyxTQUFPLEdBQUUsS0FBSyxVQUFRLEVBQUUsU0FBUSxLQUFLLFFBQU0sQ0FBQyxHQUFHLEVBQUUsaUJBQWUsQ0FBQyxDQUFDLEdBQUUsS0FBSyxTQUFPLEtBQUssSUFBSSxLQUFLLFFBQVEsVUFBVSxDQUFDLEVBQUMsT0FBTSxFQUFDLE1BQUksTUFBSSxFQUFFLFFBQVEsR0FBRSxDQUFDLEdBQUUsS0FBSyxHQUFHLE9BQU0sT0FBRztBQUFDLGdCQUFJLE9BQUssS0FBSyxVQUFVO0FBQUEsUUFBRSxDQUFDLEdBQUUsS0FBSyxHQUFHLFVBQVMsT0FBRztBQUFDLGtCQUFPLEdBQUU7QUFBQSxZQUFDLEtBQUk7QUFBQSxZQUFPLEtBQUk7QUFBSyxtQkFBSyxTQUFPLEtBQUssV0FBUyxJQUFFLEtBQUssUUFBUSxTQUFPLElBQUUsS0FBSyxTQUFPO0FBQUU7QUFBQSxZQUFNLEtBQUk7QUFBQSxZQUFPLEtBQUk7QUFBUSxtQkFBSyxTQUFPLEtBQUssV0FBUyxLQUFLLFFBQVEsU0FBTyxJQUFFLElBQUUsS0FBSyxTQUFPO0FBQUU7QUFBQSxZQUFNLEtBQUk7QUFBUSxtQkFBSyxZQUFZO0FBQUU7QUFBQSxVQUFLO0FBQUEsUUFBQyxDQUFDO0FBQUEsTUFBRTtBQUFBLE1BQUMsSUFBSSxTQUFRO0FBQUMsZUFBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLEVBQUU7QUFBQSxNQUFLO0FBQUEsTUFBQyxZQUFXO0FBQUMsY0FBTSxJQUFFLEtBQUssTUFBTSxXQUFTLEtBQUssUUFBUTtBQUFPLGFBQUssUUFBTSxJQUFFLENBQUMsSUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFHLEVBQUUsS0FBSztBQUFBLE1BQUU7QUFBQSxNQUFDLGNBQWE7QUFBQyxjQUFNLElBQUUsS0FBSyxNQUFNLFNBQVMsS0FBSyxNQUFNO0FBQUUsYUFBSyxRQUFNLElBQUUsS0FBSyxNQUFNLE9BQU8sT0FBRyxNQUFJLEtBQUssTUFBTSxJQUFFLENBQUMsR0FBRyxLQUFLLE9B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LGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsVUFDckMsVUFBVyxhQUFhLGFBQWEsUUFBVTtBQUNsRCxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxZQUFLLE1BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsT0FBUztBQUNoRCxpQkFBTztBQUFBLFFBQ1Q7QUFDQSxZQUFLLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUNWLE9BQVUsYUFBYSxhQUFhLE9BQ3BDLE9BQVUsYUFDVixPQUFVLGFBQ1YsT0FBVSxhQUFhLGFBQWEsT0FDcEMsT0FBVSxhQUNWLE9BQVUsYUFDVixPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxPQUFVLGFBQWEsYUFBYSxPQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFFBQVUsYUFDVixRQUFVLGFBQ1YsUUFBVSxhQUNWLFFBQVUsYUFDVixRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQWEsYUFBYSxRQUNwQyxRQUFVLGFBQ1YsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUFhLGFBQWEsUUFDcEMsUUFBVSxhQUNWLFFBQVUsYUFBYSxhQUFhLFFBQ3BDLFNBQVUsYUFDVixTQUFVLGFBQ1YsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUFhLGFBQWEsU0FDcEMsU0FBVSxhQUNWLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFVBQ3JDLFVBQVcsYUFBYSxhQUFhLFdBQ3JDLFdBQVksYUFBYSxhQUFhLFNBQVc7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Q0FBQztBQUFBLEVBQzNFO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sT0FBTyxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQ3pFO0FBQUEsRUFDQSxNQUFNLFNBQVM7QUFDWCxXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sU0FBUyxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzNFO0FBQUEsRUFDQSxLQUFLLFNBQVM7QUFDVixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzFFO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDWixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzVFO0FBQUEsRUFDQSxLQUFLLFNBQVM7QUFDVixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzFFO0FBQUEsRUFDQSxNQUFNLFNBQVM7QUFDWCxXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sU0FBUyxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzNFO0FBQUEsRUFDQSxLQUFLLFNBQVM7QUFDVixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sUUFBUSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzFFO0FBQUEsRUFDQSxPQUFPLFNBQVM7QUFDWixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sVUFBVSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzVFO0FBQUEsRUFDQSxHQUFHLFNBQVM7QUFDUixXQUFPLEtBQUssVUFBVSxFQUFFLE1BQU0sTUFBTSxHQUFHLFVBQVUsU0FBUyxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQ3hFO0FBQUEsRUFDQSxTQUFTLFNBQVM7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LENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLGFBQWE7QUFDYixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsVUFBVTtBQUFBLEVBQ2pFO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDVixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsT0FBTztBQUFBLEVBQzlEO0FBQUEsRUFDQSxJQUFJLFFBQVE7QUFDUixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsS0FBSztBQUFBLEVBQzVEO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDVixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsT0FBTztBQUFBLEVBQzlEO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLFdBQVc7QUFDWCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsUUFBUTtBQUFBLEVBQy9EO0FBQUEsRUFDQSxJQUFJLFNBQVM7QUFDVCxXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsTUFBTTtBQUFBLEVBQzdEO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDVixXQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMs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dWx0cyIsICJrZXkiLCAicCIsICJjIiwgImwiLCAia2V5IiwgInRleHQiLCAicyIsICJ0dHkiLCAiaXNDb2xvclN1cHBvcnRlZCIsICJyZXBsYWNlQ2xvc2UiLCAiY3JlYXRlQ29sb3JzIiwgImMiLCAiZW52IiwgImFuc2lSZWdleCIsICJzdHJpcEFuc2kiLCAiXyIsICJtIiwgImdldENvbG9yIiwgImNyZWF0ZUNvbnNvbGEiLCAiaXNDSSIsICJ1bmljb2RlIiwgInMiLCAidGV4dCIsICJjIiwgInNyYyIsICJSIiwgImIiLCAibSIsICJiIiwgInYiLCAicyIsICJiIiwgImIiLCAiYiIsICJiIiwgImIiLCAiYiIsICJiIiwgImIiLCAiYiIsICJiIiwgImIiLCAiYiIsICJiIiwgImNvZXJjZSIsICJsIiwgInAiLCAiaCIsICJrZXkiLCAibCIsICJyIiwgImMiLCAiY2FjaGUiLCAiXyIsICJNIiwgIm0iLCAicCIsICJ6IiwgInIiLCAibSIsICJjIiwgInYiLCAidiIsICJyZXF1aXJlX3ZhbGlkIiwgInYiLCAiYiIsICJjIiwgImIiLCAicmVxdWlyZV9zZW12ZXIiLCAiY29lcmNlIiwgImwiLCAiYyIsICJwIiwgImtleSIsICJqIiwgImRlZmF1bHRzIiwgImtleSIsICJyZWdleCIsICJ1cmwiLCAiZiIsICJqIiwgIkgiLCAiSyIsICJXIiwgIk0iLCAiSDIiLCAiYiIsICJjIiwgImciLCAiaCIsICJ1dGlsIiwgImtleSIsICJfIiwgIm9iamVjdFV0aWwiLCAicGF0aCIsICJtIiwgInMiLCAiZiIsICJlcnJvclV0aWwiLCAicGF0aCIsICJrZXkiLCAiZXJyb3JNYXAiLCAiZW1vamlSZWdleCIsICJyZWdleCIsICJjdHgiLCAicmVzdWx0IiwgImlzc3VlcyIsICJiIiwgImVsZW1lbnRzIiwgInByb2Nlc3NlZCIsICJwIiwgInAyIiwgIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsICJ6IiwgInoiLCAiY2FjaGUiLCAia2V5IiwgInoiLCAidmFsaWRhdGVQYWNrYWdlTmFtZSIsICJpc1ZhbGlkIiwgInVybCIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJ6IiwgInoiLCAieiIsICJvd25lciIsICJyZXBvIiwgInAiLCAidXJsIl0KfQo=