@tscircuit/cli 0.1.11 → 0.1.12

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/main.js +3 -3
  2. package/package.json +2 -2
package/dist/main.js CHANGED
@@ -131,13 +131,13 @@ var package_default = {
131
131
  name: "@tscircuit/cli",
132
132
  main: "dist/main.js",
133
133
  type: "module",
134
- version: "0.1.10",
134
+ version: "0.1.11",
135
135
  bin: {
136
136
  tsci: "./dist/main.js"
137
137
  },
138
138
  scripts: {
139
139
  start: "bun run dev",
140
- dev: "bun --hot ./cli/main.ts dev ./example-dir/snippet.tsx",
140
+ dev: "bun --hot ./cli/main.ts dev ./example-dir/snippet1-basic.tsx",
141
141
  build: "tsup-node cli/main.ts --format esm --sourcemap inline",
142
142
  format: "biome format --write .",
143
143
  "format:check": "biome format .",
@@ -720,4 +720,4 @@ if (process.argv.length === 2) {
720
720
  } else {
721
721
  program.parse();
722
722
  }
723
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY2xpL21haW4udHMiLCAiLi4vY2xpL2luaXQvcmVnaXN0ZXIudHMiLCAiLi4vY2xpL2Rldi9yZWdpc3Rlci50cyIsICIuLi9saWIvZGVwZW5kZW5jeS1hbmFseXNpcy9pbnN0YWxsTm9kZU1vZHVsZVR5cGVzRm9yU25pcHBldC50cyIsICIuLi9jbGkvZGV2L0RldlNlcnZlci50cyIsICIuLi9saWIvc2VydmVyL2NyZWF0ZUh0dHBTZXJ2ZXIudHMiLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL2xpYi9zaXRlL2dldEluZGV4LnRzIiwgIi4uL2xpYi9zZXJ2ZXIvRXZlbnRzV2F0Y2hlci50cyIsICIuLi9saWIvY2xpLWNvbmZpZy9pbmRleC50cyIsICIuLi9jbGkvYXV0aC9sb2dpbi9yZWdpc3Rlci50cyIsICIuLi9saWIvcmVnaXN0cnktYXBpL2dldC1reS50cyIsICIuLi9jbGkvYXV0aC9sb2dvdXQvcmVnaXN0ZXIudHMiLCAiLi4vY2xpL2F1dGgvcmVnaXN0ZXIudHMiLCAiLi4vY2xpL2NvbmZpZy9yZWdpc3Rlci50cyIsICIuLi9jbGkvY29uZmlnL3ByaW50L3JlZ2lzdGVyLnRzIiwgIi4uL2NsaS9jbG9uZS9yZWdpc3Rlci50cyIsICIuLi9jbGkvZXhwb3J0L3JlZ2lzdGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgeyByZWdpc3RlckluaXQgfSBmcm9tIFwiLi9pbml0L3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyRGV2IH0gZnJvbSBcIi4vZGV2L3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyQXV0aExvZ2luIH0gZnJvbSBcIi4vYXV0aC9sb2dpbi9yZWdpc3RlclwiXG5pbXBvcnQgeyByZWdpc3RlckF1dGhMb2dvdXQgfSBmcm9tIFwiLi9hdXRoL2xvZ291dC9yZWdpc3RlclwiXG5pbXBvcnQgeyByZWdpc3RlckF1dGggfSBmcm9tIFwiLi9hdXRoL3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnL3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyQ29uZmlnUHJpbnQgfSBmcm9tIFwiLi9jb25maWcvcHJpbnQvcmVnaXN0ZXJcIlxuaW1wb3J0IHsgcmVnaXN0ZXJDbG9uZSB9IGZyb20gXCIuL2Nsb25lL3JlZ2lzdGVyXCJcbmltcG9ydCB7IHBlcmZlY3RDbGkgfSBmcm9tIFwicGVyZmVjdC1jbGlcIlxuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCJcbmltcG9ydCBzZW12ZXIgZnJvbSBcInNlbXZlclwiXG5pbXBvcnQgeyByZWdpc3RlckV4cG9ydCB9IGZyb20gXCIuL2V4cG9ydC9yZWdpc3RlclwiXG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXG5cbnByb2dyYW1cbiAgLm5hbWUoXCJ0c2NpXCIpXG4gIC5kZXNjcmlwdGlvbihcIkNMSSBmb3IgZGV2ZWxvcGluZyB0c2NpcmN1aXQgc25pcHBldHNcIilcbiAgLy8gSEFDSzogYXQgYnVpbGQgdGltZSB0aGUgdmVyc2lvbiBpcyBvbGQsIHdlIG5lZWQgdG9cbiAgLy8gZml4IHRoaXMgYXQgc29tZSBwb2ludC4uLlxuICAudmVyc2lvbihzZW12ZXIuaW5jKHBrZy52ZXJzaW9uLCBcInBhdGNoXCIpID8/IHBrZy52ZXJzaW9uKVxuXG5yZWdpc3RlckluaXQocHJvZ3JhbSlcblxucmVnaXN0ZXJEZXYocHJvZ3JhbSlcbnJlZ2lzdGVyQ2xvbmUocHJvZ3JhbSlcblxucmVnaXN0ZXJBdXRoKHByb2dyYW0pXG5yZWdpc3RlckF1dGhMb2dpbihwcm9ncmFtKVxucmVnaXN0ZXJBdXRoTG9nb3V0KHByb2dyYW0pXG5cbnJlZ2lzdGVyQ29uZmlnKHByb2dyYW0pXG5yZWdpc3RlckNvbmZpZ1ByaW50KHByb2dyYW0pXG5cbnJlZ2lzdGVyRXhwb3J0KHByb2dyYW0pXG5cbmlmIChwcm9jZXNzLmFyZ3YubGVuZ3RoID09PSAyKSB7XG4gIHBlcmZlY3RDbGkocHJvZ3JhbSwgcHJvY2Vzcy5hcmd2KVxufSBlbHNlIHtcbiAgcHJvZ3JhbS5wYXJzZSgpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJJbml0ID0gKHByb2dyYW06IENvbW1hbmQpID0+IHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiaW5pdFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkluaXRpYWxpemUgYSBuZXcgVFNDaXJjdWl0IHByb2plY3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XCIpXG4gICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKVxuXG4gICAgICBjb25zdCBpbmRleEZpbGVQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiaW5kZXgudHN4XCIpXG4gICAgICBjb25zdCBucG1yY0ZpbGVQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiLm5wbXJjXCIpXG5cbiAgICAgIGNvbnN0IGluZGV4Q29udGVudCA9IGBcbmV4cG9ydCBkZWZhdWx0ICgpID0+IChcbiAgPGJvYXJkIHdpZHRoPVwiMTBtbVwiIGhlaWdodD1cIjEwbW1cIj5cbiAgICA8cmVzaXN0b3JcbiAgICAgIHJlc2lzdGFuY2U9XCIxa1wiXG4gICAgICBmb290cHJpbnQ9XCIwNDAyXCJcbiAgICAgIG5hbWU9XCJSMVwiXG4gICAgICBzY2hYPXszfVxuICAgICAgcGNiWD17M31cbiAgICAvPlxuICAgIDxjYXBhY2l0b3JcbiAgICAgIGNhcGFjaXRhbmNlPVwiMTAwMHBGXCJcbiAgICAgIGZvb3RwcmludD1cIjA0MDJcIlxuICAgICAgbmFtZT1cIkMxXCJcbiAgICAgIHNjaFg9ey0zfVxuICAgICAgcGNiWD17LTN9XG4gICAgLz5cbiAgICA8dHJhY2UgZnJvbT1cIi5SMSA+IC5waW4xXCIgdG89XCIuQzEgPiAucGluMVwiIC8+XG4gIDwvYm9hcmQ+XG4pO1xuYFxuXG4gICAgICBjb25zdCBucG1yY0NvbnRlbnQgPSBgXG5AdHNjaTpyZWdpc3RyeT1odHRwczovL25wbS50c2NpcmN1aXQuY29tXG5gXG5cbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhpbmRleEZpbGVQYXRoKSkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4RmlsZVBhdGgsIGluZGV4Q29udGVudC50cmltU3RhcnQoKSlcbiAgICAgICAgY29uc29sZS5sb2coYENyZWF0ZWQ6ICR7aW5kZXhGaWxlUGF0aH1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFNraXBwZWQ6ICR7aW5kZXhGaWxlUGF0aH0gYWxyZWFkeSBleGlzdHNgKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobnBtcmNGaWxlUGF0aCkpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhucG1yY0ZpbGVQYXRoLCBucG1yY0NvbnRlbnQudHJpbVN0YXJ0KCkpXG4gICAgICAgIGNvbnNvbGUubG9nKGBDcmVhdGVkOiAke25wbXJjRmlsZVBhdGh9YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGVkOiAke25wbXJjRmlsZVBhdGh9IGFscmVhZHkgZXhpc3RzYClcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBJbml0aWFsaXphdGlvbiBjb21wbGV0ZS4gUnVuIFwidHNjaSBkZXZcIiB0byBzdGFydCBkZXZlbG9waW5nLmAsXG4gICAgICApXG4gICAgfSlcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgKiBhcyBjaG9raWRhciBmcm9tIFwiY2hva2lkYXJcIlxuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IHsgY3JlYXRlSHR0cFNlcnZlciB9IGZyb20gXCJsaWIvc2VydmVyL2NyZWF0ZUh0dHBTZXJ2ZXJcIlxuaW1wb3J0IHsgZ2V0TG9jYWxGaWxlRGVwZW5kZW5jaWVzIH0gZnJvbSBcImxpYi9kZXBlbmRlbmN5LWFuYWx5c2lzL2dldExvY2FsRmlsZURlcGVuZGVuY2llc1wiXG5pbXBvcnQgeyBpbnN0YWxsTm9kZU1vZHVsZVR5cGVzRm9yU25pcHBldCB9IGZyb20gXCIuLi8uLi9saWIvZGVwZW5kZW5jeS1hbmFseXNpcy9pbnN0YWxsTm9kZU1vZHVsZVR5cGVzRm9yU25pcHBldFwiXG5pbXBvcnQgeyBFdmVudHNXYXRjaGVyIH0gZnJvbSBcIi4uLy4uL2xpYi9zZXJ2ZXIvRXZlbnRzV2F0Y2hlclwiXG5pbXBvcnQgeyBEZXZTZXJ2ZXIgfSBmcm9tIFwiLi9EZXZTZXJ2ZXJcIlxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJEZXYgPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkZXZcIilcbiAgICAuZGVzY3JpcHRpb24oXCJTdGFydCBkZXZlbG9wbWVudCBzZXJ2ZXIgZm9yIGEgc25pcHBldFwiKVxuICAgIC5hcmd1bWVudChcIltmaWxlXVwiLCBcIlBhdGggdG8gdGhlIHNuaXBwZXQgZmlsZVwiKVxuICAgIC5vcHRpb24oXCItcCwgLS1wb3J0IDxudW1iZXI+XCIsIFwiUG9ydCB0byBydW4gc2VydmVyIG9uXCIsIFwiMzAwMFwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKGZpbGU6IHN0cmluZywgb3B0aW9uczogeyBwb3J0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KG9wdGlvbnMucG9ydClcbiAgICAgIGxldCBhYnNvbHV0ZVBhdGg6IHN0cmluZ1xuXG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBhYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUoZmlsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnRQYXRoID0gcGF0aC5yZXNvbHZlKFwiaW5kZXgudHN4XCIpXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGVudHJ5cG9pbnRQYXRoKSkge1xuICAgICAgICAgIGFic29sdXRlUGF0aCA9IGVudHJ5cG9pbnRQYXRoXG4gICAgICAgICAgY29uc29sZS5sb2coXCJObyBmaWxlIHByb3ZpZGVkLiBVc2luZyAnaW5kZXgudHN4JyBhcyB0aGUgZW50cnlwb2ludC5cIilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiTm8gZW50cnlwb2ludCBmb3VuZC4gUnVuICd0c2NpIGluaXQnIHRvIGJvb3RzdHJhcCBhIGJhc2ljIHByb2plY3QuXCIsXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVEaXIgPSBwYXRoLmRpcm5hbWUoYWJzb2x1dGVQYXRoKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkluc3RhbGxpbmcgdHlwZXMgZm9yIGltcG9ydGVkIHNuaXBwZXRzLi4uXCIpXG4gICAgICAgIGF3YWl0IGluc3RhbGxOb2RlTW9kdWxlVHlwZXNGb3JTbmlwcGV0KGFic29sdXRlUGF0aClcbiAgICAgICAgY29uc29sZS5sb2coXCJUeXBlcyBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5XCIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gaW5zdGFsbCB0eXBlczpcIiwgZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcnZlciA9IG5ldyBEZXZTZXJ2ZXIoe1xuICAgICAgICBwb3J0LFxuICAgICAgICBjb21wb25lbnRGaWxlUGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgc2VydmVyLnN0YXJ0KClcbiAgICAgIGF3YWl0IHNlcnZlci5hZGRFbnRyeXBvaW50KClcbiAgICB9KVxufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiXG5cbmludGVyZmFjZSBTbmlwcGV0QXBpUmVzcG9uc2Uge1xuICBzbmlwcGV0OiB7XG4gICAgZHRzOiBzdHJpbmdcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE5vZGVNb2R1bGVUeXBlc0ZvclNuaXBwZXQoc25pcHBldFBhdGg6IHN0cmluZykge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNuaXBwZXRQYXRoLCBcInV0Zi04XCIpXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIHNuaXBwZXRQYXRoLFxuICAgIGNvbnRlbnQsXG4gICAgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgICB0cnVlLFxuICApXG5cbiAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXVxuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IHRzLk5vZGUpIHtcbiAgICBpZiAodHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gbm9kZS5tb2R1bGVTcGVjaWZpZXJcbiAgICAgIGlmIChtb2R1bGVTcGVjaWZpZXIgJiYgdHMuaXNTdHJpbmdMaXRlcmFsKG1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgICAgY29uc3QgaW1wb3J0UGF0aCA9IG1vZHVsZVNwZWNpZmllci50ZXh0XG4gICAgICAgIGlmIChpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoXCJAdHNjaS9cIikpIHtcbiAgICAgICAgICBpbXBvcnRzLnB1c2goaW1wb3J0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpXG4gIH1cblxuICB2aXNpdChzb3VyY2VGaWxlKVxuXG4gIGxldCBwcm9qZWN0Um9vdCA9IHBhdGguZGlybmFtZShzbmlwcGV0UGF0aClcbiAgd2hpbGUgKHByb2plY3RSb290ICE9PSBwYXRoLnBhcnNlKHByb2plY3RSb290KS5yb290KSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHByb2plY3RSb290LCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIHByb2plY3RSb290ID0gcGF0aC5kaXJuYW1lKHByb2plY3RSb290KVxuICB9XG5cbiAgZm9yIChjb25zdCBpbXBvcnRQYXRoIG9mIGltcG9ydHMpIHtcbiAgICBjb25zdCBbb3duZXIsIG5hbWVdID0gaW1wb3J0UGF0aC5yZXBsYWNlKFwiQHRzY2kvXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cHM6Ly9yZWdpc3RyeS1hcGkudHNjaXJjdWl0LmNvbS9zbmlwcGV0cy9nZXQ/b3duZXJfbmFtZT0ke293bmVyfSZ1bnNjb3BlZF9uYW1lPSR7bmFtZX1gLFxuICAgICAgKVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIHR5cGVzIGZvciAke2ltcG9ydFBhdGh9YClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YTogU25pcHBldEFwaVJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG5cbiAgICAgIGlmIChkYXRhLnNuaXBwZXQuZHRzKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIkB0c2NpXCIsXG4gICAgICAgICAgYCR7b3duZXJ9LiR7bmFtZX1gLFxuICAgICAgICApXG4gICAgICAgIGZzLm1rZGlyU3luYyhwYWNrYWdlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHBhY2thZ2VEaXIsIFwiaW5kZXguZC50c1wiKSwgZGF0YS5zbmlwcGV0LmR0cylcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGBFcnJvciBmZXRjaGluZyB0eXBlcyBmb3IgJHtpbXBvcnRQYXRofTpgLCBlcnJvcilcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQga3kgZnJvbSBcImt5XCJcbmltcG9ydCB0eXBlIHsgRmlsZVNlcnZlclJvdXRlcyB9IGZyb20gXCJsaWIvZmlsZS1zZXJ2ZXIvRmlsZVNlcnZlclJvdXRlc1wiXG5pbXBvcnQgeyBjcmVhdGVIdHRwU2VydmVyIH0gZnJvbSBcImxpYi9zZXJ2ZXIvY3JlYXRlSHR0cFNlcnZlclwiXG5pbXBvcnQgeyBFdmVudHNXYXRjaGVyIH0gZnJvbSBcImxpYi9zZXJ2ZXIvRXZlbnRzV2F0Y2hlclwiXG5pbXBvcnQgdHlwZSBodHRwIGZyb20gXCJub2RlOmh0dHBcIlxuaW1wb3J0IHR5cGUgeyBUeXBlZEt5SW5zdGFuY2UgfSBmcm9tIFwidHlwZWQta3lcIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IHR5cGUgeyBGaWxlVXBkYXRlZEV2ZW50IH0gZnJvbSBcImxpYi9maWxlLXNlcnZlci9GaWxlU2VydmVyRXZlbnRcIlxuaW1wb3J0ICogYXMgY2hva2lkYXIgZnJvbSBcImNob2tpZGFyXCJcblxuZXhwb3J0IGNsYXNzIERldlNlcnZlciB7XG4gIHBvcnQ6IG51bWJlclxuICAvKipcbiAgICogVGhlIHBhdGggdG8gYSBjb21wb25lbnQgdGhhdCBleHBvcnRzIGEgPGJvYXJkIC8+IG9yIDxncm91cCAvPiBjb21wb25lbnRcbiAgICovXG4gIGNvbXBvbmVudEZpbGVQYXRoOiBzdHJpbmdcblxuICBwcm9qZWN0RGlyOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIEhUVFAgc2VydmVyIHRoYXQgaG9zdHMgdGhlIGZpbGUgc2VydmVyIGFuZCBldmVudCBidXMuIFlvdSBjYW4gdXNlXG4gICAqIGZzS3kgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlsZSBzZXJ2ZXIvZXZlbnQgYnVzXG4gICAqL1xuICBodHRwU2VydmVyPzogaHR0cC5TZXJ2ZXJcbiAgLyoqXG4gICAqIFdhdGNoZXMgZm9yIGV2ZW50cyBvbiB0aGUgZXZlbnQgYnVzIGJ5IHBvbGxpbmcgYGFwaS9ldmVudHMvbGlzdGBcbiAgICovXG4gIGV2ZW50c1dhdGNoZXI/OiBFdmVudHNXYXRjaGVyXG4gIC8qKlxuICAgKiBBIGt5IGluc3RhbmNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlsZSBzZXJ2ZXIgYW5kXG4gICAqIGV2ZW50IGJ1c1xuICAgKi9cbiAgZnNLeTogVHlwZWRLeUluc3RhbmNlPGtleW9mIEZpbGVTZXJ2ZXJSb3V0ZXMsIEZpbGVTZXJ2ZXJSb3V0ZXM+XG4gIC8qKlxuICAgKiBBIGNob2tpZGFyIGluc3RhbmNlIHRoYXQgd2F0Y2hlcyB0aGUgcHJvamVjdCBkaXJlY3RvcnkgZm9yIGZpbGUgY2hhbmdlc1xuICAgKi9cbiAgZmlsZXN5c3RlbVdhdGNoZXI/OiBjaG9raWRhci5GU1dhdGNoZXJcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgcG9ydCxcbiAgICBjb21wb25lbnRGaWxlUGF0aCxcbiAgfToge1xuICAgIHBvcnQ6IG51bWJlclxuICAgIGNvbXBvbmVudEZpbGVQYXRoOiBzdHJpbmdcbiAgfSkge1xuICAgIHRoaXMucG9ydCA9IHBvcnRcbiAgICB0aGlzLmNvbXBvbmVudEZpbGVQYXRoID0gY29tcG9uZW50RmlsZVBhdGhcbiAgICB0aGlzLnByb2plY3REaXIgPSBwYXRoLmRpcm5hbWUoY29tcG9uZW50RmlsZVBhdGgpXG4gICAgdGhpcy5mc0t5ID0ga3kuY3JlYXRlKHtcbiAgICAgIHByZWZpeFVybDogYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fWAsXG4gICAgfSkgYXMgYW55XG4gIH1cblxuICBhc3luYyBzdGFydCgpIHtcbiAgICBjb25zdCB7IHNlcnZlciB9ID0gYXdhaXQgY3JlYXRlSHR0cFNlcnZlcih0aGlzLnBvcnQpXG4gICAgdGhpcy5odHRwU2VydmVyID0gc2VydmVyXG5cbiAgICB0aGlzLmV2ZW50c1dhdGNoZXIgPSBuZXcgRXZlbnRzV2F0Y2hlcihgaHR0cDovL2xvY2FsaG9zdDoke3RoaXMucG9ydH1gKVxuICAgIHRoaXMuZXZlbnRzV2F0Y2hlci5zdGFydCgpXG5cbiAgICB0aGlzLmV2ZW50c1dhdGNoZXIub24oXG4gICAgICBcIkZJTEVfVVBEQVRFRFwiLFxuICAgICAgdGhpcy5oYW5kbGVGaWxlVXBkYXRlZEV2ZW50RnJvbVNlcnZlci5iaW5kKHRoaXMpLFxuICAgIClcblxuICAgIHRoaXMuZmlsZXN5c3RlbVdhdGNoZXIgPSBjaG9raWRhci53YXRjaCh0aGlzLnByb2plY3REaXIsIHtcbiAgICAgIHBlcnNpc3RlbnQ6IHRydWUsXG4gICAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICAgIH0pXG5cbiAgICB0aGlzLmZpbGVzeXN0ZW1XYXRjaGVyLm9uKFwiY2hhbmdlXCIsIChmaWxlUGF0aCkgPT5cbiAgICAgIHRoaXMuaGFuZGxlRmlsZUNoYW5nZWRPbkZpbGVzeXN0ZW0oZmlsZVBhdGgpLFxuICAgIClcbiAgICB0aGlzLmZpbGVzeXN0ZW1XYXRjaGVyLm9uKFwiYWRkXCIsIChmaWxlUGF0aCkgPT5cbiAgICAgIHRoaXMuaGFuZGxlRmlsZUNoYW5nZWRPbkZpbGVzeXN0ZW0oZmlsZVBhdGgpLFxuICAgIClcblxuICAgIHRoaXMudXBzZXJ0SW5pdGlhbEZpbGVzKClcbiAgfVxuXG4gIGFzeW5jIGFkZEVudHJ5cG9pbnQoKSB7XG4gICAgY29uc3QgcmVsYXRpdmVDb21wb25lbnRGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUoXG4gICAgICB0aGlzLnByb2plY3REaXIsXG4gICAgICB0aGlzLmNvbXBvbmVudEZpbGVQYXRoLFxuICAgIClcbiAgICBhd2FpdCB0aGlzLmZzS3kucG9zdChcImFwaS9maWxlcy91cHNlcnRcIiwge1xuICAgICAganNvbjoge1xuICAgICAgICBmaWxlX3BhdGg6IFwiZW50cnlwb2ludC50c3hcIixcbiAgICAgICAgdGV4dF9jb250ZW50OiBgXG5pbXBvcnQgTXlDaXJjdWl0IGZyb20gXCIuLyR7cmVsYXRpdmVDb21wb25lbnRGaWxlUGF0aH1cIlxuXG5jaXJjdWl0LmFkZCg8TXlDaXJjdWl0IC8+KVxuYCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUZpbGVVcGRhdGVkRXZlbnRGcm9tU2VydmVyKGV2OiBGaWxlVXBkYXRlZEV2ZW50KSB7XG4gICAgaWYgKGV2LmluaXRpYXRvciA9PT0gXCJmaWxlc3lzdGVtX2NoYW5nZVwiKSByZXR1cm5cblxuICAgIGlmIChldi5maWxlX3BhdGggPT09IFwibWFudWFsLWVkaXRzLmpzb25cIikge1xuICAgICAgY29uc29sZS5sb2coXCJNYW51YWwgZWRpdHMgdXBkYXRlZCwgdXBkYXRpbmcgb24gZmlsZXN5c3RlbS4uLlwiKVxuICAgICAgY29uc3QgeyBmaWxlIH0gPSBhd2FpdCB0aGlzLmZzS3lcbiAgICAgICAgLmdldChcImFwaS9maWxlcy9nZXRcIiwge1xuICAgICAgICAgIHNlYXJjaFBhcmFtczogeyBmaWxlX3BhdGg6IGV2LmZpbGVfcGF0aCB9LFxuICAgICAgICB9KVxuICAgICAgICAuanNvbigpXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4odGhpcy5wcm9qZWN0RGlyLCBcIm1hbnVhbC1lZGl0cy5qc29uXCIpLFxuICAgICAgICBmaWxlLnRleHRfY29udGVudCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVGaWxlQ2hhbmdlZE9uRmlsZXN5c3RlbShhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZWxhdGl2ZUZpbGVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLnByb2plY3REaXIsIGFic29sdXRlRmlsZVBhdGgpXG5cbiAgICAvLyBXZSd2ZSB0ZW1wb3JhcmlseSBkaXNhYmxlZCB1cHNlcnRpbmcgbWFudWFsIGVkaXRzIGZyb20gZmlsZXN5c3RlbSBjaGFuZ2VzXG4gICAgLy8gYmVjYXVzZSBpdCBjYW4gYmUgZWRpdGVkIGJ5IHRoZSBicm93c2VyXG4gICAgaWYgKHJlbGF0aXZlRmlsZVBhdGguaW5jbHVkZXMoXCJtYW51YWwtZWRpdHMuanNvblwiKSkgcmV0dXJuXG5cbiAgICBhd2FpdCB0aGlzLmZzS3lcbiAgICAgIC5wb3N0KFwiYXBpL2ZpbGVzL3Vwc2VydFwiLCB7XG4gICAgICAgIGpzb246IHtcbiAgICAgICAgICBmaWxlX3BhdGg6IHJlbGF0aXZlRmlsZVBhdGgsXG4gICAgICAgICAgdGV4dF9jb250ZW50OiBmcy5yZWFkRmlsZVN5bmMoYWJzb2x1dGVGaWxlUGF0aCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICBpbml0aWF0b3I6IFwiZmlsZXN5c3RlbV9jaGFuZ2VcIixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuanNvbigpXG4gIH1cblxuICBhc3luYyB1cHNlcnRJbml0aWFsRmlsZXMoKSB7XG4gICAgLy8gU2NhbiBwcm9qZWN0IGRpcmVjdG9yeSBmb3IgYWxsIGZpbGVzIGFuZCB1cHNlcnQgdGhlbVxuICAgIGNvbnN0IGZpbGVOYW1lcyA9IGZzLnJlYWRkaXJTeW5jKHRoaXMucHJvamVjdERpcilcbiAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVOYW1lcykge1xuICAgICAgaWYgKGZzLnN0YXRTeW5jKHBhdGguam9pbih0aGlzLnByb2plY3REaXIsIGZpbGVOYW1lKSkuaXNEaXJlY3RvcnkoKSlcbiAgICAgICAgY29udGludWVcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4odGhpcy5wcm9qZWN0RGlyLCBmaWxlTmFtZSksXG4gICAgICAgIFwidXRmLThcIixcbiAgICAgIClcbiAgICAgIGF3YWl0IHRoaXMuZnNLeS5wb3N0KFwiYXBpL2ZpbGVzL3Vwc2VydFwiLCB7XG4gICAgICAgIGpzb246IHtcbiAgICAgICAgICBmaWxlX3BhdGg6IGZpbGVOYW1lLFxuICAgICAgICAgIHRleHRfY29udGVudDogZmlsZUNvbnRlbnQsXG4gICAgICAgICAgaW5pdGlhdG9yOiBcImZpbGVzeXN0ZW1fY2hhbmdlXCIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5odHRwU2VydmVyPy5jbG9zZSgpXG4gICAgdGhpcy5ldmVudHNXYXRjaGVyPy5zdG9wKClcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIGh0dHAgZnJvbSBcIm5vZGU6aHR0cFwiXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgZ2V0Tm9kZUhhbmRsZXIgfSBmcm9tIFwid2ludGVyc3BlYy9hZGFwdGVycy9ub2RlXCJcbmltcG9ydCBwa2cgZnJvbSBcIi4uLy4uL3BhY2thZ2UuanNvblwiXG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB3aW50ZXJzcGVjQnVuZGxlIGZyb20gXCJAdHNjaXJjdWl0L2ZpbGUtc2VydmVyL2Rpc3QvYnVuZGxlLmpzXCJcbmltcG9ydCB7IGdldEluZGV4IH0gZnJvbSBcIi4uL3NpdGUvZ2V0SW5kZXhcIlxuXG5leHBvcnQgY29uc3QgY3JlYXRlSHR0cFNlcnZlciA9IGFzeW5jIChwb3J0ID0gMzAwMCkgPT4ge1xuICBjb25zdCBmaWxlU2VydmVySGFuZGxlciA9IGdldE5vZGVIYW5kbGVyKHdpbnRlcnNwZWNCdW5kbGUgYXMgYW55LCB7fSlcblxuICBjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwhLCBgaHR0cDovLyR7cmVxLmhlYWRlcnMuaG9zdH1gKVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gXCIvc3RhbmRhbG9uZS5taW4uanNcIikge1xuICAgICAgY29uc3Qgc3RhbmRhbG9uZUZpbGVQYXRoID1cbiAgICAgICAgcHJvY2Vzcy5lbnYuUlVORlJBTUVfU1RBTkRBTE9ORV9GSUxFX1BBVEggfHxcbiAgICAgICAgcGF0aC5yZXNvbHZlKFxuICAgICAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIkB0c2NpcmN1aXQvcnVuZnJhbWUvZGlzdC9zdGFuZGFsb25lLm1pbi5qc1wiLFxuICAgICAgICApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoc3RhbmRhbG9uZUZpbGVQYXRoLCBcInV0ZjhcIilcbiAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLThcIixcbiAgICAgICAgfSlcbiAgICAgICAgcmVzLmVuZChjb250ZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzZXJ2aW5nIHN0YW5kYWxvbmUubWluLmpzOlwiLCBlcnJvcilcbiAgICAgIH1cblxuICAgICAgcmVzLndyaXRlSGVhZCgzMDIsIHtcbiAgICAgICAgTG9jYXRpb246IGBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0B0c2NpcmN1aXQvcnVuZnJhbWVAJHtwa2cuZGVwZW5kZW5jaWVzW1wiQHRzY2lyY3VpdC9ydW5mcmFtZVwiXS5yZXBsYWNlKC9eW14wLTldKy8sIFwiXCIpfS9kaXN0L3N0YW5kYWxvbmUubWluLmpzYCxcbiAgICAgIH0pXG4gICAgICByZXMuZW5kKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09IFwiL1wiKSB7XG4gICAgICBjb25zdCBodG1sID0gYXdhaXQgZ2V0SW5kZXgoKVxuICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9KVxuICAgICAgcmVzLmVuZChodG1sKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZS5zdGFydHNXaXRoKFwiL2FwaS9cIikpIHtcbiAgICAgIHJlcS51cmwgPSByZXEudXJsIS5yZXBsYWNlKFwiL2FwaS9cIiwgXCIvXCIpXG4gICAgICBmaWxlU2VydmVySGFuZGxlcihyZXEsIHJlcylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJlcy53cml0ZUhlYWQoNDA0KVxuICAgIHJlcy5lbmQoXCJOb3QgZm91bmRcIilcbiAgfSlcblxuICByZXR1cm4gbmV3IFByb21pc2U8eyBzZXJ2ZXI6IGh0dHAuU2VydmVyIH0+KChyZXNvbHZlKSA9PiB7XG4gICAgc2VydmVyLmxpc3Rlbihwb3J0LCAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgU2VydmVyIHJ1bm5pbmcgYXQgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9YClcbiAgICAgIHJlc29sdmUoeyBzZXJ2ZXIgfSlcbiAgICB9KVxuICB9KVxufVxuIiwgIntcbiAgXCJuYW1lXCI6IFwiQHRzY2lyY3VpdC9jbGlcIixcbiAgXCJtYWluXCI6IFwiZGlzdC9tYWluLmpzXCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcInZlcnNpb25cIjogXCIwLjEuMTBcIixcbiAgXCJiaW5cIjoge1xuICAgIFwidHNjaVwiOiBcIi4vZGlzdC9tYWluLmpzXCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiYnVuIHJ1biBkZXZcIixcbiAgICBcImRldlwiOiBcImJ1biAtLWhvdCAuL2NsaS9tYWluLnRzIGRldiAuL2V4YW1wbGUtZGlyL3NuaXBwZXQudHN4XCIsXG4gICAgXCJidWlsZFwiOiBcInRzdXAtbm9kZSBjbGkvbWFpbi50cyAtLWZvcm1hdCBlc20gLS1zb3VyY2VtYXAgaW5saW5lXCIsXG4gICAgXCJmb3JtYXRcIjogXCJiaW9tZSBmb3JtYXQgLS13cml0ZSAuXCIsXG4gICAgXCJmb3JtYXQ6Y2hlY2tcIjogXCJiaW9tZSBmb3JtYXQgLlwiLFxuICAgIFwiY2xpXCI6IFwiYnVuIC4vY2xpL21haW4udHNcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYmlvbWVqcy9iaW9tZVwiOiBcIl4xLjkuNFwiLFxuICAgIFwiQHRzY2lyY3VpdC9jb3JlXCI6IFwiXjAuMC4yNDlcIixcbiAgICBcIkB0eXBlcy9idW5cIjogXCJeMS4xLjE1XCIsXG4gICAgXCJAdHlwZXMvY29uZmlnc3RvcmVcIjogXCJeNi4wLjJcIixcbiAgICBcIkB0eXBlcy9yZWFjdFwiOiBcIl4xOS4wLjFcIixcbiAgICBcIkB0eXBlcy9zZW12ZXJcIjogXCJeNy41LjhcIixcbiAgICBcImdldC1wb3J0XCI6IFwiXjcuMS4wXCIsXG4gICAgXCJ0ZW1weVwiOiBcIl4zLjEuMFwiLFxuICAgIFwidHN1cFwiOiBcIl44LjMuNVwiLFxuICAgIFwidHlwZWQta3lcIjogXCJeMC4wLjRcIlxuICB9LFxuICBcInBlZXJEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjAuMFwiXG4gIH0sXG4gIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkB0c2NpcmN1aXQvZmlsZS1zZXJ2ZXJcIjogXCJeMC4wLjEzXCIsXG4gICAgXCJAdHNjaXJjdWl0L3J1bmZyYW1lXCI6IFwiXjAuMC40N1wiLFxuICAgIFwiY2hva2lkYXJcIjogXCJeNC4wLjFcIixcbiAgICBcImNvbW1hbmRlclwiOiBcIl4xMi4xLjBcIixcbiAgICBcImNvbmZpZ3N0b3JlXCI6IFwiXjcuMC4wXCIsXG4gICAgXCJjb3NtaWNvbmZpZ1wiOiBcIl45LjAuMFwiLFxuICAgIFwiZGVsYXlcIjogXCJeNi4wLjBcIixcbiAgICBcImt5XCI6IFwiXjEuNy40XCIsXG4gICAgXCJtYWtlLXZmc1wiOiBcIl4xLjAuMTVcIixcbiAgICBcInBlcmZlY3QtY2xpXCI6IFwiXjEuMC4yMFwiLFxuICAgIFwic2VtdmVyXCI6IFwiXjcuNi4zXCJcbiAgfVxufVxuIiwgImltcG9ydCBwa2cgZnJvbSBcIi4uLy4uL3BhY2thZ2UuanNvblwiXG5cbmV4cG9ydCBjb25zdCBnZXRJbmRleCA9IGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIGA8aHRtbD5cbiAgICA8aGVhZD5cbiAgICA8L2hlYWQ+XG4gICAgPGJvZHk+XG4gICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vY2RuLnRhaWx3aW5kY3NzLmNvbVwiPjwvc2NyaXB0PlxuICAgICAgPGRpdiBpZD1cInJvb3RcIj5sb2FkaW5nLi4uPC9kaXY+XG4gICAgICA8c2NyaXB0PlxuICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzID0geyBlbnY6IHsgTk9ERV9FTlY6IFwicHJvZHVjdGlvblwiIH0gfVxuICAgICAgPC9zY3JpcHQ+XG4gICAgICA8c2NyaXB0IHNyYz1cIi9zdGFuZGFsb25lLm1pbi5qc1wiPjwvc2NyaXB0PlxuICAgIDwvYm9keT5cbiAgPC9odG1sPmBcbn1cblxuLy8gPHNjcmlwdCBzcmM9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0B0c2NpcmN1aXQvcnVuZnJhbWVAJHtwa2cuZGVwZW5kZW5jaWVzW1wiQHRzY2lyY3VpdC9ydW5mcmFtZVwiXS5yZXBsYWNlKC9eW14wLTldKy8sIFwiXCIpfS9kaXN0L3N0YW5kYWxvbmUubWluLmpzXCI+PC9zY3JpcHQ+XG4iLCAiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiXG5cbmludGVyZmFjZSBFdmVudCB7XG4gIGV2ZW50X2lkOiBzdHJpbmdcbiAgY3JlYXRlZF9hdDogc3RyaW5nXG4gIGV2ZW50X3R5cGU6IHN0cmluZ1xuICBba2V5OiBzdHJpbmddOiBhbnlcbn1cblxuaW50ZXJmYWNlIEV2ZW50c1Jlc3BvbnNlIHtcbiAgZXZlbnRfbGlzdDogRXZlbnRbXVxufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRzV2F0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByaXZhdGUgbGFzdFBvbGxUaW1lOiBzdHJpbmdcbiAgcHJpdmF0ZSBwb2xsSW50ZXJ2YWw6IG51bWJlclxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZ1xuICBwcml2YXRlIHBvbGxpbmcgPSBmYWxzZVxuICBwcml2YXRlIHRpbWVvdXRJZD86IE5vZGVKUy5UaW1lb3V0XG5cbiAgY29uc3RydWN0b3IoYmFzZVVybCA9IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCIsIHBvbGxJbnRlcnZhbCA9IDEwMDApIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybFxuICAgIHRoaXMucG9sbEludGVydmFsID0gcG9sbEludGVydmFsXG4gICAgdGhpcy5sYXN0UG9sbFRpbWUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIGlmICh0aGlzLnBvbGxpbmcpIHJldHVyblxuICAgIHRoaXMucG9sbGluZyA9IHRydWVcbiAgICBhd2FpdCB0aGlzLnBvbGwoKVxuICB9XG5cbiAgc3RvcCgpIHtcbiAgICB0aGlzLnBvbGxpbmcgPSBmYWxzZVxuICAgIGlmICh0aGlzLnRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcG9sbCgpIHtcbiAgICBpZiAoIXRoaXMucG9sbGluZykgcmV0dXJuXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvZXZlbnRzL2xpc3Q/c2luY2U9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5sYXN0UG9sbFRpbWUpfWAsXG4gICAgICApXG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGE6IEV2ZW50c1Jlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG5cbiAgICAgIC8vIFVwZGF0ZSBsYXN0IHBvbGwgdGltZSB0byBsYXRlc3QgZXZlbnQgb3IgY3VycmVudCB0aW1lXG4gICAgICBjb25zdCBsYXRlc3RFdmVudCA9IGRhdGEuZXZlbnRfbGlzdFtkYXRhLmV2ZW50X2xpc3QubGVuZ3RoIC0gMV1cbiAgICAgIHRoaXMubGFzdFBvbGxUaW1lID0gbGF0ZXN0RXZlbnRcbiAgICAgICAgPyBsYXRlc3RFdmVudC5jcmVhdGVkX2F0XG4gICAgICAgIDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG5cbiAgICAgIC8vIEVtaXQgZXZlbnRzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXJcbiAgICAgIGRhdGEuZXZlbnRfbGlzdC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmVtaXQoZXZlbnQuZXZlbnRfdHlwZSwgZXZlbnQpXG4gICAgICAgIHRoaXMuZW1pdChcIipcIiwgZXZlbnQpXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnJvcilcbiAgICB9XG4gICAgLy8gU2NoZWR1bGUgbmV4dCBwb2xsXG4gICAgdGhpcy50aW1lb3V0SWQgPSBnbG9iYWxUaGlzLnNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB0aGlzLnBvbGwoKSxcbiAgICAgIHRoaXMucG9sbEludGVydmFsLFxuICAgICkgYXMgdW5rbm93biBhcyBOb2RlSlMuVGltZW91dFxuICB9XG59XG4iLCAiaW1wb3J0IENvbmZpZ3N0b3JlIGZyb20gXCJjb25maWdzdG9yZVwiXG5pbXBvcnQgdHlwZSB7IFR5cGVkQ29uZmlnc3RvcmUgfSBmcm9tIFwiLi9UeXBlZENvbmZpZ1N0b3JlXCJcblxuZXhwb3J0IGludGVyZmFjZSBDbGlDb25maWcge1xuICBzZXNzaW9uVG9rZW4/OiBzdHJpbmdcbiAgZ2l0aHViVXNlcm5hbWU/OiBzdHJpbmdcbiAgcmVnaXN0cnlBcGlVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGNsaUNvbmZpZzogVHlwZWRDb25maWdzdG9yZTxDbGlDb25maWc+ID0gbmV3IENvbmZpZ3N0b3JlKFxuICBcInRzY2lyY3VpdFwiLFxuKVxuXG5leHBvcnQgY29uc3QgZ2V0UmVnaXN0cnlBcGlVcmwgPSAoKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGNsaUNvbmZpZy5nZXQoXCJyZWdpc3RyeUFwaVVybFwiKSA/PyBcImh0dHBzOi8vcmVnaXN0cnktYXBpLnRzY2lyY3VpdC5jb21cIlxufVxuIiwgImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgY2xpQ29uZmlnIH0gZnJvbSBcImxpYi9jbGktY29uZmlnXCJcbmltcG9ydCBkZWxheSBmcm9tIFwiZGVsYXlcIlxuaW1wb3J0IHsgZ2V0S3kgfSBmcm9tIFwibGliL3JlZ2lzdHJ5LWFwaS9nZXQta3lcIlxuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFJlc3BvbnNlIH0gZnJvbSBcImxpYi9yZWdpc3RyeS1hcGkvZW5kcG9pbnQtdHlwZXNcIlxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJBdXRoTG9naW4gPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICAvLyBEZWZpbmUgdGhlIGxvZ2luIGFjdGlvbiBvbmNlIHRvIHNoYXJlIGJldHdlZW4gYm90aCBjb21tYW5kc1xuICBjb25zdCBsb2dpbkFjdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBreSA9IGdldEt5KClcblxuICAgIGNvbnN0IHsgbG9naW5fcGFnZSB9ID0gYXdhaXQga3lcbiAgICAgIC5wb3N0PEVuZHBvaW50UmVzcG9uc2VbXCJzZXNzaW9ucy9sb2dpbl9wYWdlL2NyZWF0ZVwiXT4oXG4gICAgICAgIFwic2Vzc2lvbnMvbG9naW5fcGFnZS9jcmVhdGVcIixcbiAgICAgICAge1xuICAgICAgICAgIGpzb246IHt9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgLmpzb24oKVxuXG4gICAgY29uc29sZS5sb2coXCJQbGVhc2UgdmlzaXQgdGhlIGZvbGxvd2luZyBVUkwgdG8gbG9nIGluOlwiKVxuICAgIGNvbnNvbGUubG9nKGxvZ2luX3BhZ2UudXJsKVxuXG4gICAgLy8gV2FpdCB1bnRpbCB3ZSByZWNlaXZlIGNvbmZpcm1hdGlvblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGxvZ2luX3BhZ2U6IG5ld19sb2dpbl9wYWdlIH0gPSBhd2FpdCBreVxuICAgICAgICAucG9zdDxFbmRwb2ludFJlc3BvbnNlW1wic2Vzc2lvbnMvbG9naW5fcGFnZS9nZXRcIl0+KFxuICAgICAgICAgIFwic2Vzc2lvbnMvbG9naW5fcGFnZS9nZXRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBqc29uOiB7XG4gICAgICAgICAgICAgIGxvZ2luX3BhZ2VfaWQ6IGxvZ2luX3BhZ2UubG9naW5fcGFnZV9pZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtsb2dpbl9wYWdlLmxvZ2luX3BhZ2VfYXV0aF90b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIC5qc29uKClcblxuICAgICAgaWYgKG5ld19sb2dpbl9wYWdlLndhc19sb2dpbl9zdWNjZXNzZnVsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTG9nZ2VkIGluISBHZW5lcmF0aW5nIHRva2VuLi4uXCIpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdfbG9naW5fcGFnZS5pc19leHBpcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvZ2luIHBhZ2UgZXhwaXJlZFwiKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBkZWxheSgxMDAwKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2Vzc2lvbiB9ID0gYXdhaXQga3lcbiAgICAgIC5wb3N0PEVuZHBvaW50UmVzcG9uc2VbXCJzZXNzaW9ucy9sb2dpbl9wYWdlL2V4Y2hhbmdlX2Zvcl9jbGlfc2Vzc2lvblwiXT4oXG4gICAgICAgIFwic2Vzc2lvbnMvbG9naW5fcGFnZS9leGNoYW5nZV9mb3JfY2xpX3Nlc3Npb25cIixcbiAgICAgICAge1xuICAgICAgICAgIGpzb246IHtcbiAgICAgICAgICAgIGxvZ2luX3BhZ2VfaWQ6IGxvZ2luX3BhZ2UubG9naW5fcGFnZV9pZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtsb2dpbl9wYWdlLmxvZ2luX3BhZ2VfYXV0aF90b2tlbn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgICAuanNvbigpXG5cbiAgICBjbGlDb25maWcuc2V0KFwic2Vzc2lvblRva2VuXCIsIHNlc3Npb24udG9rZW4pXG5cbiAgICBjb25zb2xlLmxvZyhcIlJlYWR5IHRvIHVzZSFcIilcbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIHRoZSBhdXRoIGxvZ2luIHN1YmNvbW1hbmRcbiAgcHJvZ3JhbS5jb21tYW5kc1xuICAgIC5maW5kKChjKSA9PiBjLm5hbWUoKSA9PT0gXCJhdXRoXCIpIVxuICAgIC5jb21tYW5kKFwibG9naW5cIilcbiAgICAuZGVzY3JpcHRpb24oXCJBdXRoZW50aWNhdGUgQ0xJLCBsb2dpbiB0byByZWdpc3RyeVwiKVxuICAgIC5hY3Rpb24obG9naW5BY3Rpb24pXG5cbiAgLy8gUmVnaXN0ZXIgdGhlIHRvcC1sZXZlbCBsb2dpbiBjb21tYW5kIGFzIGFuIGFsaWFzXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImxvZ2luXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiTG9naW4gdG8gdHNjaXJjdWl0IHJlZ2lzdHJ5XCIpXG4gICAgLmFjdGlvbihsb2dpbkFjdGlvbilcbn1cbiIsICJpbXBvcnQgeyBnZXRSZWdpc3RyeUFwaVVybCB9IGZyb20gXCJsaWIvY2xpLWNvbmZpZ1wiXG5pbXBvcnQga3ksIHsgdHlwZSBBZnRlclJlc3BvbnNlSG9vayB9IGZyb20gXCJreVwiXG5cbmNvbnN0IHByZXR0eVJlc3BvbnNlRXJyb3JIb29rOiBBZnRlclJlc3BvbnNlSG9vayA9IGFzeW5jIChcbiAgX3JlcXVlc3QsXG4gIF9vcHRpb25zLFxuICByZXNwb25zZSxcbikgPT4ge1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRkFJTCBbJHtyZXNwb25zZS5zdGF0dXN9XTogJHtfcmVxdWVzdC5tZXRob2R9ICR7XG4gICAgICAgICAgbmV3IFVSTChfcmVxdWVzdC51cmwpLnBhdGhuYW1lXG4gICAgICAgIH0gXFxuXFxuICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JEYXRhLCBudWxsLCAyKX1gLFxuICAgICAgKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vaWdub3JlLCBhbGxvdyB0aGUgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRLeSA9ICgpID0+IHtcbiAgcmV0dXJuIGt5LmNyZWF0ZSh7XG4gICAgcHJlZml4VXJsOiBnZXRSZWdpc3RyeUFwaVVybCgpLFxuICAgIGhvb2tzOiB7XG4gICAgICBhZnRlclJlc3BvbnNlOiBbcHJldHR5UmVzcG9uc2VFcnJvckhvb2tdLFxuICAgIH0sXG4gIH0pXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckF1dGhMb2dvdXQgPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICBwcm9ncmFtLmNvbW1hbmRzXG4gICAgLmZpbmQoKGMpID0+IGMubmFtZSgpID09PSBcImF1dGhcIikhXG4gICAgLmNvbW1hbmQoXCJsb2dvdXRcIilcbiAgICAuZGVzY3JpcHRpb24oXCJMb2dvdXQgZnJvbSByZWdpc3RyeVwiKVxuICAgIC5hY3Rpb24oKGFyZ3MpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwibG9nb3V0XCIpXG4gICAgfSlcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQXV0aCA9IChwcm9ncmFtOiBDb21tYW5kKSA9PiB7XG4gIHByb2dyYW0uY29tbWFuZChcImF1dGhcIikuZGVzY3JpcHRpb24oXCJMb2dpbi9sb2dvdXRcIilcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQ29uZmlnID0gKHByb2dyYW06IENvbW1hbmQpID0+IHtcbiAgcHJvZ3JhbS5jb21tYW5kKFwiY29uZmlnXCIpLmRlc2NyaXB0aW9uKFwiTWFuYWdlIHRzY2lyY3VpdCBDTEkgY29uZmlndXJhdGlvblwiKVxufVxuIiwgImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgY2xpQ29uZmlnIH0gZnJvbSBcImxpYi9jbGktY29uZmlnXCJcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQ29uZmlnUHJpbnQgPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICBwcm9ncmFtLmNvbW1hbmRzXG4gICAgLmZpbmQoKGMpID0+IGMubmFtZSgpID09PSBcImNvbmZpZ1wiKSFcbiAgICAuY29tbWFuZChcInByaW50XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiUHJpbnQgdGhlIGN1cnJlbnQgY29uZmlnXCIpXG4gICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShjbGlDb25maWcuYWxsLCBudWxsLCAyKSlcbiAgICB9KVxufVxuIiwgImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgZ2V0S3kgfSBmcm9tIFwibGliL3JlZ2lzdHJ5LWFwaS9nZXQta3lcIlxuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQ2xvbmUgPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJjbG9uZVwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkNsb25lIGEgc25pcHBldCBmcm9tIHRoZSByZWdpc3RyeVwiKVxuICAgIC5hcmd1bWVudChcIjxzbmlwcGV0PlwiLCBcIlNuaXBwZXQgdG8gY2xvbmUgKGUuZy4gYXV0aG9yL3NuaXBwZXROYW1lKVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNuaXBwZXRQYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGxldCBhdXRob3I6IHN0cmluZ1xuICAgICAgbGV0IHNuaXBwZXROYW1lOiBzdHJpbmdcbiAgICAgIGlmICghc25pcHBldFBhdGguc3RhcnRzV2l0aChcIkB0c2NpL1wiKSAmJiBzbmlwcGV0UGF0aC5pbmNsdWRlcyhcIi9cIikpIHtcbiAgICAgICAgO1thdXRob3IsIHNuaXBwZXROYW1lXSA9IHNuaXBwZXRQYXRoLnNwbGl0KFwiL1wiKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdHJpbW1lZFBhdGggPSBzbmlwcGV0UGF0aC5yZXBsYWNlKFwiQHRzY2kvXCIsIFwiXCIpXG4gICAgICAgIGNvbnN0IGZpcnN0RG90SW5kZXggPSB0cmltbWVkUGF0aC5pbmRleE9mKFwiLlwiKVxuICAgICAgICBhdXRob3IgPSB0cmltbWVkUGF0aC5zbGljZSgwLCBmaXJzdERvdEluZGV4KVxuICAgICAgICBzbmlwcGV0TmFtZSA9IHRyaW1tZWRQYXRoLnNsaWNlKGZpcnN0RG90SW5kZXggKyAxKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWF1dGhvciB8fCAhc25pcHBldE5hbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgc25pcHBldCBwYXRoLiBVc2UgZm9ybWF0OiBhdXRob3Ivc25pcHBldE5hbWUsIGF1dGhvci5zbmlwcGV0TmFtZSBvciBAdHNjaS9hdXRob3Iuc25pcHBldE5hbWVcIixcbiAgICAgICAgKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qga3kgPSBnZXRLeSgpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDbG9uaW5nICR7YXV0aG9yfS8ke3NuaXBwZXROYW1lfS4uLmApXG5cbiAgICAgICAgY29uc3QgcGFja2FnZUZpbGVMaXN0ID0gYXdhaXQga3lcbiAgICAgICAgICAucG9zdDx7XG4gICAgICAgICAgICBwYWNrYWdlX2ZpbGVzOiBBcnJheTx7XG4gICAgICAgICAgICAgIHBhY2thZ2VfZmlsZV9pZDogc3RyaW5nXG4gICAgICAgICAgICAgIHBhY2thZ2VfcmVsZWFzZV9pZDogc3RyaW5nXG4gICAgICAgICAgICAgIGZpbGVfcGF0aDogc3RyaW5nXG4gICAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IHN0cmluZ1xuICAgICAgICAgICAgfT5cbiAgICAgICAgICB9PihcInBhY2thZ2VfZmlsZXMvbGlzdFwiLCB7XG4gICAgICAgICAgICBqc29uOiB7XG4gICAgICAgICAgICAgIHBhY2thZ2VfbmFtZTogYCR7YXV0aG9yfS8ke3NuaXBwZXROYW1lfWAsXG4gICAgICAgICAgICAgIHVzZV9sYXRlc3RfdmVyc2lvbjogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuanNvbigpXG5cbiAgICAgICAgLy8gQ3JlYXRlIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGNvbnN0IGRpclBhdGggPSBgLi8ke2F1dGhvcn0uJHtzbmlwcGV0TmFtZX1gXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXJQYXRoKSkge1xuICAgICAgICAgIGZzLm1rZGlyU3luYyhkaXJQYXRoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG93bmxvYWQgZWFjaCBmaWxlIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoIGRpc3QvXG4gICAgICAgIGZvciAoY29uc3QgZmlsZUluZm8gb2YgcGFja2FnZUZpbGVMaXN0LnBhY2thZ2VfZmlsZXMpIHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGZpbGVJbmZvLmZpbGVfcGF0aC5zdGFydHNXaXRoKFwiL1wiKVxuICAgICAgICAgICAgPyBmaWxlSW5mby5maWxlX3BhdGguc2xpY2UoMSlcbiAgICAgICAgICAgIDogZmlsZUluZm8uZmlsZV9wYXRoXG5cbiAgICAgICAgICBpZiAoZmlsZVBhdGguc3RhcnRzV2l0aChcImRpc3QvXCIpKSBjb250aW51ZVxuXG4gICAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBreVxuICAgICAgICAgICAgLnBvc3Q8e1xuICAgICAgICAgICAgICBwYWNrYWdlX2ZpbGU6IHtcbiAgICAgICAgICAgICAgICBjb250ZW50X3RleHQ6IHN0cmluZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9PihcInBhY2thZ2VfZmlsZXMvZ2V0XCIsIHtcbiAgICAgICAgICAgICAganNvbjoge1xuICAgICAgICAgICAgICAgIHBhY2thZ2VfbmFtZTogYCR7YXV0aG9yfS8ke3NuaXBwZXROYW1lfWAsXG4gICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBmaWxlSW5mby5maWxlX3BhdGgsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpzb24oKVxuXG4gICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZGlyUGF0aCwgZmlsZVBhdGgpXG4gICAgICAgICAgY29uc3QgZGlyTmFtZSA9IHBhdGguZGlybmFtZShmdWxsUGF0aClcblxuICAgICAgICAgIC8vIENyZWF0ZSBuZXN0ZWQgZGlyZWN0b3JpZXMgaWYgdGhleSBkb24ndCBleGlzdFxuICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXJOYW1lKSkge1xuICAgICAgICAgICAgZnMubWtkaXJTeW5jKGRpck5hbWUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgZmlsZUNvbnRlbnQucGFja2FnZV9maWxlLmNvbnRlbnRfdGV4dClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgY2xvbmVkIHRvIC4vJHthdXRob3J9LiR7c25pcHBldE5hbWV9L2ApXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY2xvbmUgc25pcHBldDpcIiwgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNsb25lIHNuaXBwZXQ6XCIsIGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgfVxuICAgIH0pXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgeyBjcmVhdGVDaXJjdWl0V2ViV29ya2VyIH0gZnJvbSBcIkB0c2NpcmN1aXQvZXZhbC13ZWJ3b3JrZXJcIlxuaW1wb3J0IHdlYldvcmtlckJ1bmRsZVVybCBmcm9tIFwiQHRzY2lyY3VpdC9ldmFsLXdlYndvcmtlci9ibG9iLXVybFwiXG5pbXBvcnQgeyBnZXRWaXJ0dWFsRmlsZVN5c3RlbUZyb21EaXJQYXRoIH0gZnJvbSBcIm1ha2UtdmZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IGZzIGZyb20gXCJub2RlOmZzXCJcblxuY29uc3QgQUxMT1dFRF9GT1JNQVRTID0gW1xuICBcImpzb25cIixcbiAgXCJjaXJjdWl0LWpzb25cIixcbiAgXCJzY2hlbWF0aWMtc3ZnXCIsXG4gIFwicGNiLXN2Z1wiLFxuICBcImdlcmJlcnNcIixcbiAgXCJyZWFkYWJsZS1uZXRsaXN0XCIsXG4gIFwiZ2x0ZlwiLFxuICBcInNwZWNjdHJhLWRzblwiLFxuXSBhcyBjb25zdFxuXG50eXBlIEZvcm1hdCA9ICh0eXBlb2YgQUxMT1dFRF9GT1JNQVRTKVtudW1iZXJdXG5cbmNvbnN0IE9VVFBVVF9FWFRFTlNJT05TID0ge1xuICBqc29uOiBcIi5jaXJjdWl0Lmpzb25cIixcbiAgXCJjaXJjdWl0LWpzb25cIjogXCIuY2lyY3VpdC5qc29uXCIsXG4gIFwic2NoZW1hdGljLXN2Z1wiOiBcIi1zY2hlbWF0aWMuc3ZnXCIsXG4gIFwicGNiLXN2Z1wiOiBcIi1wY2Iuc3ZnXCIsXG4gIGdlcmJlcnM6IFwiLWdlcmJlcnMuemlwXCIsXG4gIFwicmVhZGFibGUtbmV0bGlzdFwiOiBcIi1yZWFkYWJsZS5uZXRsaXN0XCIsXG4gIGdsdGY6IFwiLmdsdGZcIixcbiAgXCJzcGVjY3RyYS1kc25cIjogXCIuZHNuXCIsXG59XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckV4cG9ydCA9IChwcm9ncmFtOiBDb21tYW5kKSA9PiB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImV4cG9ydFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkV4cG9ydCB0c2NpcmN1aXQgY29kZSB0byB2YXJpb3VzIGZvcm1hdHNcIilcbiAgICAuYXJndW1lbnQoXCI8ZmlsZT5cIiwgXCJQYXRoIHRvIHRoZSBzbmlwcGV0IGZpbGVcIilcbiAgICAub3B0aW9uKFwiLWYsIC0tZm9ybWF0IDxmb3JtYXQ+XCIsIFwiT3V0cHV0IGZvcm1hdFwiKVxuICAgIC5vcHRpb24oXCItbywgLS1vdXRwdXQgPHBhdGg+XCIsIFwiT3V0cHV0IGZpbGUgcGF0aFwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKGZpbGUsIG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHsgZm9ybWF0ID0gXCJjaXJjdWl0LWpzb25cIiB9ID0gb3B0aW9uc1xuICAgICAgbGV0IHsgb3V0cHV0IH0gPSBvcHRpb25zXG4gICAgICBpZiAoIUFMTE9XRURfRk9STUFUUy5pbmNsdWRlcyhmb3JtYXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBmb3JtYXQ6ICR7Zm9ybWF0fVxcblN1cHBvcnRlZCBmb3JtYXRzOiAke0FMTE9XRURfRk9STUFUUy5qb2luKFwiLFwiKX1gLFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmICghb3V0cHV0KSB7XG4gICAgICAgIG91dHB1dCA9IHBhdGguYmFzZW5hbWUoZmlsZSkucmVwbGFjZSgvXFwuW14uXSskLywgXCJcIilcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd29ya2VyID0gYXdhaXQgY3JlYXRlQ2lyY3VpdFdlYldvcmtlcih7XG4gICAgICAgIHdlYldvcmtlclVybDogd2ViV29ya2VyQnVuZGxlVXJsLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgcHJvamVjdERpciA9IHBhdGguZGlybmFtZShmaWxlKVxuXG4gICAgICBjb25zdCByZWxhdGl2ZUNvbXBvbmVudFBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2plY3REaXIsIGZpbGUpXG5cbiAgICAgIGF3YWl0IHdvcmtlci5leGVjdXRlV2l0aEZzTWFwKHtcbiAgICAgICAgZW50cnlwb2ludDogXCJlbnRyeXBvaW50LnRzeFwiLFxuICAgICAgICBmc01hcDoge1xuICAgICAgICAgIC4uLigoYXdhaXQgZ2V0VmlydHVhbEZpbGVTeXN0ZW1Gcm9tRGlyUGF0aCh7XG4gICAgICAgICAgICBkaXJQYXRoOiBwcm9qZWN0RGlyLFxuICAgICAgICAgICAgY29udGVudEZvcm1hdDogXCJzdHJpbmdcIixcbiAgICAgICAgICB9KSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiksXG4gICAgICAgICAgXCJlbnRyeXBvaW50LnRzeFwiOiBgXG5pbXBvcnQgTXlDaXJjdWl0IGZyb20gXCIuLyR7cmVsYXRpdmVDb21wb25lbnRQYXRofVwiXG5cbmNpcmN1aXQuYWRkKDxNeUNpcmN1aXQgLz4pXG4gICAgICAgIGAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB3b3JrZXIucmVuZGVyVW50aWxTZXR0bGVkKClcblxuICAgICAgY29uc3QgY2lyY3VpdEpzb24gPSBhd2FpdCB3b3JrZXIuZ2V0Q2lyY3VpdEpzb24oKVxuXG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBwcm9qZWN0RGlyLFxuICAgICAgICBgJHtvdXRwdXR9JHtPVVRQVVRfRVhURU5TSU9OU1tmb3JtYXQgYXMgRm9ybWF0XX1gLFxuICAgICAgKVxuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKG91dHB1dFBhdGgsIEpTT04uc3RyaW5naWZ5KGNpcmN1aXRKc29uKSlcblxuICAgICAgY29uc29sZS5sb2coYEV4cG9ydGVkIHRvICR7b3V0cHV0UGF0aH1gKVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9KVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7O0FBQ0EsU0FBUyxlQUFlOzs7QUNBeEIsWUFBWSxRQUFRO0FBQ3BCLFlBQVksVUFBVTtBQUVmLElBQU0sZUFBZSxDQUFDQSxhQUFxQjtBQUNoRCxFQUFBQSxTQUNHLFFBQVEs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QUVoRCxVQUFNLGFBQWFBLE1BQUs7QUFBQSxNQUN0QjtBQUFBLE1BQ0EsR0FBRyxNQUFNLEdBQUcsa0JBQWtCLE1BQWdCLENBQUM7QUFBQSxJQUNqRDtBQUVBLElBQUFDLElBQUcsY0FBYyxZQUFZLEtBQUssVUFBVSxXQUFXLENBQUM7QUFFeEQsWUFBUSxJQUFJLGVBQWUsVUFBVSxFQUFFO0FBRXZDLFlBQVEsS0FBSyxDQUFDO0FBQUEsRUFDaEIsQ0FBQztBQUNMOzs7QWpCMUVBLElBQU0sVUFBVSxJQUFJLFFBQVE7QUFFNUIsUUFDRyxLQUFLLE1BQU0sRUFDWCxZQUFZLHVDQUF1QyxFQUduRCxRQUFRLE9BQU8sSUFBSSxnQkFBSSxTQUFTLE9BQU8sS0FBSyxnQkFBSSxPQUFPO0FBRTFELGFBQWEsT0FBTztBQUVwQixZQUFZLE9BQU87QUFDbkIsY0FBYyxPQUFPO0FBRXJCLGFBQWEsT0FBTztBQUNwQixrQkFBa0IsT0FBTztBQUN6QixtQkFBbUIsT0FBTztBQUUxQixlQUFlLE9BQU87QUFDdEIsb0JBQW9CLE9BQU87QUFFM0IsZUFBZSxPQUFPO0FBRXRCLElBQUksUUFBUSxLQUFLLFdBQVcsR0FBRztBQUM3QixhQUFXLFNBQVMsUUFBUSxJQUFJO0FBQ2xDLE9BQU87QUFDTCxVQUFRLE1BQU07QUFDaEI7IiwKICAibmFtZXMiOiBbInByb2dyYW0iLCAicGF0aCIsICJmcyIsICJmcyIsICJwYXRoIiwgImZzIiwgInBhdGgiLCAicmVzb2x2ZSIsICJwYXRoIiwgImZzIiwgInByb2dyYW0iLCAia3kiLCAicHJvZ3JhbSIsICJreSIsICJwcm9ncmFtIiwgInByb2dyYW0iLCAicHJvZ3JhbSIsICJwcm9ncmFtIiwgImZzIiwgInBhdGgiLCAicHJvZ3JhbSIsICJreSIsICJwYXRoIiwgImZzIiwgInByb2dyYW0iXQp9Cg==
723
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vY2xpL21haW4udHMiLCAiLi4vY2xpL2luaXQvcmVnaXN0ZXIudHMiLCAiLi4vY2xpL2Rldi9yZWdpc3Rlci50cyIsICIuLi9saWIvZGVwZW5kZW5jeS1hbmFseXNpcy9pbnN0YWxsTm9kZU1vZHVsZVR5cGVzRm9yU25pcHBldC50cyIsICIuLi9jbGkvZGV2L0RldlNlcnZlci50cyIsICIuLi9saWIvc2VydmVyL2NyZWF0ZUh0dHBTZXJ2ZXIudHMiLCAiLi4vcGFja2FnZS5qc29uIiwgIi4uL2xpYi9zaXRlL2dldEluZGV4LnRzIiwgIi4uL2xpYi9zZXJ2ZXIvRXZlbnRzV2F0Y2hlci50cyIsICIuLi9saWIvY2xpLWNvbmZpZy9pbmRleC50cyIsICIuLi9jbGkvYXV0aC9sb2dpbi9yZWdpc3Rlci50cyIsICIuLi9saWIvcmVnaXN0cnktYXBpL2dldC1reS50cyIsICIuLi9jbGkvYXV0aC9sb2dvdXQvcmVnaXN0ZXIudHMiLCAiLi4vY2xpL2F1dGgvcmVnaXN0ZXIudHMiLCAiLi4vY2xpL2NvbmZpZy9yZWdpc3Rlci50cyIsICIuLi9jbGkvY29uZmlnL3ByaW50L3JlZ2lzdGVyLnRzIiwgIi4uL2NsaS9jbG9uZS9yZWdpc3Rlci50cyIsICIuLi9jbGkvZXhwb3J0L3JlZ2lzdGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgeyByZWdpc3RlckluaXQgfSBmcm9tIFwiLi9pbml0L3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyRGV2IH0gZnJvbSBcIi4vZGV2L3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyQXV0aExvZ2luIH0gZnJvbSBcIi4vYXV0aC9sb2dpbi9yZWdpc3RlclwiXG5pbXBvcnQgeyByZWdpc3RlckF1dGhMb2dvdXQgfSBmcm9tIFwiLi9hdXRoL2xvZ291dC9yZWdpc3RlclwiXG5pbXBvcnQgeyByZWdpc3RlckF1dGggfSBmcm9tIFwiLi9hdXRoL3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnL3JlZ2lzdGVyXCJcbmltcG9ydCB7IHJlZ2lzdGVyQ29uZmlnUHJpbnQgfSBmcm9tIFwiLi9jb25maWcvcHJpbnQvcmVnaXN0ZXJcIlxuaW1wb3J0IHsgcmVnaXN0ZXJDbG9uZSB9IGZyb20gXCIuL2Nsb25lL3JlZ2lzdGVyXCJcbmltcG9ydCB7IHBlcmZlY3RDbGkgfSBmcm9tIFwicGVyZmVjdC1jbGlcIlxuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCJcbmltcG9ydCBzZW12ZXIgZnJvbSBcInNlbXZlclwiXG5pbXBvcnQgeyByZWdpc3RlckV4cG9ydCB9IGZyb20gXCIuL2V4cG9ydC9yZWdpc3RlclwiXG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXG5cbnByb2dyYW1cbiAgLm5hbWUoXCJ0c2NpXCIpXG4gIC5kZXNjcmlwdGlvbihcIkNMSSBmb3IgZGV2ZWxvcGluZyB0c2NpcmN1aXQgc25pcHBldHNcIilcbiAgLy8gSEFDSzogYXQgYnVpbGQgdGltZSB0aGUgdmVyc2lvbiBpcyBvbGQsIHdlIG5lZWQgdG9cbiAgLy8gZml4IHRoaXMgYXQgc29tZSBwb2ludC4uLlxuICAudmVyc2lvbihzZW12ZXIuaW5jKHBrZy52ZXJzaW9uLCBcInBhdGNoXCIpID8/IHBrZy52ZXJzaW9uKVxuXG5yZWdpc3RlckluaXQocHJvZ3JhbSlcblxucmVnaXN0ZXJEZXYocHJvZ3JhbSlcbnJlZ2lzdGVyQ2xvbmUocHJvZ3JhbSlcblxucmVnaXN0ZXJBdXRoKHByb2dyYW0pXG5yZWdpc3RlckF1dGhMb2dpbihwcm9ncmFtKVxucmVnaXN0ZXJBdXRoTG9nb3V0KHByb2dyYW0pXG5cbnJlZ2lzdGVyQ29uZmlnKHByb2dyYW0pXG5yZWdpc3RlckNvbmZpZ1ByaW50KHByb2dyYW0pXG5cbnJlZ2lzdGVyRXhwb3J0KHByb2dyYW0pXG5cbmlmIChwcm9jZXNzLmFyZ3YubGVuZ3RoID09PSAyKSB7XG4gIHBlcmZlY3RDbGkocHJvZ3JhbSwgcHJvY2Vzcy5hcmd2KVxufSBlbHNlIHtcbiAgcHJvZ3JhbS5wYXJzZSgpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJJbml0ID0gKHByb2dyYW06IENvbW1hbmQpID0+IHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiaW5pdFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkluaXRpYWxpemUgYSBuZXcgVFNDaXJjdWl0IHByb2plY3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XCIpXG4gICAgLmFjdGlvbigoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKVxuXG4gICAgICBjb25zdCBpbmRleEZpbGVQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiaW5kZXgudHN4XCIpXG4gICAgICBjb25zdCBucG1yY0ZpbGVQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwiLm5wbXJjXCIpXG5cbiAgICAgIGNvbnN0IGluZGV4Q29udGVudCA9IGBcbmV4cG9ydCBkZWZhdWx0ICgpID0+IChcbiAgPGJvYXJkIHdpZHRoPVwiMTBtbVwiIGhlaWdodD1cIjEwbW1cIj5cbiAgICA8cmVzaXN0b3JcbiAgICAgIHJlc2lzdGFuY2U9XCIxa1wiXG4gICAgICBmb290cHJpbnQ9XCIwNDAyXCJcbiAgICAgIG5hbWU9XCJSMVwiXG4gICAgICBzY2hYPXszfVxuICAgICAgcGNiWD17M31cbiAgICAvPlxuICAgIDxjYXBhY2l0b3JcbiAgICAgIGNhcGFjaXRhbmNlPVwiMTAwMHBGXCJcbiAgICAgIGZvb3RwcmludD1cIjA0MDJcIlxuICAgICAgbmFtZT1cIkMxXCJcbiAgICAgIHNjaFg9ey0zfVxuICAgICAgcGNiWD17LTN9XG4gICAgLz5cbiAgICA8dHJhY2UgZnJvbT1cIi5SMSA+IC5waW4xXCIgdG89XCIuQzEgPiAucGluMVwiIC8+XG4gIDwvYm9hcmQ+XG4pO1xuYFxuXG4gICAgICBjb25zdCBucG1yY0NvbnRlbnQgPSBgXG5AdHNjaTpyZWdpc3RyeT1odHRwczovL25wbS50c2NpcmN1aXQuY29tXG5gXG5cbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhpbmRleEZpbGVQYXRoKSkge1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGluZGV4RmlsZVBhdGgsIGluZGV4Q29udGVudC50cmltU3RhcnQoKSlcbiAgICAgICAgY29uc29sZS5sb2coYENyZWF0ZWQ6ICR7aW5kZXhGaWxlUGF0aH1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coYFNraXBwZWQ6ICR7aW5kZXhGaWxlUGF0aH0gYWxyZWFkeSBleGlzdHNgKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobnBtcmNGaWxlUGF0aCkpIHtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhucG1yY0ZpbGVQYXRoLCBucG1yY0NvbnRlbnQudHJpbVN0YXJ0KCkpXG4gICAgICAgIGNvbnNvbGUubG9nKGBDcmVhdGVkOiAke25wbXJjRmlsZVBhdGh9YClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGVkOiAke25wbXJjRmlsZVBhdGh9IGFscmVhZHkgZXhpc3RzYClcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBJbml0aWFsaXphdGlvbiBjb21wbGV0ZS4gUnVuIFwidHNjaSBkZXZcIiB0byBzdGFydCBkZXZlbG9waW5nLmAsXG4gICAgICApXG4gICAgfSlcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgKiBhcyBjaG9raWRhciBmcm9tIFwiY2hva2lkYXJcIlxuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IHsgY3JlYXRlSHR0cFNlcnZlciB9IGZyb20gXCJsaWIvc2VydmVyL2NyZWF0ZUh0dHBTZXJ2ZXJcIlxuaW1wb3J0IHsgZ2V0TG9jYWxGaWxlRGVwZW5kZW5jaWVzIH0gZnJvbSBcImxpYi9kZXBlbmRlbmN5LWFuYWx5c2lzL2dldExvY2FsRmlsZURlcGVuZGVuY2llc1wiXG5pbXBvcnQgeyBpbnN0YWxsTm9kZU1vZHVsZVR5cGVzRm9yU25pcHBldCB9IGZyb20gXCIuLi8uLi9saWIvZGVwZW5kZW5jeS1hbmFseXNpcy9pbnN0YWxsTm9kZU1vZHVsZVR5cGVzRm9yU25pcHBldFwiXG5pbXBvcnQgeyBFdmVudHNXYXRjaGVyIH0gZnJvbSBcIi4uLy4uL2xpYi9zZXJ2ZXIvRXZlbnRzV2F0Y2hlclwiXG5pbXBvcnQgeyBEZXZTZXJ2ZXIgfSBmcm9tIFwiLi9EZXZTZXJ2ZXJcIlxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJEZXYgPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkZXZcIilcbiAgICAuZGVzY3JpcHRpb24oXCJTdGFydCBkZXZlbG9wbWVudCBzZXJ2ZXIgZm9yIGEgc25pcHBldFwiKVxuICAgIC5hcmd1bWVudChcIltmaWxlXVwiLCBcIlBhdGggdG8gdGhlIHNuaXBwZXQgZmlsZVwiKVxuICAgIC5vcHRpb24oXCItcCwgLS1wb3J0IDxudW1iZXI+XCIsIFwiUG9ydCB0byBydW4gc2VydmVyIG9uXCIsIFwiMzAwMFwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKGZpbGU6IHN0cmluZywgb3B0aW9uczogeyBwb3J0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KG9wdGlvbnMucG9ydClcbiAgICAgIGxldCBhYnNvbHV0ZVBhdGg6IHN0cmluZ1xuXG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBhYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUoZmlsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnRQYXRoID0gcGF0aC5yZXNvbHZlKFwiaW5kZXgudHN4XCIpXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGVudHJ5cG9pbnRQYXRoKSkge1xuICAgICAgICAgIGFic29sdXRlUGF0aCA9IGVudHJ5cG9pbnRQYXRoXG4gICAgICAgICAgY29uc29sZS5sb2coXCJObyBmaWxlIHByb3ZpZGVkLiBVc2luZyAnaW5kZXgudHN4JyBhcyB0aGUgZW50cnlwb2ludC5cIilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiTm8gZW50cnlwb2ludCBmb3VuZC4gUnVuICd0c2NpIGluaXQnIHRvIGJvb3RzdHJhcCBhIGJhc2ljIHByb2plY3QuXCIsXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVEaXIgPSBwYXRoLmRpcm5hbWUoYWJzb2x1dGVQYXRoKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkluc3RhbGxpbmcgdHlwZXMgZm9yIGltcG9ydGVkIHNuaXBwZXRzLi4uXCIpXG4gICAgICAgIGF3YWl0IGluc3RhbGxOb2RlTW9kdWxlVHlwZXNGb3JTbmlwcGV0KGFic29sdXRlUGF0aClcbiAgICAgICAgY29uc29sZS5sb2coXCJUeXBlcyBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5XCIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gaW5zdGFsbCB0eXBlczpcIiwgZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcnZlciA9IG5ldyBEZXZTZXJ2ZXIoe1xuICAgICAgICBwb3J0LFxuICAgICAgICBjb21wb25lbnRGaWxlUGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgc2VydmVyLnN0YXJ0KClcbiAgICAgIGF3YWl0IHNlcnZlci5hZGRFbnRyeXBvaW50KClcbiAgICB9KVxufVxuIiwgImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiXG5cbmludGVyZmFjZSBTbmlwcGV0QXBpUmVzcG9uc2Uge1xuICBzbmlwcGV0OiB7XG4gICAgZHRzOiBzdHJpbmdcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbE5vZGVNb2R1bGVUeXBlc0ZvclNuaXBwZXQoc25pcHBldFBhdGg6IHN0cmluZykge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNuaXBwZXRQYXRoLCBcInV0Zi04XCIpXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIHNuaXBwZXRQYXRoLFxuICAgIGNvbnRlbnQsXG4gICAgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgICB0cnVlLFxuICApXG5cbiAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXVxuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IHRzLk5vZGUpIHtcbiAgICBpZiAodHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gbm9kZS5tb2R1bGVTcGVjaWZpZXJcbiAgICAgIGlmIChtb2R1bGVTcGVjaWZpZXIgJiYgdHMuaXNTdHJpbmdMaXRlcmFsKG1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgICAgY29uc3QgaW1wb3J0UGF0aCA9IG1vZHVsZVNwZWNpZmllci50ZXh0XG4gICAgICAgIGlmIChpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoXCJAdHNjaS9cIikpIHtcbiAgICAgICAgICBpbXBvcnRzLnB1c2goaW1wb3J0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpXG4gIH1cblxuICB2aXNpdChzb3VyY2VGaWxlKVxuXG4gIGxldCBwcm9qZWN0Um9vdCA9IHBhdGguZGlybmFtZShzbmlwcGV0UGF0aClcbiAgd2hpbGUgKHByb2plY3RSb290ICE9PSBwYXRoLnBhcnNlKHByb2plY3RSb290KS5yb290KSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHByb2plY3RSb290LCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIHByb2plY3RSb290ID0gcGF0aC5kaXJuYW1lKHByb2plY3RSb290KVxuICB9XG5cbiAgZm9yIChjb25zdCBpbXBvcnRQYXRoIG9mIGltcG9ydHMpIHtcbiAgICBjb25zdCBbb3duZXIsIG5hbWVdID0gaW1wb3J0UGF0aC5yZXBsYWNlKFwiQHRzY2kvXCIsIFwiXCIpLnNwbGl0KFwiLlwiKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICBgaHR0cHM6Ly9yZWdpc3RyeS1hcGkudHNjaXJjdWl0LmNvbS9zbmlwcGV0cy9nZXQ/b3duZXJfbmFtZT0ke293bmVyfSZ1bnNjb3BlZF9uYW1lPSR7bmFtZX1gLFxuICAgICAgKVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIHR5cGVzIGZvciAke2ltcG9ydFBhdGh9YClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YTogU25pcHBldEFwaVJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG5cbiAgICAgIGlmIChkYXRhLnNuaXBwZXQuZHRzKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIkB0c2NpXCIsXG4gICAgICAgICAgYCR7b3duZXJ9LiR7bmFtZX1gLFxuICAgICAgICApXG4gICAgICAgIGZzLm1rZGlyU3luYyhwYWNrYWdlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHBhY2thZ2VEaXIsIFwiaW5kZXguZC50c1wiKSwgZGF0YS5zbmlwcGV0LmR0cylcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGBFcnJvciBmZXRjaGluZyB0eXBlcyBmb3IgJHtpbXBvcnRQYXRofTpgLCBlcnJvcilcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQga3kgZnJvbSBcImt5XCJcbmltcG9ydCB0eXBlIHsgRmlsZVNlcnZlclJvdXRlcyB9IGZyb20gXCJsaWIvZmlsZS1zZXJ2ZXIvRmlsZVNlcnZlclJvdXRlc1wiXG5pbXBvcnQgeyBjcmVhdGVIdHRwU2VydmVyIH0gZnJvbSBcImxpYi9zZXJ2ZXIvY3JlYXRlSHR0cFNlcnZlclwiXG5pbXBvcnQgeyBFdmVudHNXYXRjaGVyIH0gZnJvbSBcImxpYi9zZXJ2ZXIvRXZlbnRzV2F0Y2hlclwiXG5pbXBvcnQgdHlwZSBodHRwIGZyb20gXCJub2RlOmh0dHBcIlxuaW1wb3J0IHR5cGUgeyBUeXBlZEt5SW5zdGFuY2UgfSBmcm9tIFwidHlwZWQta3lcIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IHR5cGUgeyBGaWxlVXBkYXRlZEV2ZW50IH0gZnJvbSBcImxpYi9maWxlLXNlcnZlci9GaWxlU2VydmVyRXZlbnRcIlxuaW1wb3J0ICogYXMgY2hva2lkYXIgZnJvbSBcImNob2tpZGFyXCJcblxuZXhwb3J0IGNsYXNzIERldlNlcnZlciB7XG4gIHBvcnQ6IG51bWJlclxuICAvKipcbiAgICogVGhlIHBhdGggdG8gYSBjb21wb25lbnQgdGhhdCBleHBvcnRzIGEgPGJvYXJkIC8+IG9yIDxncm91cCAvPiBjb21wb25lbnRcbiAgICovXG4gIGNvbXBvbmVudEZpbGVQYXRoOiBzdHJpbmdcblxuICBwcm9qZWN0RGlyOiBzdHJpbmdcblxuICAvKipcbiAgICogVGhlIEhUVFAgc2VydmVyIHRoYXQgaG9zdHMgdGhlIGZpbGUgc2VydmVyIGFuZCBldmVudCBidXMuIFlvdSBjYW4gdXNlXG4gICAqIGZzS3kgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlsZSBzZXJ2ZXIvZXZlbnQgYnVzXG4gICAqL1xuICBodHRwU2VydmVyPzogaHR0cC5TZXJ2ZXJcbiAgLyoqXG4gICAqIFdhdGNoZXMgZm9yIGV2ZW50cyBvbiB0aGUgZXZlbnQgYnVzIGJ5IHBvbGxpbmcgYGFwaS9ldmVudHMvbGlzdGBcbiAgICovXG4gIGV2ZW50c1dhdGNoZXI/OiBFdmVudHNXYXRjaGVyXG4gIC8qKlxuICAgKiBBIGt5IGluc3RhbmNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlsZSBzZXJ2ZXIgYW5kXG4gICAqIGV2ZW50IGJ1c1xuICAgKi9cbiAgZnNLeTogVHlwZWRLeUluc3RhbmNlPGtleW9mIEZpbGVTZXJ2ZXJSb3V0ZXMsIEZpbGVTZXJ2ZXJSb3V0ZXM+XG4gIC8qKlxuICAgKiBBIGNob2tpZGFyIGluc3RhbmNlIHRoYXQgd2F0Y2hlcyB0aGUgcHJvamVjdCBkaXJlY3RvcnkgZm9yIGZpbGUgY2hhbmdlc1xuICAgKi9cbiAgZmlsZXN5c3RlbVdhdGNoZXI/OiBjaG9raWRhci5GU1dhdGNoZXJcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgcG9ydCxcbiAgICBjb21wb25lbnRGaWxlUGF0aCxcbiAgfToge1xuICAgIHBvcnQ6IG51bWJlclxuICAgIGNvbXBvbmVudEZpbGVQYXRoOiBzdHJpbmdcbiAgfSkge1xuICAgIHRoaXMucG9ydCA9IHBvcnRcbiAgICB0aGlzLmNvbXBvbmVudEZpbGVQYXRoID0gY29tcG9uZW50RmlsZVBhdGhcbiAgICB0aGlzLnByb2plY3REaXIgPSBwYXRoLmRpcm5hbWUoY29tcG9uZW50RmlsZVBhdGgpXG4gICAgdGhpcy5mc0t5ID0ga3kuY3JlYXRlKHtcbiAgICAgIHByZWZpeFVybDogYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fWAsXG4gICAgfSkgYXMgYW55XG4gIH1cblxuICBhc3luYyBzdGFydCgpIHtcbiAgICBjb25zdCB7IHNlcnZlciB9ID0gYXdhaXQgY3JlYXRlSHR0cFNlcnZlcih0aGlzLnBvcnQpXG4gICAgdGhpcy5odHRwU2VydmVyID0gc2VydmVyXG5cbiAgICB0aGlzLmV2ZW50c1dhdGNoZXIgPSBuZXcgRXZlbnRzV2F0Y2hlcihgaHR0cDovL2xvY2FsaG9zdDoke3RoaXMucG9ydH1gKVxuICAgIHRoaXMuZXZlbnRzV2F0Y2hlci5zdGFydCgpXG5cbiAgICB0aGlzLmV2ZW50c1dhdGNoZXIub24oXG4gICAgICBcIkZJTEVfVVBEQVRFRFwiLFxuICAgICAgdGhpcy5oYW5kbGVGaWxlVXBkYXRlZEV2ZW50RnJvbVNlcnZlci5iaW5kKHRoaXMpLFxuICAgIClcblxuICAgIHRoaXMuZmlsZXN5c3RlbVdhdGNoZXIgPSBjaG9raWRhci53YXRjaCh0aGlzLnByb2plY3REaXIsIHtcbiAgICAgIHBlcnNpc3RlbnQ6IHRydWUsXG4gICAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICAgIH0pXG5cbiAgICB0aGlzLmZpbGVzeXN0ZW1XYXRjaGVyLm9uKFwiY2hhbmdlXCIsIChmaWxlUGF0aCkgPT5cbiAgICAgIHRoaXMuaGFuZGxlRmlsZUNoYW5nZWRPbkZpbGVzeXN0ZW0oZmlsZVBhdGgpLFxuICAgIClcbiAgICB0aGlzLmZpbGVzeXN0ZW1XYXRjaGVyLm9uKFwiYWRkXCIsIChmaWxlUGF0aCkgPT5cbiAgICAgIHRoaXMuaGFuZGxlRmlsZUNoYW5nZWRPbkZpbGVzeXN0ZW0oZmlsZVBhdGgpLFxuICAgIClcblxuICAgIHRoaXMudXBzZXJ0SW5pdGlhbEZpbGVzKClcbiAgfVxuXG4gIGFzeW5jIGFkZEVudHJ5cG9pbnQoKSB7XG4gICAgY29uc3QgcmVsYXRpdmVDb21wb25lbnRGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUoXG4gICAgICB0aGlzLnByb2plY3REaXIsXG4gICAgICB0aGlzLmNvbXBvbmVudEZpbGVQYXRoLFxuICAgIClcbiAgICBhd2FpdCB0aGlzLmZzS3kucG9zdChcImFwaS9maWxlcy91cHNlcnRcIiwge1xuICAgICAganNvbjoge1xuICAgICAgICBmaWxlX3BhdGg6IFwiZW50cnlwb2ludC50c3hcIixcbiAgICAgICAgdGV4dF9jb250ZW50OiBgXG5pbXBvcnQgTXlDaXJjdWl0IGZyb20gXCIuLyR7cmVsYXRpdmVDb21wb25lbnRGaWxlUGF0aH1cIlxuXG5jaXJjdWl0LmFkZCg8TXlDaXJjdWl0IC8+KVxuYCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUZpbGVVcGRhdGVkRXZlbnRGcm9tU2VydmVyKGV2OiBGaWxlVXBkYXRlZEV2ZW50KSB7XG4gICAgaWYgKGV2LmluaXRpYXRvciA9PT0gXCJmaWxlc3lzdGVtX2NoYW5nZVwiKSByZXR1cm5cblxuICAgIGlmIChldi5maWxlX3BhdGggPT09IFwibWFudWFsLWVkaXRzLmpzb25cIikge1xuICAgICAgY29uc29sZS5sb2coXCJNYW51YWwgZWRpdHMgdXBkYXRlZCwgdXBkYXRpbmcgb24gZmlsZXN5c3RlbS4uLlwiKVxuICAgICAgY29uc3QgeyBmaWxlIH0gPSBhd2FpdCB0aGlzLmZzS3lcbiAgICAgICAgLmdldChcImFwaS9maWxlcy9nZXRcIiwge1xuICAgICAgICAgIHNlYXJjaFBhcmFtczogeyBmaWxlX3BhdGg6IGV2LmZpbGVfcGF0aCB9LFxuICAgICAgICB9KVxuICAgICAgICAuanNvbigpXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4odGhpcy5wcm9qZWN0RGlyLCBcIm1hbnVhbC1lZGl0cy5qc29uXCIpLFxuICAgICAgICBmaWxlLnRleHRfY29udGVudCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVGaWxlQ2hhbmdlZE9uRmlsZXN5c3RlbShhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZWxhdGl2ZUZpbGVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLnByb2plY3REaXIsIGFic29sdXRlRmlsZVBhdGgpXG5cbiAgICAvLyBXZSd2ZSB0ZW1wb3JhcmlseSBkaXNhYmxlZCB1cHNlcnRpbmcgbWFudWFsIGVkaXRzIGZyb20gZmlsZXN5c3RlbSBjaGFuZ2VzXG4gICAgLy8gYmVjYXVzZSBpdCBjYW4gYmUgZWRpdGVkIGJ5IHRoZSBicm93c2VyXG4gICAgaWYgKHJlbGF0aXZlRmlsZVBhdGguaW5jbHVkZXMoXCJtYW51YWwtZWRpdHMuanNvblwiKSkgcmV0dXJuXG5cbiAgICBhd2FpdCB0aGlzLmZzS3lcbiAgICAgIC5wb3N0KFwiYXBpL2ZpbGVzL3Vwc2VydFwiLCB7XG4gICAgICAgIGpzb246IHtcbiAgICAgICAgICBmaWxlX3BhdGg6IHJlbGF0aXZlRmlsZVBhdGgsXG4gICAgICAgICAgdGV4dF9jb250ZW50OiBmcy5yZWFkRmlsZVN5bmMoYWJzb2x1dGVGaWxlUGF0aCwgXCJ1dGYtOFwiKSxcbiAgICAgICAgICBpbml0aWF0b3I6IFwiZmlsZXN5c3RlbV9jaGFuZ2VcIixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAuanNvbigpXG4gIH1cblxuICBhc3luYyB1cHNlcnRJbml0aWFsRmlsZXMoKSB7XG4gICAgLy8gU2NhbiBwcm9qZWN0IGRpcmVjdG9yeSBmb3IgYWxsIGZpbGVzIGFuZCB1cHNlcnQgdGhlbVxuICAgIGNvbnN0IGZpbGVOYW1lcyA9IGZzLnJlYWRkaXJTeW5jKHRoaXMucHJvamVjdERpcilcbiAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGZpbGVOYW1lcykge1xuICAgICAgaWYgKGZzLnN0YXRTeW5jKHBhdGguam9pbih0aGlzLnByb2plY3REaXIsIGZpbGVOYW1lKSkuaXNEaXJlY3RvcnkoKSlcbiAgICAgICAgY29udGludWVcbiAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4odGhpcy5wcm9qZWN0RGlyLCBmaWxlTmFtZSksXG4gICAgICAgIFwidXRmLThcIixcbiAgICAgIClcbiAgICAgIGF3YWl0IHRoaXMuZnNLeS5wb3N0KFwiYXBpL2ZpbGVzL3Vwc2VydFwiLCB7XG4gICAgICAgIGpzb246IHtcbiAgICAgICAgICBmaWxlX3BhdGg6IGZpbGVOYW1lLFxuICAgICAgICAgIHRleHRfY29udGVudDogZmlsZUNvbnRlbnQsXG4gICAgICAgICAgaW5pdGlhdG9yOiBcImZpbGVzeXN0ZW1fY2hhbmdlXCIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKSB7XG4gICAgdGhpcy5odHRwU2VydmVyPy5jbG9zZSgpXG4gICAgdGhpcy5ldmVudHNXYXRjaGVyPy5zdG9wKClcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIGh0dHAgZnJvbSBcIm5vZGU6aHR0cFwiXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgZ2V0Tm9kZUhhbmRsZXIgfSBmcm9tIFwid2ludGVyc3BlYy9hZGFwdGVycy9ub2RlXCJcbmltcG9ydCBwa2cgZnJvbSBcIi4uLy4uL3BhY2thZ2UuanNvblwiXG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB3aW50ZXJzcGVjQnVuZGxlIGZyb20gXCJAdHNjaXJjdWl0L2ZpbGUtc2VydmVyL2Rpc3QvYnVuZGxlLmpzXCJcbmltcG9ydCB7IGdldEluZGV4IH0gZnJvbSBcIi4uL3NpdGUvZ2V0SW5kZXhcIlxuXG5leHBvcnQgY29uc3QgY3JlYXRlSHR0cFNlcnZlciA9IGFzeW5jIChwb3J0ID0gMzAwMCkgPT4ge1xuICBjb25zdCBmaWxlU2VydmVySGFuZGxlciA9IGdldE5vZGVIYW5kbGVyKHdpbnRlcnNwZWNCdW5kbGUgYXMgYW55LCB7fSlcblxuICBjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwhLCBgaHR0cDovLyR7cmVxLmhlYWRlcnMuaG9zdH1gKVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gXCIvc3RhbmRhbG9uZS5taW4uanNcIikge1xuICAgICAgY29uc3Qgc3RhbmRhbG9uZUZpbGVQYXRoID1cbiAgICAgICAgcHJvY2Vzcy5lbnYuUlVORlJBTUVfU1RBTkRBTE9ORV9GSUxFX1BBVEggfHxcbiAgICAgICAgcGF0aC5yZXNvbHZlKFxuICAgICAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgXCJub2RlX21vZHVsZXNcIixcbiAgICAgICAgICBcIkB0c2NpcmN1aXQvcnVuZnJhbWUvZGlzdC9zdGFuZGFsb25lLm1pbi5qc1wiLFxuICAgICAgICApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoc3RhbmRhbG9uZUZpbGVQYXRoLCBcInV0ZjhcIilcbiAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLThcIixcbiAgICAgICAgfSlcbiAgICAgICAgcmVzLmVuZChjb250ZW50KVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzZXJ2aW5nIHN0YW5kYWxvbmUubWluLmpzOlwiLCBlcnJvcilcbiAgICAgIH1cblxuICAgICAgcmVzLndyaXRlSGVhZCgzMDIsIHtcbiAgICAgICAgTG9jYXRpb246IGBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0B0c2NpcmN1aXQvcnVuZnJhbWVAJHtwa2cuZGVwZW5kZW5jaWVzW1wiQHRzY2lyY3VpdC9ydW5mcmFtZVwiXS5yZXBsYWNlKC9eW14wLTldKy8sIFwiXCIpfS9kaXN0L3N0YW5kYWxvbmUubWluLmpzYCxcbiAgICAgIH0pXG4gICAgICByZXMuZW5kKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgPT09IFwiL1wiKSB7XG4gICAgICBjb25zdCBodG1sID0gYXdhaXQgZ2V0SW5kZXgoKVxuICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L2h0bWxcIiB9KVxuICAgICAgcmVzLmVuZChodG1sKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZS5zdGFydHNXaXRoKFwiL2FwaS9cIikpIHtcbiAgICAgIHJlcS51cmwgPSByZXEudXJsIS5yZXBsYWNlKFwiL2FwaS9cIiwgXCIvXCIpXG4gICAgICBmaWxlU2VydmVySGFuZGxlcihyZXEsIHJlcylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJlcy53cml0ZUhlYWQoNDA0KVxuICAgIHJlcy5lbmQoXCJOb3QgZm91bmRcIilcbiAgfSlcblxuICByZXR1cm4gbmV3IFByb21pc2U8eyBzZXJ2ZXI6IGh0dHAuU2VydmVyIH0+KChyZXNvbHZlKSA9PiB7XG4gICAgc2VydmVyLmxpc3Rlbihwb3J0LCAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgU2VydmVyIHJ1bm5pbmcgYXQgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9YClcbiAgICAgIHJlc29sdmUoeyBzZXJ2ZXIgfSlcbiAgICB9KVxuICB9KVxufVxuIiwgIntcbiAgXCJuYW1lXCI6IFwiQHRzY2lyY3VpdC9jbGlcIixcbiAgXCJtYWluXCI6IFwiZGlzdC9tYWluLmpzXCIsXG4gIFwidHlwZVwiOiBcIm1vZHVsZVwiLFxuICBcInZlcnNpb25cIjogXCIwLjEuMTFcIixcbiAgXCJiaW5cIjoge1xuICAgIFwidHNjaVwiOiBcIi4vZGlzdC9tYWluLmpzXCJcbiAgfSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInN0YXJ0XCI6IFwiYnVuIHJ1biBkZXZcIixcbiAgICBcImRldlwiOiBcImJ1biAtLWhvdCAuL2NsaS9tYWluLnRzIGRldiAuL2V4YW1wbGUtZGlyL3NuaXBwZXQxLWJhc2ljLnRzeFwiLFxuICAgIFwiYnVpbGRcIjogXCJ0c3VwLW5vZGUgY2xpL21haW4udHMgLS1mb3JtYXQgZXNtIC0tc291cmNlbWFwIGlubGluZVwiLFxuICAgIFwiZm9ybWF0XCI6IFwiYmlvbWUgZm9ybWF0IC0td3JpdGUgLlwiLFxuICAgIFwiZm9ybWF0OmNoZWNrXCI6IFwiYmlvbWUgZm9ybWF0IC5cIixcbiAgICBcImNsaVwiOiBcImJ1biAuL2NsaS9tYWluLnRzXCJcbiAgfSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGJpb21lanMvYmlvbWVcIjogXCJeMS45LjRcIixcbiAgICBcIkB0c2NpcmN1aXQvY29yZVwiOiBcIl4wLjAuMjQ5XCIsXG4gICAgXCJAdHlwZXMvYnVuXCI6IFwiXjEuMS4xNVwiLFxuICAgIFwiQHR5cGVzL2NvbmZpZ3N0b3JlXCI6IFwiXjYuMC4yXCIsXG4gICAgXCJAdHlwZXMvcmVhY3RcIjogXCJeMTkuMC4xXCIsXG4gICAgXCJAdHlwZXMvc2VtdmVyXCI6IFwiXjcuNS44XCIsXG4gICAgXCJnZXQtcG9ydFwiOiBcIl43LjEuMFwiLFxuICAgIFwidGVtcHlcIjogXCJeMy4xLjBcIixcbiAgICBcInRzdXBcIjogXCJeOC4zLjVcIixcbiAgICBcInR5cGVkLWt5XCI6IFwiXjAuMC40XCJcbiAgfSxcbiAgXCJwZWVyRGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcInR5cGVzY3JpcHRcIjogXCJeNS4wLjBcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHNjaXJjdWl0L2ZpbGUtc2VydmVyXCI6IFwiXjAuMC4xM1wiLFxuICAgIFwiQHRzY2lyY3VpdC9ydW5mcmFtZVwiOiBcIl4wLjAuNDdcIixcbiAgICBcImNob2tpZGFyXCI6IFwiXjQuMC4xXCIsXG4gICAgXCJjb21tYW5kZXJcIjogXCJeMTIuMS4wXCIsXG4gICAgXCJjb25maWdzdG9yZVwiOiBcIl43LjAuMFwiLFxuICAgIFwiY29zbWljb25maWdcIjogXCJeOS4wLjBcIixcbiAgICBcImRlbGF5XCI6IFwiXjYuMC4wXCIsXG4gICAgXCJreVwiOiBcIl4xLjcuNFwiLFxuICAgIFwibWFrZS12ZnNcIjogXCJeMS4wLjE1XCIsXG4gICAgXCJwZXJmZWN0LWNsaVwiOiBcIl4xLjAuMjBcIixcbiAgICBcInNlbXZlclwiOiBcIl43LjYuM1wiXG4gIH1cbn1cbiIsICJpbXBvcnQgcGtnIGZyb20gXCIuLi8uLi9wYWNrYWdlLmpzb25cIlxuXG5leHBvcnQgY29uc3QgZ2V0SW5kZXggPSBhc3luYyAoKSA9PiB7XG4gIHJldHVybiBgPGh0bWw+XG4gICAgPGhlYWQ+XG4gICAgPC9oZWFkPlxuICAgIDxib2R5PlxuICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL2Nkbi50YWlsd2luZGNzcy5jb21cIj48L3NjcmlwdD5cbiAgICAgIDxkaXYgaWQ9XCJyb290XCI+bG9hZGluZy4uLjwvZGl2PlxuICAgICAgPHNjcmlwdD5cbiAgICAgIGdsb2JhbFRoaXMucHJvY2VzcyA9IHsgZW52OiB7IE5PREVfRU5WOiBcInByb2R1Y3Rpb25cIiB9IH1cbiAgICAgIDwvc2NyaXB0PlxuICAgICAgPHNjcmlwdCBzcmM9XCIvc3RhbmRhbG9uZS5taW4uanNcIj48L3NjcmlwdD5cbiAgICA8L2JvZHk+XG4gIDwvaHRtbD5gXG59XG5cbi8vIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AdHNjaXJjdWl0L3J1bmZyYW1lQCR7cGtnLmRlcGVuZGVuY2llc1tcIkB0c2NpcmN1aXQvcnVuZnJhbWVcIl0ucmVwbGFjZSgvXlteMC05XSsvLCBcIlwiKX0vZGlzdC9zdGFuZGFsb25lLm1pbi5qc1wiPjwvc2NyaXB0PlxuIiwgImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIlxuXG5pbnRlcmZhY2UgRXZlbnQge1xuICBldmVudF9pZDogc3RyaW5nXG4gIGNyZWF0ZWRfYXQ6IHN0cmluZ1xuICBldmVudF90eXBlOiBzdHJpbmdcbiAgW2tleTogc3RyaW5nXTogYW55XG59XG5cbmludGVyZmFjZSBFdmVudHNSZXNwb25zZSB7XG4gIGV2ZW50X2xpc3Q6IEV2ZW50W11cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50c1dhdGNoZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIGxhc3RQb2xsVGltZTogc3RyaW5nXG4gIHByaXZhdGUgcG9sbEludGVydmFsOiBudW1iZXJcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmdcbiAgcHJpdmF0ZSBwb2xsaW5nID0gZmFsc2VcbiAgcHJpdmF0ZSB0aW1lb3V0SWQ/OiBOb2RlSlMuVGltZW91dFxuXG4gIGNvbnN0cnVjdG9yKGJhc2VVcmwgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLCBwb2xsSW50ZXJ2YWwgPSAxMDAwKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmxcbiAgICB0aGlzLnBvbGxJbnRlcnZhbCA9IHBvbGxJbnRlcnZhbFxuICAgIHRoaXMubGFzdFBvbGxUaW1lID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIH1cblxuICBhc3luYyBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5wb2xsaW5nKSByZXR1cm5cbiAgICB0aGlzLnBvbGxpbmcgPSB0cnVlXG4gICAgYXdhaXQgdGhpcy5wb2xsKClcbiAgfVxuXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5wb2xsaW5nID0gZmFsc2VcbiAgICBpZiAodGhpcy50aW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBvbGwoKSB7XG4gICAgaWYgKCF0aGlzLnBvbGxpbmcpIHJldHVyblxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2V2ZW50cy9saXN0P3NpbmNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubGFzdFBvbGxUaW1lKX1gLFxuICAgICAgKVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhOiBFdmVudHNSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuXG4gICAgICAvLyBVcGRhdGUgbGFzdCBwb2xsIHRpbWUgdG8gbGF0ZXN0IGV2ZW50IG9yIGN1cnJlbnQgdGltZVxuICAgICAgY29uc3QgbGF0ZXN0RXZlbnQgPSBkYXRhLmV2ZW50X2xpc3RbZGF0YS5ldmVudF9saXN0Lmxlbmd0aCAtIDFdXG4gICAgICB0aGlzLmxhc3RQb2xsVGltZSA9IGxhdGVzdEV2ZW50XG4gICAgICAgID8gbGF0ZXN0RXZlbnQuY3JlYXRlZF9hdFxuICAgICAgICA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuXG4gICAgICAvLyBFbWl0IGV2ZW50cyBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyXG4gICAgICBkYXRhLmV2ZW50X2xpc3QuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KGV2ZW50LmV2ZW50X3R5cGUsIGV2ZW50KVxuICAgICAgICB0aGlzLmVtaXQoXCIqXCIsIGV2ZW50KVxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyb3IpXG4gICAgfVxuICAgIC8vIFNjaGVkdWxlIG5leHQgcG9sbFxuICAgIHRoaXMudGltZW91dElkID0gZ2xvYmFsVGhpcy5zZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gdGhpcy5wb2xsKCksXG4gICAgICB0aGlzLnBvbGxJbnRlcnZhbCxcbiAgICApIGFzIHVua25vd24gYXMgTm9kZUpTLlRpbWVvdXRcbiAgfVxufVxuIiwgImltcG9ydCBDb25maWdzdG9yZSBmcm9tIFwiY29uZmlnc3RvcmVcIlxuaW1wb3J0IHR5cGUgeyBUeXBlZENvbmZpZ3N0b3JlIH0gZnJvbSBcIi4vVHlwZWRDb25maWdTdG9yZVwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpQ29uZmlnIHtcbiAgc2Vzc2lvblRva2VuPzogc3RyaW5nXG4gIGdpdGh1YlVzZXJuYW1lPzogc3RyaW5nXG4gIHJlZ2lzdHJ5QXBpVXJsPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBjbGlDb25maWc6IFR5cGVkQ29uZmlnc3RvcmU8Q2xpQ29uZmlnPiA9IG5ldyBDb25maWdzdG9yZShcbiAgXCJ0c2NpcmN1aXRcIixcbilcblxuZXhwb3J0IGNvbnN0IGdldFJlZ2lzdHJ5QXBpVXJsID0gKCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBjbGlDb25maWcuZ2V0KFwicmVnaXN0cnlBcGlVcmxcIikgPz8gXCJodHRwczovL3JlZ2lzdHJ5LWFwaS50c2NpcmN1aXQuY29tXCJcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCB7IGNsaUNvbmZpZyB9IGZyb20gXCJsaWIvY2xpLWNvbmZpZ1wiXG5pbXBvcnQgZGVsYXkgZnJvbSBcImRlbGF5XCJcbmltcG9ydCB7IGdldEt5IH0gZnJvbSBcImxpYi9yZWdpc3RyeS1hcGkvZ2V0LWt5XCJcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRSZXNwb25zZSB9IGZyb20gXCJsaWIvcmVnaXN0cnktYXBpL2VuZHBvaW50LXR5cGVzXCJcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyQXV0aExvZ2luID0gKHByb2dyYW06IENvbW1hbmQpID0+IHtcbiAgLy8gRGVmaW5lIHRoZSBsb2dpbiBhY3Rpb24gb25jZSB0byBzaGFyZSBiZXR3ZWVuIGJvdGggY29tbWFuZHNcbiAgY29uc3QgbG9naW5BY3Rpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qga3kgPSBnZXRLeSgpXG5cbiAgICBjb25zdCB7IGxvZ2luX3BhZ2UgfSA9IGF3YWl0IGt5XG4gICAgICAucG9zdDxFbmRwb2ludFJlc3BvbnNlW1wic2Vzc2lvbnMvbG9naW5fcGFnZS9jcmVhdGVcIl0+KFxuICAgICAgICBcInNlc3Npb25zL2xvZ2luX3BhZ2UvY3JlYXRlXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBqc29uOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIC5qc29uKClcblxuICAgIGNvbnNvbGUubG9nKFwiUGxlYXNlIHZpc2l0IHRoZSBmb2xsb3dpbmcgVVJMIHRvIGxvZyBpbjpcIilcbiAgICBjb25zb2xlLmxvZyhsb2dpbl9wYWdlLnVybClcblxuICAgIC8vIFdhaXQgdW50aWwgd2UgcmVjZWl2ZSBjb25maXJtYXRpb25cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgeyBsb2dpbl9wYWdlOiBuZXdfbG9naW5fcGFnZSB9ID0gYXdhaXQga3lcbiAgICAgICAgLnBvc3Q8RW5kcG9pbnRSZXNwb25zZVtcInNlc3Npb25zL2xvZ2luX3BhZ2UvZ2V0XCJdPihcbiAgICAgICAgICBcInNlc3Npb25zL2xvZ2luX3BhZ2UvZ2V0XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAganNvbjoge1xuICAgICAgICAgICAgICBsb2dpbl9wYWdlX2lkOiBsb2dpbl9wYWdlLmxvZ2luX3BhZ2VfaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bG9naW5fcGFnZS5sb2dpbl9wYWdlX2F1dGhfdG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICAuanNvbigpXG5cbiAgICAgIGlmIChuZXdfbG9naW5fcGFnZS53YXNfbG9naW5fc3VjY2Vzc2Z1bCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkxvZ2dlZCBpbiEgR2VuZXJhdGluZyB0b2tlbi4uLlwiKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3X2xvZ2luX3BhZ2UuaXNfZXhwaXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2dpbiBwYWdlIGV4cGlyZWRcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZGVsYXkoMTAwMClcbiAgICB9XG5cbiAgICBjb25zdCB7IHNlc3Npb24gfSA9IGF3YWl0IGt5XG4gICAgICAucG9zdDxFbmRwb2ludFJlc3BvbnNlW1wic2Vzc2lvbnMvbG9naW5fcGFnZS9leGNoYW5nZV9mb3JfY2xpX3Nlc3Npb25cIl0+KFxuICAgICAgICBcInNlc3Npb25zL2xvZ2luX3BhZ2UvZXhjaGFuZ2VfZm9yX2NsaV9zZXNzaW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBqc29uOiB7XG4gICAgICAgICAgICBsb2dpbl9wYWdlX2lkOiBsb2dpbl9wYWdlLmxvZ2luX3BhZ2VfaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7bG9naW5fcGFnZS5sb2dpbl9wYWdlX2F1dGhfdG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgLmpzb24oKVxuXG4gICAgY2xpQ29uZmlnLnNldChcInNlc3Npb25Ub2tlblwiLCBzZXNzaW9uLnRva2VuKVxuXG4gICAgY29uc29sZS5sb2coXCJSZWFkeSB0byB1c2UhXCIpXG4gIH1cblxuICAvLyBSZWdpc3RlciB0aGUgYXV0aCBsb2dpbiBzdWJjb21tYW5kXG4gIHByb2dyYW0uY29tbWFuZHNcbiAgICAuZmluZCgoYykgPT4gYy5uYW1lKCkgPT09IFwiYXV0aFwiKSFcbiAgICAuY29tbWFuZChcImxvZ2luXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiQXV0aGVudGljYXRlIENMSSwgbG9naW4gdG8gcmVnaXN0cnlcIilcbiAgICAuYWN0aW9uKGxvZ2luQWN0aW9uKVxuXG4gIC8vIFJlZ2lzdGVyIHRoZSB0b3AtbGV2ZWwgbG9naW4gY29tbWFuZCBhcyBhbiBhbGlhc1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJsb2dpblwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkxvZ2luIHRvIHRzY2lyY3VpdCByZWdpc3RyeVwiKVxuICAgIC5hY3Rpb24obG9naW5BY3Rpb24pXG59XG4iLCAiaW1wb3J0IHsgZ2V0UmVnaXN0cnlBcGlVcmwgfSBmcm9tIFwibGliL2NsaS1jb25maWdcIlxuaW1wb3J0IGt5LCB7IHR5cGUgQWZ0ZXJSZXNwb25zZUhvb2sgfSBmcm9tIFwia3lcIlxuXG5jb25zdCBwcmV0dHlSZXNwb25zZUVycm9ySG9vazogQWZ0ZXJSZXNwb25zZUhvb2sgPSBhc3luYyAoXG4gIF9yZXF1ZXN0LFxuICBfb3B0aW9ucyxcbiAgcmVzcG9uc2UsXG4pID0+IHtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZBSUwgWyR7cmVzcG9uc2Uuc3RhdHVzfV06ICR7X3JlcXVlc3QubWV0aG9kfSAke1xuICAgICAgICAgIG5ldyBVUkwoX3JlcXVlc3QudXJsKS5wYXRobmFtZVxuICAgICAgICB9IFxcblxcbiAke0pTT04uc3RyaW5naWZ5KGVycm9yRGF0YSwgbnVsbCwgMil9YCxcbiAgICAgIClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL2lnbm9yZSwgYWxsb3cgdGhlIGVycm9yIHRvIGJlIHRocm93blxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0S3kgPSAoKSA9PiB7XG4gIHJldHVybiBreS5jcmVhdGUoe1xuICAgIHByZWZpeFVybDogZ2V0UmVnaXN0cnlBcGlVcmwoKSxcbiAgICBob29rczoge1xuICAgICAgYWZ0ZXJSZXNwb25zZTogW3ByZXR0eVJlc3BvbnNlRXJyb3JIb29rXSxcbiAgICB9LFxuICB9KVxufVxuIiwgImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJBdXRoTG9nb3V0ID0gKHByb2dyYW06IENvbW1hbmQpID0+IHtcbiAgcHJvZ3JhbS5jb21tYW5kc1xuICAgIC5maW5kKChjKSA9PiBjLm5hbWUoKSA9PT0gXCJhdXRoXCIpIVxuICAgIC5jb21tYW5kKFwibG9nb3V0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiTG9nb3V0IGZyb20gcmVnaXN0cnlcIilcbiAgICAuYWN0aW9uKChhcmdzKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcImxvZ291dFwiKVxuICAgIH0pXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckF1dGggPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICBwcm9ncmFtLmNvbW1hbmQoXCJhdXRoXCIpLmRlc2NyaXB0aW9uKFwiTG9naW4vbG9nb3V0XCIpXG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiXG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckNvbmZpZyA9IChwcm9ncmFtOiBDb21tYW5kKSA9PiB7XG4gIHByb2dyYW0uY29tbWFuZChcImNvbmZpZ1wiKS5kZXNjcmlwdGlvbihcIk1hbmFnZSB0c2NpcmN1aXQgQ0xJIGNvbmZpZ3VyYXRpb25cIilcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCB7IGNsaUNvbmZpZyB9IGZyb20gXCJsaWIvY2xpLWNvbmZpZ1wiXG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckNvbmZpZ1ByaW50ID0gKHByb2dyYW06IENvbW1hbmQpID0+IHtcbiAgcHJvZ3JhbS5jb21tYW5kc1xuICAgIC5maW5kKChjKSA9PiBjLm5hbWUoKSA9PT0gXCJjb25maWdcIikhXG4gICAgLmNvbW1hbmQoXCJwcmludFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIlByaW50IHRoZSBjdXJyZW50IGNvbmZpZ1wiKVxuICAgIC5hY3Rpb24oKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY2xpQ29uZmlnLmFsbCwgbnVsbCwgMikpXG4gICAgfSlcbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCJcbmltcG9ydCB7IGdldEt5IH0gZnJvbSBcImxpYi9yZWdpc3RyeS1hcGkvZ2V0LWt5XCJcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckNsb25lID0gKHByb2dyYW06IENvbW1hbmQpID0+IHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiY2xvbmVcIilcbiAgICAuZGVzY3JpcHRpb24oXCJDbG9uZSBhIHNuaXBwZXQgZnJvbSB0aGUgcmVnaXN0cnlcIilcbiAgICAuYXJndW1lbnQoXCI8c25pcHBldD5cIiwgXCJTbmlwcGV0IHRvIGNsb25lIChlLmcuIGF1dGhvci9zbmlwcGV0TmFtZSlcIilcbiAgICAuYWN0aW9uKGFzeW5jIChzbmlwcGV0UGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgYXV0aG9yOiBzdHJpbmdcbiAgICAgIGxldCBzbmlwcGV0TmFtZTogc3RyaW5nXG4gICAgICBpZiAoIXNuaXBwZXRQYXRoLnN0YXJ0c1dpdGgoXCJAdHNjaS9cIikgJiYgc25pcHBldFBhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgIDtbYXV0aG9yLCBzbmlwcGV0TmFtZV0gPSBzbmlwcGV0UGF0aC5zcGxpdChcIi9cIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRQYXRoID0gc25pcHBldFBhdGgucmVwbGFjZShcIkB0c2NpL1wiLCBcIlwiKVxuICAgICAgICBjb25zdCBmaXJzdERvdEluZGV4ID0gdHJpbW1lZFBhdGguaW5kZXhPZihcIi5cIilcbiAgICAgICAgYXV0aG9yID0gdHJpbW1lZFBhdGguc2xpY2UoMCwgZmlyc3REb3RJbmRleClcbiAgICAgICAgc25pcHBldE5hbWUgPSB0cmltbWVkUGF0aC5zbGljZShmaXJzdERvdEluZGV4ICsgMSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFhdXRob3IgfHwgIXNuaXBwZXROYW1lKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIHNuaXBwZXQgcGF0aC4gVXNlIGZvcm1hdDogYXV0aG9yL3NuaXBwZXROYW1lLCBhdXRob3Iuc25pcHBldE5hbWUgb3IgQHRzY2kvYXV0aG9yLnNuaXBwZXROYW1lXCIsXG4gICAgICAgIClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGt5ID0gZ2V0S3koKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQ2xvbmluZyAke2F1dGhvcn0vJHtzbmlwcGV0TmFtZX0uLi5gKVxuXG4gICAgICAgIGNvbnN0IHBhY2thZ2VGaWxlTGlzdCA9IGF3YWl0IGt5XG4gICAgICAgICAgLnBvc3Q8e1xuICAgICAgICAgICAgcGFja2FnZV9maWxlczogQXJyYXk8e1xuICAgICAgICAgICAgICBwYWNrYWdlX2ZpbGVfaWQ6IHN0cmluZ1xuICAgICAgICAgICAgICBwYWNrYWdlX3JlbGVhc2VfaWQ6IHN0cmluZ1xuICAgICAgICAgICAgICBmaWxlX3BhdGg6IHN0cmluZ1xuICAgICAgICAgICAgICBjcmVhdGVkX2F0OiBzdHJpbmdcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgfT4oXCJwYWNrYWdlX2ZpbGVzL2xpc3RcIiwge1xuICAgICAgICAgICAganNvbjoge1xuICAgICAgICAgICAgICBwYWNrYWdlX25hbWU6IGAke2F1dGhvcn0vJHtzbmlwcGV0TmFtZX1gLFxuICAgICAgICAgICAgICB1c2VfbGF0ZXN0X3ZlcnNpb246IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpzb24oKVxuXG4gICAgICAgIC8vIENyZWF0ZSBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBjb25zdCBkaXJQYXRoID0gYC4vJHthdXRob3J9LiR7c25pcHBldE5hbWV9YFxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyUGF0aCkpIHtcbiAgICAgICAgICBmcy5ta2RpclN5bmMoZGlyUGF0aClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvd25sb2FkIGVhY2ggZmlsZSB0aGF0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBkaXN0L1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGVJbmZvIG9mIHBhY2thZ2VGaWxlTGlzdC5wYWNrYWdlX2ZpbGVzKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBmaWxlSW5mby5maWxlX3BhdGguc3RhcnRzV2l0aChcIi9cIilcbiAgICAgICAgICAgID8gZmlsZUluZm8uZmlsZV9wYXRoLnNsaWNlKDEpXG4gICAgICAgICAgICA6IGZpbGVJbmZvLmZpbGVfcGF0aFxuXG4gICAgICAgICAgaWYgKGZpbGVQYXRoLnN0YXJ0c1dpdGgoXCJkaXN0L1wiKSkgY29udGludWVcblxuICAgICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQga3lcbiAgICAgICAgICAgIC5wb3N0PHtcbiAgICAgICAgICAgICAgcGFja2FnZV9maWxlOiB7XG4gICAgICAgICAgICAgICAgY29udGVudF90ZXh0OiBzdHJpbmdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfT4oXCJwYWNrYWdlX2ZpbGVzL2dldFwiLCB7XG4gICAgICAgICAgICAgIGpzb246IHtcbiAgICAgICAgICAgICAgICBwYWNrYWdlX25hbWU6IGAke2F1dGhvcn0vJHtzbmlwcGV0TmFtZX1gLFxuICAgICAgICAgICAgICAgIGZpbGVfcGF0aDogZmlsZUluZm8uZmlsZV9wYXRoLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qc29uKClcblxuICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKGRpclBhdGgsIGZpbGVQYXRoKVxuICAgICAgICAgIGNvbnN0IGRpck5hbWUgPSBwYXRoLmRpcm5hbWUoZnVsbFBhdGgpXG5cbiAgICAgICAgICAvLyBDcmVhdGUgbmVzdGVkIGRpcmVjdG9yaWVzIGlmIHRoZXkgZG9uJ3QgZXhpc3RcbiAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZGlyTmFtZSkpIHtcbiAgICAgICAgICAgIGZzLm1rZGlyU3luYyhkaXJOYW1lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZnVsbFBhdGgsIGZpbGVDb250ZW50LnBhY2thZ2VfZmlsZS5jb250ZW50X3RleHQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhgU3VjY2Vzc2Z1bGx5IGNsb25lZCB0byAuLyR7YXV0aG9yfS4ke3NuaXBwZXROYW1lfS9gKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNsb25lIHNuaXBwZXQ6XCIsIGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjbG9uZSBzbmlwcGV0OlwiLCBlcnJvcilcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH1cbiAgICB9KVxufVxuIiwgImltcG9ydCB0eXBlIHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIlxuaW1wb3J0IHsgY3JlYXRlQ2lyY3VpdFdlYldvcmtlciB9IGZyb20gXCJAdHNjaXJjdWl0L2V2YWwtd2Vid29ya2VyXCJcbmltcG9ydCB3ZWJXb3JrZXJCdW5kbGVVcmwgZnJvbSBcIkB0c2NpcmN1aXQvZXZhbC13ZWJ3b3JrZXIvYmxvYi11cmxcIlxuaW1wb3J0IHsgZ2V0VmlydHVhbEZpbGVTeXN0ZW1Gcm9tRGlyUGF0aCB9IGZyb20gXCJtYWtlLXZmc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiXG5cbmNvbnN0IEFMTE9XRURfRk9STUFUUyA9IFtcbiAgXCJqc29uXCIsXG4gIFwiY2lyY3VpdC1qc29uXCIsXG4gIFwic2NoZW1hdGljLXN2Z1wiLFxuICBcInBjYi1zdmdcIixcbiAgXCJnZXJiZXJzXCIsXG4gIFwicmVhZGFibGUtbmV0bGlzdFwiLFxuICBcImdsdGZcIixcbiAgXCJzcGVjY3RyYS1kc25cIixcbl0gYXMgY29uc3RcblxudHlwZSBGb3JtYXQgPSAodHlwZW9mIEFMTE9XRURfRk9STUFUUylbbnVtYmVyXVxuXG5jb25zdCBPVVRQVVRfRVhURU5TSU9OUyA9IHtcbiAganNvbjogXCIuY2lyY3VpdC5qc29uXCIsXG4gIFwiY2lyY3VpdC1qc29uXCI6IFwiLmNpcmN1aXQuanNvblwiLFxuICBcInNjaGVtYXRpYy1zdmdcIjogXCItc2NoZW1hdGljLnN2Z1wiLFxuICBcInBjYi1zdmdcIjogXCItcGNiLnN2Z1wiLFxuICBnZXJiZXJzOiBcIi1nZXJiZXJzLnppcFwiLFxuICBcInJlYWRhYmxlLW5ldGxpc3RcIjogXCItcmVhZGFibGUubmV0bGlzdFwiLFxuICBnbHRmOiBcIi5nbHRmXCIsXG4gIFwic3BlY2N0cmEtZHNuXCI6IFwiLmRzblwiLFxufVxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJFeHBvcnQgPSAocHJvZ3JhbTogQ29tbWFuZCkgPT4ge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJleHBvcnRcIilcbiAgICAuZGVzY3JpcHRpb24oXCJFeHBvcnQgdHNjaXJjdWl0IGNvZGUgdG8gdmFyaW91cyBmb3JtYXRzXCIpXG4gICAgLmFyZ3VtZW50KFwiPGZpbGU+XCIsIFwiUGF0aCB0byB0aGUgc25pcHBldCBmaWxlXCIpXG4gICAgLm9wdGlvbihcIi1mLCAtLWZvcm1hdCA8Zm9ybWF0PlwiLCBcIk91dHB1dCBmb3JtYXRcIilcbiAgICAub3B0aW9uKFwiLW8sIC0tb3V0cHV0IDxwYXRoPlwiLCBcIk91dHB1dCBmaWxlIHBhdGhcIilcbiAgICAuYWN0aW9uKGFzeW5jIChmaWxlLCBvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCB7IGZvcm1hdCA9IFwiY2lyY3VpdC1qc29uXCIgfSA9IG9wdGlvbnNcbiAgICAgIGxldCB7IG91dHB1dCB9ID0gb3B0aW9uc1xuICAgICAgaWYgKCFBTExPV0VEX0ZPUk1BVFMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgZm9ybWF0OiAke2Zvcm1hdH1cXG5TdXBwb3J0ZWQgZm9ybWF0czogJHtBTExPV0VEX0ZPUk1BVFMuam9pbihcIixcIil9YCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoIW91dHB1dCkge1xuICAgICAgICBvdXRwdXQgPSBwYXRoLmJhc2VuYW1lKGZpbGUpLnJlcGxhY2UoL1xcLlteLl0rJC8sIFwiXCIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdvcmtlciA9IGF3YWl0IGNyZWF0ZUNpcmN1aXRXZWJXb3JrZXIoe1xuICAgICAgICB3ZWJXb3JrZXJVcmw6IHdlYldvcmtlckJ1bmRsZVVybCxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHByb2plY3REaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcblxuICAgICAgY29uc3QgcmVsYXRpdmVDb21wb25lbnRQYXRoID0gcGF0aC5yZWxhdGl2ZShwcm9qZWN0RGlyLCBmaWxlKVxuXG4gICAgICBhd2FpdCB3b3JrZXIuZXhlY3V0ZVdpdGhGc01hcCh7XG4gICAgICAgIGVudHJ5cG9pbnQ6IFwiZW50cnlwb2ludC50c3hcIixcbiAgICAgICAgZnNNYXA6IHtcbiAgICAgICAgICAuLi4oKGF3YWl0IGdldFZpcnR1YWxGaWxlU3lzdGVtRnJvbURpclBhdGgoe1xuICAgICAgICAgICAgZGlyUGF0aDogcHJvamVjdERpcixcbiAgICAgICAgICAgIGNvbnRlbnRGb3JtYXQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgfSkpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pLFxuICAgICAgICAgIFwiZW50cnlwb2ludC50c3hcIjogYFxuaW1wb3J0IE15Q2lyY3VpdCBmcm9tIFwiLi8ke3JlbGF0aXZlQ29tcG9uZW50UGF0aH1cIlxuXG5jaXJjdWl0LmFkZCg8TXlDaXJjdWl0IC8+KVxuICAgICAgICBgLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgd29ya2VyLnJlbmRlclVudGlsU2V0dGxlZCgpXG5cbiAgICAgIGNvbnN0IGNpcmN1aXRKc29uID0gYXdhaXQgd29ya2VyLmdldENpcmN1aXRKc29uKClcblxuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgcHJvamVjdERpcixcbiAgICAgICAgYCR7b3V0cHV0fSR7T1VUUFVUX0VYVEVOU0lPTlNbZm9ybWF0IGFzIEZvcm1hdF19YCxcbiAgICAgIClcblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCBKU09OLnN0cmluZ2lmeShjaXJjdWl0SnNvbikpXG5cbiAgICAgIGNvbnNvbGUubG9nKGBFeHBvcnRlZCB0byAke291dHB1dFBhdGh9YClcblxuICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgfSlcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7OztBQUNBLFNBQVMsZUFBZTs7O0FDQXhCLFlBQVksUUFBUTtBQUNwQixZQUFZLFVBQVU7QUFFZixJQUFNLGVBQWUsQ0FBQ0EsYUFBcUI7QUFDaEQsRUFBQUEsU0FD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LGVBQWU7QUFFaEQsVUFBTSxhQUFhQSxNQUFLO0FBQUEsTUFDdEI7QUFBQSxNQUNBLEdBQUcsTUFBTSxHQUFHLGtCQUFrQixNQUFnQixDQUFDO0FBQUEsSUFDakQ7QUFFQSxJQUFBQyxJQUFHLGNBQWMsWUFBWSxLQUFLLFVBQVUsV0FBVyxDQUFDO0FBRXhELFlBQVEsSUFBSSxlQUFlLFVBQVUsRUFBRTtBQUV2QyxZQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hCLENBQUM7QUFDTDs7O0FqQjFFQSxJQUFNLFVBQVUsSUFBSSxRQUFRO0FBRTVCLFFBQ0csS0FBSyxNQUFNLEVBQ1gsWUFBWSx1Q0FBdUMsRUFHbkQsUUFBUSxPQUFPLElBQUksZ0JBQUksU0FBUyxPQUFPLEtBQUssZ0JBQUksT0FBTztBQUUxRCxhQUFhLE9BQU87QUFFcEIsWUFBWSxPQUFPO0FBQ25CLGNBQWMsT0FBTztBQUVyQixhQUFhLE9BQU87QUFDcEIsa0JBQWtCLE9BQU87QUFDekIsbUJBQW1CLE9BQU87QUFFMUIsZUFBZSxPQUFPO0FBQ3RCLG9CQUFvQixPQUFPO0FBRTNCLGVBQWUsT0FBTztBQUV0QixJQUFJLFFBQVEsS0FBSyxXQUFXLEdBQUc7QUFDN0IsYUFBVyxTQUFTLFFBQVEsSUFBSTtBQUNsQyxPQUFPO0FBQ0wsVUFBUSxNQUFNO0FBQ2hCOyIsCiAgIm5hbWVzIjogWyJwcm9ncmFtIiwgInBhdGgiLCAiZnMiLCAiZnMiLCAicGF0aCIsICJmcyIsICJwYXRoIiwgInJlc29sdmUiLCAicGF0aCIsICJmcyIsICJwcm9ncmFtIiwgImt5IiwgInByb2dyYW0iLCAia3kiLCAicHJvZ3JhbSIsICJwcm9ncmFtIiwgInByb2dyYW0iLCAicHJvZ3JhbSIsICJmcyIsICJwYXRoIiwgInByb2dyYW0iLCAia3kiLCAicGF0aCIsICJmcyIsICJwcm9ncmFtIl0KfQo=
package/package.json CHANGED
@@ -2,13 +2,13 @@
2
2
  "name": "@tscircuit/cli",
3
3
  "main": "dist/main.js",
4
4
  "type": "module",
5
- "version": "0.1.11",
5
+ "version": "0.1.12",
6
6
  "bin": {
7
7
  "tsci": "./dist/main.js"
8
8
  },
9
9
  "scripts": {
10
10
  "start": "bun run dev",
11
- "dev": "bun --hot ./cli/main.ts dev ./example-dir/snippet.tsx",
11
+ "dev": "bun --hot ./cli/main.ts dev ./example-dir/snippet1-basic.tsx",
12
12
  "build": "tsup-node cli/main.ts --format esm --sourcemap inline",
13
13
  "format": "biome format --write .",
14
14
  "format:check": "biome format .",