@decohere/create 0.0.1-dev.24 → 0.0.1-dev.26

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 (33) hide show
  1. package/commonjs/src/cli.js +54 -2
  2. package/commonjs/src/domain/prompt.js +12 -3
  3. package/commonjs/src/models/docker-image.model.js +11 -2
  4. package/commonjs/src/models/gitignore.model.js +1 -2
  5. package/commonjs/src/models/project.model.js +8 -3
  6. package/commonjs/src/runner.js +43 -10
  7. package/commonjs/src/webapi/create-api.js +16 -13
  8. package/commonjs/src/webapi/features/auth.feature.js +5 -4
  9. package/commonjs/src/webapi/features/auth0-cli.js +135 -19
  10. package/commonjs/src/webapi/features/biome-format.js +47 -0
  11. package/commonjs/src/webapi/features/finalize.feature.js +6 -1
  12. package/commonjs/src/webapi/features/postman.feature.js +5 -5
  13. package/commonjs/src/webapi/models/controller-source-file.model.js +2 -2
  14. package/es6/src/cli.js +13 -2
  15. package/es6/src/domain/prompt.js +9 -3
  16. package/es6/src/models/docker-image.model.js +11 -2
  17. package/es6/src/models/gitignore.model.js +1 -2
  18. package/es6/src/models/project.model.js +8 -3
  19. package/es6/src/runner.js +46 -13
  20. package/es6/src/webapi/create-api.js +17 -14
  21. package/es6/src/webapi/features/auth.feature.js +5 -4
  22. package/es6/src/webapi/features/auth0-cli.js +128 -20
  23. package/es6/src/webapi/features/biome-format.js +40 -0
  24. package/es6/src/webapi/features/finalize.feature.js +7 -2
  25. package/es6/src/webapi/features/postman.feature.js +5 -5
  26. package/es6/src/webapi/models/controller-source-file.model.js +2 -2
  27. package/package.json +2 -2
  28. package/types/src/domain/prompt.d.ts +2 -0
  29. package/types/src/models/project.model.d.ts +3 -1
  30. package/types/src/runner.d.ts +2 -2
  31. package/types/src/webapi/create-api.d.ts +2 -0
  32. package/types/src/webapi/features/auth0-cli.d.ts +26 -1
  33. package/types/src/webapi/features/biome-format.d.ts +5 -0
@@ -6,6 +6,47 @@ Object.defineProperty(exports, "__esModule", {
6
6
  const _commander = require("commander");
7
7
  const _runner = require("./runner.js");
8
8
  const _createapi = require("./webapi/create-api.js");
9
+ function _getRequireWildcardCache(nodeInterop) {
10
+ if (typeof WeakMap !== "function") return null;
11
+ var cacheBabelInterop = new WeakMap();
12
+ var cacheNodeInterop = new WeakMap();
13
+ return (_getRequireWildcardCache = function(nodeInterop) {
14
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
15
+ })(nodeInterop);
16
+ }
17
+ function _interop_require_wildcard(obj, nodeInterop) {
18
+ if (!nodeInterop && obj && obj.__esModule) {
19
+ return obj;
20
+ }
21
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
22
+ return {
23
+ default: obj
24
+ };
25
+ }
26
+ var cache = _getRequireWildcardCache(nodeInterop);
27
+ if (cache && cache.has(obj)) {
28
+ return cache.get(obj);
29
+ }
30
+ var newObj = {
31
+ __proto__: null
32
+ };
33
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
34
+ for(var key in obj){
35
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
36
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
37
+ if (desc && (desc.get || desc.set)) {
38
+ Object.defineProperty(newObj, key, desc);
39
+ } else {
40
+ newObj[key] = obj[key];
41
+ }
42
+ }
43
+ }
44
+ newObj.default = obj;
45
+ if (cache) {
46
+ cache.set(obj, newObj);
47
+ }
48
+ return newObj;
49
+ }
9
50
  const program = new _commander.Command();
10
51
  program.name("decohere").description("Scaffold a new Decohere project").option("-d <directory>", "Target directory (default: current directory)", ".");
11
52
  program.command("webapi").option("--database <provider>", "Database provider: none | postgres/typeorm").option("--auth <provider>", "Auth provider: none | auth0").option("--postman <provider>", "Postman provider: none | local | api").option("-y, --yes", "Install dependencies without prompting").option("--install <mode>", "Dependency install mode: ask | yes | no", "ask").action(async (_name, cmd)=>{
@@ -22,7 +63,18 @@ program.command("webapi").option("--database <provider>", "Database provider: no
22
63
  (0, _runner.runInBuilder)(normalized);
23
64
  return;
24
65
  }
25
- await (0, _createapi.scaffoldApi)(normalized);
66
+ const { closePrompt } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("./domain/prompt.js")));
67
+ try {
68
+ await (0, _createapi.scaffoldApi)(normalized);
69
+ } catch (err) {
70
+ console.error(err);
71
+ process.exitCode = 1;
72
+ } finally{
73
+ // Always release readline's stdin hold (even on errors / early abort).
74
+ closePrompt();
75
+ }
76
+ // Builder runs under docker -it; exit explicitly so the container stops.
77
+ process.exit(process.exitCode ?? 0);
26
78
  });
27
79
  // .option("-y, --yes", "Skip confirmation prompts")
28
80
  // .option("-t, --template <template>", "Project template: api (default) or cli")
@@ -45,4 +97,4 @@ program.command("webapi").option("--database <provider>", "Database provider: no
45
97
  // );
46
98
  program.parse();
47
99
 
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBydW5JbkJ1aWxkZXIgfSBmcm9tIFwiLi9ydW5uZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgeyBzY2FmZm9sZEFwaSB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG5cdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0LmRlc2NyaXB0aW9uKFwiU2NhZmZvbGQgYSBuZXcgRGVjb2hlcmUgcHJvamVjdFwiKVxuXHQub3B0aW9uKFwiLWQgPGRpcmVjdG9yeT5cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpO1xuXG5wcm9ncmFtXG5cdC5jb21tYW5kKFwid2ViYXBpXCIpXG5cdC5vcHRpb24oXCItLWRhdGFiYXNlIDxwcm92aWRlcj5cIiwgXCJEYXRhYmFzZSBwcm92aWRlcjogbm9uZSB8IHBvc3RncmVzL3R5cGVvcm1cIilcblx0Lm9wdGlvbihcIi0tYXV0aCA8cHJvdmlkZXI+XCIsIFwiQXV0aCBwcm92aWRlcjogbm9uZSB8IGF1dGgwXCIpXG5cdC5vcHRpb24oXCItLXBvc3RtYW4gPHByb3ZpZGVyPlwiLCBcIlBvc3RtYW4gcHJvdmlkZXI6IG5vbmUgfCBsb2NhbCB8IGFwaVwiKVxuXHQub3B0aW9uKFwiLXksIC0teWVzXCIsIFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgd2l0aG91dCBwcm9tcHRpbmdcIilcblx0Lm9wdGlvbihcIi0taW5zdGFsbCA8bW9kZT5cIiwgXCJEZXBlbmRlbmN5IGluc3RhbGwgbW9kZTogYXNrIHwgeWVzIHwgbm9cIiwgXCJhc2tcIilcblx0LmFjdGlvbihhc3luYyAoX25hbWUsIGNtZDogQ29tbWFuZCkgPT4ge1xuXHRcdGNvbnN0IG9wdHMgPSBjbWQub3B0c1dpdGhHbG9iYWxzKCk7XG5cdFx0Y29uc3QgaW5zdGFsbE1vZGUgPSBTdHJpbmcob3B0cy5pbnN0YWxsID8/IFwiYXNrXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZDogQXBpT3B0aW9ucyA9IHtcblx0XHRcdGQ6IG9wdHMuZCxcblx0XHRcdGRhdGFiYXNlUHJvdmlkZXI6IG9wdHMuZGF0YWJhc2UsXG5cdFx0XHRhdXRoUHJvdmlkZXI6IG9wdHMuYXV0aCxcblx0XHRcdHBvc3RtYW5Qcm92aWRlcjogb3B0cy5wb3N0bWFuLFxuXHRcdFx0aW5zdGFsbERlcGVuZGVuY2llczpcblx0XHRcdFx0b3B0cy55ZXMgPT09IHRydWVcblx0XHRcdFx0XHQ/IFwieWVzXCJcblx0XHRcdFx0XHQ6IGluc3RhbGxNb2RlID09PSBcInllc1wiIHx8IGluc3RhbGxNb2RlID09PSBcIm5vXCJcblx0XHRcdFx0XHRcdD8gaW5zdGFsbE1vZGVcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdH07XG5cblx0XHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiAhPT0gXCIxXCIpIHtcblx0XHRcdHJ1bkluQnVpbGRlcihub3JtYWxpemVkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgc2NhZmZvbGRBcGkobm9ybWFsaXplZCk7XG5cdH0pO1xuXG4vLyAub3B0aW9uKFwiLXksIC0teWVzXCIsIFwiU2tpcCBjb25maXJtYXRpb24gcHJvbXB0c1wiKVxuLy8gLm9wdGlvbihcIi10LCAtLXRlbXBsYXRlIDx0ZW1wbGF0ZT5cIiwgXCJQcm9qZWN0IHRlbXBsYXRlOiBhcGkgKGRlZmF1bHQpIG9yIGNsaVwiKVxuLy8gLm9wdGlvbihcIi1kLCAtLWRhdGFiYXNlIDxwcm92aWRlcj5cIiwgXCJEYXRhYmFzZSBwcm92aWRlciB0byBpbmNsdWRlIChhcGkgb25seSk6IHR5cGVvcm1cIilcbi8vIC5vcHRpb24oXCItaSwgLS1pZHAgPHByb3ZpZGVyPlwiLCBcIklkZW50aXR5IHByb3ZpZGVyIHRvIGNvbmZpZ3VyZSAoYXBpIG9ubHkpOiBhdXRoMFwiKVxuLy8gLm9wdGlvbihcIi1wLCAtLXBvc3RtYW5cIiwgXCJDb25maWd1cmUgYSBQb3N0bWFuIHdvcmtzcGFjZSwgY29sbGVjdGlvbiwgYW5kIGVudmlyb25tZW50XCIpXG4vLyAuYWN0aW9uKFxuLy8gXHRhc3luYyAoXG4vLyBcdFx0ZGlyZWN0b3J5OiBzdHJpbmcsXG4vLyBcdFx0b3B0czoge1xuLy8gXHRcdFx0eWVzPzogYm9vbGVhbjtcbi8vIFx0XHRcdHRlbXBsYXRlPzogXCJhcGlcIiB8IFwiY2xpXCI7XG4vLyBcdFx0XHRkYXRhYmFzZT86IFwidHlwZW9ybVwiO1xuLy8gXHRcdFx0aWRwPzogXCJhdXRoMFwiO1xuLy8gXHRcdFx0cG9zdG1hbj86IGJvb2xlYW47XG4vLyBcdFx0fSxcbi8vIFx0KSA9PiB7XG4vLyBcdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcbi8vIFx0fSxcbi8vICk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdLCJuYW1lcyI6WyJwcm9ncmFtIiwiQ29tbWFuZCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbiIsImNvbW1hbmQiLCJhY3Rpb24iLCJfbmFtZSIsImNtZCIsIm9wdHMiLCJvcHRzV2l0aEdsb2JhbHMiLCJpbnN0YWxsTW9kZSIsIlN0cmluZyIsImluc3RhbGwiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZWQiLCJkIiwiZGF0YWJhc2VQcm92aWRlciIsImRhdGFiYXNlIiwiYXV0aFByb3ZpZGVyIiwiYXV0aCIsInBvc3RtYW5Qcm92aWRlciIsInBvc3RtYW4iLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwieWVzIiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImVudiIsIkRFQ09IRVJFX0JVSUxERVIiLCJydW5JbkJ1aWxkZXIiLCJzY2FmZm9sZEFwaSIsInBhcnNlIl0sIm1hcHBpbmdzIjoiOzs7OzsyQkFDd0I7d0JBQ0s7MkJBRUQ7QUFFNUIsTUFBTUEsVUFBVSxJQUFJQyxrQkFBTztBQUUzQkQsUUFDRUUsSUFBSSxDQUFDLFlBQ0xDLFdBQVcsQ0FBQyxtQ0FDWkMsTUFBTSxDQUFDLGtCQUFrQixpREFBaUQ7QUFFNUVKLFFBQ0VLLE9BQU8sQ0FBQyxVQUNSRCxNQUFNLENBQUMseUJBQXlCLDhDQUNoQ0EsTUFBTSxDQUFDLHFCQUFxQiwrQkFDNUJBLE1BQU0sQ0FBQyx3QkFBd0Isd0NBQy9CQSxNQUFNLENBQUMsYUFBYSwwQ0FDcEJBLE1BQU0sQ0FBQyxvQkFBb0IsMkNBQTJDLE9BQ3RFRSxNQUFNLENBQUMsT0FBT0MsT0FBT0M7SUFDckIsTUFBTUMsT0FBT0QsSUFBSUUsZUFBZTtJQUNoQyxNQUFNQyxjQUFjQyxPQUFPSCxLQUFLSSxPQUFPLElBQUksT0FBT0MsV0FBVztJQUM3RCxNQUFNQyxhQUF5QjtRQUM5QkMsR0FBR1AsS0FBS08sQ0FBQztRQUNUQyxrQkFBa0JSLEtBQUtTLFFBQVE7UUFDL0JDLGNBQWNWLEtBQUtXLElBQUk7UUFDdkJDLGlCQUFpQlosS0FBS2EsT0FBTztRQUM3QkMscUJBQ0NkLEtBQUtlLEdBQUcsS0FBSyxPQUNWLFFBQ0FiLGdCQUFnQixTQUFTQSxnQkFBZ0IsT0FDeENBLGNBQ0FjO0lBQ047SUFFQSxJQUFJQyxRQUFRQyxHQUFHLENBQUNDLGdCQUFnQixLQUFLLEtBQUs7UUFDekNDLElBQUFBLG9CQUFZLEVBQUNkO1FBQ2I7SUFDRDtJQUNBLE1BQU1lLElBQUFBLHNCQUFXLEVBQUNmO0FBQ25CO0FBRUQsb0RBQW9EO0FBQ3BELGlGQUFpRjtBQUNqRiwyRkFBMkY7QUFDM0Ysc0ZBQXNGO0FBQ3RGLHlGQUF5RjtBQUN6RixXQUFXO0FBQ1gsV0FBVztBQUNYLHVCQUF1QjtBQUN2QixZQUFZO0FBQ1osb0JBQW9CO0FBQ3BCLCtCQUErQjtBQUMvQiwyQkFBMkI7QUFDM0Isb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixPQUFPO0FBQ1AsVUFBVTtBQUNWLDhDQUE4QztBQUM5QyxNQUFNO0FBQ04sS0FBSztBQUVMZixRQUFRK0IsS0FBSyJ9
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBydW5JbkJ1aWxkZXIgfSBmcm9tIFwiLi9ydW5uZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5pbXBvcnQgeyBzY2FmZm9sZEFwaSB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG5cdC5uYW1lKFwiZGVjb2hlcmVcIilcblx0LmRlc2NyaXB0aW9uKFwiU2NhZmZvbGQgYSBuZXcgRGVjb2hlcmUgcHJvamVjdFwiKVxuXHQub3B0aW9uKFwiLWQgPGRpcmVjdG9yeT5cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiBjdXJyZW50IGRpcmVjdG9yeSlcIiwgXCIuXCIpO1xuXG5wcm9ncmFtXG5cdC5jb21tYW5kKFwid2ViYXBpXCIpXG5cdC5vcHRpb24oXCItLWRhdGFiYXNlIDxwcm92aWRlcj5cIiwgXCJEYXRhYmFzZSBwcm92aWRlcjogbm9uZSB8IHBvc3RncmVzL3R5cGVvcm1cIilcblx0Lm9wdGlvbihcIi0tYXV0aCA8cHJvdmlkZXI+XCIsIFwiQXV0aCBwcm92aWRlcjogbm9uZSB8IGF1dGgwXCIpXG5cdC5vcHRpb24oXCItLXBvc3RtYW4gPHByb3ZpZGVyPlwiLCBcIlBvc3RtYW4gcHJvdmlkZXI6IG5vbmUgfCBsb2NhbCB8IGFwaVwiKVxuXHQub3B0aW9uKFwiLXksIC0teWVzXCIsIFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgd2l0aG91dCBwcm9tcHRpbmdcIilcblx0Lm9wdGlvbihcIi0taW5zdGFsbCA8bW9kZT5cIiwgXCJEZXBlbmRlbmN5IGluc3RhbGwgbW9kZTogYXNrIHwgeWVzIHwgbm9cIiwgXCJhc2tcIilcblx0LmFjdGlvbihhc3luYyAoX25hbWUsIGNtZDogQ29tbWFuZCkgPT4ge1xuXHRcdGNvbnN0IG9wdHMgPSBjbWQub3B0c1dpdGhHbG9iYWxzKCk7XG5cdFx0Y29uc3QgaW5zdGFsbE1vZGUgPSBTdHJpbmcob3B0cy5pbnN0YWxsID8/IFwiYXNrXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZDogQXBpT3B0aW9ucyA9IHtcblx0XHRcdGQ6IG9wdHMuZCxcblx0XHRcdGRhdGFiYXNlUHJvdmlkZXI6IG9wdHMuZGF0YWJhc2UsXG5cdFx0XHRhdXRoUHJvdmlkZXI6IG9wdHMuYXV0aCxcblx0XHRcdHBvc3RtYW5Qcm92aWRlcjogb3B0cy5wb3N0bWFuLFxuXHRcdFx0aW5zdGFsbERlcGVuZGVuY2llczpcblx0XHRcdFx0b3B0cy55ZXMgPT09IHRydWVcblx0XHRcdFx0XHQ/IFwieWVzXCJcblx0XHRcdFx0XHQ6IGluc3RhbGxNb2RlID09PSBcInllc1wiIHx8IGluc3RhbGxNb2RlID09PSBcIm5vXCJcblx0XHRcdFx0XHRcdD8gaW5zdGFsbE1vZGVcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdH07XG5cblx0XHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiAhPT0gXCIxXCIpIHtcblx0XHRcdHJ1bkluQnVpbGRlcihub3JtYWxpemVkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB7IGNsb3NlUHJvbXB0IH0gPSBhd2FpdCBpbXBvcnQoXCIuL2RvbWFpbi9wcm9tcHQuanNcIik7XG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHNjYWZmb2xkQXBpKG5vcm1hbGl6ZWQpO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0Y29uc29sZS5lcnJvcihlcnIpO1xuXHRcdFx0cHJvY2Vzcy5leGl0Q29kZSA9IDE7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdC8vIEFsd2F5cyByZWxlYXNlIHJlYWRsaW5lJ3Mgc3RkaW4gaG9sZCAoZXZlbiBvbiBlcnJvcnMgLyBlYXJseSBhYm9ydCkuXG5cdFx0XHRjbG9zZVByb21wdCgpO1xuXHRcdH1cblx0XHQvLyBCdWlsZGVyIHJ1bnMgdW5kZXIgZG9ja2VyIC1pdDsgZXhpdCBleHBsaWNpdGx5IHNvIHRoZSBjb250YWluZXIgc3RvcHMuXG5cdFx0cHJvY2Vzcy5leGl0KHByb2Nlc3MuZXhpdENvZGUgPz8gMCk7XG5cdH0pO1xuXG4vLyAub3B0aW9uKFwiLXksIC0teWVzXCIsIFwiU2tpcCBjb25maXJtYXRpb24gcHJvbXB0c1wiKVxuLy8gLm9wdGlvbihcIi10LCAtLXRlbXBsYXRlIDx0ZW1wbGF0ZT5cIiwgXCJQcm9qZWN0IHRlbXBsYXRlOiBhcGkgKGRlZmF1bHQpIG9yIGNsaVwiKVxuLy8gLm9wdGlvbihcIi1kLCAtLWRhdGFiYXNlIDxwcm92aWRlcj5cIiwgXCJEYXRhYmFzZSBwcm92aWRlciB0byBpbmNsdWRlIChhcGkgb25seSk6IHR5cGVvcm1cIilcbi8vIC5vcHRpb24oXCItaSwgLS1pZHAgPHByb3ZpZGVyPlwiLCBcIklkZW50aXR5IHByb3ZpZGVyIHRvIGNvbmZpZ3VyZSAoYXBpIG9ubHkpOiBhdXRoMFwiKVxuLy8gLm9wdGlvbihcIi1wLCAtLXBvc3RtYW5cIiwgXCJDb25maWd1cmUgYSBQb3N0bWFuIHdvcmtzcGFjZSwgY29sbGVjdGlvbiwgYW5kIGVudmlyb25tZW50XCIpXG4vLyAuYWN0aW9uKFxuLy8gXHRhc3luYyAoXG4vLyBcdFx0ZGlyZWN0b3J5OiBzdHJpbmcsXG4vLyBcdFx0b3B0czoge1xuLy8gXHRcdFx0eWVzPzogYm9vbGVhbjtcbi8vIFx0XHRcdHRlbXBsYXRlPzogXCJhcGlcIiB8IFwiY2xpXCI7XG4vLyBcdFx0XHRkYXRhYmFzZT86IFwidHlwZW9ybVwiO1xuLy8gXHRcdFx0aWRwPzogXCJhdXRoMFwiO1xuLy8gXHRcdFx0cG9zdG1hbj86IGJvb2xlYW47XG4vLyBcdFx0fSxcbi8vIFx0KSA9PiB7XG4vLyBcdFx0YXdhaXQgc2NhZmZvbGQocmVzb2x2ZShkaXJlY3RvcnkpLCBvcHRzKTtcbi8vIFx0fSxcbi8vICk7XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdLCJuYW1lcyI6WyJwcm9ncmFtIiwiQ29tbWFuZCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsIm9wdGlvbiIsImNvbW1hbmQiLCJhY3Rpb24iLCJfbmFtZSIsImNtZCIsIm9wdHMiLCJvcHRzV2l0aEdsb2JhbHMiLCJpbnN0YWxsTW9kZSIsIlN0cmluZyIsImluc3RhbGwiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZWQiLCJkIiwiZGF0YWJhc2VQcm92aWRlciIsImRhdGFiYXNlIiwiYXV0aFByb3ZpZGVyIiwiYXV0aCIsInBvc3RtYW5Qcm92aWRlciIsInBvc3RtYW4iLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwieWVzIiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImVudiIsIkRFQ09IRVJFX0JVSUxERVIiLCJydW5JbkJ1aWxkZXIiLCJjbG9zZVByb21wdCIsInNjYWZmb2xkQXBpIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiZXhpdENvZGUiLCJleGl0IiwicGFyc2UiXSwibWFwcGluZ3MiOiI7Ozs7OzJCQUN3Qjt3QkFDSzsyQkFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLE1BQU1BLFVBQVUsSUFBSUMsa0JBQU87QUFFM0JELFFBQ0VFLElBQUksQ0FBQyxZQUNMQyxXQUFXLENBQUMsbUNBQ1pDLE1BQU0sQ0FBQyxrQkFBa0IsaURBQWlEO0FBRTVFSixRQUNFSyxPQUFPLENBQUMsVUFDUkQsTUFBTSxDQUFDLHlCQUF5Qiw4Q0FDaENBLE1BQU0sQ0FBQyxxQkFBcUIsK0JBQzVCQSxNQUFNLENBQUMsd0JBQXdCLHdDQUMvQkEsTUFBTSxDQUFDLGFBQWEsMENBQ3BCQSxNQUFNLENBQUMsb0JBQW9CLDJDQUEyQyxPQUN0RUUsTUFBTSxDQUFDLE9BQU9DLE9BQU9DO0lBQ3JCLE1BQU1DLE9BQU9ELElBQUlFLGVBQWU7SUFDaEMsTUFBTUMsY0FBY0MsT0FBT0gsS0FBS0ksT0FBTyxJQUFJLE9BQU9DLFdBQVc7SUFDN0QsTUFBTUMsYUFBeUI7UUFDOUJDLEdBQUdQLEtBQUtPLENBQUM7UUFDVEMsa0JBQWtCUixLQUFLUyxRQUFRO1FBQy9CQyxjQUFjVixLQUFLVyxJQUFJO1FBQ3ZCQyxpQkFBaUJaLEtBQUthLE9BQU87UUFDN0JDLHFCQUNDZCxLQUFLZSxHQUFHLEtBQUssT0FDVixRQUNBYixnQkFBZ0IsU0FBU0EsZ0JBQWdCLE9BQ3hDQSxjQUNBYztJQUNOO0lBRUEsSUFBSUMsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxLQUFLO1FBQ3pDQyxJQUFBQSxvQkFBWSxFQUFDZDtRQUNiO0lBQ0Q7SUFFQSxNQUFNLEVBQUVlLFdBQVcsRUFBRSxHQUFHLE1BQU0sbUVBQUEsUUFBTztJQUNyQyxJQUFJO1FBQ0gsTUFBTUMsSUFBQUEsc0JBQVcsRUFBQ2hCO0lBQ25CLEVBQUUsT0FBT2lCLEtBQUs7UUFDYkMsUUFBUUMsS0FBSyxDQUFDRjtRQUNkTixRQUFRUyxRQUFRLEdBQUc7SUFDcEIsU0FBVTtRQUNULHVFQUF1RTtRQUN2RUw7SUFDRDtJQUNBLHlFQUF5RTtJQUN6RUosUUFBUVUsSUFBSSxDQUFDVixRQUFRUyxRQUFRLElBQUk7QUFDbEM7QUFFRCxvREFBb0Q7QUFDcEQsaUZBQWlGO0FBQ2pGLDJGQUEyRjtBQUMzRixzRkFBc0Y7QUFDdEYseUZBQXlGO0FBQ3pGLFdBQVc7QUFDWCxXQUFXO0FBQ1gsdUJBQXVCO0FBQ3ZCLFlBQVk7QUFDWixvQkFBb0I7QUFDcEIsK0JBQStCO0FBQy9CLDJCQUEyQjtBQUMzQixvQkFBb0I7QUFDcEIsd0JBQXdCO0FBQ3hCLE9BQU87QUFDUCxVQUFVO0FBQ1YsOENBQThDO0FBQzlDLE1BQU07QUFDTixLQUFLO0FBRUxuQyxRQUFRcUMsS0FBSyJ9
@@ -12,6 +12,9 @@ _export(exports, {
12
12
  get ask () {
13
13
  return ask;
14
14
  },
15
+ get closePrompt () {
16
+ return closePrompt;
17
+ },
15
18
  get pick () {
16
19
  return pick;
17
20
  }
@@ -21,17 +24,23 @@ const _nodereadline = require("node:readline");
21
24
  // in Node ≥ 22: after the first line is read, stdin emits 'end', readline closes,
22
25
  // and all subsequent question() calls resolve to "".
23
26
  // Fix: use the async-iterator API, which buffers all lines before the close event fires.
27
+ let _rl = null;
24
28
  let _lines = null;
25
29
  function getLines() {
26
30
  if (_lines == null) {
27
- const rl = (0, _nodereadline.createInterface)({
31
+ _rl = (0, _nodereadline.createInterface)({
28
32
  input: process.stdin,
29
33
  terminal: false
30
34
  });
31
- _lines = rl[Symbol.asyncIterator]();
35
+ _lines = _rl[Symbol.asyncIterator]();
32
36
  }
33
37
  return _lines;
34
38
  }
39
+ function closePrompt() {
40
+ _rl?.close();
41
+ _rl = null;
42
+ _lines = null;
43
+ }
35
44
  async function readLine(prompt) {
36
45
  process.stdout.write(prompt);
37
46
  const { value, done } = await getLines().next();
@@ -52,4 +61,4 @@ async function pick(label, items, display) {
52
61
  return items[idx - 1];
53
62
  }
54
63
 
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvZG9tYWluL3Byb21wdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVJbnRlcmZhY2UgfSBmcm9tIFwibm9kZTpyZWFkbGluZVwiO1xuXG4vLyByZWFkbGluZS9wcm9taXNlcyBybC5xdWVzdGlvbigpIGhhcyBhIHJhY2UgY29uZGl0aW9uIHdpdGggcGlwZWQgKG5vbi1UVFkpIHN0ZGluXG4vLyBpbiBOb2RlIOKJpSAyMjogYWZ0ZXIgdGhlIGZpcnN0IGxpbmUgaXMgcmVhZCwgc3RkaW4gZW1pdHMgJ2VuZCcsIHJlYWRsaW5lIGNsb3Nlcyxcbi8vIGFuZCBhbGwgc3Vic2VxdWVudCBxdWVzdGlvbigpIGNhbGxzIHJlc29sdmUgdG8gXCJcIi5cbi8vIEZpeDogdXNlIHRoZSBhc3luYy1pdGVyYXRvciBBUEksIHdoaWNoIGJ1ZmZlcnMgYWxsIGxpbmVzIGJlZm9yZSB0aGUgY2xvc2UgZXZlbnQgZmlyZXMuXG5cbmxldCBfbGluZXM6IEFzeW5jSXRlcmF0b3I8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRMaW5lcygpOiBBc3luY0l0ZXJhdG9yPHN0cmluZz4ge1xuXHRpZiAoX2xpbmVzID09IG51bGwpIHtcblx0XHRjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCB0ZXJtaW5hbDogZmFsc2UgfSk7XG5cdFx0X2xpbmVzID0gcmxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cdH1cblx0cmV0dXJuIF9saW5lcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZExpbmUocHJvbXB0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRwcm9jZXNzLnN0ZG91dC53cml0ZShwcm9tcHQpO1xuXHRjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBnZXRMaW5lcygpLm5leHQoKTtcblx0cmV0dXJuIGRvbmUgPyBcIlwiIDogdmFsdWUudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNrKHF1ZXN0aW9uOiBzdHJpbmcsIGZhbGxiYWNrID0gXCJcIik6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IHJlYWRMaW5lKHF1ZXN0aW9uKTtcblx0cmV0dXJuIGFuc3dlciB8fCBmYWxsYmFjaztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBpY2s8VD4oXG5cdGxhYmVsOiBzdHJpbmcsXG5cdGl0ZW1zOiBUW10sXG5cdGRpc3BsYXk6IChpdGVtOiBUKSA9PiBzdHJpbmcsXG4pOiBQcm9taXNlPFQgfCBudWxsPiB7XG5cdGNvbnNvbGUubG9nKGxhYmVsLnRyaW1FbmQoKSk7XG5cdGZvciAoY29uc3QgW2ksIGl0ZW1dIG9mIGl0ZW1zLmVudHJpZXMoKSkge1xuXHRcdGNvbnNvbGUubG9nKGAgICAgJHtpICsgMX0uICR7ZGlzcGxheShpdGVtKX1gKTtcblx0fVxuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCByZWFkTGluZShcIiAgPiBcIik7XG5cdGNvbnN0IGlkeCA9IE51bWJlci5wYXJzZUludChhbnN3ZXIsIDEwKTtcblx0aWYgKE51bWJlci5pc05hTihpZHgpIHx8IGlkeCA8IDEgfHwgaWR4ID4gaXRlbXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIGl0ZW1zW2lkeCAtIDFdO1xufVxuIl0sIm5hbWVzIjpbImFzayIsInBpY2siLCJfbGluZXMiLCJnZXRMaW5lcyIsInJsIiwiY3JlYXRlSW50ZXJmYWNlIiwiaW5wdXQiLCJwcm9jZXNzIiwic3RkaW4iLCJ0ZXJtaW5hbCIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJyZWFkTGluZSIsInByb21wdCIsInN0ZG91dCIsIndyaXRlIiwidmFsdWUiLCJkb25lIiwibmV4dCIsInRyaW0iLCJxdWVzdGlvbiIsImZhbGxiYWNrIiwiYW5zd2VyIiwibGFiZWwiLCJpdGVtcyIsImRpc3BsYXkiLCJjb25zb2xlIiwibG9nIiwidHJpbUVuZCIsImkiLCJpdGVtIiwiZW50cmllcyIsImlkeCIsIk51bWJlciIsInBhcnNlSW50IiwiaXNOYU4iLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBdUJzQkE7ZUFBQUE7O1FBS0FDO2VBQUFBOzs7OEJBNUJVO0FBRWhDLGtGQUFrRjtBQUNsRixrRkFBa0Y7QUFDbEYscURBQXFEO0FBQ3JELHlGQUF5RjtBQUV6RixJQUFJQyxTQUF1QztBQUUzQyxTQUFTQztJQUNSLElBQUlELFVBQVUsTUFBTTtRQUNuQixNQUFNRSxLQUFLQyxJQUFBQSw2QkFBZSxFQUFDO1lBQUVDLE9BQU9DLFFBQVFDLEtBQUs7WUFBRUMsVUFBVTtRQUFNO1FBQ25FUCxTQUFTRSxFQUFFLENBQUNNLE9BQU9DLGFBQWEsQ0FBQztJQUNsQztJQUNBLE9BQU9UO0FBQ1I7QUFFQSxlQUFlVSxTQUFTQyxNQUFjO0lBQ3JDTixRQUFRTyxNQUFNLENBQUNDLEtBQUssQ0FBQ0Y7SUFDckIsTUFBTSxFQUFFRyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHLE1BQU1kLFdBQVdlLElBQUk7SUFDN0MsT0FBT0QsT0FBTyxLQUFLRCxNQUFNRyxJQUFJO0FBQzlCO0FBRU8sZUFBZW5CLElBQUlvQixRQUFnQixFQUFFQyxXQUFXLEVBQUU7SUFDeEQsTUFBTUMsU0FBUyxNQUFNVixTQUFTUTtJQUM5QixPQUFPRSxVQUFVRDtBQUNsQjtBQUVPLGVBQWVwQixLQUNyQnNCLEtBQWEsRUFDYkMsS0FBVSxFQUNWQyxPQUE0QjtJQUU1QkMsUUFBUUMsR0FBRyxDQUFDSixNQUFNSyxPQUFPO0lBQ3pCLEtBQUssTUFBTSxDQUFDQyxHQUFHQyxLQUFLLElBQUlOLE1BQU1PLE9BQU8sR0FBSTtRQUN4Q0wsUUFBUUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFRSxJQUFJLEVBQUUsRUFBRSxFQUFFSixRQUFRSyxPQUFPO0lBQzdDO0lBQ0EsTUFBTVIsU0FBUyxNQUFNVixTQUFTO0lBQzlCLE1BQU1vQixNQUFNQyxPQUFPQyxRQUFRLENBQUNaLFFBQVE7SUFDcEMsSUFBSVcsT0FBT0UsS0FBSyxDQUFDSCxRQUFRQSxNQUFNLEtBQUtBLE1BQU1SLE1BQU1ZLE1BQU0sRUFBRSxPQUFPO0lBQy9ELE9BQU9aLEtBQUssQ0FBQ1EsTUFBTSxFQUFFO0FBQ3RCIn0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvZG9tYWluL3Byb21wdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVJbnRlcmZhY2UsIHR5cGUgSW50ZXJmYWNlIH0gZnJvbSBcIm5vZGU6cmVhZGxpbmVcIjtcblxuLy8gcmVhZGxpbmUvcHJvbWlzZXMgcmwucXVlc3Rpb24oKSBoYXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHBpcGVkIChub24tVFRZKSBzdGRpblxuLy8gaW4gTm9kZSDiiaUgMjI6IGFmdGVyIHRoZSBmaXJzdCBsaW5lIGlzIHJlYWQsIHN0ZGluIGVtaXRzICdlbmQnLCByZWFkbGluZSBjbG9zZXMsXG4vLyBhbmQgYWxsIHN1YnNlcXVlbnQgcXVlc3Rpb24oKSBjYWxscyByZXNvbHZlIHRvIFwiXCIuXG4vLyBGaXg6IHVzZSB0aGUgYXN5bmMtaXRlcmF0b3IgQVBJLCB3aGljaCBidWZmZXJzIGFsbCBsaW5lcyBiZWZvcmUgdGhlIGNsb3NlIGV2ZW50IGZpcmVzLlxuXG5sZXQgX3JsOiBJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcbmxldCBfbGluZXM6IEFzeW5jSXRlcmF0b3I8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRMaW5lcygpOiBBc3luY0l0ZXJhdG9yPHN0cmluZz4ge1xuXHRpZiAoX2xpbmVzID09IG51bGwpIHtcblx0XHRfcmwgPSBjcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogcHJvY2Vzcy5zdGRpbiwgdGVybWluYWw6IGZhbHNlIH0pO1xuXHRcdF9saW5lcyA9IF9ybFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblx0fVxuXHRyZXR1cm4gX2xpbmVzO1xufVxuXG4vKiogUmVsZWFzZSBzdGRpbiBzbyB0aGUgcHJvY2VzcyBjYW4gZXhpdCBhZnRlciBpbnRlcmFjdGl2ZSBwcm9tcHRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlUHJvbXB0KCk6IHZvaWQge1xuXHRfcmw/LmNsb3NlKCk7XG5cdF9ybCA9IG51bGw7XG5cdF9saW5lcyA9IG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRMaW5lKHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUocHJvbXB0KTtcblx0Y29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgZ2V0TGluZXMoKS5uZXh0KCk7XG5cdHJldHVybiBkb25lID8gXCJcIiA6IHZhbHVlLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzayhxdWVzdGlvbjogc3RyaW5nLCBmYWxsYmFjayA9IFwiXCIpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCByZWFkTGluZShxdWVzdGlvbik7XG5cdHJldHVybiBhbnN3ZXIgfHwgZmFsbGJhY2s7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwaWNrPFQ+KFxuXHRsYWJlbDogc3RyaW5nLFxuXHRpdGVtczogVFtdLFxuXHRkaXNwbGF5OiAoaXRlbTogVCkgPT4gc3RyaW5nLFxuKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuXHRjb25zb2xlLmxvZyhsYWJlbC50cmltRW5kKCkpO1xuXHRmb3IgKGNvbnN0IFtpLCBpdGVtXSBvZiBpdGVtcy5lbnRyaWVzKCkpIHtcblx0XHRjb25zb2xlLmxvZyhgICAgICR7aSArIDF9LiAke2Rpc3BsYXkoaXRlbSl9YCk7XG5cdH1cblx0Y29uc3QgYW5zd2VyID0gYXdhaXQgcmVhZExpbmUoXCIgID4gXCIpO1xuXHRjb25zdCBpZHggPSBOdW1iZXIucGFyc2VJbnQoYW5zd2VyLCAxMCk7XG5cdGlmIChOdW1iZXIuaXNOYU4oaWR4KSB8fCBpZHggPCAxIHx8IGlkeCA+IGl0ZW1zLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cdHJldHVybiBpdGVtc1tpZHggLSAxXTtcbn1cbiJdLCJuYW1lcyI6WyJhc2siLCJjbG9zZVByb21wdCIsInBpY2siLCJfcmwiLCJfbGluZXMiLCJnZXRMaW5lcyIsImNyZWF0ZUludGVyZmFjZSIsImlucHV0IiwicHJvY2VzcyIsInN0ZGluIiwidGVybWluYWwiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwiY2xvc2UiLCJyZWFkTGluZSIsInByb21wdCIsInN0ZG91dCIsIndyaXRlIiwidmFsdWUiLCJkb25lIiwibmV4dCIsInRyaW0iLCJxdWVzdGlvbiIsImZhbGxiYWNrIiwiYW5zd2VyIiwibGFiZWwiLCJpdGVtcyIsImRpc3BsYXkiLCJjb25zb2xlIiwibG9nIiwidHJpbUVuZCIsImkiLCJpdGVtIiwiZW50cmllcyIsImlkeCIsIk51bWJlciIsInBhcnNlSW50IiwiaXNOYU4iLCJsZW5ndGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBK0JzQkE7ZUFBQUE7O1FBWk5DO2VBQUFBOztRQWlCTUM7ZUFBQUE7Ozs4QkFwQzBCO0FBRWhELGtGQUFrRjtBQUNsRixrRkFBa0Y7QUFDbEYscURBQXFEO0FBQ3JELHlGQUF5RjtBQUV6RixJQUFJQyxNQUF3QjtBQUM1QixJQUFJQyxTQUF1QztBQUUzQyxTQUFTQztJQUNSLElBQUlELFVBQVUsTUFBTTtRQUNuQkQsTUFBTUcsSUFBQUEsNkJBQWUsRUFBQztZQUFFQyxPQUFPQyxRQUFRQyxLQUFLO1lBQUVDLFVBQVU7UUFBTTtRQUM5RE4sU0FBU0QsR0FBRyxDQUFDUSxPQUFPQyxhQUFhLENBQUM7SUFDbkM7SUFDQSxPQUFPUjtBQUNSO0FBR08sU0FBU0g7SUFDZkUsS0FBS1U7SUFDTFYsTUFBTTtJQUNOQyxTQUFTO0FBQ1Y7QUFFQSxlQUFlVSxTQUFTQyxNQUFjO0lBQ3JDUCxRQUFRUSxNQUFNLENBQUNDLEtBQUssQ0FBQ0Y7SUFDckIsTUFBTSxFQUFFRyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHLE1BQU1kLFdBQVdlLElBQUk7SUFDN0MsT0FBT0QsT0FBTyxLQUFLRCxNQUFNRyxJQUFJO0FBQzlCO0FBRU8sZUFBZXJCLElBQUlzQixRQUFnQixFQUFFQyxXQUFXLEVBQUU7SUFDeEQsTUFBTUMsU0FBUyxNQUFNVixTQUFTUTtJQUM5QixPQUFPRSxVQUFVRDtBQUNsQjtBQUVPLGVBQWVyQixLQUNyQnVCLEtBQWEsRUFDYkMsS0FBVSxFQUNWQyxPQUE0QjtJQUU1QkMsUUFBUUMsR0FBRyxDQUFDSixNQUFNSyxPQUFPO0lBQ3pCLEtBQUssTUFBTSxDQUFDQyxHQUFHQyxLQUFLLElBQUlOLE1BQU1PLE9BQU8sR0FBSTtRQUN4Q0wsUUFBUUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFRSxJQUFJLEVBQUUsRUFBRSxFQUFFSixRQUFRSyxPQUFPO0lBQzdDO0lBQ0EsTUFBTVIsU0FBUyxNQUFNVixTQUFTO0lBQzlCLE1BQU1vQixNQUFNQyxPQUFPQyxRQUFRLENBQUNaLFFBQVE7SUFDcEMsSUFBSVcsT0FBT0UsS0FBSyxDQUFDSCxRQUFRQSxNQUFNLEtBQUtBLE1BQU1SLE1BQU1ZLE1BQU0sRUFBRSxPQUFPO0lBQy9ELE9BQU9aLEtBQUssQ0FBQ1EsTUFBTSxFQUFFO0FBQ3RCIn0=
@@ -118,7 +118,16 @@ function withVsCodeJsDebugBootloaderFix(options) {
118
118
  const bashrcPath = options?.bashrcPath ?? "/home/${USERNAME}/.bashrc";
119
119
  const order = options?.order ?? StepOrder.features + 300;
120
120
  return (dockerfile)=>{
121
- dockerfile.addStep(DockerStep.raw("vscode-bootloader-fix", `RUN cat <<'EOF' >> "${bashrcPath}"\n${VSCODE_BOOTLOADER_FIX_BASH_SNIPPET}\nEOF`, order));
121
+ dockerfile.addStep(DockerStep.raw("vscode-bootloader-fix", [
122
+ "# VS Code / Cursor js-debug Auto Attach injects --require …/bootloader.js into",
123
+ "# NODE_OPTIONS. On a fresh Dev Container that path often does not exist yet",
124
+ "# (workspaceStorage file is only created after toggling Auto Attach), which crashes",
125
+ "# every Node command. If the injected path is missing, prefer the stable",
126
+ "# bootloader from the server extension install; otherwise strip the bad require.",
127
+ `RUN cat <<'EOF' >> "${bashrcPath}"`,
128
+ VSCODE_BOOTLOADER_FIX_BASH_SNIPPET,
129
+ "EOF"
130
+ ].join("\n"), order));
122
131
  };
123
132
  }
124
133
  class DockerfileModel {
@@ -209,4 +218,4 @@ class DevContainerImageModel extends DockerfileModel {
209
218
  }
210
219
  }
211
220
 
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIExheWVyV3JpdGVyID0gKGRvY2tlcmZpbGU6IERvY2tlcmZpbGVNb2RlbCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIERvY2tlclN0ZXAge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nLFxuXHRcdHB1YmxpYyByZWFkb25seSBjb250ZW50OiBzdHJpbmcsXG5cdFx0cHVibGljIHJlYWRvbmx5IG9yZGVyID0gMCxcblx0KSB7fVxuXG5cdHB1YmxpYyBzdGF0aWMgcnVuKGtleTogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGBSVU4gJHtjb21tYW5kfWAsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgcmF3KGtleTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGNvbnRlbnQsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZW50cnlwb2ludChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLCBvcmRlciA9IDApIHtcblx0XHRjb25zdCBjb250ZW50ID1cblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IGBFTlRSWVBPSU5UICR7dmFsdWV9YFxuXHRcdFx0XHQ6IGBFTlRSWVBPSU5UICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG5cdFx0cmV0dXJuIG5ldyBEb2NrZXJTdGVwKGtleSwgY29udGVudCwgb3JkZXIpO1xuXHR9XG59XG5cbmNvbnN0IFN0ZXBPcmRlciA9IHtcblx0YmFzZTogMV8wMDAsXG5cdGZlYXR1cmVzOiA1XzAwMCxcblx0dXNlcjogOV8wMDAsXG5cdGVudHJ5cG9pbnQ6IDEwXzAwMCxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVQgPSBgaWYgW1sgLW4gXCJcXCR7Tk9ERV9PUFRJT05TOi19XCIgJiYgXCJcXCR7Tk9ERV9PUFRJT05TfVwiID09ICpcImJvb3Rsb2FkZXIuanNcIiogXV07IHRoZW5cbiAgICBfYm9vdGxvYWRlcl9wYXRoPVwiJChwcmludGYgJyVzXFxcXG4nIFwiJE5PREVfT1BUSU9OU1wiIHwgc2VkIC1uICdzLy4qLS1yZXF1aXJlWz0gXVxcXFwoW15bOnNwYWNlOl1dKmJvb3Rsb2FkZXJcXFxcLmpzXFxcXCkuKi9cXFxcMS9wJylcIlxuICAgIGlmIFtbIC1uIFwiXFwke19ib290bG9hZGVyX3BhdGh9XCIgJiYgISAtZiBcIlxcJHtfYm9vdGxvYWRlcl9wYXRofVwiIF1dOyB0aGVuXG4gICAgICAgIF9zdGFibGVfYm9vdGxvYWRlcj1cIiQoZmluZCAvdnNjb2RlL3ZzY29kZS1zZXJ2ZXIgL2hvbWUvbm9kZS8udnNjb2RlLXNlcnZlci9leHRlbnNpb25zIC1uYW1lIFwiYm9vdGxvYWRlci5qc1wiIC1wYXRoIFwiKi9tcy12c2NvZGUuanMtZGVidWcvKlwiIDI+L2Rldi9udWxsIHwgaGVhZCAtMSlcIlxuICAgICAgICBpZiBbWyAtbiBcIlxcJHtfc3RhYmxlX2Jvb3Rsb2FkZXJ9XCIgXV07IHRoZW5cbiAgICAgICAgICAgIE5PREVfT1BUSU9OUz1cIlxcJHtOT0RFX09QVElPTlMvL1xcJHtfYm9vdGxvYWRlcl9wYXRofS9cXCR7X3N0YWJsZV9ib290bG9hZGVyfX1cIlxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBOT0RFX09QVElPTlM9XCIkKHByaW50ZiAnJXNcXFxcbicgXCIkTk9ERV9PUFRJT05TXCIgfCBzZWQgLUUgJ3MjKF58ICktLXJlcXVpcmUoPXwgKVtbOmdyYXBoOl1dKmJvb3Rsb2FkZXJcXFxcLmpzKCB8JCkjICNnOyBzIyAgKyMgI2c7IHMjXiAjIzsgcyMgJCMjJylcIlxuICAgICAgICAgICAgdW5zZXQgVlNDT0RFX0lOU1BFQ1RPUl9PUFRJT05TXG4gICAgICAgIGZpXG4gICAgICAgIGV4cG9ydCBOT0RFX09QVElPTlNcbiAgICAgICAgaWYgW1sgLXogXCIkTk9ERV9PUFRJT05TXCIgXV07IHRoZW5cbiAgICAgICAgICAgIHVuc2V0IE5PREVfT1BUSU9OU1xuICAgICAgICBmaVxuICAgIGZpXG4gICAgdW5zZXQgX2Jvb3Rsb2FkZXJfcGF0aCBfc3RhYmxlX2Jvb3Rsb2FkZXJcbmZpYDtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDb21tYW5kSGlzdG9yeShvcHRpb25zPzoge1xuXHRoaXN0b3J5RGlyPzogc3RyaW5nO1xuXHRoaXN0b3J5RmlsZU5hbWU/OiBzdHJpbmc7XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgaGlzdG9yeURpciA9IG9wdGlvbnM/Lmhpc3RvcnlEaXIgPz8gXCIvY29tbWFuZGhpc3RvcnlcIjtcblx0Y29uc3QgaGlzdG9yeUZpbGVOYW1lID0gb3B0aW9ucz8uaGlzdG9yeUZpbGVOYW1lID8/IFwiLmJhc2hfaGlzdG9yeVwiO1xuXHRjb25zdCBvcmRlciA9IG9wdGlvbnM/Lm9yZGVyID8/IFN0ZXBPcmRlci5iYXNlO1xuXHRjb25zdCBoaXN0b3J5RmlsZSA9IGAke2hpc3RvcnlEaXJ9LyR7aGlzdG9yeUZpbGVOYW1lfWA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFwiaGlzdG9yeS1kaXJcIiwgYG1rZGlyIC1wICR7aGlzdG9yeURpcn0gJiYgdG91Y2ggJHtoaXN0b3J5RmlsZX1gLCBvcmRlciksXG5cdFx0XHQpXG5cdFx0XHQuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcImhpc3RvcnktZW52XCIsIGBFTlYgSElTVEZJTEU9JHtoaXN0b3J5RmlsZX1gLCBvcmRlciArIDEpKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOb2RlVXNlcihvcHRpb25zPzoge1xuXHR1c2VybmFtZT86IHN0cmluZztcblx0aW5jbHVkZVVzZXJJbnN0cnVjdGlvbj86IGJvb2xlYW47XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgdXNlcm5hbWUgPSBvcHRpb25zPy51c2VybmFtZSA/PyBcIm5vZGVcIjtcblx0Y29uc3QgaW5jbHVkZVVzZXJJbnN0cnVjdGlvbiA9IG9wdGlvbnM/LmluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24gPz8gdHJ1ZTtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXM7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKERvY2tlclN0ZXAucmF3KFwiYXJnLXVzZXJuYW1lXCIsIGBBUkcgVVNFUk5BTUU9JHt1c2VybmFtZX1gLCBvcmRlcikpO1xuXG5cdFx0aWYgKGluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24pIHtcblx0XHRcdGRvY2tlcmZpbGUuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcInVzZXJcIiwgXCJVU0VSICR7VVNFUk5BTUV9XCIsIFN0ZXBPcmRlci51c2VyKSk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBucG0ob3B0aW9ucz86IHtcblx0dmVyc2lvbj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/IFwiMTBcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAxMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1pbnN0YWxsXCIsXG5cdFx0XHRcdFx0YG5wbSBpbnN0YWxsIC0tZ2xvYmFsIG5wbUBsYXRlc3QgJiYgbnBtIGFkZCAtLWdsb2JhbCBwbnBtQCR7dmVyc2lvbn1gLFxuXHRcdFx0XHRcdG9yZGVyLFxuXHRcdFx0XHQpLFxuXHRcdFx0KVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1jb25maWdcIixcblx0XHRcdFx0XHRgbWtkaXIgLXAgL2hvbWUvJHt1c2VybmFtZUV4cHJ9Ly5jb25maWcvcG5wbSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgY2hvd24gLVIgJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZyAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgcHJpbnRmIFwic3RvcmUtZGlyPS9ob21lLyR7dXNlcm5hbWVFeHByfS8ucG5wbS1zdG9yZVxcXFxuXCIgPiAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZy9wbnBtL3JjYCxcblx0XHRcdFx0XHRvcmRlciArIDEsXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwKG9wdGlvbnM/OiB7XG5cdHdvcmtzcGFjZURpcj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHdvcmtzcGFjZURpciA9IG9wdGlvbnM/LndvcmtzcGFjZURpciA/PyBcIi93b3Jrc3BhY2VcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAyMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwid29ya3NwYWNlLW5vZGUtbW9kdWxlc1wiLFxuXHRcdFx0XHRgUlVOIG1rZGlyIC1wICR7d29ya3NwYWNlRGlyfS9ub2RlX21vZHVsZXMgJiYgY2hvd24gJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAke3dvcmtzcGFjZURpcn0vbm9kZV9tb2R1bGVzYCxcblx0XHRcdFx0b3JkZXIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgob3B0aW9ucz86IHtcblx0YmFzaHJjUGF0aD86IHN0cmluZztcblx0b3JkZXI/OiBudW1iZXI7XG59KTogTGF5ZXJXcml0ZXIge1xuXHRjb25zdCBiYXNocmNQYXRoID0gb3B0aW9ucz8uYmFzaHJjUGF0aCA/PyBcIi9ob21lLyR7VVNFUk5BTUV9Ly5iYXNocmNcIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAzMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwidnNjb2RlLWJvb3Rsb2FkZXItZml4XCIsXG5cdFx0XHRcdGBSVU4gY2F0IDw8J0VPRicgPj4gXCIke2Jhc2hyY1BhdGh9XCJcXG4ke1ZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVR9XFxuRU9GYCxcblx0XHRcdFx0b3JkZXIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH07XG59XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJmaWxlTW9kZWwgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuRE9DS0VSRklMRTtcblx0cHJpdmF0ZSByZWFkb25seSBfc3RlcHMgPSBuZXcgTWFwPHN0cmluZywgRG9ja2VyU3RlcD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfbGF5ZXJXcml0ZXJzOiBMYXllcldyaXRlcltdID0gW107XG5cdHByaXZhdGUgX2Zyb21JbWFnZTogc3RyaW5nO1xuXHRwcml2YXRlIF9sYXllckNvdW50ZXIgPSAwO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihiYXNlSW1hZ2U6IHN0cmluZykge1xuXHRcdHRoaXMuX2Zyb21JbWFnZSA9IGJhc2VJbWFnZTtcblx0XHR0aGlzLnJlZ2lzdGVyQmFzZUxheWVycygpO1xuXHR9XG5cblx0cHVibGljIGZyb20oYmFzZUltYWdlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9mcm9tSW1hZ2UgPSBiYXNlSW1hZ2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkTGF5ZXIobGF5ZXI6IExheWVyV3JpdGVyIHwgc3RyaW5nLCBvcmRlciA9IFN0ZXBPcmRlci5mZWF0dXJlcyk6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgbGF5ZXIgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGNvbnN0IGlkeCA9ICsrdGhpcy5fbGF5ZXJDb3VudGVyO1xuXHRcdFx0Y29uc3Qga2V5ID0gYGxheWVyLXJ1bi0ke2lkeH1gO1xuXHRcdFx0dGhpcy5fbGF5ZXJXcml0ZXJzLnB1c2goKGRvY2tlcmZpbGUpID0+IHtcblx0XHRcdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKERvY2tlclN0ZXAucnVuKGtleSwgbGF5ZXIsIG9yZGVyICsgaWR4KSk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuX2xheWVyV3JpdGVycy5wdXNoKGxheWVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGRTdGVwKHN0ZXA6IERvY2tlclN0ZXApOiB0aGlzIHtcblx0XHR0aGlzLl9zdGVwcy5zZXQoc3RlcC5rZXksIHN0ZXApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbW92ZVN0ZXAoa2V5OiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9zdGVwcy5kZWxldGUoa2V5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBlbnRyeXBvaW50KHZhbHVlOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSwgb3JkZXIgPSBTdGVwT3JkZXIuZW50cnlwb2ludCk6IHRoaXMge1xuXHRcdHRoaXMuYWRkU3RlcChEb2NrZXJTdGVwLmVudHJ5cG9pbnQoXCJlbnRyeXBvaW50XCIsIHZhbHVlLCBvcmRlcikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZFJ1blN0ZXAoY21kOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihjbWQpO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IHN0cmluZyB7XG5cdFx0Zm9yIChjb25zdCBsYXllcldyaXRlciBvZiB0aGlzLl9sYXllcldyaXRlcnMpIHtcblx0XHRcdGxheWVyV3JpdGVyKHRoaXMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpbmVzID0gW2BGUk9NICR7dGhpcy5fZnJvbUltYWdlfWBdO1xuXHRcdGNvbnN0IHNvcnRlZFN0ZXBzID0gWy4uLnRoaXMuX3N0ZXBzLnZhbHVlcygpXS5zb3J0KChsZWZ0LCByaWdodCkgPT4ge1xuXHRcdFx0aWYgKGxlZnQub3JkZXIgIT09IHJpZ2h0Lm9yZGVyKSB7XG5cdFx0XHRcdHJldHVybiBsZWZ0Lm9yZGVyIC0gcmlnaHQub3JkZXI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGVmdC5rZXkubG9jYWxlQ29tcGFyZShyaWdodC5rZXksIFwiZW5cIik7XG5cdFx0fSk7XG5cblx0XHRmb3IgKGNvbnN0IHN0ZXAgb2Ygc29ydGVkU3RlcHMpIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIiwgc3RlcC5jb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7bGluZXMuam9pbihcIlxcblwiKX1cXG5gO1xuXHR9XG5cblx0cHJvdGVjdGVkIHJlZ2lzdGVyQmFzZUxheWVycygpOiB2b2lkIHtcblx0XHQvLyBHZW5lcmljIGJhc2UgbW9kZWwgaW50ZW50aW9uYWxseSBoYXMgbm8gZGVmYXVsdCBsYXllcnMuXG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXZDb250YWluZXJJbWFnZU1vZGVsIGV4dGVuZHMgRG9ja2VyZmlsZU1vZGVsIHtcblx0cHJvdGVjdGVkIG92ZXJyaWRlIHJlZ2lzdGVyQmFzZUxheWVycygpOiB2b2lkIHtcblx0XHRzdXBlci5yZWdpc3RlckJhc2VMYXllcnMoKTtcblx0XHR0aGlzLmFkZExheWVyKHdpdGhDb21tYW5kSGlzdG9yeSgpKS5hZGRMYXllcih3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgoKSk7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRGV2Q29udGFpbmVySW1hZ2VNb2RlbCIsIkRvY2tlclN0ZXAiLCJEb2NrZXJmaWxlTW9kZWwiLCJ3aXRoQ29tbWFuZEhpc3RvcnkiLCJ3aXRoTm9kZVVzZXIiLCJ3aXRoUG5wbSIsIndpdGhWc0NvZGVKc0RlYnVnQm9vdGxvYWRlckZpeCIsIndpdGhXb3Jrc3BhY2VOb2RlTW9kdWxlc093bmVyc2hpcCIsImtleSIsImNvbnRlbnQiLCJvcmRlciIsInJ1biIsImNvbW1hbmQiLCJyYXciLCJlbnRyeXBvaW50IiwidmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwiU3RlcE9yZGVyIiwiYmFzZSIsImZlYXR1cmVzIiwidXNlciIsIlZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVQiLCJvcHRpb25zIiwiaGlzdG9yeURpciIsImhpc3RvcnlGaWxlTmFtZSIsImhpc3RvcnlGaWxlIiwiZG9ja2VyZmlsZSIsImFkZFN0ZXAiLCJ1c2VybmFtZSIsImluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24iLCJ2ZXJzaW9uIiwidXNlcm5hbWVFeHByIiwid29ya3NwYWNlRGlyIiwiYmFzaHJjUGF0aCIsIldFTExfS05PV05fRklMRVMiLCJET0NLRVJGSUxFIiwiX3N0ZXBzIiwiTWFwIiwiX2xheWVyV3JpdGVycyIsIl9mcm9tSW1hZ2UiLCJfbGF5ZXJDb3VudGVyIiwiYmFzZUltYWdlIiwicmVnaXN0ZXJCYXNlTGF5ZXJzIiwiZnJvbSIsImFkZExheWVyIiwibGF5ZXIiLCJpZHgiLCJwdXNoIiwic3RlcCIsInNldCIsInJlbW92ZVN0ZXAiLCJkZWxldGUiLCJhZGRSdW5TdGVwIiwiY21kIiwiYnVpbGQiLCJsYXllcldyaXRlciIsImxpbmVzIiwic29ydGVkU3RlcHMiLCJ2YWx1ZXMiLCJzb3J0IiwibGVmdCIsInJp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
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIExheWVyV3JpdGVyID0gKGRvY2tlcmZpbGU6IERvY2tlcmZpbGVNb2RlbCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIERvY2tlclN0ZXAge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nLFxuXHRcdHB1YmxpYyByZWFkb25seSBjb250ZW50OiBzdHJpbmcsXG5cdFx0cHVibGljIHJlYWRvbmx5IG9yZGVyID0gMCxcblx0KSB7fVxuXG5cdHB1YmxpYyBzdGF0aWMgcnVuKGtleTogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGBSVU4gJHtjb21tYW5kfWAsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgcmF3KGtleTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGNvbnRlbnQsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZW50cnlwb2ludChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLCBvcmRlciA9IDApIHtcblx0XHRjb25zdCBjb250ZW50ID1cblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IGBFTlRSWVBPSU5UICR7dmFsdWV9YFxuXHRcdFx0XHQ6IGBFTlRSWVBPSU5UICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG5cdFx0cmV0dXJuIG5ldyBEb2NrZXJTdGVwKGtleSwgY29udGVudCwgb3JkZXIpO1xuXHR9XG59XG5cbmNvbnN0IFN0ZXBPcmRlciA9IHtcblx0YmFzZTogMV8wMDAsXG5cdGZlYXR1cmVzOiA1XzAwMCxcblx0dXNlcjogOV8wMDAsXG5cdGVudHJ5cG9pbnQ6IDEwXzAwMCxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVQgPSBgaWYgW1sgLW4gXCJcXCR7Tk9ERV9PUFRJT05TOi19XCIgJiYgXCJcXCR7Tk9ERV9PUFRJT05TfVwiID09ICpcImJvb3Rsb2FkZXIuanNcIiogXV07IHRoZW5cbiAgICBfYm9vdGxvYWRlcl9wYXRoPVwiJChwcmludGYgJyVzXFxcXG4nIFwiJE5PREVfT1BUSU9OU1wiIHwgc2VkIC1uICdzLy4qLS1yZXF1aXJlWz0gXVxcXFwoW15bOnNwYWNlOl1dKmJvb3Rsb2FkZXJcXFxcLmpzXFxcXCkuKi9cXFxcMS9wJylcIlxuICAgIGlmIFtbIC1uIFwiXFwke19ib290bG9hZGVyX3BhdGh9XCIgJiYgISAtZiBcIlxcJHtfYm9vdGxvYWRlcl9wYXRofVwiIF1dOyB0aGVuXG4gICAgICAgIF9zdGFibGVfYm9vdGxvYWRlcj1cIiQoZmluZCAvdnNjb2RlL3ZzY29kZS1zZXJ2ZXIgL2hvbWUvbm9kZS8udnNjb2RlLXNlcnZlci9leHRlbnNpb25zIC1uYW1lIFwiYm9vdGxvYWRlci5qc1wiIC1wYXRoIFwiKi9tcy12c2NvZGUuanMtZGVidWcvKlwiIDI+L2Rldi9udWxsIHwgaGVhZCAtMSlcIlxuICAgICAgICBpZiBbWyAtbiBcIlxcJHtfc3RhYmxlX2Jvb3Rsb2FkZXJ9XCIgXV07IHRoZW5cbiAgICAgICAgICAgIE5PREVfT1BUSU9OUz1cIlxcJHtOT0RFX09QVElPTlMvL1xcJHtfYm9vdGxvYWRlcl9wYXRofS9cXCR7X3N0YWJsZV9ib290bG9hZGVyfX1cIlxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBOT0RFX09QVElPTlM9XCIkKHByaW50ZiAnJXNcXFxcbicgXCIkTk9ERV9PUFRJT05TXCIgfCBzZWQgLUUgJ3MjKF58ICktLXJlcXVpcmUoPXwgKVtbOmdyYXBoOl1dKmJvb3Rsb2FkZXJcXFxcLmpzKCB8JCkjICNnOyBzIyAgKyMgI2c7IHMjXiAjIzsgcyMgJCMjJylcIlxuICAgICAgICAgICAgdW5zZXQgVlNDT0RFX0lOU1BFQ1RPUl9PUFRJT05TXG4gICAgICAgIGZpXG4gICAgICAgIGV4cG9ydCBOT0RFX09QVElPTlNcbiAgICAgICAgaWYgW1sgLXogXCIkTk9ERV9PUFRJT05TXCIgXV07IHRoZW5cbiAgICAgICAgICAgIHVuc2V0IE5PREVfT1BUSU9OU1xuICAgICAgICBmaVxuICAgIGZpXG4gICAgdW5zZXQgX2Jvb3Rsb2FkZXJfcGF0aCBfc3RhYmxlX2Jvb3Rsb2FkZXJcbmZpYDtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDb21tYW5kSGlzdG9yeShvcHRpb25zPzoge1xuXHRoaXN0b3J5RGlyPzogc3RyaW5nO1xuXHRoaXN0b3J5RmlsZU5hbWU/OiBzdHJpbmc7XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgaGlzdG9yeURpciA9IG9wdGlvbnM/Lmhpc3RvcnlEaXIgPz8gXCIvY29tbWFuZGhpc3RvcnlcIjtcblx0Y29uc3QgaGlzdG9yeUZpbGVOYW1lID0gb3B0aW9ucz8uaGlzdG9yeUZpbGVOYW1lID8/IFwiLmJhc2hfaGlzdG9yeVwiO1xuXHRjb25zdCBvcmRlciA9IG9wdGlvbnM/Lm9yZGVyID8/IFN0ZXBPcmRlci5iYXNlO1xuXHRjb25zdCBoaXN0b3J5RmlsZSA9IGAke2hpc3RvcnlEaXJ9LyR7aGlzdG9yeUZpbGVOYW1lfWA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFwiaGlzdG9yeS1kaXJcIiwgYG1rZGlyIC1wICR7aGlzdG9yeURpcn0gJiYgdG91Y2ggJHtoaXN0b3J5RmlsZX1gLCBvcmRlciksXG5cdFx0XHQpXG5cdFx0XHQuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcImhpc3RvcnktZW52XCIsIGBFTlYgSElTVEZJTEU9JHtoaXN0b3J5RmlsZX1gLCBvcmRlciArIDEpKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOb2RlVXNlcihvcHRpb25zPzoge1xuXHR1c2VybmFtZT86IHN0cmluZztcblx0aW5jbHVkZVVzZXJJbnN0cnVjdGlvbj86IGJvb2xlYW47XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgdXNlcm5hbWUgPSBvcHRpb25zPy51c2VybmFtZSA/PyBcIm5vZGVcIjtcblx0Y29uc3QgaW5jbHVkZVVzZXJJbnN0cnVjdGlvbiA9IG9wdGlvbnM/LmluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24gPz8gdHJ1ZTtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXM7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKERvY2tlclN0ZXAucmF3KFwiYXJnLXVzZXJuYW1lXCIsIGBBUkcgVVNFUk5BTUU9JHt1c2VybmFtZX1gLCBvcmRlcikpO1xuXG5cdFx0aWYgKGluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24pIHtcblx0XHRcdGRvY2tlcmZpbGUuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcInVzZXJcIiwgXCJVU0VSICR7VVNFUk5BTUV9XCIsIFN0ZXBPcmRlci51c2VyKSk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBucG0ob3B0aW9ucz86IHtcblx0dmVyc2lvbj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/IFwiMTBcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAxMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1pbnN0YWxsXCIsXG5cdFx0XHRcdFx0YG5wbSBpbnN0YWxsIC0tZ2xvYmFsIG5wbUBsYXRlc3QgJiYgbnBtIGFkZCAtLWdsb2JhbCBwbnBtQCR7dmVyc2lvbn1gLFxuXHRcdFx0XHRcdG9yZGVyLFxuXHRcdFx0XHQpLFxuXHRcdFx0KVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1jb25maWdcIixcblx0XHRcdFx0XHRgbWtkaXIgLXAgL2hvbWUvJHt1c2VybmFtZUV4cHJ9Ly5jb25maWcvcG5wbSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgY2hvd24gLVIgJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZyAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgcHJpbnRmIFwic3RvcmUtZGlyPS9ob21lLyR7dXNlcm5hbWVFeHByfS8ucG5wbS1zdG9yZVxcXFxuXCIgPiAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZy9wbnBtL3JjYCxcblx0XHRcdFx0XHRvcmRlciArIDEsXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwKG9wdGlvbnM/OiB7XG5cdHdvcmtzcGFjZURpcj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHdvcmtzcGFjZURpciA9IG9wdGlvbnM/LndvcmtzcGFjZURpciA/PyBcIi93b3Jrc3BhY2VcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAyMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwid29ya3NwYWNlLW5vZGUtbW9kdWxlc1wiLFxuXHRcdFx0XHRgUlVOIG1rZGlyIC1wICR7d29ya3NwYWNlRGlyfS9ub2RlX21vZHVsZXMgJiYgY2hvd24gJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAke3dvcmtzcGFjZURpcn0vbm9kZV9tb2R1bGVzYCxcblx0XHRcdFx0b3JkZXIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgob3B0aW9ucz86IHtcblx0YmFzaHJjUGF0aD86IHN0cmluZztcblx0b3JkZXI/OiBudW1iZXI7XG59KTogTGF5ZXJXcml0ZXIge1xuXHRjb25zdCBiYXNocmNQYXRoID0gb3B0aW9ucz8uYmFzaHJjUGF0aCA/PyBcIi9ob21lLyR7VVNFUk5BTUV9Ly5iYXNocmNcIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAzMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwidnNjb2RlLWJvb3Rsb2FkZXItZml4XCIsXG5cdFx0XHRcdFtcblx0XHRcdFx0XHRcIiMgVlMgQ29kZSAvIEN1cnNvciBqcy1kZWJ1ZyBBdXRvIEF0dGFjaCBpbmplY3RzIC0tcmVxdWlyZSDigKYvYm9vdGxvYWRlci5qcyBpbnRvXCIsXG5cdFx0XHRcdFx0XCIjIE5PREVfT1BUSU9OUy4gT24gYSBmcmVzaCBEZXYgQ29udGFpbmVyIHRoYXQgcGF0aCBvZnRlbiBkb2VzIG5vdCBleGlzdCB5ZXRcIixcblx0XHRcdFx0XHRcIiMgKHdvcmtzcGFjZVN0b3JhZ2UgZmlsZSBpcyBvbmx5IGNyZWF0ZWQgYWZ0ZXIgdG9nZ2xpbmcgQXV0byBBdHRhY2gpLCB3aGljaCBjcmFzaGVzXCIsXG5cdFx0XHRcdFx0XCIjIGV2ZXJ5IE5vZGUgY29tbWFuZC4gSWYgdGhlIGluamVjdGVkIHBhdGggaXMgbWlzc2luZywgcHJlZmVyIHRoZSBzdGFibGVcIixcblx0XHRcdFx0XHRcIiMgYm9vdGxvYWRlciBmcm9tIHRoZSBzZXJ2ZXIgZXh0ZW5zaW9uIGluc3RhbGw7IG90aGVyd2lzZSBzdHJpcCB0aGUgYmFkIHJlcXVpcmUuXCIsXG5cdFx0XHRcdFx0YFJVTiBjYXQgPDwnRU9GJyA+PiBcIiR7YmFzaHJjUGF0aH1cImAsXG5cdFx0XHRcdFx0VlNDT0RFX0JPT1RMT0FERVJfRklYX0JBU0hfU05JUFBFVCxcblx0XHRcdFx0XHRcIkVPRlwiLFxuXHRcdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0XHRcdG9yZGVyLFxuXHRcdFx0KSxcblx0XHQpO1xuXHR9O1xufVxuXG5leHBvcnQgY2xhc3MgRG9ja2VyZmlsZU1vZGVsIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLkRPQ0tFUkZJTEU7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3N0ZXBzID0gbmV3IE1hcDxzdHJpbmcsIERvY2tlclN0ZXA+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2xheWVyV3JpdGVyczogTGF5ZXJXcml0ZXJbXSA9IFtdO1xuXHRwcml2YXRlIF9mcm9tSW1hZ2U6IHN0cmluZztcblx0cHJpdmF0ZSBfbGF5ZXJDb3VudGVyID0gMDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYmFzZUltYWdlOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9mcm9tSW1hZ2UgPSBiYXNlSW1hZ2U7XG5cdFx0dGhpcy5yZWdpc3RlckJhc2VMYXllcnMoKTtcblx0fVxuXG5cdHB1YmxpYyBmcm9tKGJhc2VJbWFnZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fZnJvbUltYWdlID0gYmFzZUltYWdlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZExheWVyKGxheWVyOiBMYXllcldyaXRlciB8IHN0cmluZywgb3JkZXIgPSBTdGVwT3JkZXIuZmVhdHVyZXMpOiB0aGlzIHtcblx0XHRpZiAodHlwZW9mIGxheWVyID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRjb25zdCBpZHggPSArK3RoaXMuX2xheWVyQ291bnRlcjtcblx0XHRcdGNvbnN0IGtleSA9IGBsYXllci1ydW4tJHtpZHh9YDtcblx0XHRcdHRoaXMuX2xheWVyV3JpdGVycy5wdXNoKChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0XHRcdGRvY2tlcmZpbGUuYWRkU3RlcChEb2NrZXJTdGVwLnJ1bihrZXksIGxheWVyLCBvcmRlciArIGlkeCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLl9sYXllcldyaXRlcnMucHVzaChsYXllcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkU3RlcChzdGVwOiBEb2NrZXJTdGVwKTogdGhpcyB7XG5cdFx0dGhpcy5fc3RlcHMuc2V0KHN0ZXAua2V5LCBzdGVwKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyByZW1vdmVTdGVwKGtleTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5fc3RlcHMuZGVsZXRlKGtleSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZW50cnlwb2ludCh2YWx1ZTogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10sIG9yZGVyID0gU3RlcE9yZGVyLmVudHJ5cG9pbnQpOiB0aGlzIHtcblx0XHR0aGlzLmFkZFN0ZXAoRG9ja2VyU3RlcC5lbnRyeXBvaW50KFwiZW50cnlwb2ludFwiLCB2YWx1ZSwgb3JkZXIpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGRSdW5TdGVwKGNtZDogc3RyaW5nKTogdGhpcyB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkTGF5ZXIoY21kKTtcblx0fVxuXG5cdHB1YmxpYyBidWlsZCgpOiBzdHJpbmcge1xuXHRcdGZvciAoY29uc3QgbGF5ZXJXcml0ZXIgb2YgdGhpcy5fbGF5ZXJXcml0ZXJzKSB7XG5cdFx0XHRsYXllcldyaXRlcih0aGlzKTtcblx0XHR9XG5cblx0XHRjb25zdCBsaW5lcyA9IFtgRlJPTSAke3RoaXMuX2Zyb21JbWFnZX1gXTtcblx0XHRjb25zdCBzb3J0ZWRTdGVwcyA9IFsuLi50aGlzLl9zdGVwcy52YWx1ZXMoKV0uc29ydCgobGVmdCwgcmlnaHQpID0+IHtcblx0XHRcdGlmIChsZWZ0Lm9yZGVyICE9PSByaWdodC5vcmRlcikge1xuXHRcdFx0XHRyZXR1cm4gbGVmdC5vcmRlciAtIHJpZ2h0Lm9yZGVyO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxlZnQua2V5LmxvY2FsZUNvbXBhcmUocmlnaHQua2V5LCBcImVuXCIpO1xuXHRcdH0pO1xuXG5cdFx0Zm9yIChjb25zdCBzdGVwIG9mIHNvcnRlZFN0ZXBzKSB7XG5cdFx0XHRsaW5lcy5wdXNoKFwiXCIsIHN0ZXAuY29udGVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuYDtcblx0fVxuXG5cdHByb3RlY3RlZCByZWdpc3RlckJhc2VMYXllcnMoKTogdm9pZCB7XG5cdFx0Ly8gR2VuZXJpYyBiYXNlIG1vZGVsIGludGVudGlvbmFsbHkgaGFzIG5vIGRlZmF1bHQgbGF5ZXJzLlxuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLi9Eb2NrZXJmaWxlXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IHRoaXMuYnVpbGQoKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgRGV2Q29udGFpbmVySW1hZ2VNb2RlbCBleHRlbmRzIERvY2tlcmZpbGVNb2RlbCB7XG5cdHByb3RlY3RlZCBvdmVycmlkZSByZWdpc3RlckJhc2VMYXllcnMoKTogdm9pZCB7XG5cdFx0c3VwZXIucmVnaXN0ZXJCYXNlTGF5ZXJzKCk7XG5cdFx0dGhpcy5hZGRMYXllcih3aXRoQ29tbWFuZEhpc3RvcnkoKSkuYWRkTGF5ZXIod2l0aFZzQ29kZUpzRGVidWdCb290bG9hZGVyRml4KCkpO1xuXHR9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmRldmNvbnRhaW5lci9Eb2NrZXJmaWxlXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IHRoaXMuYnVpbGQoKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkRldkNvbnRhaW5lckltYWdlTW9kZWwiLCJEb2NrZXJTdGVwIiwiRG9ja2VyZmlsZU1vZGVsIiwid2l0aENvbW1hbmRIaXN0b3J5Iiwid2l0aE5vZGVVc2VyIiwid2l0aFBucG0iLCJ3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgiLCJ3aXRoV29ya3NwYWNlTm9kZU1vZHVsZXNPd25lcnNoaXAiLCJrZXkiLCJjb250ZW50Iiwib3JkZXIiLCJydW4iLCJjb21tYW5kIiwicmF3IiwiZW50cnlwb2ludCIsInZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0ZXBPcmRlciIsImJhc2UiLCJmZWF0dXJlcyIsInVzZXIiLCJWU0NPREVfQk9PVExPQURFUl9GSVhfQkFTSF9TTklQUEVUIiwib3B0aW9ucyIsImhpc3RvcnlEaXIiLCJoaXN0b3J5RmlsZU5hbWUiLCJoaXN0b3J5RmlsZSIsImRvY2tlcmZpbGUiLCJhZGRTdGVwIiwidXNlcm5hbWUiLCJpbmNsdWRlVXNlckluc3RydWN0aW9uIiwidmVyc2lvbiIsInVzZXJuYW1lRXhwciIsIndvcmtzcGFjZURpciIsImJhc2hyY1BhdGgiLCJqb2luIiwiV0VMTF9LTk9XTl9GSUxFUyIsIkRPQ0tFUkZJTEUiLCJfc3RlcHMiLCJNYXAiLCJfbGF5ZXJXcml0ZXJzIiwiX2Zyb21JbWFnZSIsIl9sYXllckNvdW50ZXIiLCJiYXNlSW1hZ2UiLCJyZWdpc3RlckJhc2VMYXllcnMiLCJmcm9tIiwiYWRkTGF5ZXIiLCJsYXllciIsImlkeCIsInB1c2giLCJzdGVwIiwic2V0IiwicmVtb3ZlU3RlcCIsImRlbGV0ZSIsImFkZFJ1blN0ZXAiLCJjbWQiLCJidWlsZCIsImxheWVyV3JpdGVyIiwibGluZXMiLCJzb3J0ZWRTdGVwcyIsInZhbHVlcyIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJsb2NhbGVDb21wYXJlIiwiZmlsZXMiLCJmaWxlUGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUEwUGFBO2VBQUFBOztRQXJQQUM7ZUFBQUE7O1FBaUtBQztlQUFBQTs7UUFoSEdDO2VBQUFBOztRQW1CQUM7ZUFBQUE7O1FBa0JBQztlQUFBQTs7UUFnREFDO2VBQUFBOztRQXBCQUM7ZUFBQUE7Ozt1QkF2SGlCO0FBSzFCLE1BQU1OOzs7O0lBQ1osWUFDQyxBQUFnQk8sR0FBVyxFQUMzQixBQUFnQkMsT0FBZSxFQUMvQixBQUFnQkMsUUFBUSxDQUFDLENBQ3hCO2FBSGVGLE1BQUFBO2FBQ0FDLFVBQUFBO2FBQ0FDLFFBQUFBO0lBQ2Q7SUFFSCxPQUFjQyxJQUFJSCxHQUFXLEVBQUVJLE9BQWUsRUFBRUYsUUFBUSxDQUFDLEVBQUU7UUFDMUQsT0FBTyxJQUFJVCxXQUFXTyxLQUFLLENBQUMsSUFBSSxFQUFFSSxTQUFTLEVBQUVGO0lBQzlDO0lBRUEsT0FBY0csSUFBSUwsR0FBVyxFQUFFQyxPQUFlLEVBQUVDLFFBQVEsQ0FBQyxFQUFFO1FBQzFELE9BQU8sSUFBSVQsV0FBV08sS0FBS0MsU0FBU0M7SUFDckM7SUFFQSxPQUFjSSxXQUFXTixHQUFXLEVBQUVPLEtBQWlDLEVBQUVMLFFBQVEsQ0FBQyxFQUFFO1FBQ25GLE1BQU1ELFVBQ0wsT0FBT00sVUFBVSxXQUNkLENBQUMsV0FBVyxFQUFFQSxPQUFPLEdBQ3JCLENBQUMsV0FBVyxFQUFFQyxLQUFLQyxTQUFTLENBQUNGLFFBQVE7UUFDekMsT0FBTyxJQUFJZCxXQUFXTyxLQUFLQyxTQUFTQztJQUNyQztBQUNEO0FBRUEsTUFBTVEsWUFBWTtJQUNqQkMsTUFBTTtJQUNOQyxVQUFVO0lBQ1ZDLE1BQU07SUFDTlAsWUFBWTtBQUNiO0FBRUEsTUFBTVEscUNBQXFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnQjFDLENBQUM7QUFFSSxTQUFTbkIsbUJBQW1Cb0IsT0FJbEM7SUFDQSxNQUFNQyxhQUFhRCxTQUFTQyxjQUFjO0lBQzFDLE1BQU1DLGtCQUFrQkYsU0FBU0UsbUJBQW1CO0lBQ3BELE1BQU1mLFFBQVFhLFNBQVNiLFNBQVNRLFVBQVVDLElBQUk7SUFDOUMsTUFBTU8sY0FBYyxHQUFHRixXQUFXLENBQUMsRUFBRUMsaUJBQWlCO0lBRXRELE9BQU8sQ0FBQ0U7UUFDUEEsV0FDRUMsT0FBTyxDQUNQM0IsV0FBV1UsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUVhLFdBQVcsVUFBVSxFQUFFRSxhQUFhLEVBQUVoQixRQUVoRmtCLE9BQU8sQ0FBQzNCLFdBQVdZLEdBQUcsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFYSxhQUFhLEVBQUVoQixRQUFRO0lBQ2hGO0FBQ0Q7QUFFTyxTQUFTTixhQUFhbUIsT0FJNUI7SUFDQSxNQUFNTSxXQUFXTixTQUFTTSxZQUFZO0lBQ3RDLE1BQU1DLHlCQUF5QlAsU0FBU08sMEJBQTBCO0lBQ2xFLE1BQU1wQixRQUFRYSxTQUFTYixTQUFTUSxVQUFVRSxRQUFRO0lBRWxELE9BQU8sQ0FBQ087UUFDUEEsV0FBV0MsT0FBTyxDQUFDM0IsV0FBV1ksR0FBRyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRWdCLFVBQVUsRUFBRW5CO1FBRTlFLElBQUlvQix3QkFBd0I7WUFDM0JILFdBQVdDLE9BQU8sQ0FBQzNCLFdBQVdZLEdBQUcsQ0FBQyxRQUFRLG9CQUFvQkssVUFBVUcsSUFBSTtRQUM3RTtJQUNEO0FBQ0Q7QUFFTyxTQUFTaEIsU0FBU2tCLE9BSXhCO0lBQ0EsTUFBTVEsVUFBVVIsU0FBU1EsV0FBVztJQUNwQyxNQUFNQyxlQUFlVCxTQUFTUyxnQkFBZ0I7SUFDOUMsTUFBTXRCLFFBQVFhLFNBQVNiLFNBQVNRLFVBQVVFLFFBQVEsR0FBRztJQUVyRCxPQUFPLENBQUNPO1FBQ1BBLFdBQ0VDLE9BQU8sQ0FDUDNCLFdBQVdVLEdBQUcsQ0FDYixnQkFDQSxDQUFDLHlEQUF5RCxFQUFFb0IsU0FBUyxFQUNyRXJCLFFBR0RrQixPQUFPLENBQ1AzQixXQUFXVSxHQUFHLENBQ2IsZUFDQSxDQUFDLGVBQWUsRUFBRXFCLGFBQWEsb0JBQW9CLEVBQUVBLGFBQWEseUJBQXlCLEVBQUVBLGFBQWEsQ0FBQyxFQUFFQSxhQUFhLE9BQU8sRUFBRUEsYUFBYSxlQUFlLEVBQUVBLGFBQWEsd0NBQXdDLEVBQUVBLGFBQWEseUJBQXlCLEVBQUVBLGFBQWEsZ0JBQWdCLENBQUMsRUFDOVJ0QixRQUFRO0lBR1o7QUFDRDtBQUVPLFNBQVNILGtDQUFrQ2dCLE9BSWpEO0lBQ0EsTUFBTVUsZUFBZVYsU0FBU1UsZ0JBQWdCO0lBQzlDLE1BQU1ELGVBQWVULFNBQVNTLGdCQUFnQjtJQUM5QyxNQUFNdEIsUUFBUWEsU0FBU2IsU0FBU1EsVUFBVUUsUUFBUSxHQUFHO0lBRXJELE9BQU8sQ0FBQ087UUFDUEEsV0FBV0MsT0FBTyxDQUNqQjNCLFdBQVdZLEdBQUcsQ0FDYiwwQkFDQSxDQUFDLGFBQWEsRUFBRW9CLGFBQWEsdUJBQXVCLEVBQUVELGFBQWEsQ0FBQyxFQUFFQSxhQUFhLENBQUMsRUFBRUMsYUFBYSxhQUFhLENBQUMsRUFDakh2QjtJQUdIO0FBQ0Q7QUFFTyxTQUFTSiwrQkFBK0JpQixPQUc5QztJQUNBLE1BQU1XLGFBQWFYLFNBQVNXLGNBQWM7SUFDMUMsTUFBTXhCLFFBQVFhLFNBQVNiLFNBQVNRLFVBQVVFLFFBQVEsR0FBRztJQUVyRCxPQUFPLENBQUNPO1FBQ1BBLFdBQVdDLE9BQU8sQ0FDakIzQixXQUFXWSxHQUFHLENBQ2IseUJBQ0E7WUFDQztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0EsQ0FBQyxvQkFBb0IsRUFBRXFCLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDWjtZQUNBO1NBQ0EsQ0FBQ2EsSUFBSSxDQUFDLE9BQ1B6QjtJQUdIO0FBQ0Q7QUFFTyxNQUFNUjtJQUNJTSxNQUFNNEIsdUJBQWdCLENBQUNDLFVBQVUsQ0FBQztJQUNqQ0MsU0FBUyxJQUFJQyxNQUEwQjtJQUN2Q0MsZ0JBQStCLEVBQUUsQ0FBQztJQUMzQ0MsV0FBbUI7SUFDbkJDLGdCQUFnQixFQUFFO0lBRTFCLFlBQW1CQyxTQUFpQixDQUFFO1FBQ3JDLElBQUksQ0FBQ0YsVUFBVSxHQUFHRTtRQUNsQixJQUFJLENBQUNDLGtCQUFrQjtJQUN4QjtJQUVPQyxLQUFLRixTQUFpQixFQUFRO1FBQ3BDLElBQUksQ0FBQ0YsVUFBVSxHQUFHRTtRQUNsQixPQUFPLElBQUk7SUFDWjtJQUVPRyxTQUFTQyxLQUEyQixFQUFFckMsUUFBUVEsVUFBVUUsUUFBUSxFQUFRO1FBQzlFLElBQUksT0FBTzJCLFVBQVUsVUFBVTtZQUM5QixNQUFNQyxNQUFNLEVBQUUsSUFBSSxDQUFDTixhQUFhO1lBQ2hDLE1BQU1sQyxNQUFNLENBQUMsVUFBVSxFQUFFd0MsS0FBSztZQUM5QixJQUFJLENBQUNSLGFBQWEsQ0FBQ1MsSUFBSSxDQUFDLENBQUN0QjtnQkFDeEJBLFdBQVdDLE9BQU8sQ0FBQzNCLFdBQVdVLEdBQUcsQ0FBQ0gsS0FBS3VDLE9BQU9yQyxRQUFRc0M7WUFDdkQ7WUFDQSxPQUFPLElBQUk7UUFDWjtRQUVBLElBQUksQ0FBQ1IsYUFBYSxDQUFDUyxJQUFJLENBQUNGO1FBQ3hCLE9BQU8sSUFBSTtJQUNaO0lBRU9uQixRQUFRc0IsSUFBZ0IsRUFBUTtRQUN0QyxJQUFJLENBQUNaLE1BQU0sQ0FBQ2EsR0FBRyxDQUFDRCxLQUFLMUMsR0FBRyxFQUFFMEM7UUFDMUIsT0FBTyxJQUFJO0lBQ1o7SUFFT0UsV0FBVzVDLEdBQVcsRUFBUTtRQUNwQyxJQUFJLENBQUM4QixNQUFNLENBQUNlLE1BQU0sQ0FBQzdDO1FBQ25CLE9BQU8sSUFBSTtJQUNaO0lBRU9NLFdBQVdDLEtBQWlDLEVBQUVMLFFBQVFRLFVBQVVKLFVBQVUsRUFBUTtRQUN4RixJQUFJLENBQUNjLE9BQU8sQ0FBQzNCLFdBQVdhLFVBQVUsQ0FBQyxjQUFjQyxPQUFPTDtRQUN4RCxPQUFPLElBQUk7SUFDWjtJQUVPNEMsV0FBV0MsR0FBVyxFQUFRO1FBQ3BDLE9BQU8sSUFBSSxDQUFDVCxRQUFRLENBQUNTO0lBQ3RCO0lBRU9DLFFBQWdCO1FBQ3RCLEtBQUssTUFBTUMsZUFBZSxJQUFJLENBQUNqQixhQUFhLENBQUU7WUFDN0NpQixZQUFZLElBQUk7UUFDakI7UUFFQSxNQUFNQyxRQUFRO1lBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDakIsVUFBVSxFQUFFO1NBQUM7UUFDekMsTUFBTWtCLGNBQWM7ZUFBSSxJQUFJLENBQUNyQixNQUFNLENBQUNzQixNQUFNO1NBQUcsQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLE1BQU1DO1lBQ3pELElBQUlELEtBQUtwRCxLQUFLLEtBQUtxRCxNQUFNckQsS0FBSyxFQUFFO2dCQUMvQixPQUFPb0QsS0FBS3BELEtBQUssR0FBR3FELE1BQU1yRCxLQUFLO1lBQ2hDO1lBQ0EsT0FBT29ELEtBQUt0RCxHQUFHLENBQUN3RCxhQUFhLENBQUNELE1BQU12RCxHQUFHLEVBQUU7UUFDMUM7UUFFQSxLQUFLLE1BQU0wQyxRQUFRUyxZQUFhO1lBQy9CRCxNQUFNVCxJQUFJLENBQUMsSUFBSUMsS0FBS3pDLE9BQU87UUFDNUI7UUFFQSxPQUFPLEdBQUdpRCxNQUFNdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CO0lBRVVTLHFCQUEyQjtJQUNwQywwREFBMEQ7SUFDM0Q7SUFFT3FCLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVnpELFNBQVMsSUFBSSxDQUFDK0MsS0FBSztZQUNwQjtTQUNBO0lBQ0Y7QUFDRDtBQUVPLE1BQU14RCwrQkFBK0JFO0lBQ3hCMEMscUJBQTJCO1FBQzdDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNFLFFBQVEsQ0FBQzNDLHNCQUFzQjJDLFFBQVEsQ0FBQ3hDO0lBQzlDO0lBRU8yRCxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1Z6RCxTQUFTLElBQUksQ0FBQytDLEtBQUs7WUFDcEI7U0FDQTtJQUNGO0FBQ0QifQ==
@@ -16,7 +16,6 @@ class Gitignore {
16
16
  "dist",
17
17
  ".pnpm-store",
18
18
  ".env",
19
- ".env.local",
20
19
  ".DS_Store"
21
20
  ];
22
21
  files() {
@@ -29,4 +28,4 @@ class Gitignore {
29
28
  }
30
29
  }
31
30
 
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2dpdGlnbm9yZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBHaXRpZ25vcmUgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuR0lUSUdOT1JFO1xuXHRwcml2YXRlIGlnbm9yZUxpc3QgPSBbXG5cdFx0XCJub2RlX21vZHVsZXNcIixcblx0XHRcImRpc3RcIixcblx0XHRcIi5wbnBtLXN0b3JlXCIsXG5cdFx0XCIuZW52XCIsXG5cdFx0XCIuZW52LmxvY2FsXCIsXG5cdFx0XCIuRFNfU3RvcmVcIixcblx0XTtcblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZ2l0aWdub3JlXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IHRoaXMuaWdub3JlTGlzdC5qb2luKFwiXFxuXCIpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiR2l0aWdub3JlIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIkdJVElHTk9SRSIsImlnbm9yZUxpc3QiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7K0JBR2FBOzs7ZUFBQUE7Ozt1QkFIb0I7QUFHMUIsTUFBTUE7SUFDSUMsTUFBTUMsdUJBQWdCLENBQUNDLFNBQVMsQ0FBQztJQUN6Q0MsYUFBYTtRQUNwQjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDQSxDQUFDO0lBRUtDLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBUyxJQUFJLENBQUNILFVBQVUsQ0FBQ0ksSUFBSSxDQUFDO1lBQy9CO1NBQ0E7SUFDRjtBQUNEIn0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2dpdGlnbm9yZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBHaXRpZ25vcmUgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuR0lUSUdOT1JFO1xuXHRwcml2YXRlIGlnbm9yZUxpc3QgPSBbXCJub2RlX21vZHVsZXNcIiwgXCJkaXN0XCIsIFwiLnBucG0tc3RvcmVcIiwgXCIuZW52XCIsIFwiLkRTX1N0b3JlXCJdO1xuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5naXRpZ25vcmVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5pZ25vcmVMaXN0LmpvaW4oXCJcXG5cIiksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJHaXRpZ25vcmUiLCJrZXkiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiR0lUSUdOT1JFIiwiaWdub3JlTGlzdCIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50Iiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFHYUE7OztlQUFBQTs7O3VCQUhvQjtBQUcxQixNQUFNQTtJQUNJQyxNQUFNQyx1QkFBZ0IsQ0FBQ0MsU0FBUyxDQUFDO0lBQ3pDQyxhQUFhO1FBQUM7UUFBZ0I7UUFBUTtRQUFlO1FBQVE7S0FBWSxDQUFDO0lBRTNFQyxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVMsSUFBSSxDQUFDSCxVQUFVLENBQUNJLElBQUksQ0FBQztZQUMvQjtTQUNBO0lBQ0Y7QUFDRCJ9
@@ -60,8 +60,13 @@ class ProjectScaffold {
60
60
  class WorkspaceScaffold {
61
61
  files = [];
62
62
  targetDir = process.cwd();
63
- /** Derived from the basename of targetDir. */ get name() {
64
- return (0, _nodepath.basename)(this.targetDir);
63
+ _name;
64
+ /** Project name — host directory basename, not the in-container mount path. */ get name() {
65
+ return this._name ?? (0, _nodepath.basename)(this.targetDir);
66
+ }
67
+ setName(name) {
68
+ this._name = name;
69
+ return this;
65
70
  }
66
71
  /** Add an ad-hoc file provider whose output is included at render time. */ addFile(provider) {
67
72
  this.files.push(...provider.files());
@@ -123,4 +128,4 @@ class MonoRepoScaffold extends WorkspaceScaffold {
123
128
  }
124
129
  }
125
130
 
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3Byb2plY3QubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSwgU291cmNlRmlsZVByb3ZpZGVyIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuLyoqXG4gKiBBIHN1Yi11bml0IG9mIHRoZSBtb25vcmVwbyAoZS5nLiBgcHJvamVjdHMvYXBpYCkuXG4gKlxuICogTW9kZWxzIGFuZCBmaWxlcyByZWdpc3RlcmVkIGhlcmUgcHJvZHVjZSBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhlIHBhcmVudFxuICogYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhbmQgcHJlcGVuZHMgYGRpci9gIHRvIGV2ZXJ5IHBhdGgsIHNvXG4gKiBtb2RlbHMgcmVtYWluIHVuYXdhcmUgb2Ygd2hlcmUgdGhleSBsaXZlIGluIHRoZSByZXBvLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVjdFNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZGlyOiBzdHJpbmcpIHt9XG5cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0cHVibGljIGFkZEZpbGUocHJvdmlkZXI6IFNvdXJjZUZpbGVQcm92aWRlcik6IHRoaXMge1xuXHRcdHRoaXMuX2ZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3Rvcik7XG5cdH1cblxuXHQvKiogUmV0dXJucyBhbGwgZmlsZXMgd2l0aCBgZGlyL2AgcHJlcGVuZGVkIHRvIGVhY2ggcGF0aC4gKi9cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgYWxsID0gWy4uLnRoaXMuX2ZpbGVzLCAuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpXTtcblx0XHRyZXR1cm4gYWxsLm1hcCgoZikgPT4gKHsgZmlsZVBhdGg6IGAke3RoaXMuZGlyfS8ke2YuZmlsZVBhdGh9YCwgY29udGVudDogZi5jb250ZW50IH0pKTtcblx0fVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwdWJsaWMgcmVhZG9ubHkgZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXHRwdWJsaWMgdGFyZ2V0RGlyOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG5cdC8qKiBEZXJpdmVkIGZyb20gdGhlIGJhc2VuYW1lIG9mIHRhcmdldERpci4gKi9cblx0cHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGJhc2VuYW1lKHRoaXMudGFyZ2V0RGlyKTtcblx0fVxuXG5cdC8qKiBBZGQgYW4gYWQtaG9jIGZpbGUgcHJvdmlkZXIgd2hvc2Ugb3V0cHV0IGlzIGluY2x1ZGVkIGF0IHJlbmRlciB0aW1lLiAqL1xuXHRwdWJsaWMgYWRkRmlsZShwcm92aWRlcjogU291cmNlRmlsZVByb3ZpZGVyKTogdGhpcyB7XG5cdFx0dGhpcy5maWxlcy5wdXNoKC4uLnByb3ZpZGVyLmZpbGVzKCkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFic3RyYWN0IGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRNb2RlbDxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRNb2RlbHM8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oXG5cdFx0Y3RvcjogbmV3ICguLi5hcmdzOiBuZXZlcltdKSA9PiBULFxuXHQpOiBUW107XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRQcm9qZWN0KGRpcjogc3RyaW5nKTogUHJvamVjdFNjYWZmb2xkIHwgdW5kZWZpbmVkO1xuXHRwdWJsaWMgYWJzdHJhY3Qgc2NhZmZvbGQoKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNb25vUmVwb1NjYWZmb2xkIGV4dGVuZHMgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9tb2RlbHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlRmlsZVByb3ZpZGVyPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wcm9qZWN0czogUHJvamVjdFNjYWZmb2xkW10gPSBbXTtcblxuXHQvKiogUmVnaXN0ZXIgYSBuYW1lZCBwcm9qZWN0LiAqL1xuXHRwdWJsaWMgYWRkUHJvamVjdChwcm9qZWN0OiBQcm9qZWN0U2NhZmZvbGQpOiBQcm9qZWN0U2NhZmZvbGQge1xuXHRcdHRoaXMuX3Byb2plY3RzLnB1c2gocHJvamVjdCk7XG5cdFx0cmV0dXJuIHByb2plY3Q7XG5cdH1cblxuXHQvKiogUmV0cmlldmUgYSBwcmV2aW91c2x5LXJlZ2lzdGVyZWQgcHJvamVjdCBieSBpdHMgZGlyZWN0b3J5IHBhdGguICovXG5cdHB1YmxpYyBnZXRQcm9qZWN0KGRpcjogc3RyaW5nKTogUHJvamVjdFNjYWZmb2xkIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fcHJvamVjdHMuZmluZCgocCkgPT4gcC5kaXIgPT09IGRpcik7XG5cdH1cblxuXHQvKiogUmVnaXN0ZXIgYSBuYW1lZCBtb2RlbCBhdCB3b3Jrc3BhY2UgbGV2ZWwuICovXG5cdHB1YmxpYyBhZGRNb2RlbDxUIGV4dGVuZHMgS2V5ZWRNb2RlbD4obW9kZWw6IFQpOiBUIHtcblx0XHR0aGlzLl9tb2RlbHMuc2V0KG1vZGVsLmtleSwgbW9kZWwpO1xuXHRcdHJldHVybiBtb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIG1vZGVsIGJ5IGtleS4gU2VhcmNoZXMgd29ya3NwYWNlIG1vZGVscyBmaXJzdCwgdGhlbiBhbGxcblx0ICogcmVnaXN0ZXJlZCBwcm9qZWN0cyBpbiBvcmRlci5cblx0ICovXG5cdHB1YmxpYyBnZXRNb2RlbDxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG0gPSB0aGlzLl9tb2RlbHMuZ2V0KGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcblx0XHRpZiAobSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgdGhpcy5fcHJvamVjdHMpIHtcblx0XHRcdGNvbnN0IHBtID0gcHJvamVjdC5nZXRNb2RlbDxUPihrZXkpO1xuXHRcdFx0aWYgKHBtICE9PSB1bmRlZmluZWQpIHJldHVybiBwbTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhbGwgbW9kZWxzIG9mIGEgZ2l2ZW4gdHlwZS4gU2VhcmNoZXMgd29ya3NwYWNlIG1vZGVscyBhbmQgYWxsXG5cdCAqIHByb2plY3RzLCBzbyBmZWF0dXJlcyBjYW4gZGlzY292ZXIgY29udHJvbGxlcnMgYWNyb3NzIG11bHRpcGxlIHByb2plY3RzLlxuXHQgKi9cblx0cHVibGljIGdldE1vZGVsczxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihjdG9yOiBuZXcgKC4uLmFyZ3M6IG5ldmVyW10pID0+IFQpOiBUW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5maWx0ZXIoKG0pOiBtIGlzIFQgPT4gbSBpbnN0YW5jZW9mIGN0b3IpLFxuXHRcdFx0Li4udGhpcy5fcHJvamVjdHMuZmxhdE1hcCgocCkgPT4gcC5nZXRNb2RlbHMoY3RvcikpLFxuXHRcdF07XG5cdH1cblxuXHQvKiogUmVuZGVyIGFsbCBtb2RlbHMgYW5kIHByb2plY3RzIGludG8gZmlsZXMsIHRoZW4gd3JpdGUgZXZlcnl0aGluZyB0byBkaXNrLiAqL1xuXHRwdWJsaWMgYXN5bmMgc2NhZmZvbGQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWxsRmlsZXMgPSBbXG5cdFx0XHQuLi50aGlzLmZpbGVzLFxuXHRcdFx0Li4uWy4uLnRoaXMuX21vZGVscy52YWx1ZXMoKV0uZmxhdE1hcCgobSkgPT4gbS5maWxlcygpKSxcblx0XHRcdC4uLnRoaXMuX3Byb2plY3RzLmZsYXRNYXAoKHApID0+IHAuZmlsZXMoKSksXG5cdFx0XTtcblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0YWxsRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gam9pbih0aGlzLnRhcmdldERpciwgZmlsZS5maWxlUGF0aCk7XG5cdFx0XHRcdGF3YWl0IG1rZGlyKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0XHRcdFx0YXdhaXQgd3JpdGVGaWxlKGZ1bGxQYXRoLCBmaWxlLmNvbnRlbnQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIk1vbm9SZXBvU2NhZmZvbGQiLCJQcm9qZWN0U2NhZmZvbGQiLCJXb3Jrc3BhY2VTY2FmZm9sZCIsIl9tb2RlbHMiLCJNYXAiLCJfZmlsZXMiLCJkaXIiLCJhZGRNb2RlbCIsIm1vZGVsIiwic2V0Iiwia2V5IiwiYWRkRmlsZSIsInByb3ZpZGVyIiwicHVzaCIsImZpbGVzIiwiZ2V0TW9kZWwiLCJnZXQiLCJnZXRNb2RlbHMiLCJjdG9yIiwidmFsdWVzIiwiZmlsdGVyIiwibSIsImFsbCIsImZsYXRNYXAiLCJtYXAiLCJmIiwiZmlsZVBhdGgiLCJjb250ZW50IiwidGFyZ2V0RGlyIiwicHJvY2VzcyIsImN3ZCIsIm5hbWUiLCJiYXNlbmFtZSIsIl9wcm9qZWN0cyIsImFkZFByb2plY3QiLCJwcm9qZWN0IiwiZ2V0UHJvamVjdCIsImZpbmQiLCJwIiwidW5kZWZpbmVkIiwicG0iLCJzY2FmZm9sZCIsImFsbEZpbGVzIiwiUHJvbWlzZSIsImZpbGUiLCJmdWxsUGF0aCIsImpvaW4iLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJ3cml0ZUZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBa0VhQTtlQUFBQTs7UUF2REFDO2VBQUFBOztRQStCU0M7ZUFBQUE7OzswQkExQ1c7MEJBQ087QUFVakMsTUFBTUQ7O0lBQ0tFLFVBQVUsSUFBSUMsTUFBa0M7SUFDaERDLFNBQXVCLEVBQUUsQ0FBQztJQUUzQyxZQUFtQixBQUFnQkMsR0FBVyxDQUFFO2FBQWJBLE1BQUFBO0lBQWM7SUFFMUNDLFNB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
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3Byb2plY3QubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSwgU291cmNlRmlsZVByb3ZpZGVyIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuLyoqXG4gKiBBIHN1Yi11bml0IG9mIHRoZSBtb25vcmVwbyAoZS5nLiBgcHJvamVjdHMvYXBpYCkuXG4gKlxuICogTW9kZWxzIGFuZCBmaWxlcyByZWdpc3RlcmVkIGhlcmUgcHJvZHVjZSBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhlIHBhcmVudFxuICogYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhbmQgcHJlcGVuZHMgYGRpci9gIHRvIGV2ZXJ5IHBhdGgsIHNvXG4gKiBtb2RlbHMgcmVtYWluIHVuYXdhcmUgb2Ygd2hlcmUgdGhleSBsaXZlIGluIHRoZSByZXBvLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVjdFNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZGlyOiBzdHJpbmcpIHt9XG5cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0cHVibGljIGFkZEZpbGUocHJvdmlkZXI6IFNvdXJjZUZpbGVQcm92aWRlcik6IHRoaXMge1xuXHRcdHRoaXMuX2ZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3Rvcik7XG5cdH1cblxuXHQvKiogUmV0dXJucyBhbGwgZmlsZXMgd2l0aCBgZGlyL2AgcHJlcGVuZGVkIHRvIGVhY2ggcGF0aC4gKi9cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgYWxsID0gWy4uLnRoaXMuX2ZpbGVzLCAuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpXTtcblx0XHRyZXR1cm4gYWxsLm1hcCgoZikgPT4gKHsgZmlsZVBhdGg6IGAke3RoaXMuZGlyfS8ke2YuZmlsZVBhdGh9YCwgY29udGVudDogZi5jb250ZW50IH0pKTtcblx0fVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwdWJsaWMgcmVhZG9ubHkgZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXHRwdWJsaWMgdGFyZ2V0RGlyOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXHRwcml2YXRlIF9uYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqIFByb2plY3QgbmFtZSDigJQgaG9zdCBkaXJlY3RvcnkgYmFzZW5hbWUsIG5vdCB0aGUgaW4tY29udGFpbmVyIG1vdW50IHBhdGguICovXG5cdHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9uYW1lID8/IGJhc2VuYW1lKHRoaXMudGFyZ2V0RGlyKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROYW1lKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuX25hbWUgPSBuYW1lO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqIEFkZCBhbiBhZC1ob2MgZmlsZSBwcm92aWRlciB3aG9zZSBvdXRwdXQgaXMgaW5jbHVkZWQgYXQgcmVuZGVyIHRpbWUuICovXG5cdHB1YmxpYyBhZGRGaWxlKHByb3ZpZGVyOiBTb3VyY2VGaWxlUHJvdmlkZXIpOiB0aGlzIHtcblx0XHR0aGlzLmZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWJzdHJhY3QgYWRkTW9kZWw8VCBleHRlbmRzIEtleWVkTW9kZWw+KG1vZGVsOiBUKTogVDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZDtcblx0cHVibGljIGFic3RyYWN0IGdldE1vZGVsczxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihcblx0XHRjdG9yOiBuZXcgKC4uLmFyZ3M6IG5ldmVyW10pID0+IFQsXG5cdCk6IFRbXTtcblx0cHVibGljIGFic3RyYWN0IGdldFByb2plY3QoZGlyOiBzdHJpbmcpOiBQcm9qZWN0U2NhZmZvbGQgfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBzY2FmZm9sZCgpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIE1vbm9SZXBvU2NhZmZvbGQgZXh0ZW5kcyBXb3Jrc3BhY2VTY2FmZm9sZCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX21vZGVscyA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VGaWxlUHJvdmlkZXI+KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Byb2plY3RzOiBQcm9qZWN0U2NhZmZvbGRbXSA9IFtdO1xuXG5cdC8qKiBSZWdpc3RlciBhIG5hbWVkIHByb2plY3QuICovXG5cdHB1YmxpYyBhZGRQcm9qZWN0KHByb2plY3Q6IFByb2plY3RTY2FmZm9sZCk6IFByb2plY3RTY2FmZm9sZCB7XG5cdFx0dGhpcy5fcHJvamVjdHMucHVzaChwcm9qZWN0KTtcblx0XHRyZXR1cm4gcHJvamVjdDtcblx0fVxuXG5cdC8qKiBSZXRyaWV2ZSBhIHByZXZpb3VzbHktcmVnaXN0ZXJlZCBwcm9qZWN0IGJ5IGl0cyBkaXJlY3RvcnkgcGF0aC4gKi9cblx0cHVibGljIGdldFByb2plY3QoZGlyOiBzdHJpbmcpOiBQcm9qZWN0U2NhZmZvbGQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9wcm9qZWN0cy5maW5kKChwKSA9PiBwLmRpciA9PT0gZGlyKTtcblx0fVxuXG5cdC8qKiBSZWdpc3RlciBhIG5hbWVkIG1vZGVsIGF0IHdvcmtzcGFjZSBsZXZlbC4gKi9cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIGEgbW9kZWwgYnkga2V5LiBTZWFyY2hlcyB3b3Jrc3BhY2UgbW9kZWxzIGZpcnN0LCB0aGVuIGFsbFxuXHQgKiByZWdpc3RlcmVkIHByb2plY3RzIGluIG9yZGVyLlxuXHQgKi9cblx0cHVibGljIGdldE1vZGVsPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbSA9IHRoaXMuX21vZGVscy5nZXQoa2V5KSBhcyBUIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChtICE9PSB1bmRlZmluZWQpIHJldHVybiBtO1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiB0aGlzLl9wcm9qZWN0cykge1xuXHRcdFx0Y29uc3QgcG0gPSBwcm9qZWN0LmdldE1vZGVsPFQ+KGtleSk7XG5cdFx0XHRpZiAocG0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIHBtO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIGFsbCBtb2RlbHMgb2YgYSBnaXZlbiB0eXBlLiBTZWFyY2hlcyB3b3Jrc3BhY2UgbW9kZWxzIGFuZCBhbGxcblx0ICogcHJvamVjdHMsIHNvIGZlYXR1cmVzIGNhbiBkaXNjb3ZlciBjb250cm9sbGVycyBhY3Jvc3MgbXVsdGlwbGUgcHJvamVjdHMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLlsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3RvciksXG5cdFx0XHQuLi50aGlzLl9wcm9qZWN0cy5mbGF0TWFwKChwKSA9PiBwLmdldE1vZGVscyhjdG9yKSksXG5cdFx0XTtcblx0fVxuXG5cdC8qKiBSZW5kZXIgYWxsIG1vZGVscyBhbmQgcHJvamVjdHMgaW50byBmaWxlcywgdGhlbiB3cml0ZSBldmVyeXRoaW5nIHRvIGRpc2suICovXG5cdHB1YmxpYyBhc3luYyBzY2FmZm9sZCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhbGxGaWxlcyA9IFtcblx0XHRcdC4uLnRoaXMuZmlsZXMsXG5cdFx0XHQuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpLFxuXHRcdFx0Li4udGhpcy5fcHJvamVjdHMuZmxhdE1hcCgocCkgPT4gcC5maWxlcygpKSxcblx0XHRdO1xuXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRhbGxGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+IHtcblx0XHRcdFx0Y29uc3QgZnVsbFBhdGggPSBqb2luKHRoaXMudGFyZ2V0RGlyLCBmaWxlLmZpbGVQYXRoKTtcblx0XHRcdFx0YXdhaXQgbWtkaXIoZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXHRcdFx0XHRhd2FpdCB3cml0ZUZpbGUoZnVsbFBhdGgsIGZpbGUuY29udGVudCk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiTW9ub1JlcG9TY2FmZm9sZCIsIlByb2plY3RTY2FmZm9sZCIsIldvcmtzcGFjZVNjYWZmb2xkIiwiX21vZGVscyIsIk1hcCIsIl9maWxlcyIsImRpciIsImFkZE1vZGVsIiwibW9kZWwiLCJzZXQiLCJrZXkiLCJhZGRGaWxlIiwicHJvdmlkZXIiLCJwdXNoIiwiZmlsZXMiLCJnZXRNb2RlbCIsImdldCIsImdldE1vZGVscyIsImN0b3IiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJtIiwiYWxsIiwiZmxhdE1hcCIsIm1hcCIsImYiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJ0YXJnZXREaXIiLCJwcm9jZXNzIiwiY3dkIiwiX25hbWUiLCJuYW1lIiwiYmFzZW5hbWUiLCJzZXROYW1lIiwiX3Byb2plY3RzIiwiYWRkUHJvamVjdCIsInByb2plY3QiLCJnZXRQcm9qZWN0IiwiZmluZCIsInAiLCJ1bmRlZmluZWQiLCJwbSIsInNjYWZmb2xkIiwiYWxsRmlsZXMiLCJQcm9taXNlIiwiZmlsZSIsImZ1bGxQYXRoIiwiam9pbiIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZSJd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
@@ -16,9 +16,15 @@ const _version = require("./version.js");
16
16
  const BUILDER_IMAGE = `${_version.CREATE_IMAGE_REPOSITORY}:${_version.CREATE_VERSION}`;
17
17
  function runInBuilder(opts) {
18
18
  const targetDir = (0, _nodepath.resolve)(opts.d ?? ".");
19
+ const projectName = (0, _nodepath.basename)(targetDir);
19
20
  (0, _nodefs.mkdirSync)(targetDir, {
20
21
  recursive: true
21
22
  });
23
+ // Host-owned so initializeCommand can always write here even if something
24
+ // else in .devcontainer ends up oddly owned.
25
+ (0, _nodefs.mkdirSync)((0, _nodepath.resolve)(targetDir, ".devcontainer", "npm-auth"), {
26
+ recursive: true
27
+ });
22
28
  // Ensure Docker is available.
23
29
  try {
24
30
  (0, _nodechild_process.execFileSync)("docker", [
@@ -30,16 +36,47 @@ function runInBuilder(opts) {
30
36
  console.error("\n Docker is required to scaffold a Decohere project.\n" + " Install Docker Desktop: https://www.docker.com/products/docker-desktop\n");
31
37
  process.exit(1);
32
38
  }
39
+ const hostUid = process.getuid?.();
40
+ const hostGid = process.getgid?.() ?? hostUid;
41
+ const runAsHostUser = hostUid != null && hostGid != null;
42
+ // Anonymous root-owned volumes are not writable when we drop privileges.
43
+ const npmCacheDir = (0, _nodepath.resolve)((0, _nodeos.homedir)(), ".cache/decohere-create/npm");
44
+ (0, _nodefs.mkdirSync)(npmCacheDir, {
45
+ recursive: true
46
+ });
33
47
  const volumes = [
34
48
  "-v",
35
49
  `${targetDir}:/workspace`,
36
50
  "-v",
37
- "/npm-cache"
51
+ `${npmCacheDir}:/npm-cache`
52
+ ];
53
+ const envArgs = [
54
+ "-e",
55
+ "DECOHERE_BUILDER=1",
56
+ // Host dir basename — container cwd is /workspace so basename would be wrong.
57
+ "-e",
58
+ `DECOHERE_PROJECT_NAME=${projectName}`,
59
+ "-e",
60
+ "NPM_CONFIG_CACHE=/npm-cache",
61
+ "-e",
62
+ "NPM_CONFIG_PREFER_OFFLINE=true",
63
+ // Writable HOME for npm / auth0 CLI when not running as image root/node.
64
+ "-e",
65
+ "HOME=/tmp/decohere-create-home"
38
66
  ];
39
- // Mount host .npmrc for private registry credentials, if present.
67
+ // Mount host .npmrc where the non-root process can read it.
40
68
  const npmrcPath = (0, _nodepath.resolve)((0, _nodeos.homedir)(), ".npmrc");
41
69
  if ((0, _nodefs.existsSync)(npmrcPath)) {
42
- volumes.push("-v", `${npmrcPath}:/root/.npmrc:ro`);
70
+ volumes.push("-v", `${npmrcPath}:/tmp/host-npmrc:ro`);
71
+ envArgs.push("-e", "NPM_CONFIG_USERCONFIG=/tmp/host-npmrc");
72
+ }
73
+ const userArgs = [];
74
+ if (runAsHostUser) {
75
+ userArgs.push("--user", `${hostUid}:${hostGid}`);
76
+ } else if (hostUid != null) {
77
+ // Fallback for environments without getgid: keep legacy chown path.
78
+ envArgs.push("-e", `HOST_UID=${hostUid}`);
79
+ if (hostGid != null) envArgs.push("-e", `HOST_GID=${hostGid}`);
43
80
  }
44
81
  const commandArgs = [
45
82
  "webapi",
@@ -70,13 +107,9 @@ function runInBuilder(opts) {
70
107
  "run",
71
108
  "--rm",
72
109
  ...ttyFlags,
110
+ ...userArgs,
73
111
  ...volumes,
74
- "-e",
75
- "DECOHERE_BUILDER=1",
76
- "-e",
77
- "NPM_CONFIG_CACHE=/npm-cache",
78
- "-e",
79
- "NPM_CONFIG_PREFER_OFFLINE=true",
112
+ ...envArgs,
80
113
  "-w",
81
114
  "/workspace",
82
115
  BUILDER_IMAGE,
@@ -90,4 +123,4 @@ function runInBuilder(opts) {
90
123
  process.exit(result.status ?? 0);
91
124
  }
92
125
 
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENSRUFURV9JTUFHRV9SRVBPU0lUT1JZLCBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmNvbnN0IEJVSUxERVJfSU1BR0UgPSBgJHtDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWX06JHtDUkVBVEVfVkVSU0lPTn1gO1xuXG4vKipcbiAqIFJ1biB0aGUgc2NhZmZvbGQgaW5zaWRlIGEgcHJlLWJ1aWx0IERvY2tlciBidWlsZGVyIGltYWdlLlxuICpcbiAqIENhbGxlZCB3aGVuIGBERUNPSEVSRV9CVUlMREVSYCBpcyBub3Qgc2V0IOKAlCBpLmUuIHRoZSBDTEkgaXMgcnVubmluZyBvbiB0aGVcbiAqIGhvc3QsIG91dHNpZGUgdGhlIGNvbnRhaW5lci4gTW91bnRzIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFzIGAvd29ya3NwYWNlYCBzb1xuICogdGhlIHNjYWZmb2xkZWQgZmlsZXMgYXJlIHdyaXR0ZW4gYmFjayB0byB0aGUgaG9zdCBmaWxlc3lzdGVtLlxuICpcbiAqIElmIGB+Ly5jb25maWcvYXV0aDBgIGV4aXN0cyBvbiB0aGUgaG9zdCB0aGUgZGlyZWN0b3J5IGlzIGFsc28gbW91bnRlZCBzb1xuICogdGhlIGF1dGgwIENMSSBpbnNpZGUgdGhlIGNvbnRhaW5lciBjYW4gcmV1c2UgZXhpc3RpbmcgY3JlZGVudGlhbHMgc2lsZW50bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRta2RpclN5bmModGFyZ2V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHQvLyBFbnN1cmUgRG9ja2VyIGlzIGF2YWlsYWJsZS5cblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJkb2NrZXJcIiwgW1wiaW5mb1wiXSwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgRG9ja2VyIGlzIHJlcXVpcmVkIHRvIHNjYWZmb2xkIGEgRGVjb2hlcmUgcHJvamVjdC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsIERvY2tlciBEZXNrdG9wOiBodHRwczovL3d3dy5kb2NrZXIuY29tL3Byb2R1Y3RzL2RvY2tlci1kZXNrdG9wXFxuXCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcIi12XCIsIGAke3RhcmdldERpcn06L3dvcmtzcGFjZWAsIFwiLXZcIiwgXCIvbnBtLWNhY2hlXCJdO1xuXG5cdC8vIE1vdW50IGhvc3QgLm5wbXJjIGZvciBwcml2YXRlIHJlZ2lzdHJ5IGNyZWRlbnRpYWxzLCBpZiBwcmVzZW50LlxuXHRjb25zdCBucG1yY1BhdGggPSByZXNvbHZlKGhvbWVkaXIoKSwgXCIubnBtcmNcIik7XG5cdGlmIChleGlzdHNTeW5jKG5wbXJjUGF0aCkpIHtcblx0XHR2b2x1bWVzLnB1c2goXCItdlwiLCBgJHtucG1yY1BhdGh9Oi9yb290Ly5ucG1yYzpyb2ApO1xuXHR9XG5cblx0Y29uc3QgY29tbWFuZEFyZ3M6IHN0cmluZ1tdID0gW1wid2ViYXBpXCIsIFwiLWRcIiwgXCIuXCJdO1xuXHRpZiAob3B0cy5kYXRhYmFzZVByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1kYXRhYmFzZVwiLCBvcHRzLmRhdGFiYXNlUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLmF1dGhQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tYXV0aFwiLCBvcHRzLmF1dGhQcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMucG9zdG1hblByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1wb3N0bWFuXCIsIG9wdHMucG9zdG1hblByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5pbnN0YWxsRGVwZW5kZW5jaWVzICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1pbnN0YWxsXCIsIG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIiAgUnVubmluZyBzY2FmZm9sZGluZyBpbiBhIHNhbmRib3hlZCBjb250YWluZXIuLi5cXG5cIik7XG5cblx0Ly8gT25seSBhbGxvY2F0ZSBhIFRUWSB3aGVuIHN0ZGluIGlzIGl0c2VsZiBhIFRUWSDigJQgYXZvaWRzIGEgaHVuZyBwcm9jZXNzXG5cdC8vIGluIG5vbi1pbnRlcmFjdGl2ZSBlbnZpcm9ubWVudHMgKHBpcGVzLCBDSSwgc2NyaXB0cykuXG5cdGNvbnN0IHR0eUZsYWdzID0gcHJvY2Vzcy5zdGRpbi5pc1RUWSA/IFtcIi1pdFwiXSA6IFtcIi1pXCJdO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcblx0XHRcImRvY2tlclwiLFxuXHRcdFtcblx0XHRcdFwicnVuXCIsXG5cdFx0XHRcIi0tcm1cIixcblx0XHRcdC4uLnR0eUZsYWdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdFwiLWVcIixcblx0XHRcdFwiREVDT0hFUkVfQlVJTERFUj0xXCIsXG5cdFx0XHRcIi1lXCIsXG5cdFx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFx0XCItZVwiLFxuXHRcdFx0XCJOUE1fQ09ORklHX1BSRUZFUl9PRkZMSU5FPXRydWVcIixcblx0XHRcdFwiLXdcIixcblx0XHRcdFwiL3dvcmtzcGFjZVwiLFxuXHRcdFx0QlVJTERFUl9JTUFHRSxcblx0XHRcdC4uLmNvbW1hbmRBcmdzLFxuXHRcdF0sXG5cdFx0eyBzdGRpbzogXCJpbmhlcml0XCIgfSxcblx0KTtcblxuXHRpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xuXHRcdGNvbnNvbGUubG9nKGBcXG4gIFNjYWZmb2xkIGNvbXBsZXRlIVxcblxcbiAgT3BlbiB5b3VyIHByb2plY3Q6XFxuXFxuICAgIGNvZGUgJHt0YXJnZXREaXJ9XFxuYCk7XG5cdH1cblxuXHRwcm9jZXNzLmV4aXQocmVzdWx0LnN0YXR1cyA/PyAwKTtcbn1cbiJdLCJuYW1lcyI6WyJydW5JbkJ1aWxkZXIiLCJCVUlMREVSX0lNQUdFIiwiQ1JFQVRFX0lNQUdFX1JFUE9TSVRPUlkiLCJDUkVBVEVfVkVSU0lPTiIsIm9wdHMiLCJ0YXJnZXREaXIiLCJyZXNvbHZlIiwiZCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsImV4ZWNGaWxlU3luYyIsInN0ZGlvIiwiY29uc29sZSIsImVycm9yIiwicHJvY2VzcyIsImV4aXQiLCJ2b2x1bWVzIiwibnBtcmNQYXRoIiwiaG9tZWRpciIsImV4aXN0c1N5bmMiLCJwdXNoIiwiY29tbWFuZEFyZ3MiLCJkYXRhYmFzZVByb3ZpZGVyIiwiYXV0aFByb3ZpZGVyIiwicG9zdG1hblByb3ZpZGVyIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsImxvZyIsInR0eUZsYWdzIiwic3RkaW4iLCJpc1RUWSIsInJlc3VsdCIsInNwYXduU3luYyIsInN0YXR1cyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFtQmdCQTs7O2VBQUFBOzs7bUNBbkJ3Qjt3QkFDRjt3QkFDZDswQkFDQTt5QkFDZ0M7QUFHeEQsTUFBTUMsZ0JBQWdCLEdBQUdDLGdDQUF1QixDQUFDLENBQUMsRUFBRUMsdUJBQWMsRUFBRTtBQVk3RCxTQUFTSCxhQUFhSSxJQUFnQjtJQUM1QyxNQUFNQyxZQUFZQyxJQUFBQSxpQkFBTyxFQUFDRixLQUFLRyxDQUFDLElBQUk7SUFDcENDLElBQUFBLGlCQUFTLEVBQUNILFdBQVc7UUFBRUksV0FBVztJQUFLO0lBRXZDLDhCQUE4QjtJQUM5QixJQUFJO1FBQ0hDLElBQUFBLCtCQUFZLEVBQUMsVUFBVTtZQUFDO1NBQU8sRUFBRTtZQUFFQyxPQUFPO1FBQU87SUFDbEQsRUFBRSxPQUFNO1FBQ1BDLFFBQVFDLEtBQUssQ0FDWiw2REFDQztRQUVGQyxRQUFRQyxJQUFJLENBQUM7SUFDZDtJQUVBLE1BQU1DLFVBQW9CO1FBQUM7UUFBTSxHQUFHWCxVQUFVLFdBQVcsQ0FBQztRQUFFO1FBQU07S0FBYTtJQUUvRSxrRUFBa0U7SUFDbEUsTUFBTVksWUFBWVgsSUFBQUEsaUJBQU8sRUFBQ1ksSUFBQUEsZUFBTyxLQUFJO0lBQ3JDLElBQUlDLElBQUFBLGtCQUFVLEVBQUNGLFlBQVk7UUFDMUJELFFBQVFJLElBQUksQ0FBQyxNQUFNLEdBQUdILFVBQVUsZ0JBQWdCLENBQUM7SUFDbEQ7SUFFQSxNQUFNSSxjQUF3QjtRQUFDO1FBQVU7UUFBTTtLQUFJO0lBQ25ELElBQUlqQixLQUFLa0IsZ0JBQWdCLElBQUksTUFBTTtRQUNsQ0QsWUFBWUQsSUFBSSxDQUFDLGNBQWNoQixLQUFLa0IsZ0JBQWdCO0lBQ3JEO0lBQ0EsSUFBSWxCLEtBQUttQixZQUFZLElBQUksTUFBTTtRQUM5QkYsWUFBWUQsSUFBSSxDQUFDLFVBQVVoQixLQUFLbUIsWUFBWTtJQUM3QztJQUNBLElBQUluQixLQUFLb0IsZUFBZSxJQUFJLE1BQU07UUFDakNILFlBQVlELElBQUksQ0FBQyxhQUFhaEIsS0FBS29CLGVBQWU7SUFDbkQ7SUFDQSxJQUFJcEIsS0FBS3FCLG1CQUFtQixJQUFJLE1BQU07UUFDckNKLFlBQVlELElBQUksQ0FBQyxhQUFhaEIsS0FBS3FCLG1CQUFtQjtJQUN2RDtJQUVBYixRQUFRYyxHQUFHLENBQUM7SUFFWix5RUFBeUU7SUFDekUsd0RBQXdEO0lBQ3hELE1BQU1DLFdBQVdiLFFBQVFjLEtBQUssQ0FBQ0MsS0FBSyxHQUFHO1FBQUM7S0FBTSxHQUFHO1FBQUM7S0FBSztJQUV2RCxNQUFNQyxTQUFTQyxJQUFBQSw0QkFBUyxFQUN2QixVQUNBO1FBQ0M7UUFDQTtXQUNHSjtXQUNBWDtRQUNIO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQWY7V0FDR29CO0tBQ0gsRUFDRDtRQUFFVixPQUFPO0lBQVU7SUFHcEIsSUFBSW1CLE9BQU9FLE1BQU0sS0FBSyxHQUFHO1FBQ3hCcEIsUUFBUWMsR0FBRyxDQUFDLENBQUMsMkRBQTJELEVBQUVyQixVQUFVLEVBQUUsQ0FBQztJQUN4RjtJQUVBUyxRQUFRQyxJQUFJLENBQUNlLE9BQU9FLE1BQU0sSUFBSTtBQUMvQiJ9
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSwgQ1JFQVRFX1ZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaU9wdGlvbnMgfSBmcm9tIFwiLi93ZWJhcGkvY3JlYXRlLWFwaS5qc1wiO1xuXG5jb25zdCBCVUlMREVSX0lNQUdFID0gYCR7Q1JFQVRFX0lNQUdFX1JFUE9TSVRPUll9OiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBSdW4gdGhlIHNjYWZmb2xkIGluc2lkZSBhIHByZS1idWlsdCBEb2NrZXIgYnVpbGRlciBpbWFnZS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBgREVDT0hFUkVfQlVJTERFUmAgaXMgbm90IHNldCDigJQgaS5lLiB0aGUgQ0xJIGlzIHJ1bm5pbmcgb24gdGhlXG4gKiBob3N0LCBvdXRzaWRlIHRoZSBjb250YWluZXIuIE1vdW50cyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBgL3dvcmtzcGFjZWAgc29cbiAqIHRoZSBzY2FmZm9sZGVkIGZpbGVzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGhvc3QgZmlsZXN5c3RlbS5cbiAqXG4gKiBUaGUgY29udGFpbmVyIHJ1bnMgYXMgdGhlIGhvc3QgdWlkL2dpZCB3aGVuZXZlciBwb3NzaWJsZSBzbyBzY2FmZm9sZGVkIGZpbGVzXG4gKiBhcmUgbmV2ZXIgcm9vdC1vd25lZCAocG9zdC1ob2MgYGNob3duYCBpcyB1bnJlbGlhYmxlIGFjcm9zcyBEb2NrZXIgc2V0dXBzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkluQnVpbGRlcihvcHRzOiBBcGlPcHRpb25zKTogbmV2ZXIge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKG9wdHMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHByb2plY3ROYW1lID0gYmFzZW5hbWUodGFyZ2V0RGlyKTtcblx0bWtkaXJTeW5jKHRhcmdldERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cdC8vIEhvc3Qtb3duZWQgc28gaW5pdGlhbGl6ZUNvbW1hbmQgY2FuIGFsd2F5cyB3cml0ZSBoZXJlIGV2ZW4gaWYgc29tZXRoaW5nXG5cdC8vIGVsc2UgaW4gLmRldmNvbnRhaW5lciBlbmRzIHVwIG9kZGx5IG93bmVkLlxuXHRta2RpclN5bmMocmVzb2x2ZSh0YXJnZXREaXIsIFwiLmRldmNvbnRhaW5lclwiLCBcIm5wbS1hdXRoXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHQvLyBFbnN1cmUgRG9ja2VyIGlzIGF2YWlsYWJsZS5cblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJkb2NrZXJcIiwgW1wiaW5mb1wiXSwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgRG9ja2VyIGlzIHJlcXVpcmVkIHRvIHNjYWZmb2xkIGEgRGVjb2hlcmUgcHJvamVjdC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsIERvY2tlciBEZXNrdG9wOiBodHRwczovL3d3dy5kb2NrZXIuY29tL3Byb2R1Y3RzL2RvY2tlci1kZXNrdG9wXFxuXCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCBob3N0VWlkID0gcHJvY2Vzcy5nZXR1aWQ/LigpO1xuXHRjb25zdCBob3N0R2lkID0gcHJvY2Vzcy5nZXRnaWQ/LigpID8/IGhvc3RVaWQ7XG5cdGNvbnN0IHJ1bkFzSG9zdFVzZXIgPSBob3N0VWlkICE9IG51bGwgJiYgaG9zdEdpZCAhPSBudWxsO1xuXG5cdC8vIEFub255bW91cyByb290LW93bmVkIHZvbHVtZXMgYXJlIG5vdCB3cml0YWJsZSB3aGVuIHdlIGRyb3AgcHJpdmlsZWdlcy5cblx0Y29uc3QgbnBtQ2FjaGVEaXIgPSByZXNvbHZlKGhvbWVkaXIoKSwgXCIuY2FjaGUvZGVjb2hlcmUtY3JlYXRlL25wbVwiKTtcblx0bWtkaXJTeW5jKG5wbUNhY2hlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcblx0XHRcIi12XCIsXG5cdFx0YCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCxcblx0XHRcIi12XCIsXG5cdFx0YCR7bnBtQ2FjaGVEaXJ9Oi9ucG0tY2FjaGVgLFxuXHRdO1xuXG5cdGNvbnN0IGVudkFyZ3M6IHN0cmluZ1tdID0gW1xuXHRcdFwiLWVcIixcblx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdC8vIEhvc3QgZGlyIGJhc2VuYW1lIOKAlCBjb250YWluZXIgY3dkIGlzIC93b3Jrc3BhY2Ugc28gYmFzZW5hbWUgd291bGQgYmUgd3JvbmcuXG5cdFx0XCItZVwiLFxuXHRcdGBERUNPSEVSRV9QUk9KRUNUX05BTUU9JHtwcm9qZWN0TmFtZX1gLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFwiLWVcIixcblx0XHRcIk5QTV9DT05GSUdfUFJFRkVSX09GRkxJTkU9dHJ1ZVwiLFxuXHRcdC8vIFdyaXRhYmxlIEhPTUUgZm9yIG5wbSAvIGF1dGgwIENMSSB3aGVuIG5vdCBydW5uaW5nIGFzIGltYWdlIHJvb3Qvbm9kZS5cblx0XHRcIi1lXCIsXG5cdFx0XCJIT01FPS90bXAvZGVjb2hlcmUtY3JlYXRlLWhvbWVcIixcblx0XTtcblxuXHQvLyBNb3VudCBob3N0IC5ucG1yYyB3aGVyZSB0aGUgbm9uLXJvb3QgcHJvY2VzcyBjYW4gcmVhZCBpdC5cblx0Y29uc3QgbnBtcmNQYXRoID0gcmVzb2x2ZShob21lZGlyKCksIFwiLm5wbXJjXCIpO1xuXHRpZiAoZXhpc3RzU3luYyhucG1yY1BhdGgpKSB7XG5cdFx0dm9sdW1lcy5wdXNoKFwiLXZcIiwgYCR7bnBtcmNQYXRofTovdG1wL2hvc3QtbnBtcmM6cm9gKTtcblx0XHRlbnZBcmdzLnB1c2goXCItZVwiLCBcIk5QTV9DT05GSUdfVVNFUkNPTkZJRz0vdG1wL2hvc3QtbnBtcmNcIik7XG5cdH1cblxuXHRjb25zdCB1c2VyQXJnczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHJ1bkFzSG9zdFVzZXIpIHtcblx0XHR1c2VyQXJncy5wdXNoKFwiLS11c2VyXCIsIGAke2hvc3RVaWR9OiR7aG9zdEdpZH1gKTtcblx0fSBlbHNlIGlmIChob3N0VWlkICE9IG51bGwpIHtcblx0XHQvLyBGYWxsYmFjayBmb3IgZW52aXJvbm1lbnRzIHdpdGhvdXQgZ2V0Z2lkOiBrZWVwIGxlZ2FjeSBjaG93biBwYXRoLlxuXHRcdGVudkFyZ3MucHVzaChcIi1lXCIsIGBIT1NUX1VJRD0ke2hvc3RVaWR9YCk7XG5cdFx0aWYgKGhvc3RHaWQgIT0gbnVsbCkgZW52QXJncy5wdXNoKFwiLWVcIiwgYEhPU1RfR0lEPSR7aG9zdEdpZH1gKTtcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmRBcmdzOiBzdHJpbmdbXSA9IFtcIndlYmFwaVwiLCBcIi1kXCIsIFwiLlwiXTtcblx0aWYgKG9wdHMuZGF0YWJhc2VQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tZGF0YWJhc2VcIiwgb3B0cy5kYXRhYmFzZVByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5hdXRoUHJvdmlkZXIgIT0gbnVsbCkge1xuXHRcdGNvbW1hbmRBcmdzLnB1c2goXCItLWF1dGhcIiwgb3B0cy5hdXRoUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLnBvc3RtYW5Qcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tcG9zdG1hblwiLCBvcHRzLnBvc3RtYW5Qcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0taW5zdGFsbFwiLCBvcHRzLmluc3RhbGxEZXBlbmRlbmNpZXMpO1xuXHR9XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdC8vIE9ubHkgYWxsb2NhdGUgYSBUVFkgd2hlbiBzdGRpbiBpcyBpdHNlbGYgYSBUVFkg4oCUIGF2b2lkcyBhIGh1bmcgcHJvY2Vzc1xuXHQvLyBpbiBub24taW50ZXJhY3RpdmUgZW52aXJvbm1lbnRzIChwaXBlcywgQ0ksIHNjcmlwdHMpLlxuXHRjb25zdCB0dHlGbGFncyA9IHByb2Nlc3Muc3RkaW4uaXNUVFkgPyBbXCItaXRcIl0gOiBbXCItaVwiXTtcblxuXHRjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoXG5cdFx0XCJkb2NrZXJcIixcblx0XHRbXG5cdFx0XHRcInJ1blwiLFxuXHRcdFx0XCItLXJtXCIsXG5cdFx0XHQuLi50dHlGbGFncyxcblx0XHRcdC4uLnVzZXJBcmdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdC4uLmVudkFyZ3MsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcblx0XHRjb25zb2xlLmxvZyhgXFxuICBTY2FmZm9sZCBjb21wbGV0ZSFcXG5cXG4gIE9wZW4geW91ciBwcm9qZWN0OlxcblxcbiAgICBjb2RlICR7dGFyZ2V0RGlyfVxcbmApO1xuXHR9XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsicnVuSW5CdWlsZGVyIiwiQlVJTERFUl9JTUFHRSIsIkNSRUFURV9JTUFHRV9SRVBPU0lUT1JZIiwiQ1JFQVRFX1ZFUlNJT04iLCJvcHRzIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsImQiLCJwcm9qZWN0TmFtZSIsImJhc2VuYW1lIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwiZXhlY0ZpbGVTeW5jIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsImhvc3RVaWQiLCJnZXR1aWQiLCJob3N0R2lkIiwiZ2V0Z2lkIiwicnVuQXNIb3N0VXNlciIsIm5wbUNhY2hlRGlyIiwiaG9tZWRpciIsInZvbHVtZXMiLCJlbnZBcmdzIiwibnBtcmNQYXRoIiwiZXhpc3RzU3luYyIsInB1c2giLCJ1c2VyQXJncyIsImNvbW1hbmRBcmdzIiwiZGF0YWJhc2VQcm92aWRlciIsImF1dGhQcm92aWRlciIsInBvc3RtYW5Qcm92aWRlciIsImluc3RhbGxEZXBlbmRlbmNpZXMiLCJsb2ciLCJ0dHlGbGFncyIsInN0ZGluIiwiaXNUVFkiLCJyZXN1bHQiLCJzcGF3blN5bmMiLCJzdGF0dXMiXSwibWFwcGluZ3MiOiI7Ozs7K0JBbUJnQkE7OztlQUFBQTs7O21DQW5Cd0I7d0JBQ0Y7d0JBQ2Q7MEJBQ1U7eUJBQ3NCO0FBR3hELE1BQU1DLGdCQUFnQixHQUFHQyxnQ0FBdUIsQ0FBQyxDQUFDLEVBQUVDLHVCQUFjLEVBQUU7QUFZN0QsU0FBU0gsYUFBYUksSUFBZ0I7SUFDNUMsTUFBTUMsWUFBWUMsSUFBQUEsaUJBQU8sRUFBQ0YsS0FBS0csQ0FBQyxJQUFJO0lBQ3BDLE1BQU1DLGNBQWNDLElBQUFBLGtCQUFRLEVBQUNKO0lBQzdCSyxJQUFBQSxpQkFBUyxFQUFDTCxXQUFXO1FBQUVNLFdBQVc7SUFBSztJQUN2QywwRUFBMEU7SUFDMUUsNkNBQTZDO0lBQzdD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
@@ -47,12 +47,14 @@ const features = [
47
47
  ];
48
48
  async function scaffoldApi(cliOptions) {
49
49
  const targetDir = (0, _nodepath.resolve)(cliOptions.d ?? ".");
50
- const workspace = createWorkspace(targetDir);
50
+ const projectName = cliOptions.projectName?.trim() || process.env.DECOHERE_PROJECT_NAME?.trim() || (0, _nodepath.basename)(targetDir);
51
+ const workspace = createWorkspace(targetDir, projectName);
51
52
  await _scaffoldservice.ScaffoldService.scaffold(workspace, cliOptions, features);
52
53
  }
53
- function createWorkspace(targetDir) {
54
+ function createWorkspace(targetDir, projectName) {
54
55
  const monoRepo = new _projectmodel.MonoRepoScaffold();
55
56
  monoRepo.targetDir = targetDir;
57
+ monoRepo.setName(projectName);
56
58
  const name = monoRepo.name;
57
59
  const compose = new _composemodel.DockerCompose().setProjectName(name).addNetwork(name, {
58
60
  name: `samples-${name}`
@@ -154,24 +156,29 @@ function createWorkspace(targetDir) {
154
156
  }
155
157
  ]
156
158
  });
157
- // NPM token placeholder — gitignored, set manually after scaffold
158
159
  monoRepo.addFile({
159
160
  files: ()=>[
160
- {
161
- filePath: ".env.local",
162
- content: "# Set your npm access token here (created with: npm token create)\nNPM_TOKEN=\n"
163
- },
164
161
  {
165
162
  filePath: ".devcontainer/initialize.sh",
166
163
  content: [
167
164
  "#!/usr/bin/env bash",
168
165
  "# Runs on the host before the container is created (devcontainer initializeCommand).",
169
166
  "# Creates npm-auth as the host user so the bind mount is not root-owned.",
167
+ "# Do not scaffold npm-auth/ from the builder (that runs as root).",
170
168
  "set -euo pipefail",
171
169
  "",
172
170
  'root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"',
173
171
  'npm_dir="$root/.devcontainer/npm-auth"',
174
- 'mkdir -p "$npm_dir"',
172
+ 'if ! mkdir -p "$npm_dir" 2>/dev/null; then',
173
+ '\techo "Cannot create $npm_dir (permission denied)." >&2',
174
+ '\techo "The scaffold container likely left .devcontainer root-owned. Fix with:" >&2',
175
+ '\techo " sudo chown -R \\"$USER:$USER\\" \\"$root\\"" >&2',
176
+ "\texit 1",
177
+ "fi",
178
+ "{",
179
+ '\techo "*"',
180
+ '\techo "!.gitignore"',
181
+ '} >"$npm_dir/.gitignore"',
175
182
  "",
176
183
  'if [[ ! -f "$npm_dir/.npmrc" ]]; then',
177
184
  '\tif [[ -f "${HOME}/.npmrc" ]]; then',
@@ -206,10 +213,6 @@ function createWorkspace(targetDir) {
206
213
  "exit 1",
207
214
  ""
208
215
  ].join("\n")
209
- },
210
- {
211
- filePath: ".devcontainer/npm-auth/.gitignore",
212
- content: "*\n!.gitignore\n"
213
216
  }
214
217
  ]
215
218
  });
@@ -226,4 +229,4 @@ function createWorkspace(targetDir) {
226
229
  return monoRepo;
227
230
  }
228
231
 
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnTW9kZWwsIFNhbXBsZVNlcnZpY2VNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwuanNcIjtcbmltcG9ydCB7IFdlYmFwaURldkNvbnRhaW5lciB9IGZyb20gXCIuL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IFwicHJvamVjdHMvYXBpXCI7XG5cbmV4cG9ydCB0eXBlIEFwaU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0cG9zdG1hblByb3ZpZGVyPzogXCJhcGlcIiB8IFwibG9jYWxcIiB8IFwibm9uZVwiO1xuXHRpbnN0YWxsRGVwZW5kZW5jaWVzPzogXCJ5ZXNcIiB8IFwibm9cIjtcbn07XG5cbmNvbnN0IGZlYXR1cmVzID0gW0RhdGFiYXNlRmVhdHVyZSwgQXV0aEZlYXR1cmUsIFBvc3RtYW5GZWF0dXJlLCBGaW5hbGl6ZUZlYXR1cmVdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRBcGkoY2xpT3B0aW9uczogQXBpT3B0aW9ucykge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGNsaU9wdGlvbnMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHdvcmtzcGFjZSA9IGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXIpO1xuXHRhd2FpdCBTY2FmZm9sZFNlcnZpY2Uuc2NhZmZvbGQod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXI6IHN0cmluZyk6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuc2V0UHJvamVjdE5hbWUobmFtZSlcblx0XHQuYWRkTmV0d29yayhuYW1lLCB7IG5hbWU6IGBzYW1wbGVzLSR7bmFtZX1gIH0pXG5cdFx0LmFkZFNlcnZpY2UoXCJkZXZjb250YWluZXJcIiwge1xuXHRcdFx0YnVpbGQ6IFwiLlwiLFxuXHRcdFx0dm9sdW1lczogW1xuXHRcdFx0XHQvLyBXb3Jrc3BhY2UtbG9jYWwgKGNyZWF0ZWQgYnkgaW5pdGlhbGl6ZS5zaCBhcyB0aGUgaG9zdCB1c2VyKS5cblx0XHRcdFx0Ly8gRG8gTk9UIGJpbmQgJHtIT01FfS8ubnBtLy4uLiDigJQgRG9ja2VyIGNyZWF0ZXMgbWlzc2luZyBob3N0IHBhdGhzIGFzIHJvb3QuXG5cdFx0XHRcdFwiLi9ucG0tYXV0aDovaG9tZS9ub2RlLy5ucG0tY29uZmlnXCIsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0XHRuZXR3b3JrczogW25hbWVdLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuZm9yd2FyZFBvcnQoMzAwMClcblx0XHQuc2V0UG9ydEF0dHJpYnV0ZXMoMzAwMCwgeyBsYWJlbDogXCJBUElcIiwgcmVxdWlyZUxvY2FsUG9ydDogdHJ1ZSB9KVxuXHRcdC5zZXRJbml0aWFsaXplQ29tbWFuZChcImJhc2ggLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIpXG5cdFx0LnNldFBvc3RTdGFydENvbW1hbmQoXCJiYXNoIC5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiKVxuXHRcdC51c2VDb21wb3NlKCk7XG5cblx0Ly8gV29ya3NwYWNlLWxldmVsIG1vZGVscyAocmVwbyByb290KVxuXHRtb25vUmVwby5hZGRNb2RlbChjb21wb3NlKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoZGV2Q29udGFpbmVyKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFdlYmFwaURldkNvbnRhaW5lcigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFZTQ29kZVNldHRpbmdzKG5hbWUpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IExhdW5jaEpzb24oKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBUc0NvbmZpZygpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFBhY2thZ2VKc29uKGAke25hbWV9LmFwaWApKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCwgXCJjb25maWcvY29uZmlnLnlhbWxcIiwgXCJcIikpO1xuXHRtb25vUmVwby5hZGRNb2RlbChcblx0XHRuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ERVZfWUFNTCwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIsIFwiXCIpLFxuXHQpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aWdub3JlKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgRW52RmlsZSgpKTtcblxuXHQvLyBCaW9tZSBmb3JtYXR0ZXIvbGludGVyIGNvbmZpZ1xuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJiaW9tZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCRzY2hlbWE6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMC4wL3NjaGVtYS5qc29uXCIsXG5cdFx0XHRcdFx0XHRmaWxlczoge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi50c1wiLCBcIioqLyouanNcIiwgXCIqKi8qLmpzb25cIiwgXCIqKi8qLnltbFwiLCBcIioqLyoueWFtbFwiXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhc3Npc3Q6IHsgYWN0aW9uczogeyBzb3VyY2U6IHsgb3JnYW5pemVJbXBvcnRzOiBcIm9uXCIgfSB9IH0sXG5cdFx0XHRcdFx0XHR2Y3M6IHsgZW5hYmxlZDogdHJ1ZSwgY2xpZW50S2luZDogXCJnaXRcIiwgdXNlSWdub3JlRmlsZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFdpdGhFcnJvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlOiBcInRhYlwiLFxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IDk1LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGphdmFzY3JpcHQ6IHsgcGFyc2VyOiB7IHVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkOiB0cnVlIH0gfSxcblx0XHRcdFx0XHRcdGxpbnRlcjoge1xuXHRcdFx0XHRcdFx0XHRydWxlczoge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXZlbDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7IGFjY2Vzc2liaWxpdHk6IFwiZXhwbGljaXRcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG92ZXJyaWRlczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyouanNvblwiXSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHsgaW5kZW50U3R5bGU6IFwic3BhY2VcIiwgaW5kZW50V2lkdGg6IDIgfSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIE5QTSB0b2tlbiBwbGFjZWhvbGRlciDigJQgZ2l0aWdub3JlZCwgc2V0IG1hbnVhbGx5IGFmdGVyIHNjYWZmb2xkXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5lbnYubG9jYWxcIixcblx0XHRcdFx0Y29udGVudDpcblx0XHRcdFx0XHRcIiMgU2V0IHlvdXIgbnBtIGFjY2VzcyB0b2tlbiBoZXJlIChjcmVhdGVkIHdpdGg6IG5wbSB0b2tlbiBjcmVhdGUpXFxuTlBNX1RPS0VOPVxcblwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFtcblx0XHRcdFx0XHRcIiMhL3Vzci9iaW4vZW52IGJhc2hcIixcblx0XHRcdFx0XHRcIiMgUnVucyBvbiB0aGUgaG9zdCBiZWZvcmUgdGhlIGNvbnRhaW5lciBpcyBjcmVhdGVkIChkZXZjb250YWluZXIgaW5pdGlhbGl6ZUNvbW1hbmQpLlwiLFxuXHRcdFx0XHRcdFwiIyBDcmVhdGVzIG5wbS1hdXRoIGFzIHRoZSBob3N0IHVzZXIgc28gdGhlIGJpbmQgbW91bnQgaXMgbm90IHJvb3Qtb3duZWQuXCIsXG5cdFx0XHRcdFx0XCJzZXQgLWV1byBwaXBlZmFpbFwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J3Jvb3Q9XCIkKGNkIFwiJChkaXJuYW1lIFwiJHtCQVNIX1NPVVJDRVswXX1cIikvLi5cIiAmJiBwd2QpXCInLFxuXHRcdFx0XHRcdCducG1fZGlyPVwiJHJvb3QvLmRldmNvbnRhaW5lci9ucG0tYXV0aFwiJyxcblx0XHRcdFx0XHQnbWtkaXIgLXAgXCIkbnBtX2RpclwiJyxcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdpZiBbWyAhIC1mIFwiJG5wbV9kaXIvLm5wbXJjXCIgXV07IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRpZiBbWyAtZiBcIiR7SE9NRX0vLm5wbXJjXCIgXV07IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRcXHRjcCAtYSBcIiR7SE9NRX0vLm5wbXJjXCIgXCIkbnBtX2Rpci8ubnBtcmNcIicsXG5cdFx0XHRcdFx0XCJcXHRmaVwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL3Bvc3Qtc3RhcnQuc2hcIixcblx0XHRcdFx0Y29udGVudDogW1xuXHRcdFx0XHRcdFwiIyEvdXNyL2Jpbi9lbnYgYmFzaFwiLFxuXHRcdFx0XHRcdFwiIyBSdW5zIG9uIGV2ZXJ5IGNvbnRhaW5lciBzdGFydCAoZGV2Y29udGFpbmVyIHBvc3RTdGFydENvbW1hbmQpLlwiLFxuXHRcdFx0XHRcdFwic2V0IC1ldW8gcGlwZWZhaWxcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdBVVRIX1JFR0lTVFJZPVwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmdcIicsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHQnaWYgbnBtIHdob2FtaSAtLXJlZ2lzdHJ5IFwiJEFVVEhfUkVHSVNUUllcIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRlY2hvIFwibnBtOiBsb2dnZWQgaW4gYXMgJChucG0gd2hvYW1pIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiKVwiJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMFwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdFwiaWYgW1sgLXQgMCAmJiAtdCAxIF1dOyB0aGVuXCIsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJucG06IG5vdCBhdXRoZW50aWNhdGVkIOKAlCBzdGFydGluZyBsb2dpbi4uLlwiJyxcblx0XHRcdFx0XHQnXFx0bnBtIGxvZ2luIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMFwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdlY2hvIFwibnBtOiBub3QgYXV0aGVudGljYXRlZC4gT3BlbiBhIHRlcm1pbmFsIGFuZCBydW46IG5wbSBsb2dpblwiID4mMicsXG5cdFx0XHRcdFx0J2VjaG8gXCIgICAgKGNyZWRzIHBlcnNpc3QgaW4gLmRldmNvbnRhaW5lci9ucG0tYXV0aC8pXCIgPiYyJyxcblx0XHRcdFx0XHRcImV4aXQgMVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvbnBtLWF1dGgvLmdpdGlnbm9yZVwiLFxuXHRcdFx0XHRjb250ZW50OiBcIipcXG4hLmdpdGlnbm9yZVxcblwiLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBQcm9qZWN0LWxldmVsIG1vZGVscyAocGF0aHMgcmVsYXRpdmUgdG8gcHJvamVjdHMvYXBpKVxuXHRjb25zdCBhcGlQcm9qZWN0ID0gbmV3IFByb2plY3RTY2FmZm9sZChXRUJBUElfUFJPSkVDVF9ESVIpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBBcGlQYWNrYWdlSnNvbihuYW1lKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IE1haW5Tb3VyY2VGaWxlKGAke25hbWV9LmFwaWApKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQ29udHJvbGxlclNvdXJjZUZpbGUoKSk7XG5cblx0Ly8gU2FtcGxlU2VydmljZSArIFNhbXBsZUNvbmZpZyBhcmUgcGFydCBvZiB0aGUgY29yZSBzY2FmZm9sZCDigJQgSGVsbG9Db250cm9sbGVyXG5cdC8vIGluamVjdHMgU2FtcGxlU2VydmljZSB0byBkZW1vbnN0cmF0ZSBjb25maWctZHJpdmVuIGJlaGF2aW91ciBvdXQgb2YgdGhlIGJveC5cblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVDb25maWdNb2RlbCgpKTtcblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVTZXJ2aWNlTW9kZWwoKSk7XG5cblx0bW9ub1JlcG8uYWRkUHJvamVjdChhcGlQcm9qZWN0KTtcblxuXHRyZXR1cm4gbW9ub1JlcG87XG59XG4iXSwibmFtZXMiOlsiV0VCQVBJX1BST0pFQ1RfRElSIiwic2NhZmZvbGRBcGkiLCJmZWF0dXJlcyIsIkRhdGFiYXNlRmVhdHVyZSIsIkF1dGhGZWF0dXJlIiwiUG9zdG1hbkZlYXR1cmUiLCJGaW5hbGl6ZUZlYXR1cmUiLCJjbGlPcHRpb25zIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsImQiLCJ3b3Jrc3BhY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJTY2FmZm9sZFNlcnZpY2UiLCJzY2FmZm9sZCIsIm1vbm9SZXBvIiwiTW9ub1JlcG9TY2FmZm9sZCIsIm5hbWUiLCJjb21wb3NlIiwiRG9ja2VyQ29tcG9zZSIsInNldFByb2plY3ROYW1lIiwiYWRkTmV0d29yayIsImFkZFNlcnZpY2UiLCJidWlsZCIsInZvbHVtZXMiLCJlbnZpcm9ubWVudCIsIk5QTV9DT05GSUdfVVNFUkNPTkZJRyIsImNvbW1hbmQiLCJuZXR3b3JrcyIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsIkRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsImZvcndhcmRQb3J0Iiwic2V0UG9ydEF0dHJpYnV0ZXMiLCJsYWJlbCIsInJlcXVpcmVMb2NhbFBvcnQiLCJzZXRJbml0aWFsaXplQ29tbWFuZCIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiYWRkTW9kZWwiLCJXZWJhcGlEZXZDb250YWluZXIiLCJWU0NvZGVTZXR0aW5ncyIsIkxhdW5jaEpzb24iLCJUc0NvbmZpZyIsIlBhY2thZ2VKc29uIiwiQ29uZmlnWWFtbCIsIldFTExfS05PV05fRklMRVMiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsIkdpdGlnbm9yZSIsIkVudkZpbGUiLCJhZGRGaWxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiJHNjaGVtYSIsImluY2x1ZGVzIiwiYXNzaXN0IiwiYWN0aW9ucyIsInNvdXJjZSIsIm9yZ2FuaXplSW1wb3J0cyIsInZjcyIsImVuYWJsZWQiLCJjbGllbnRLaW5kIiwidXNlSWdub3JlRmlsZSIsImZvcm1hdHRlciIsImZvcm1hdFdpdGhFcnJvcnMiLCJpbmRlbnRTdHlsZSIsImxpbmVXaWR0aCIsImphdmFzY3JpcHQiLCJwYXJzZXIiLCJ1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCIsImxpbnRlciIsInJ1bGVzIiwic3R5bGUiLCJ1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eSIsImxldmVsIiwib3B0aW9ucyIsImFjY2Vzc2liaWxpdHkiLCJvdmVycmlkZXMiLCJpbmRlbnRXaWR0aCIsImpvaW4iLCJhcGlQcm9qZWN0IiwiUHJvamVjdFNjYWZmb2xkIiwiQXBpUGFja2FnZUpzb24iLCJNYWluU291cmNlRmlsZSIsIkNvbnRyb2xsZXJTb3VyY2VGaWxlIiwiU2FtcGxlQ29uZmlnTW9kZWwiLCJTYW1wbGVTZXJ2aWNlTW9kZWwiLCJhZGRQcm9qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQXVCYUE7ZUFBQUE7O1FBWVNDO2VBQUFBOzs7MEJBbkNFOzhCQUNNO2lDQUNIO3VCQUNNO21DQUNKOzhCQUNMO2dDQUNFO2lDQUNDO2tDQUNDOzhCQUNzQjsrQkFDekI7cUNBQ007aUNBQ0M7NkJBQ0o7aUNBQ0k7aUNBQ0E7Z0NBQ0Q7cUNBQ0E7MkNBQ007cUNBQ047a0NBQ3VCO2tDQUNuQjtBQUU1QixNQUFNRCxxQkFBcUI7QUFVbEMsTUFBTUUsV0FBVztJQUFDQyxnQ0FBZTtJQUFFQyx3QkFBVztJQUFFQyw4QkFBYztJQUFFQyxnQ0FBZTtDQUFDO0FBRXpFLGVBQWVMLFlBQVlNLFVBQXNCO0lB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
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBEb2NrZXJDb21wb3NlIH0gZnJvbSBcIi4uL21vZGVscy9jb21wb3NlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBDb25maWdZYW1sIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcteWFtbC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV0VMTF9LTk9XTl9GSUxFUyB9IGZyb20gXCIuLi9tb2RlbHMvY29uc3QuanNcIjtcbmltcG9ydCB7IERldkNvbnRhaW5lciB9IGZyb20gXCIuLi9tb2RlbHMvZGV2LWNvbnRhaW5lci5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRW52RmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGlnbm9yZSB9IGZyb20gXCIuLi9tb2RlbHMvZ2l0aWdub3JlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBMYXVuY2hKc29uIH0gZnJvbSBcIi4uL21vZGVscy9sYXVuY2gtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTW9ub1JlcG9TY2FmZm9sZCwgUHJvamVjdFNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBUc0NvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvdHNjb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IFZTQ29kZVNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy92c2NvZGUtc2V0dGluZ3MubW9kZWwuanNcIjtcbmltcG9ydCB7IFNjYWZmb2xkU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBBdXRoRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRGF0YWJhc2VGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZGF0YWJhc2UuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRmluYWxpemVGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZmluYWxpemUuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgUG9zdG1hbkZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9wb3N0bWFuLmZlYXR1cmUuanNcIjtcbmltcG9ydCB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL21haW4tc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IFNhbXBsZUNvbmZpZ01vZGVsLCBTYW1wbGVTZXJ2aWNlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2FtcGxlLWZpbGVzLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXZWJhcGlEZXZDb250YWluZXIgfSBmcm9tIFwiLi9tb2RlbHMvd2ViYXBpLWltYWdlLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBXRUJBUElfUFJPSkVDVF9ESVIgPSBcInByb2plY3RzL2FwaVwiO1xuXG5leHBvcnQgdHlwZSBBcGlPcHRpb25zID0ge1xuXHRkPzogc3RyaW5nO1xuXHQvKiogSG9zdCBwcm9qZWN0IG5hbWUgKGRpcmVjdG9yeSBiYXNlbmFtZSkuIFJlcXVpcmVkIHdoZW4gc2NhZmZvbGRpbmcgaW50byBgL3dvcmtzcGFjZWAuICovXG5cdHByb2plY3ROYW1lPzogc3RyaW5nO1xuXHRhdXRoUHJvdmlkZXI/OiBcImF1dGgwXCIgfCBcIm5vbmVcIjtcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cdHBvc3RtYW5Qcm92aWRlcj86IFwiYXBpXCIgfCBcImxvY2FsXCIgfCBcIm5vbmVcIjtcblx0aW5zdGFsbERlcGVuZGVuY2llcz86IFwieWVzXCIgfCBcIm5vXCI7XG59O1xuXG5jb25zdCBmZWF0dXJlcyA9IFtEYXRhYmFzZUZlYXR1cmUsIEF1dGhGZWF0dXJlLCBQb3N0bWFuRmVhdHVyZSwgRmluYWxpemVGZWF0dXJlXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkQXBpKGNsaU9wdGlvbnM6IEFwaU9wdGlvbnMpIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShjbGlPcHRpb25zLmQgPz8gXCIuXCIpO1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9XG5cdFx0Y2xpT3B0aW9ucy5wcm9qZWN0TmFtZT8udHJpbSgpIHx8XG5cdFx0cHJvY2Vzcy5lbnYuREVDT0hFUkVfUFJPSkVDVF9OQU1FPy50cmltKCkgfHxcblx0XHRiYXNlbmFtZSh0YXJnZXREaXIpO1xuXHRjb25zdCB3b3Jrc3BhY2UgPSBjcmVhdGVXb3Jrc3BhY2UodGFyZ2V0RGlyLCBwcm9qZWN0TmFtZSk7XG5cdGF3YWl0IFNjYWZmb2xkU2VydmljZS5zY2FmZm9sZCh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcjogc3RyaW5nLCBwcm9qZWN0TmFtZTogc3RyaW5nKTogTW9ub1JlcG9TY2FmZm9sZCB7XG5cdGNvbnN0IG1vbm9SZXBvID0gbmV3IE1vbm9SZXBvU2NhZmZvbGQoKTtcblx0bW9ub1JlcG8udGFyZ2V0RGlyID0gdGFyZ2V0RGlyO1xuXHRtb25vUmVwby5zZXROYW1lKHByb2plY3ROYW1lKTtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuc2V0UHJvamVjdE5hbWUobmFtZSlcblx0XHQuYWRkTmV0d29yayhuYW1lLCB7IG5hbWU6IGBzYW1wbGVzLSR7bmFtZX1gIH0pXG5cdFx0LmFkZFNlcnZpY2UoXCJkZXZjb250YWluZXJcIiwge1xuXHRcdFx0YnVpbGQ6IFwiLlwiLFxuXHRcdFx0dm9sdW1lczogW1xuXHRcdFx0XHQvLyBXb3Jrc3BhY2UtbG9jYWwgKGNyZWF0ZWQgYnkgaW5pdGlhbGl6ZS5zaCBhcyB0aGUgaG9zdCB1c2VyKS5cblx0XHRcdFx0Ly8gRG8gTk9UIGJpbmQgJHtIT01FfS8ubnBtLy4uLiDigJQgRG9ja2VyIGNyZWF0ZXMgbWlzc2luZyBob3N0IHBhdGhzIGFzIHJvb3QuXG5cdFx0XHRcdFwiLi9ucG0tYXV0aDovaG9tZS9ub2RlLy5ucG0tY29uZmlnXCIsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0XHRuZXR3b3JrczogW25hbWVdLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuZm9yd2FyZFBvcnQoMzAwMClcblx0XHQuc2V0UG9ydEF0dHJpYnV0ZXMoMzAwMCwgeyBsYWJlbDogXCJBUElcIiwgcmVxdWlyZUxvY2FsUG9ydDogdHJ1ZSB9KVxuXHRcdC5zZXRJbml0aWFsaXplQ29tbWFuZChcImJhc2ggLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIpXG5cdFx0LnNldFBvc3RTdGFydENvbW1hbmQoXCJiYXNoIC5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiKVxuXHRcdC51c2VDb21wb3NlKCk7XG5cblx0Ly8gV29ya3NwYWNlLWxldmVsIG1vZGVscyAocmVwbyByb290KVxuXHRtb25vUmVwby5hZGRNb2RlbChjb21wb3NlKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoZGV2Q29udGFpbmVyKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFdlYmFwaURldkNvbnRhaW5lcigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFZTQ29kZVNldHRpbmdzKG5hbWUpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IExhdW5jaEpzb24oKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBUc0NvbmZpZygpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFBhY2thZ2VKc29uKGAke25hbWV9LmFwaWApKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCwgXCJjb25maWcvY29uZmlnLnlhbWxcIiwgXCJcIikpO1xuXHRtb25vUmVwby5hZGRNb2RlbChcblx0XHRuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ERVZfWUFNTCwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIsIFwiXCIpLFxuXHQpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aWdub3JlKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgRW52RmlsZSgpKTtcblxuXHQvLyBCaW9tZSBmb3JtYXR0ZXIvbGludGVyIGNvbmZpZ1xuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJiaW9tZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCRzY2hlbWE6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMC4wL3NjaGVtYS5qc29uXCIsXG5cdFx0XHRcdFx0XHRmaWxlczoge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi50c1wiLCBcIioqLyouanNcIiwgXCIqKi8qLmpzb25cIiwgXCIqKi8qLnltbFwiLCBcIioqLyoueWFtbFwiXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhc3Npc3Q6IHsgYWN0aW9uczogeyBzb3VyY2U6IHsgb3JnYW5pemVJbXBvcnRzOiBcIm9uXCIgfSB9IH0sXG5cdFx0XHRcdFx0XHR2Y3M6IHsgZW5hYmxlZDogdHJ1ZSwgY2xpZW50S2luZDogXCJnaXRcIiwgdXNlSWdub3JlRmlsZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFdpdGhFcnJvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlOiBcInRhYlwiLFxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IDk1LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGphdmFzY3JpcHQ6IHsgcGFyc2VyOiB7IHVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkOiB0cnVlIH0gfSxcblx0XHRcdFx0XHRcdGxpbnRlcjoge1xuXHRcdFx0XHRcdFx0XHRydWxlczoge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXZlbDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7IGFjY2Vzc2liaWxpdHk6IFwiZXhwbGljaXRcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG92ZXJyaWRlczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyouanNvblwiXSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHsgaW5kZW50U3R5bGU6IFwic3BhY2VcIiwgaW5kZW50V2lkdGg6IDIgfSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvaW5pdGlhbGl6ZS5zaFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIS91c3IvYmluL2VudiBiYXNoXCIsXG5cdFx0XHRcdFx0XCIjIFJ1bnMgb24gdGhlIGhvc3QgYmVmb3JlIHRoZSBjb250YWluZXIgaXMgY3JlYXRlZCAoZGV2Y29udGFpbmVyIGluaXRpYWxpemVDb21tYW5kKS5cIixcblx0XHRcdFx0XHRcIiMgQ3JlYXRlcyBucG0tYXV0aCBhcyB0aGUgaG9zdCB1c2VyIHNvIHRoZSBiaW5kIG1vdW50IGlzIG5vdCByb290LW93bmVkLlwiLFxuXHRcdFx0XHRcdFwiIyBEbyBub3Qgc2NhZmZvbGQgbnBtLWF1dGgvIGZyb20gdGhlIGJ1aWxkZXIgKHRoYXQgcnVucyBhcyByb290KS5cIixcblx0XHRcdFx0XHRcInNldCAtZXVvIHBpcGVmYWlsXCIsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHQncm9vdD1cIiQoY2QgXCIkKGRpcm5hbWUgXCIke0JBU0hfU09VUkNFWzBdfVwiKS8uLlwiICYmIHB3ZClcIicsXG5cdFx0XHRcdFx0J25wbV9kaXI9XCIkcm9vdC8uZGV2Y29udGFpbmVyL25wbS1hdXRoXCInLFxuXHRcdFx0XHRcdCdpZiAhIG1rZGlyIC1wIFwiJG5wbV9kaXJcIiAyPi9kZXYvbnVsbDsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJDYW5ub3QgY3JlYXRlICRucG1fZGlyIChwZXJtaXNzaW9uIGRlbmllZCkuXCIgPiYyJyxcblx0XHRcdFx0XHQnXFx0ZWNobyBcIlRoZSBzY2FmZm9sZCBjb250YWluZXIgbGlrZWx5IGxlZnQgLmRldmNvbnRhaW5lciByb290LW93bmVkLiBGaXggd2l0aDpcIiA+JjInLFxuXHRcdFx0XHRcdCdcXHRlY2hvIFwiICBzdWRvIGNob3duIC1SIFxcXFxcIiRVU0VSOiRVU0VSXFxcXFwiIFxcXFxcIiRyb290XFxcXFwiXCIgPiYyJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMVwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIntcIixcblx0XHRcdFx0XHQnXFx0ZWNobyBcIipcIicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCIhLmdpdGlnbm9yZVwiJyxcblx0XHRcdFx0XHQnfSA+XCIkbnBtX2Rpci8uZ2l0aWdub3JlXCInLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J2lmIFtbICEgLWYgXCIkbnBtX2Rpci8ubnBtcmNcIiBdXTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGlmIFtbIC1mIFwiJHtIT01FfS8ubnBtcmNcIiBdXTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdFxcdGNwIC1hIFwiJHtIT01FfS8ubnBtcmNcIiBcIiRucG1fZGlyLy5ucG1yY1wiJyxcblx0XHRcdFx0XHRcIlxcdGZpXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiLFxuXHRcdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFx0XCIjIS91c3IvYmluL2VudiBiYXNoXCIsXG5cdFx0XHRcdFx0XCIjIFJ1bnMgb24gZXZlcnkgY29udGFpbmVyIHN0YXJ0IChkZXZjb250YWluZXIgcG9zdFN0YXJ0Q29tbWFuZCkuXCIsXG5cdFx0XHRcdFx0XCJzZXQgLWV1byBwaXBlZmFpbFwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J0FVVEhfUkVHSVNUUlk9XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZ1wiJyxcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdpZiBucG0gd2hvYW1pIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiID4vZGV2L251bGwgMj4mMTsgdGhlbicsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJucG06IGxvZ2dlZCBpbiBhcyAkKG5wbSB3aG9hbWkgLS1yZWdpc3RyeSBcIiRBVVRIX1JFR0lTVFJZXCIpXCInLFxuXHRcdFx0XHRcdFwiXFx0ZXhpdCAwXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0XCJpZiBbWyAtdCAwICYmIC10IDEgXV07IHRoZW5cIixcblx0XHRcdFx0XHQnXFx0ZWNobyBcIm5wbTogbm90IGF1dGhlbnRpY2F0ZWQg4oCUIHN0YXJ0aW5nIGxvZ2luLi4uXCInLFxuXHRcdFx0XHRcdCdcXHRucG0gbG9naW4gLS1yZWdpc3RyeSBcIiRBVVRIX1JFR0lTVFJZXCInLFxuXHRcdFx0XHRcdFwiXFx0ZXhpdCAwXCIsXG5cdFx0XHRcdFx0XCJmaVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J2VjaG8gXCJucG06IG5vdCBhdXRoZW50aWNhdGVkLiBPcGVuIGEgdGVybWluYWwgYW5kIHJ1bjogbnBtIGxvZ2luXCIgPiYyJyxcblx0XHRcdFx0XHQnZWNobyBcIiAgICAoY3JlZHMgcGVyc2lzdCBpbiAuZGV2Y29udGFpbmVyL25wbS1hdXRoLylcIiA+JjInLFxuXHRcdFx0XHRcdFwiZXhpdCAxXCIsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBQcm9qZWN0LWxldmVsIG1vZGVscyAocGF0aHMgcmVsYXRpdmUgdG8gcHJvamVjdHMvYXBpKVxuXHRjb25zdCBhcGlQcm9qZWN0ID0gbmV3IFByb2plY3RTY2FmZm9sZChXRUJBUElfUFJPSkVDVF9ESVIpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBBcGlQYWNrYWdlSnNvbihuYW1lKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IE1haW5Tb3VyY2VGaWxlKGAke25hbWV9LmFwaWApKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQ29udHJvbGxlclNvdXJjZUZpbGUoKSk7XG5cblx0Ly8gU2FtcGxlU2VydmljZSArIFNhbXBsZUNvbmZpZyBhcmUgcGFydCBvZiB0aGUgY29yZSBzY2FmZm9sZCDigJQgSGVsbG9Db250cm9sbGVyXG5cdC8vIGluamVjdHMgU2FtcGxlU2VydmljZSB0byBkZW1vbnN0cmF0ZSBjb25maWctZHJpdmVuIGJlaGF2aW91ciBvdXQgb2YgdGhlIGJveC5cblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVDb25maWdNb2RlbCgpKTtcblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVTZXJ2aWNlTW9kZWwoKSk7XG5cblx0bW9ub1JlcG8uYWRkUHJvamVjdChhcGlQcm9qZWN0KTtcblxuXHRyZXR1cm4gbW9ub1JlcG87XG59XG4iXSwibmFtZXMiOlsiV0VCQVBJX1BST0pFQ1RfRElSIiwic2NhZmZvbGRBcGkiLCJmZWF0dXJlcyIsIkRhdGFiYXNlRmVhdHVyZSIsIkF1dGhGZWF0dXJlIiwiUG9zdG1hbkZlYXR1cmUiLCJGaW5hbGl6ZUZlYXR1cmUiLCJjbGlPcHRpb25zIiwidGFyZ2V0RGlyIiwicmVzb2x2ZSIsImQiLCJwcm9qZWN0TmFtZSIsInRyaW0iLCJwcm9jZXNzIiwiZW52IiwiREVDT0hFUkVfUFJPSkVDVF9OQU1FIiwiYmFzZW5hbWUiLCJ3b3Jrc3BhY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJTY2FmZm9sZFNlcnZpY2UiLCJzY2FmZm9sZCIsIm1vbm9SZXBvIiwiTW9ub1JlcG9TY2FmZm9sZCIsInNldE5hbWUiLCJuYW1lIiwiY29tcG9zZSIsIkRvY2tlckNvbXBvc2UiLCJzZXRQcm9qZWN0TmFtZSIsImFkZE5ldHdvcmsiLCJhZGRTZXJ2aWNlIiwiYnVpbGQiLCJ2b2x1bWVzIiwiZW52aXJvbm1lbnQiLCJOUE1fQ09ORklHX1VTRVJDT05GSUciLCJjb21tYW5kIiwibmV0d29ya3MiLCJhZGRWb2x1bWUiLCJkZXZDb250YWluZXIiLCJEZXZDb250YWluZXIiLCJhZGRFeHRlbnNpb24iLCJmb3J3YXJkUG9ydCIsInNldFBvcnRBdHRyaWJ1dGVzIiwibGFiZWwiLCJyZXF1aXJlTG9jYWxQb3J0Iiwic2V0SW5pdGlhbGl6ZUNvbW1hbmQiLCJzZXRQb3N0U3RhcnRDb21tYW5kIiwidXNlQ29tcG9zZSIsImFkZE1vZGVsIiwiV2ViYXBpRGV2Q29udGFpbmVyIiwiVlNDb2RlU2V0dGluZ3MiLCJMYXVuY2hKc29uIiwiVHNDb25maWciLCJQYWNrYWdlSnNvbiIsIkNvbmZpZ1lhbWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiQ09ORklHX1lBTUwiLCJDT05GSUdfREVWX1lBTUwiLCJHaXRpZ25vcmUiLCJFbnZGaWxlIiwiYWRkRmlsZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIiRzY2hlbWEiLCJpbmNsdWRlcyIsImFzc2lzdCIsImFjdGlvbnMiLCJzb3VyY2UiLCJvcmdhbml6ZUltcG9ydHMiLCJ2Y3MiLCJlbmFibGVkIiwiY2xpZW50S2luZCIsInVzZUlnbm9yZUZpbGUiLCJmb3JtYXR0ZXIiLCJmb3JtYXRXaXRoRXJyb3JzIiwiaW5kZW50U3R5bGUiLCJsaW5lV2lkdGgiLCJqYXZhc2NyaXB0IiwicGFyc2VyIiwidW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQiLCJsaW50ZXIiLCJydWxlcyIsInN0eWxlIiwidXNlQ29uc2lzdGVudE1lbWJlckFjY2Vzc2liaWxpdHkiLCJsZXZlbCIsIm9wdGlvbnMiLCJhY2Nlc3NpYmlsaXR5Iiwib3ZlcnJpZGVzIiwiaW5kZW50V2lkdGgiLCJqb2luIiwiYXBpUHJvamVjdCIsIlByb2plY3RTY2FmZm9sZCIsIkFwaVBhY2thZ2VKc29uIiwiTWFpblNvdXJjZUZpbGUiLCJDb250cm9sbGVyU291cmNlRmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiYWRkUHJvamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUF1QmFBO2VBQUFBOztRQWNTQztlQUFBQTs7OzBCQXJDWTs4QkFDSjtpQ0FDSDt1QkFDTTttQ0FDSjs4QkFDTDtnQ0FDRTtpQ0FDQztrQ0FDQzs4QkFDc0I7K0JBQ3pCO3FDQUNNO2lDQUNDOzZCQUNKO2lDQUNJO2lDQUNBO2dDQUNEO3FDQUNBOzJDQUNNO3FDQUNOO2tDQUN1QjtrQ0FDbkI7QUFFNUIsTUFBTUQscUJBQXFCO0FBWWxDLE1BQU1FLFdBQVc7SUFBQ0MsZ0NBQWU7SUFBRUMsd0JBQVc7SUFBRUMsOEJBQWM7SUFBRUMsZ0NBQWU7Q0FBQztBQUV6RSxlQUFlTCxZQUFZTSxVQUFzQjtJQUN2RCxNQUFNQyxZQUFZQyxJQUFBQSxpQkFBTyxFQUFDRixXQUFXRyxDQUFDLElBQUk7SUFDMUMsTUFBTUMsY0FDTEosV0FBV0ksV0FBVyxFQUFFQyxVQUN4QkMsUUFBUUMsR0FBRyxDQUFDQyxxQkFBcUIsRUFBRUgsVUFDbkNJLElBQUFBLGtCQUFRLEVBQUNSO0lBQ1YsTUFBTVMsWUFBWUMsZ0JBQWdCVixXQUFXRztJQUM3QyxNQUFNUSxnQ0FBZSxDQUFDQyxRQUFRLENBQUNILFdBQVdWLFlBQVlMO0FBQ3ZEO0FBRUEsU0FBU2dCLGdCQUFnQlYsU0FBaUIsRUFBRUcsV0FBbUI7SUFDOUQsTUFBTVUsV0FBVyxJQUFJQyw4QkFBZ0I7SUFDckNE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