semantifold 0.9.0 → 0.11.0

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 (198) hide show
  1. package/README.md +6 -3
  2. package/bin/semantifold.js +6 -0
  3. package/build/bin/semantifold.d.ts +3 -0
  4. package/build/bin/semantifold.d.ts.map +1 -0
  5. package/build/bin/semantifold.js +5 -0
  6. package/build/index.d.ts +8 -0
  7. package/build/index.d.ts.map +1 -1
  8. package/build/index.js +9 -1
  9. package/build/src/artifact-path.d.ts +16 -0
  10. package/build/src/artifact-path.d.ts.map +1 -1
  11. package/build/src/artifact-path.js +29 -3
  12. package/build/src/backends/c-check.d.ts +7 -0
  13. package/build/src/backends/c-check.d.ts.map +1 -0
  14. package/build/src/backends/c-check.js +65 -0
  15. package/build/src/backends/check-plan.d.ts +96 -0
  16. package/build/src/backends/check-plan.d.ts.map +1 -0
  17. package/build/src/backends/check-plan.js +135 -0
  18. package/build/src/backends/cpp-check.d.ts +7 -0
  19. package/build/src/backends/cpp-check.d.ts.map +1 -0
  20. package/build/src/backends/cpp-check.js +59 -0
  21. package/build/src/backends/csharp-check.d.ts +7 -0
  22. package/build/src/backends/csharp-check.d.ts.map +1 -0
  23. package/build/src/backends/csharp-check.js +125 -0
  24. package/build/src/backends/csharp.d.ts +1 -0
  25. package/build/src/backends/csharp.d.ts.map +1 -1
  26. package/build/src/backends/csharp.js +5 -4
  27. package/build/src/backends/dart-check.d.ts +7 -0
  28. package/build/src/backends/dart-check.d.ts.map +1 -0
  29. package/build/src/backends/dart-check.js +103 -0
  30. package/build/src/backends/dart.d.ts +2 -0
  31. package/build/src/backends/dart.d.ts.map +1 -1
  32. package/build/src/backends/dart.js +5 -5
  33. package/build/src/backends/go-check.d.ts +7 -0
  34. package/build/src/backends/go-check.d.ts.map +1 -0
  35. package/build/src/backends/go-check.js +77 -0
  36. package/build/src/backends/go.d.ts +1 -0
  37. package/build/src/backends/go.d.ts.map +1 -1
  38. package/build/src/backends/go.js +3 -3
  39. package/build/src/backends/java-check.d.ts +21 -0
  40. package/build/src/backends/java-check.d.ts.map +1 -0
  41. package/build/src/backends/java-check.js +73 -0
  42. package/build/src/backends/javascript-check.d.ts +7 -0
  43. package/build/src/backends/javascript-check.d.ts.map +1 -0
  44. package/build/src/backends/javascript-check.js +29 -0
  45. package/build/src/backends/kotlin-check.d.ts +7 -0
  46. package/build/src/backends/kotlin-check.d.ts.map +1 -0
  47. package/build/src/backends/kotlin-check.js +31 -0
  48. package/build/src/backends/kotlin.d.ts +1 -1
  49. package/build/src/backends/kotlin.js +2 -2
  50. package/build/src/backends/php-check.d.ts +7 -0
  51. package/build/src/backends/php-check.d.ts.map +1 -0
  52. package/build/src/backends/php-check.js +21 -0
  53. package/build/src/backends/program.d.ts +7 -0
  54. package/build/src/backends/program.d.ts.map +1 -1
  55. package/build/src/backends/program.js +16 -1
  56. package/build/src/backends/python-check.d.ts +7 -0
  57. package/build/src/backends/python-check.d.ts.map +1 -0
  58. package/build/src/backends/python-check.js +28 -0
  59. package/build/src/backends/ruby-check.d.ts +7 -0
  60. package/build/src/backends/ruby-check.d.ts.map +1 -0
  61. package/build/src/backends/ruby-check.js +21 -0
  62. package/build/src/backends/rust-check.d.ts +7 -0
  63. package/build/src/backends/rust-check.d.ts.map +1 -0
  64. package/build/src/backends/rust-check.js +65 -0
  65. package/build/src/backends/shared.d.ts.map +1 -1
  66. package/build/src/backends/shared.js +29 -1
  67. package/build/src/backends/swift-check.d.ts +7 -0
  68. package/build/src/backends/swift-check.d.ts.map +1 -0
  69. package/build/src/backends/swift-check.js +77 -0
  70. package/build/src/backends/typescript-check.d.ts +7 -0
  71. package/build/src/backends/typescript-check.d.ts.map +1 -0
  72. package/build/src/backends/typescript-check.js +33 -0
  73. package/build/src/backends/zig-check.d.ts +7 -0
  74. package/build/src/backends/zig-check.d.ts.map +1 -0
  75. package/build/src/backends/zig-check.js +70 -0
  76. package/build/src/diagnostic.d.ts +13 -1
  77. package/build/src/diagnostic.d.ts.map +1 -1
  78. package/build/src/diagnostic.js +14 -2
  79. package/build/src/frontends/java.d.ts.map +1 -1
  80. package/build/src/frontends/java.js +23 -1
  81. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  82. package/build/src/frontends/javascript-typescript.js +45 -4
  83. package/build/src/frontends/php.d.ts.map +1 -1
  84. package/build/src/frontends/php.js +54 -3
  85. package/build/src/frontends/program.d.ts +6 -0
  86. package/build/src/frontends/program.d.ts.map +1 -1
  87. package/build/src/frontends/program.js +9 -1
  88. package/build/src/frontends/ruby.d.ts.map +1 -1
  89. package/build/src/frontends/ruby.js +55 -5
  90. package/build/src/language-registry.d.ts +54 -0
  91. package/build/src/language-registry.d.ts.map +1 -1
  92. package/build/src/language-registry.js +124 -10
  93. package/build/src/project-build.d.ts +172 -0
  94. package/build/src/project-build.d.ts.map +1 -0
  95. package/build/src/project-build.js +320 -0
  96. package/build/src/project-cli.d.ts +40 -0
  97. package/build/src/project-cli.d.ts.map +1 -0
  98. package/build/src/project-cli.js +145 -0
  99. package/build/src/project-manifest.d.ts +148 -0
  100. package/build/src/project-manifest.d.ts.map +1 -0
  101. package/build/src/project-manifest.js +432 -0
  102. package/build/src/project-reporter.d.ts +81 -0
  103. package/build/src/project-reporter.d.ts.map +1 -0
  104. package/build/src/project-reporter.js +293 -0
  105. package/build/src/project-snapshot.d.ts +129 -0
  106. package/build/src/project-snapshot.d.ts.map +1 -0
  107. package/build/src/project-snapshot.js +362 -0
  108. package/build/src/project-watch-reporter.d.ts +125 -0
  109. package/build/src/project-watch-reporter.d.ts.map +1 -0
  110. package/build/src/project-watch-reporter.js +280 -0
  111. package/build/src/project-watch.d.ts +133 -0
  112. package/build/src/project-watch.d.ts.map +1 -0
  113. package/build/src/project-watch.js +839 -0
  114. package/build/src/publication.d.ts +69 -5
  115. package/build/src/publication.d.ts.map +1 -1
  116. package/build/src/publication.js +246 -57
  117. package/build/src/semantic/effects.js +3 -1
  118. package/build/src/semantic/provenance.d.ts.map +1 -1
  119. package/build/src/semantic/provenance.js +11 -1
  120. package/build/src/semantic/types.d.ts +355 -4
  121. package/build/src/semantic/types.d.ts.map +1 -1
  122. package/build/src/semantic/types.js +92 -3
  123. package/build/src/semantic/validate.js +18 -1
  124. package/build/src/subprocess.d.ts +8 -0
  125. package/build/src/subprocess.d.ts.map +1 -1
  126. package/build/src/subprocess.js +50 -9
  127. package/build/src/target-check.d.ts +52 -0
  128. package/build/src/target-check.d.ts.map +1 -0
  129. package/build/src/target-check.js +796 -0
  130. package/build/src/toolchains.d.ts.map +1 -1
  131. package/build/src/toolchains.js +3 -3
  132. package/docs/adr-expression-breadth.md +186 -0
  133. package/docs/architecture.md +3 -1
  134. package/docs/c.md +4 -0
  135. package/docs/cpp.md +4 -0
  136. package/docs/dart.md +4 -0
  137. package/docs/generated-artifact-publication.md +11 -8
  138. package/docs/kotlin.md +2 -2
  139. package/docs/language-support.md +40 -6
  140. package/docs/parser-qualification.md +1 -1
  141. package/docs/project-build-cli.md +147 -0
  142. package/docs/project-watch.md +60 -0
  143. package/docs/rust.md +4 -0
  144. package/docs/swift.md +2 -0
  145. package/docs/testing.md +70 -3
  146. package/docs/watch-build-pipeline.md +39 -23
  147. package/docs/zig.md +2 -0
  148. package/examples/jsdoc-java-watch/expected-output.txt +3 -0
  149. package/examples/jsdoc-java-watch/semantifold.json +23 -0
  150. package/examples/jsdoc-java-watch/src/main.js +21 -0
  151. package/index.js +8 -0
  152. package/package.json +6 -1
  153. package/src/artifact-path.js +31 -2
  154. package/src/backends/c-check.js +80 -0
  155. package/src/backends/check-plan.js +147 -0
  156. package/src/backends/cpp-check.js +73 -0
  157. package/src/backends/csharp-check.js +139 -0
  158. package/src/backends/csharp.js +4 -3
  159. package/src/backends/dart-check.js +117 -0
  160. package/src/backends/dart.js +4 -4
  161. package/src/backends/go-check.js +89 -0
  162. package/src/backends/go.js +2 -2
  163. package/src/backends/java-check.js +77 -0
  164. package/src/backends/javascript-check.js +33 -0
  165. package/src/backends/kotlin-check.js +41 -0
  166. package/src/backends/kotlin.js +1 -1
  167. package/src/backends/php-check.js +23 -0
  168. package/src/backends/program.js +17 -0
  169. package/src/backends/python-check.js +30 -0
  170. package/src/backends/ruby-check.js +23 -0
  171. package/src/backends/rust-check.js +78 -0
  172. package/src/backends/shared.js +30 -0
  173. package/src/backends/swift-check.js +89 -0
  174. package/src/backends/typescript-check.js +37 -0
  175. package/src/backends/zig-check.js +81 -0
  176. package/src/diagnostic.js +9 -1
  177. package/src/frontends/java.js +24 -0
  178. package/src/frontends/javascript-typescript.js +49 -2
  179. package/src/frontends/php.js +61 -2
  180. package/src/frontends/program.js +9 -0
  181. package/src/frontends/ruby.js +62 -2
  182. package/src/language-registry.js +130 -9
  183. package/src/project-build.js +353 -0
  184. package/src/project-cli.js +155 -0
  185. package/src/project-manifest.js +479 -0
  186. package/src/project-reporter.js +320 -0
  187. package/src/project-snapshot.js +403 -0
  188. package/src/project-watch-reporter.js +303 -0
  189. package/src/project-watch.js +870 -0
  190. package/src/publication.js +275 -58
  191. package/src/semantic/effects.js +1 -0
  192. package/src/semantic/provenance.js +8 -0
  193. package/src/semantic/types.js +101 -2
  194. package/src/semantic/validate.js +26 -0
  195. package/src/subprocess.js +49 -8
  196. package/src/target-check.js +844 -0
  197. package/src/toolchains.js +3 -2
  198. package/tsconfig.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-check.d.ts","sourceRoot":"","sources":["../../../src/backends/go-check.js"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAH9B,OAAO,yBAAyB,EAAE,sBAGJ,GAF5B,OAAO,sBAAsB,EAAE,eAAe,CAsE1D"}
@@ -0,0 +1,77 @@
1
+ // @ts-check
2
+ import path from "node:path";
3
+ import { SemantifoldDiagnostic } from "../diagnostic.js";
4
+ import { checkArtifacts, checkOutput, checkPlan, checkStage, checkTool, environmentPath, pathArgument } from "./check-plan.js";
5
+ import { goModuleManifest } from "./go.js";
6
+ /**
7
+ * Constructs Go's cgo-disabled, offline build/vet plan.
8
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
9
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable Go plan.
10
+ */
11
+ export function createGoCheckPlan(context) {
12
+ const tool = checkTool(context, "go", "go");
13
+ const artifacts = checkArtifacts(context, artifact => artifact.path.endsWith(".go") || artifact.path == "go.mod", "go", "only staged '.go' sources and the canonical module manifest");
14
+ const manifests = context.artifacts.artifacts.filter(artifact => artifact.path == "go.mod");
15
+ const sources = artifacts.filter(artifact => artifact.endsWith(".go"));
16
+ if (manifests.length != 1 || manifests[0].contentKind != "text" || manifests[0].role != "manifest" ||
17
+ manifests[0].content != goModuleManifest || artifacts.length != 2 || sources.length != 1 ||
18
+ sources[0] != path.join(context.sourcePath, "main.go")) {
19
+ throw new SemantifoldDiagnostic({
20
+ code: "INVALID_TARGET_CHECK_PLAN",
21
+ language: "go",
22
+ message: "Go developer checks require the exact dependency-free 'go.mod' and at least one staged '.go' source."
23
+ });
24
+ }
25
+ const cache = path.join(context.buildPath, "go-cache");
26
+ const moduleCache = path.join(context.buildPath, "go-mod-cache");
27
+ const goPath = path.join(context.buildPath, "go-path");
28
+ const temporary = path.join(context.buildPath, "go-tmp");
29
+ const home = path.join(context.buildPath, "go-home");
30
+ const binary = path.join(context.buildPath, "semantifold-go");
31
+ const environment = {
32
+ CGO_ENABLED: "0",
33
+ GOARCH: "amd64",
34
+ GOCACHE: cache,
35
+ GOENV: "off",
36
+ GOMODCACHE: moduleCache,
37
+ GOOS: "linux",
38
+ GOPATH: goPath,
39
+ GOPROXY: "off",
40
+ GOSUMDB: "off",
41
+ GOTOOLCHAIN: "local",
42
+ GOTMPDIR: temporary,
43
+ GOVCS: "off",
44
+ GOWORK: "off",
45
+ GO_TELEMETRY_CHILD: "2",
46
+ HOME: home
47
+ };
48
+ const environmentPaths = [
49
+ environmentPath("GOCACHE", "build"), environmentPath("GOMODCACHE", "build"), environmentPath("GOPATH", "build"),
50
+ environmentPath("GOTMPDIR", "build"), environmentPath("HOME", "build")
51
+ ];
52
+ return checkPlan(context, "go", artifacts, [
53
+ checkStage({
54
+ argv: ["build", "-mod=readonly", "-trimpath", "-buildvcs=false", "-ldflags=-buildid=", "-o", binary, "."],
55
+ cwd: context.sourcePath,
56
+ environment,
57
+ environmentPaths,
58
+ inputs: artifacts,
59
+ output: checkOutput(context.buildPath, "application/x-executable", "compiler-output"),
60
+ pathArguments: [pathArgument(6, "build")],
61
+ stage: "compile",
62
+ tool
63
+ }),
64
+ checkStage({
65
+ argv: ["vet", "-mod=readonly", "."],
66
+ cwd: context.sourcePath,
67
+ environment,
68
+ environmentPaths,
69
+ inputs: artifacts,
70
+ output: null,
71
+ pathArguments: [],
72
+ stage: "validate",
73
+ tool
74
+ })
75
+ ]);
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ28tY2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvZ28tY2hlY2suanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNiLE1BQU0saUJBQWlCLENBQUE7QUFDeEIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXhDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBTztJQUN2QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMzQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQzlHLElBQUksRUFBRSw2REFBNkQsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUE7SUFDM0YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUV0RSxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFD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QUNMLENBQUM7UUFDRixVQUFVLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQztZQUNuQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDdkIsV0FBVztZQUNYLGdCQUFnQjtZQUNoQixNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNLEVBQUUsSUFBSTtZQUNaLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxVQUFVO1lBQ2pCLElBQUk7U0FDTCxDQUFDO0tBQ0gsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljfSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge1xuICBjaGVja0FydGlmYWN0cyxcbiAgY2hlY2tPdXRwdXQsXG4gIGNoZWNrUGxhbixcbiAgY2hlY2tTdGFnZSxcbiAgY2hlY2tUb29sLFxuICBlbnZpcm9ubWVudFBhdGgsXG4gIHBhdGhBcmd1bWVudFxufSBmcm9tIFwiLi9jaGVjay1wbGFuLmpzXCJcbmltcG9ydCB7Z29Nb2R1bGVNYW5pZmVzdH0gZnJvbSBcIi4vZ28uanNcIlxuXG4vKipcbiAqIENvbnN0cnVjdHMgR28ncyBjZ28tZGlzYWJsZWQsIG9mZmxpbmUgYnVpbGQvdmV0IHBsYW4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCIpLlRhcmdldENoZWNrUGxhbkNvbnRleHR9IGNvbnRleHQgLSBWYWxpZGF0ZWQgY2FuZGlkYXRlIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGFyZ2V0Q2hlY2tQbGFufSBJbW11dGFibGUgR28gcGxhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdvQ2hlY2tQbGFuKGNvbnRleHQpIHtcbiAgY29uc3QgdG9vbCA9IGNoZWNrVG9vbChjb250ZXh0LCBcImdvXCIsIFwiZ29cIilcbiAgY29uc3QgYXJ0aWZhY3RzID0gY2hlY2tBcnRpZmFjdHMoY29udGV4dCwgYXJ0aWZhY3QgPT4gYXJ0aWZhY3QucGF0aC5lbmRzV2l0aChcIi5nb1wiKSB8fCBhcnRpZmFjdC5wYXRoID09IFwiZ28ubW9kXCIsXG4gICAgXCJnb1wiLCBcIm9ubHkgc3RhZ2VkICcuZ28nIHNvdXJjZXMgYW5kIHRoZSBjYW5vbmljYWwgbW9kdWxlIG1hbmlmZXN0XCIpXG4gIGNvbnN0IG1hbmlmZXN0cyA9IGNvbnRleHQuYXJ0aWZhY3RzLmFydGlmYWN0cy5maWx0ZXIoYXJ0aWZhY3QgPT4gYXJ0aWZhY3QucGF0aCA9PSBcImdvLm1vZFwiKVxuICBjb25zdCBzb3VyY2VzID0gYXJ0aWZhY3RzLmZpbHRlcihhcnRpZmFjdCA9PiBhcnRpZmFjdC5lbmRzV2l0aChcIi5nb1wiKSlcblxuICBpZiAobWFuaWZlc3RzLmxlbmd0aCAhPSAxIHx8IG1hbmlmZXN0c1swXS5jb250ZW50S2luZCAhPSBcInRleHRcIiB8fCBtYW5pZmVzdHNbMF0ucm9sZSAhPSBcIm1hbmlmZXN0XCIgfHxcbiAgICBtYW5pZmVzdHNbMF0uY29udGVudCAhPSBnb01vZHVsZU1hbmlmZXN0IHx8IGFydGlmYWN0cy5sZW5ndGggIT0gMiB8fCBzb3VyY2VzLmxlbmd0aCAhPSAxIHx8XG4gICAgc291cmNlc1swXSAhPSBwYXRoLmpvaW4oY29udGV4dC5zb3VyY2VQYXRoLCBcIm1haW4uZ29cIikpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9UQVJHRVRfQ0hFQ0tfUExBTlwiLFxuICAgICAgbGFuZ3VhZ2U6IFwiZ29cIixcbiAgICAgIG1lc3NhZ2U6IFwiR28gZGV2ZWxvcGVyIGNoZWNrcyByZXF1aXJlIHRoZSBleGFjdCBkZXBlbmRlbmN5LWZyZWUgJ2dvLm1vZCcgYW5kIGF0IGxlYXN0IG9uZSBzdGFnZWQgJy5nbycgc291cmNlLlwiXG4gICAgfSlcbiAgfVxuICBjb25zdCBjYWNoZSA9IHBhdGguam9pbihjb250ZXh0LmJ1aWxkUGF0aCwgXCJnby1jYWNoZVwiKVxuICBjb25zdCBtb2R1bGVDYWNoZSA9IHBhdGguam9pbihjb250ZXh0LmJ1aWxkUGF0aCwgXCJnby1tb2QtY2FjaGVcIilcbiAgY29uc3QgZ29QYXRoID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcImdvLXBhdGhcIilcbiAgY29uc3QgdGVtcG9yYXJ5ID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcImdvLXRtcFwiKVxuICBjb25zdCBob21lID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcImdvLWhvbWVcIilcbiAgY29uc3QgYmluYXJ5ID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcInNlbWFudGlmb2xkLWdvXCIpXG4gIGNvbnN0IGVudmlyb25tZW50ID0ge1xuICAgIENHT19FTkFCTEVEOiBcIjBcIixcbiAgICBHT0FSQ0g6IFwiYW1kNjRcIixcbiAgICBHT0NBQ0hFOiBjYWNoZSxcbiAgICBHT0VOVjogXCJvZmZcIixcbiAgICBHT01PRENBQ0hFOiBtb2R1bGVDYWNoZSxcbiAgICBHT09TOiBcImxpbnV4XCIsXG4gICAgR09QQVRIOiBnb1BhdGgsXG4gICAgR09QUk9YWTogXCJvZmZcIixcbiAgICBHT1NVTURCOiBcIm9mZlwiLFxuICAgIEdPVE9PTENIQUlOOiBcImxvY2FsXCIsXG4gICAgR09UTVBESVI6IHRlbXBvcmFyeSxcbiAgICBHT1ZDUzogXCJvZmZcIixcbiAgICBHT1dPUks6IFwib2ZmXCIsXG4gICAgR09fVEVMRU1FVFJZX0NISUxEOiBcIjJcIixcbiAgICBIT01FOiBob21lXG4gIH1cbiAgY29uc3QgZW52aXJvbm1lbnRQYXRocyA9IFtcbiAgICBlbnZpcm9ubWVudFBhdGgoXCJHT0NBQ0hFXCIsIFwiYnVpbGRcIiksIGVudmlyb25tZW50UGF0aChcIkdPTU9EQ0FDSEVcIiwgXCJidWlsZFwiKSwgZW52aXJvbm1lbnRQYXRoKFwiR09QQVRIXCIsIFwiYnVpbGRcIiksXG4gICAgZW52aXJvbm1lbnRQYXRoKFwiR09UTVBESVJcIiwgXCJidWlsZFwiKSwgZW52aXJvbm1lbnRQYXRoKFwiSE9NRVwiLCBcImJ1aWxkXCIpXG4gIF1cblxuICByZXR1cm4gY2hlY2tQbGFuKGNvbnRleHQsIFwiZ29cIiwgYXJ0aWZhY3RzLCBbXG4gICAgY2hlY2tTdGFnZSh7XG4gICAgICBhcmd2OiBbXCJidWlsZFwiLCBcIi1tb2Q9cmVhZG9ubHlcIiwgXCItdHJpbXBhdGhcIiwgXCItYnVpbGR2Y3M9ZmFsc2VcIiwgXCItbGRmbGFncz0tYnVpbGRpZD1cIiwgXCItb1wiLCBiaW5hcnksIFwiLlwiXSxcbiAgICAgIGN3ZDogY29udGV4dC5zb3VyY2VQYXRoLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBlbnZpcm9ubWVudFBhdGhzLFxuICAgICAgaW5wdXRzOiBhcnRpZmFjdHMsXG4gICAgICBvdXRwdXQ6IGNoZWNrT3V0cHV0KGNvbnRleHQuYnVpbGRQYXRoLCBcImFwcGxpY2F0aW9uL3gtZXhlY3V0YWJsZVwiLCBcImNvbXBpbGVyLW91dHB1dFwiKSxcbiAgICAgIHBhdGhBcmd1bWVudHM6IFtwYXRoQXJndW1lbnQoNiwgXCJidWlsZFwiKV0sXG4gICAgICBzdGFnZTogXCJjb21waWxlXCIsXG4gICAgICB0b29sXG4gICAgfSksXG4gICAgY2hlY2tTdGFnZSh7XG4gICAgICBhcmd2OiBbXCJ2ZXRcIiwgXCItbW9kPXJlYWRvbmx5XCIsIFwiLlwiXSxcbiAgICAgIGN3ZDogY29udGV4dC5zb3VyY2VQYXRoLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBlbnZpcm9ubWVudFBhdGhzLFxuICAgICAgaW5wdXRzOiBhcnRpZmFjdHMsXG4gICAgICBvdXRwdXQ6IG51bGwsXG4gICAgICBwYXRoQXJndW1lbnRzOiBbXSxcbiAgICAgIHN0YWdlOiBcInZhbGlkYXRlXCIsXG4gICAgICB0b29sXG4gICAgfSlcbiAgXSlcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ export declare const goModuleManifest = "module example.com/semantifold/generated\n\ngo 1.26.0\n";
1
2
  /**
2
3
  * Emits one deterministic manifest-first Go module candidate.
3
4
  * @param {{filename?: string, mapDirective?: unknown, module: import("../semantic/types.js").SemanticModule, sourceMapFilename?: unknown, sources?: {filename: string, content: string, language?: import("../semantic/types.js").SemanticLanguage}[]}} input Backend request.
@@ -1 +1 @@
1
- {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/backends/go.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAC,EAHlF;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAAA;CAGzJ,GAFhF;IAAC,SAAS,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CA2C9F"}
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../../src/backends/go.js"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,4DAA4D,CAAA;AAQzF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAC,EAHlF;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAAA;CAGzJ,GAFhF;IAAC,SAAS,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CA2C9F"}
@@ -4,7 +4,7 @@ import { finalizeMapping, toSourceMapV3 } from "../mapping.js";
4
4
  import { validateBackendModule, emitExpression } from "./shared.js";
5
5
  import { emitScalarType } from "./scalars.js";
6
6
  import { SourceWriter } from "./writer.js";
7
- const manifest = "module example.com/semantifold/generated\n\ngo 1.26.0\n";
7
+ export const goModuleManifest = "module example.com/semantifold/generated\n\ngo 1.26.0\n";
8
8
  const binarySyntax = Object.freeze({
9
9
  BooleanAnd: "&&", BooleanEqual: "==", BooleanNotEqual: "!=", BooleanOr: "||",
10
10
  IntegerAdd: "+", IntegerEqual: "==", IntegerGreaterThan: ">", IntegerGreaterThanOrEqual: ">=",
@@ -34,7 +34,7 @@ export function generateGoModule({ filename, mapDirective, module, sourceMapFile
34
34
  throw new Error("Validated Go module omitted its canonical root provenance.");
35
35
  return {
36
36
  artifacts: [{
37
- content: manifest,
37
+ content: goModuleManifest,
38
38
  contentKind: "text",
39
39
  mediaType: "text/plain",
40
40
  ownership: "generated",
@@ -385,4 +385,4 @@ function relatedRootOrigins(root) {
385
385
  function identity(name) {
386
386
  return name;
387
387
  }
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvZ28uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDakUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBRXhDLE1BQU0sUUFBUSxHQUFHLHlEQUF5RCxDQUFBO0FBQzFFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDakMsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUk7SUFDNUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxJQUFJO0lBQzdGLGVBQWUsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLElBQUk7SUFDL0YsZUFBZSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUk7Q0FDakYsQ0FBQyxDQUFBO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBQztJQUMzRixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxD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QUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdkUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDNUQsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRyxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3BGLENBQUM7U0FBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQzVFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbEUsY0FBYyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRyxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2xGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7SUFDcEUsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksU0FBUyxDQUFDLDREQUE0RCxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUMzRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFT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QUE7SUFDdEYsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsa0JBQWtCLENBQUMsSUFBSTtJQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUE7SUFDNUcsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFBO0lBRWhHLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2hILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsSUFBSTtJQUNwQixPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7ZmluYWxpemVNYXBwaW5nLCB0b1NvdXJjZU1hcFYzfSBmcm9tIFwiLi4vbWFwcGluZy5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlQmFja2VuZE1vZHVsZSwgZW1pdEV4cHJlc3Npb259IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge2VtaXRTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7U291cmNlV3JpdGVyfSBmcm9tIFwiLi93cml0ZXIuanNcIlxuXG5jb25zdCBtYW5pZmVzdCA9IFwibW9kdWxlIGV4YW1wbGUuY29tL3NlbWFudGlmb2xkL2dlbmVyYXRlZFxcblxcbmdvIDEuMjYuMFxcblwiXG5jb25zdCBiaW5hcnlTeW50YXggPSBPYmplY3QuZnJlZXplKHtcbiAgQm9vbGVhbkFuZDogXCImJlwiLCBCb29sZWFuRXF1YWw6IFwiPT1cIiwgQm9vbGVhbk5vdEVxdWFsOiBcIiE9XCIsIEJvb2xlYW5PcjogXCJ8fFwiLFxuICBJbnRlZ2VyQWRkOiBcIitcIiwgSW50ZWdlckVxdWFsOiBcIj09XCIsIEludGVnZXJHcmVhdGVyVGhhbjogXCI+XCIsIEludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWw6IFwiPj1cIixcbiAgSW50ZWdlckxlc3NUaGFuOiBcIjxcIiwgSW50ZWdlckxlc3NUaGFuT3JFcXVhbDogXCI8PVwiLCBJbnRlZ2VyTXVsdGlwbHk6IFwiKlwiLCBJbnRlZ2VyTm90RXF1YWw6IFwiIT1cIixcbiAgSW50ZWdlclN1YnRyYWN0OiBcIi1cIiwgU3RyaW5nQ29uY2F0OiBcIitcIiwgU3RyaW5nRXF1YWw6IFwiPT1cIiwgU3RyaW5nTm90RXF1YWw6IFwiIT1cIlxufSlcblxuLyoqXG4gKiBFbWl0cyBvbmUgZGV0ZXJtaW5pc3RpYyBtYW5pZmVzdC1maXJzdCBHbyBtb2R1bGUgY2FuZGlkYXRlLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU/OiBzdHJpbmcsIG1hcERpcmVjdGl2ZT86IHVua25vd24sIG1vZHVsZTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lPzogdW5rbm93biwgc291cmNlcz86IHtmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX19IGlucHV0IEJhY2tlbmQgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHt7YXJ0aWZhY3RzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRTZXRBcnRpZmFjdFtdLCB0YXJnZXQ6IHN0cmluZ319IENhbmRpZGF0ZSBhcnRpZmFjdCBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUdvTW9kdWxlKHtmaWxlbmFtZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSkge1xuICB2YWxpZGF0ZUJhY2tlbmRNb2R1bGUobW9kdWxlLCBcImdvXCIpXG4gIGlmIChmaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmIGZpbGVuYW1lICE9IFwibWFpbi5nb1wiKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiZ29cIiwgXCJhcnRpZmFjdCBmaWxlbmFtZSBvdGhlciB0aGFuIG1haW4uZ29cIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChtYXBEaXJlY3RpdmUgIT09IHVuZGVmaW5lZCB8fCBzb3VyY2VNYXBGaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiZ29cIiwgXCJzb3VyY2UtbWFwIGZpbGVuYW1lIG9yIGRpcmVjdGl2ZSBvcHRpb25cIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIHZhbGlkYXRlUm91bmRUcmlwTXV0YWJpbGl0eShtb2R1bGUpXG4gIHZhbGlkYXRlTG9jYWxSZWFkcyhtb2R1bGUpXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBTb3VyY2VXcml0ZXIoe2ZpbGVuYW1lOiBcIm1haW4uZ29cIiwgbGFuZ3VhZ2U6IFwiZ29cIiwgbW9kdWxlLCBzb3VyY2VzfSlcblxuICBlbWl0UHJvZ3JhbShtb2R1bGUsIHdyaXRlcilcbiAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplTWFwcGluZyh3cml0ZXIuZmluaXNoKCkpXG4gIGNvbnN0IHJvb3QgPSBtYXBwaW5nLm5vZGVzLmZpbmQoKHtwYXRofSkgPT4gcGF0aCA9PSBcIlwiKVxuXG4gIGlmICghcm9vdCkgdGhyb3cgbmV3IEVycm9yKFwiVmFsaWRhdGVkIEdvIG1vZHVsZSBvbWl0dGVkIGl0cyBjYW5vbmljYWwgcm9vdCBwcm92ZW5hbmNlLlwiKVxuICByZXR1cm4ge1xuICAgIGFydGlmYWN0czogW3tcbiAgICAgIGNvbnRlbnQ6IG1hbmlmZXN0LFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiBcInRleHQvcGxhaW5cIixcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IFwiZ28ubW9kXCIsXG4gICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgIGtpbmQ6IFwic3ludGhldGljXCIsXG4gICAgICAgIHJlYXNvbjogXCJGaXhlZCBleGFtcGxlLmNvbS9zZW1hbnRpZm9sZC9nZW5lcmF0ZWQgbW9kdWxlIGlkZW50aXR5IGFuZCBHbyAxLjI2LjAgY29uZmlndXJhdGlvbi5cIixcbiAgICAgICAgcmVsYXRlZE9yaWdpbnM6IHJlbGF0ZWRSb290T3JpZ2lucyhyb290KVxuICAgICAgfSxcbiAgICAgIHJvbGU6IFwibWFuaWZlc3RcIlxuICAgIH0sIHtcbiAgICAgIGNvbnRlbnQ6IG1hcHBpbmcuZ2VuZXJhdGVkLmNvbnRlbnQsXG4gICAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgICBtZWRpYVR5cGU6IFwidGV4dC94LWdvXCIsXG4gICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICBwYXRoOiBcIm1haW4uZ29cIixcbiAgICAgIHByb3ZlbmFuY2U6IHtraW5kOiBcInRleHRcIiwgbWFwcGluZywgc291cmNlTWFwOiB0b1NvdXJjZU1hcFYzKG1hcHBpbmcpfSxcbiAgICAgIHJvbGU6IFwiZW50cnlcIlxuICAgIH1dLFxuICAgIHRhcmdldDogXCJnb1wiXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYXNzaWdubWVudC1kZXJpdmVkIG11dGFiaWxpdHkgYmVmb3JlIHdyaXRlciBjb25zdHJ1Y3Rpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUm91bmRUcmlwTXV0YWJpbGl0eShtb2R1bGUpIHtcbiAgZm9yIChjb25zdCByb290IG9mIFsuLi5tb2R1bGUuZnVuY3Rpb25zLm1hcCgoe2JvZHl9KSA9PiBib2R5KSwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keV0pIHtcbiAgICBjb25zdCBhc3NpZ25lZCA9IG5ldyBTZXQoKVxuXG4gICAgdmlzaXRTdGF0ZW1lbnRzKHJvb3QsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikgYXNzaWduZWQuYWRkKHN0YXRlbWVudC50YXJnZXQubmFtZSlcbiAgICB9KVxuICAgIHZpc2l0U3RhdGVtZW50cyhyb290LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgc3RhdGVtZW50Lm11dGFibGUgJiYgIWFzc2lnbmVkLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiZ29cIiwgXCJtdXRhYmxlIGxvY2FsIHdpdGhvdXQgYSBsYXRlciBzeW50YWN0aWMgYXNzaWdubWVudFwiLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIFJlamVjdHMgbG9jYWxzIHRoYXQgR28gd291bGQgcmVqZWN0IGFzIGRlY2xhcmVkIGJ1dCBuZXZlciByZWFkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUxvY2FsUmVhZHMobW9kdWxlKSB7XG4gIGZvciAoY29uc3Qgcm9vdCBvZiBbLi4ubW9kdWxlLmZ1bmN0aW9ucy5tYXAoKHtib2R5fSkgPT4gYm9keSksIG1vZHVsZS5lbnRyeVBvaW50LmJvZHldKSB7XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uW119ICovXG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gW11cbiAgICBjb25zdCByZWFkcyA9IG5ldyBTZXQoKVxuXG4gICAgdmlzaXRTdGF0ZW1lbnRzKHJvb3QsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgICAgICBkZWNsYXJhdGlvbnMucHVzaChzdGF0ZW1lbnQpXG4gICAgICAgIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoc3RhdGVtZW50LmluaXRpYWxpemVyLCByZWFkcylcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSBjb2xsZWN0SWRlbnRpZmllclJlYWRzKHN0YXRlbWVudC5jb25kaXRpb24sIHJlYWRzKVxuICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHxcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlbWVudC5leHByZXNzaW9uXG5cbiAgICAgICAgaWYgKGV4cHJlc3Npb24pIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoZXhwcmVzc2lvbiwgcmVhZHMpXG4gICAgICB9XG4gICAgfSlcbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuICAgICAgaWYgKCFyZWFkcy5oYXMoZGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiZ29cIiwgYGxvY2FsICcke2RlY2xhcmF0aW9uLm5hbWV9JyBpcyBuZXZlciByZWFkYCwgZGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ29sbGVjdHMgZ2VudWluZSBpZGVudGlmaWVyIHJlYWRzIHJlY3Vyc2l2ZWx5IGZyb20gb25lIHZhbGlkYXRlZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSByZWFkcyBDb2xsZWN0ZWQgbmFtZXMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gY29sbGVjdElkZW50aWZpZXJSZWFkcyhleHByZXNzaW9uLCByZWFkcykge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmVhZHMuYWRkKGV4cHJlc3Npb24ubmFtZSlcbiAgZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMpIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoYXJndW1lbnQsIHJlYWRzKVxuICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGV4cHJlc3Npb24ub3BlcmFuZCwgcmVhZHMpXG4gIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoZXhwcmVzc2lvbi5sZWZ0LCByZWFkcylcbiAgICBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGV4cHJlc3Npb24ucmlnaHQsIHJlYWRzKVxuICB9XG59XG5cbi8qKlxuICogVmlzaXRzIG5lc3RlZCBzdGF0ZW1lbnRzIGluIHNlbWFudGljIG9yZGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgU2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0geyhzdGF0ZW1lbnQ6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudCkgPT4gdm9pZH0gY2FsbGJhY2sgVmlzaXRvci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2aXNpdFN0YXRlbWVudHMoYmxvY2ssIGNhbGxiYWNrKSB7XG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGJsb2NrLnN0YXRlbWVudHMpIHtcbiAgICBjYWxsYmFjayhzdGF0ZW1lbnQpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgdmlzaXRTdGF0ZW1lbnRzKHN0YXRlbWVudC5jb25zZXF1ZW50LCBjYWxsYmFjaylcbiAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdFN0YXRlbWVudHMoc3RhdGVtZW50LmFsdGVybmF0ZSwgY2FsbGJhY2spXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGFueSBwcmludCBzdGF0ZW1lbnQgcmVxdWlyZXMgZm10LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBQcmludCBwcmVzZW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzUHJpbnQobW9kdWxlKSB7XG4gIGxldCBmb3VuZCA9IGZhbHNlXG5cbiAgZm9yIChjb25zdCByb290IG9mIFsuLi5tb2R1bGUuZnVuY3Rpb25zLm1hcCgoe2JvZHl9KSA9PiBib2R5KSwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keV0pIHtcbiAgICB2aXNpdFN0YXRlbWVudHMocm9vdCwgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikgZm91bmQgPSB0cnVlXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZm91bmRcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgZml4ZWQgR28gZmlsZSBzY2FmZm9sZCBhbmQgc2VtYW50aWMgYm9kaWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0UHJvZ3JhbShtb2R1bGUsIHdyaXRlcikge1xuICB3cml0ZXIuc3ludGhldGljKFwicGFja2FnZSBtYWluXFxuXCIsIFwiR28gcGFja2FnZSBzY2FmZm9sZFwiLCBbbW9kdWxlXSlcbiAgaWYgKGhhc1ByaW50KG1vZHVsZSkpIHdyaXRlci5zeW50aGV0aWMoJ1xcbmltcG9ydCBcImZtdFwiXFxuJywgXCJHbyBmbXQgcHJpbnQgc2NhZmZvbGRcIiwgW21vZHVsZV0pXG4gIG1vZHVsZS5mdW5jdGlvbnMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIGluZGV4KSA9PiB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dKVxuICAgIGVtaXRGdW5jdGlvbih3cml0ZXIsIGRlY2xhcmF0aW9uLCBpbmRleClcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImVudHJ5LXBvaW50IHNlcGFyYXRvclwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdKVxuICB3cml0ZXIubWFwcGVkKFwiZnVuYyBtYWluXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogbW9kdWxlLmVudHJ5UG9pbnQsIHBhdGg6IFwiL2VudHJ5UG9pbnRcIn0pXG4gIHdyaXRlci5tYXBwZWQoXCIoKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50LCBwYXRoOiBcIi9lbnRyeVBvaW50XCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImVudHJ5LXBvaW50IHNwYWNpbmdcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG4gIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogbW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgcGF0aDogXCIvZW50cnlQb2ludC9ib2R5XCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbbW9kdWxlLmVudHJ5UG9pbnRdLCBbXCIvZW50cnlQb2ludFwiXSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgbW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgXCJcXHRcIiwgXCIvZW50cnlQb2ludC9ib2R5XCIpXG4gIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogbW9kdWxlLmVudHJ5UG9pbnQsIHBhdGg6IFwiL2VudHJ5UG9pbnRcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBzZW1hbnRpYyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gRnVuY3Rpb24gZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggRnVuY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdEZ1bmN0aW9uKHdyaXRlciwgZGVjbGFyYXRpb24sIGluZGV4KSB7XG4gIGNvbnN0IHBhdGggPSBcIi9mdW5jdGlvbnMvXCIgKyBpbmRleFxuXG4gIHdyaXRlci5tYXBwZWQoXCJmdW5jXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImZ1bmN0aW9uIHNwYWNpbmdcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKGRlY2xhcmF0aW9uLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgZGVjbGFyYXRpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIHBhcmFtZXRlckluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyUGF0aCA9IHBhdGggKyBcIi9wYXJhbWV0ZXJzL1wiICsgcGFyYW1ldGVySW5kZXhcblxuICAgIGlmIChwYXJhbWV0ZXJJbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IHBhcmFtZXRlclBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInBhcmFtZXRlciBzcGFjaW5nXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcImdvXCIsIHBhcmFtZXRlci50eXBlKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLnR5cGUsIHBhdGg6IHBhcmFtZXRlclBhdGggKyBcIi90eXBlXCIsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgfSlcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwicmVzdWx0IHNwYWNpbmdcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiZ29cIiwgZGVjbGFyYXRpb24ucmV0dXJuVHlwZSksIHtcbiAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLCBwYXRoOiBwYXRoICsgXCIvcmV0dXJuVHlwZVwiLCByb2xlOiBcInR5cGVcIlxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImJvZHkgc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24uYm9keSwgcGF0aDogcGF0aCArIFwiL2JvZHlcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgZGVjbGFyYXRpb24uYm9keSwgXCJcXHRcIiwgcGF0aCArIFwiL2JvZHlcIilcbiAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhbiBvcmRlcmVkIGJsb2NrLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgU2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBTZW1hbnRpYyBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRCbG9jayh3cml0ZXIsIGJsb2NrLCBpbmRlbnQsIHBhdGgpIHtcbiAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQsIGluZGV4KSA9PiBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGggKyBcIi9zdGF0ZW1lbnRzL1wiICsgaW5kZXgpKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBzdXBwb3J0ZWQgc3RhdGVtZW50LlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCBTZW1hbnRpYyBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBTZW1hbnRpYyBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRTdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCkge1xuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICByZXR1cm4gZW1pdExvY2FsKHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgpXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikgcmV0dXJuIGVtaXRJZih3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoLCB0cnVlKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHbyBUYXNrIDAwNSBleHByZXNzaW9uIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiQ29udGludWVTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBHbyBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGlmICghc3RhdGVtZW50LmV4cHJlc3Npb24pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHbyBiYXJlIHJldHVybiByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICAgIHdyaXRlci5tYXBwZWQoXCJyZXR1cm5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwicmV0dXJuIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBwYXRoICsgXCIvZXhwcmVzc2lvblwiLCBcImdvXCIsIGlkZW50aXR5KVxuICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCJmbXQuUHJpbnRsblwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmV4cHJlc3Npb24sIHBhdGggKyBcIi9leHByZXNzaW9uXCIsIFwiZ29cIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBHbyBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbiBhZnRlciBwcmVmbGlnaHQuXCIpXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIGNvbmRpdGlvbmFsLCB1c2luZyBkaXJlY3QgZWxzZS1pZiBmb3IgdGhlIGNhbm9uaWNhbCBuZXN0ZWQgc2hhcGUuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSBzdGF0ZW1lbnQgQ29uZGl0aW9uYWwuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBTZW1hbnRpYyBwYXRoLlxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlSW5kZW50IFdoZXRoZXIgdG8gZW1pdCBsZWFkaW5nIGluZGVudGF0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRJZih3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoLCBpbmNsdWRlSW5kZW50KSB7XG4gIGlmIChpbmNsdWRlSW5kZW50KSB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwiaWZcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImNvbmRpdGlvbmFsIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgZW1pdENvbmRpdGlvbih3cml0ZXIsIHN0YXRlbWVudC5jb25kaXRpb24sIHBhdGggKyBcIi9jb25kaXRpb25cIilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJjb25kaXRpb25hbCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmNvbnNlcXVlbnQsIHBhdGg6IHBhdGggKyBcIi9jb25zZXF1ZW50XCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuY29uc2VxdWVudCwgaW5kZW50ICsgXCJcXHRcIiwgcGF0aCArIFwiL2NvbnNlcXVlbnRcIilcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuY29uc2VxdWVudCwgcGF0aDogcGF0aCArIFwiL2NvbnNlcXVlbnRcIn0pXG4gIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhbHRlcm5hdGUgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJlbHNlXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFsdGVybmF0ZSBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgY29uc3QgbmVzdGVkID0gc3RhdGVtZW50LmFsdGVybmF0ZS5zdGF0ZW1lbnRzLmxlbmd0aCA9PSAxICYmIHN0YXRlbWVudC5hbHRlcm5hdGUuc3RhdGVtZW50c1swXS5raW5kID09IFwiSWZTdGF0ZW1lbnRcIlxuXG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgZW1pdElmKHdyaXRlciwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gKi8gKHN0YXRlbWVudC5hbHRlcm5hdGUuc3RhdGVtZW50c1swXSksXG4gICAgICAgIGluZGVudCwgcGF0aCArIFwiL2FsdGVybmF0ZS9zdGF0ZW1lbnRzLzBcIiwgZmFsc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIntcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBwYXRoICsgXCIvYWx0ZXJuYXRlXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgaW5kZW50ICsgXCJcXHRcIiwgcGF0aCArIFwiL2FsdGVybmF0ZVwiKVxuICAgIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIn1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBwYXRoOiBwYXRoICsgXCIvYWx0ZXJuYXRlXCJ9KVxuICB9XG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBjb25kaXRpb24gd2l0aG91dCB0aGUgb25lIHJlZHVuZGFudCBvdXRlciBwYWlyIHJlbW92ZWQgYnkgZ29mbXQuXG4gKiBDaGlsZCBvcGVyYXRpb25zIHN0YXkgcGFyZW50aGVzaXplZCBzbyB0aGUgc2VtYW50aWMgdHJlZSByb3VuZC10cmlwcyBleGFjdGx5LlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIENvbmRpdGlvbiBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggU2VtYW50aWMgcGF0aC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0Q29uZGl0aW9uKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCkge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIHBhdGggKyBcIi9sZWZ0XCIsIFwiZ29cIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYmluYXJ5U3ludGF4W2V4cHJlc3Npb24ub3BlcmF0aW9uXSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgcGF0aCArIFwiL3JpZ2h0XCIsIFwiZ29cIiwgaWRlbnRpdHkpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5Ob3RcIiA/IFwiIVwiIDogXCItXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIHBhdGggKyBcIi9vcGVyYW5kXCIsIFwiZ29cIiwgaWRlbnRpdHkpXG4gICAgcmV0dXJuXG4gIH1cbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBcImdvXCIsIGlkZW50aXR5KVxufVxuXG4vKipcbiAqIEVtaXRzIGEgbG9jYWwgZGVjbGFyYXRpb24gb3IgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxTdGF0ZW1lbnR9IHN0YXRlbWVudCBMb2NhbCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBTZW1hbnRpYyBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRMb2NhbCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKSB7XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiAhc3RhdGVtZW50Lm11dGFibGUpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCArIFwiLy8gQHNlbWFudGlmb2xkLWltbXV0YWJsZVxcblwiLCBcIkdvIGltbXV0YWJsZS1sb2NhbCBjYXJyaWVyXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudGFyZ2V0LCBwYXRoOiBwYXRoICsgXCIvdGFyZ2V0XCIsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBwYXRoICsgXCIvZXhwcmVzc2lvblwiLCBcImdvXCIsIGlkZW50aXR5KVxuICB9IGVsc2Uge1xuICAgIHdyaXRlci5tYXBwZWQoXCJ2YXJcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZGVjbGFyYXRpb24gc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwiZ29cIiwgc3RhdGVtZW50LnR5cGUpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudHlwZSwgcGF0aDogcGF0aCArIFwiL3R5cGVcIiwgcm9sZTogXCJ0eXBlXCJcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcIj1cIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmluaXRpYWxpemVyLCBwYXRoICsgXCIvaW5pdGlhbGl6ZXJcIiwgXCJnb1wiLCBpZGVudGl0eSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHJvb3QgcHJvdmVuYW5jZSB0byBhcnRpZmFjdC1sZXZlbCByZWxhdGVkIG9yaWdpbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTm9kZVByb3ZlbmFuY2V9IHJvb3QgUm9vdCBwcm92ZW5hbmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gUmVsYXRlZCByb290cy5cbiAqL1xuZnVuY3Rpb24gcmVsYXRlZFJvb3RPcmlnaW5zKHJvb3QpIHtcbiAgaWYgKHJvb3Qub3JpZ2luLmtpbmQgPT0gXCJzb3VyY2VcIikge1xuICAgIHJldHVybiBbe2xvY2F0aW9uOiByb290Lm9yaWdpbi5sb2NhdGlvbiwgbm9kZUlkOiByb290LmlkLCByb2xlOiBcIm1vZHVsZVwiLCBzb3VyY2VJZDogcm9vdC5vcmlnaW4uc291cmNlSWR9XVxuICB9XG4gIGNvbnN0IG9yaWdpbnMgPSByb290Lm9yaWdpbi5raW5kID09IFwiZGVyaXZlZFwiID8gcm9vdC5vcmlnaW4ub3JpZ2lucyA6IHJvb3Qub3JpZ2luLnJlbGF0ZWRPcmlnaW5zXG5cbiAgcmV0dXJuIG9yaWdpbnMubWFwKChvcmlnaW4pID0+ICh7Li4ub3JpZ2luLCBub2RlSWQ6IG9yaWdpbi5ub2RlSWQgPz8gcm9vdC5pZCwgcm9sZTogb3JpZ2luLnJvbGUgPz8gXCJtb2R1bGVcIn0pKVxufVxuXG4vKipcbiAqIFByZXNlcnZlcyBhbiBhbHJlYWR5IHZhbGlkYXRlZCBHbyBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgSWRlbnRpZmllci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVuY2hhbmdlZCBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkobmFtZSkge1xuICByZXR1cm4gbmFtZVxufVxuIl19
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvZ28uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDakUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLHlEQUF5RCxDQUFBO0FBQ3pGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDakMsVUFBVSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUk7SUFDNUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxJQUFJO0lBQzdGLGVBQWUsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLElBQUk7SUFDL0YsZUFBZSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUk7Q0FDakYsQ0FBQyxDQUFBO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBQztJQUMzRixxQkFBcUIsQ0FBQyxNQUFN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SUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMxRCxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNO0tBQzdGLENBQUMsQ0FBQTtJQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMzRCxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQTtJQUN6RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3BFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUk7SUFDNUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ3pILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSTtJQUNwRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BGLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksYUFBYTtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN6RixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCO1FBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFBO0lBQ3RILElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLG1CQUFtQixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN4SCxNQUFNLElBQUksU0FBUyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7UUFDbEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN2RSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUM1RCxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxHQUFHLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDcEYsQ0FBQztTQUFNLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDNUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNsRSxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxHQUFHLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUNwRSxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxTQUFTLENBQUMsNERBQTRELENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhO0lBQzVELElBQUksYUFBYTtRQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMvRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLHFCQUFxQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2pFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUE7SUFDL0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsYUFBYSxFQUFDLENBQUMsQ0FBQTtJQUNuRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDekQsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFBO0lBQzVFLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxhQUFhLEVBQUMsQ0FBQyxDQUFBO0lBQ25HLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQy9ELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDckUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDL0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFBO1FBRXBILElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsTUFBTSxFQUFFLHlEQUF5RCxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDMUcsTUFBTSxFQUFFLElBQUksR0FBRyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNsRCxPQUFNO1FBQ1IsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLFlBQVksRUFBQyxDQUFDLENBQUE7UUFDakcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3pELFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQTtRQUMxRSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDNUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsWUFBWSxFQUFDLENBQUMsQ0FBQTtJQUNuRyxDQUFDO0lBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJO0lBQzdDLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN2RSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBQ25ILE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQy9ELGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN6RSxPQUFNO0lBQ1IsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1lBQzlELFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVU7U0FDL0QsQ0FBQyxDQUFBO1FBQ0YsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzdFLE9BQU07SUFDUixDQUFDO0lBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUk7SUFDaEQsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLDZCQUE2QixFQUFFLDRCQUE0QixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzdHLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDNUQsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDMUgsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2hFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLEdBQUcsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNwRixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDcEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUMxRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNqRSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xELFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU07U0FDL0UsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBQ25GLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2hFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLEdBQUcsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUN0RixDQUFDO0lBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQzNELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJO0lBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDakMsT0FBTyxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQTtJQUM1RyxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUE7SUFFaEcsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUE7QUFDaEgsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFFBQVEsQ0FBQyxJQUFJO0lBQ3BCLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtmaW5hbGl6ZU1hcHBpbmcsIHRvU291cmNlTWFwVjN9IGZyb20gXCIuLi9tYXBwaW5nLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVCYWNrZW5kTW9kdWxlLCBlbWl0RXhwcmVzc2lvbn0gZnJvbSBcIi4vc2hhcmVkLmpzXCJcbmltcG9ydCB7ZW1pdFNjYWxhclR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtTb3VyY2VXcml0ZXJ9IGZyb20gXCIuL3dyaXRlci5qc1wiXG5cbmV4cG9ydCBjb25zdCBnb01vZHVsZU1hbmlmZXN0ID0gXCJtb2R1bGUgZXhhbXBsZS5jb20vc2VtYW50aWZvbGQvZ2VuZXJhdGVkXFxuXFxuZ28gMS4yNi4wXFxuXCJcbmNvbnN0IGJpbmFyeVN5bnRheCA9IE9iamVjdC5mcmVlemUoe1xuICBCb29sZWFuQW5kOiBcIiYmXCIsIEJvb2xlYW5FcXVhbDogXCI9PVwiLCBCb29sZWFuTm90RXF1YWw6IFwiIT1cIiwgQm9vbGVhbk9yOiBcInx8XCIsXG4gIEludGVnZXJBZGQ6IFwiK1wiLCBJbnRlZ2VyRXF1YWw6IFwiPT1cIiwgSW50ZWdlckdyZWF0ZXJUaGFuOiBcIj5cIiwgSW50ZWdlckdyZWF0ZXJUaGFuT3JFcXVhbDogXCI+PVwiLFxuICBJbnRlZ2VyTGVzc1RoYW46IFwiPFwiLCBJbnRlZ2VyTGVzc1RoYW5PckVxdWFsOiBcIjw9XCIsIEludGVnZXJNdWx0aXBseTogXCIqXCIsIEludGVnZXJOb3RFcXVhbDogXCIhPVwiLFxuICBJbnRlZ2VyU3VidHJhY3Q6IFwiLVwiLCBTdHJpbmdDb25jYXQ6IFwiK1wiLCBTdHJpbmdFcXVhbDogXCI9PVwiLCBTdHJpbmdOb3RFcXVhbDogXCIhPVwiXG59KVxuXG4vKipcbiAqIEVtaXRzIG9uZSBkZXRlcm1pbmlzdGljIG1hbmlmZXN0LWZpcnN0IEdvIG1vZHVsZSBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZT86IHN0cmluZywgbWFwRGlyZWN0aXZlPzogdW5rbm93biwgbW9kdWxlOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZSwgc291cmNlTWFwRmlsZW5hbWU/OiB1bmtub3duLCBzb3VyY2VzPzoge2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfX0gaW5wdXQgQmFja2VuZCByZXF1ZXN0LlxuICogQHJldHVybnMge3thcnRpZmFjdHM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W10sIHRhcmdldDogc3RyaW5nfX0gQ2FuZGlkYXRlIGFydGlmYWN0IHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlR29Nb2R1bGUoe2ZpbGVuYW1lLCBtYXBEaXJlY3RpdmUsIG1vZHVsZSwgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9KSB7XG4gIHZhbGlkYXRlQmFja2VuZE1vZHVsZShtb2R1bGUsIFwiZ29cIilcbiAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgZmlsZW5hbWUgIT0gXCJtYWluLmdvXCIpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJnb1wiLCBcImFydGlmYWN0IGZpbGVuYW1lIG90aGVyIHRoYW4gbWFpbi5nb1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKG1hcERpcmVjdGl2ZSAhPT0gdW5kZWZpbmVkIHx8IHNvdXJjZU1hcEZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJnb1wiLCBcInNvdXJjZS1tYXAgZmlsZW5hbWUgb3IgZGlyZWN0aXZlIG9wdGlvblwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgdmFsaWRhdGVSb3VuZFRyaXBNdXRhYmlsaXR5KG1vZHVsZSlcbiAgdmFsaWRhdGVMb2NhbFJlYWRzKG1vZHVsZSlcbiAgY29uc3Qgd3JpdGVyID0gbmV3IFNvdXJjZVdyaXRlcih7ZmlsZW5hbWU6IFwibWFpbi5nb1wiLCBsYW5ndWFnZTogXCJnb1wiLCBtb2R1bGUsIHNvdXJjZXN9KVxuXG4gIGVtaXRQcm9ncmFtKG1vZHVsZSwgd3JpdGVyKVxuICBjb25zdCBtYXBwaW5nID0gZmluYWxpemVNYXBwaW5nKHdyaXRlci5maW5pc2goKSlcbiAgY29uc3Qgcm9vdCA9IG1hcHBpbmcubm9kZXMuZmluZCgoe3BhdGh9KSA9PiBwYXRoID09IFwiXCIpXG5cbiAgaWYgKCFyb290KSB0aHJvdyBuZXcgRXJyb3IoXCJWYWxpZGF0ZWQgR28gbW9kdWxlIG9taXR0ZWQgaXRzIGNhbm9uaWNhbCByb290IHByb3ZlbmFuY2UuXCIpXG4gIHJldHVybiB7XG4gICAgYXJ0aWZhY3RzOiBbe1xuICAgICAgY29udGVudDogZ29Nb2R1bGVNYW5pZmVzdCxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3BsYWluXCIsXG4gICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICBwYXRoOiBcImdvLm1vZFwiLFxuICAgICAgcHJvdmVuYW5jZToge1xuICAgICAgICBraW5kOiBcInN5bnRoZXRpY1wiLFxuICAgICAgICByZWFzb246IFwiRml4ZWQgZXhhbXBsZS5jb20vc2VtYW50aWZvbGQvZ2VuZXJhdGVkIG1vZHVsZSBpZGVudGl0eSBhbmQgR28gMS4yNi4wIGNvbmZpZ3VyYXRpb24uXCIsXG4gICAgICAgIHJlbGF0ZWRPcmlnaW5zOiByZWxhdGVkUm9vdE9yaWdpbnMocm9vdClcbiAgICAgIH0sXG4gICAgICByb2xlOiBcIm1hbmlmZXN0XCJcbiAgICB9LCB7XG4gICAgICBjb250ZW50OiBtYXBwaW5nLmdlbmVyYXRlZC5jb250ZW50LFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiBcInRleHQveC1nb1wiLFxuICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgcGF0aDogXCJtYWluLmdvXCIsXG4gICAgICBwcm92ZW5hbmNlOiB7a2luZDogXCJ0ZXh0XCIsIG1hcHBpbmcsIHNvdXJjZU1hcDogdG9Tb3VyY2VNYXBWMyhtYXBwaW5nKX0sXG4gICAgICByb2xlOiBcImVudHJ5XCJcbiAgICB9XSxcbiAgICB0YXJnZXQ6IFwiZ29cIlxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFzc2lnbm1lbnQtZGVyaXZlZCBtdXRhYmlsaXR5IGJlZm9yZSB3cml0ZXIgY29uc3RydWN0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIFNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJvdW5kVHJpcE11dGFiaWxpdHkobW9kdWxlKSB7XG4gIGZvciAoY29uc3Qgcm9vdCBvZiBbLi4ubW9kdWxlLmZ1bmN0aW9ucy5tYXAoKHtib2R5fSkgPT4gYm9keSksIG1vZHVsZS5lbnRyeVBvaW50LmJvZHldKSB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBuZXcgU2V0KClcblxuICAgIHZpc2l0U3RhdGVtZW50cyhyb290LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIGFzc2lnbmVkLmFkZChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUpXG4gICAgfSlcbiAgICB2aXNpdFN0YXRlbWVudHMocm9vdCwgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHN0YXRlbWVudC5tdXRhYmxlICYmICFhc3NpZ25lZC5oYXMoc3RhdGVtZW50Lm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImdvXCIsIFwibXV0YWJsZSBsb2NhbCB3aXRob3V0IGEgbGF0ZXIgc3ludGFjdGljIGFzc2lnbm1lbnRcIiwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBSZWplY3RzIGxvY2FscyB0aGF0IEdvIHdvdWxkIHJlamVjdCBhcyBkZWNsYXJlZCBidXQgbmV2ZXIgcmVhZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVMb2NhbFJlYWRzKG1vZHVsZSkge1xuICBmb3IgKGNvbnN0IHJvb3Qgb2YgWy4uLm1vZHVsZS5mdW5jdGlvbnMubWFwKCh7Ym9keX0pID0+IGJvZHkpLCBtb2R1bGUuZW50cnlQb2ludC5ib2R5XSkge1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IFtdXG4gICAgY29uc3QgcmVhZHMgPSBuZXcgU2V0KClcblxuICAgIHZpc2l0U3RhdGVtZW50cyhyb290LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICAgICAgZGVjbGFyYXRpb25zLnB1c2goc3RhdGVtZW50KVxuICAgICAgICBjb2xsZWN0SWRlbnRpZmllclJlYWRzKHN0YXRlbWVudC5pbml0aWFsaXplciwgcmVhZHMpXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikgY29sbGVjdElkZW50aWZpZXJSZWFkcyhzdGF0ZW1lbnQuY29uZGl0aW9uLCByZWFkcylcbiAgICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQuZXhwcmVzc2lvblxuXG4gICAgICAgIGlmIChleHByZXNzaW9uKSBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGV4cHJlc3Npb24sIHJlYWRzKVxuICAgICAgfVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICAgIGlmICghcmVhZHMuaGFzKGRlY2xhcmF0aW9uLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImdvXCIsIGBsb2NhbCAnJHtkZWNsYXJhdGlvbi5uYW1lfScgaXMgbmV2ZXIgcmVhZGAsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3RzIGdlbnVpbmUgaWRlbnRpZmllciByZWFkcyByZWN1cnNpdmVseSBmcm9tIG9uZSB2YWxpZGF0ZWQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gcmVhZHMgQ29sbGVjdGVkIG5hbWVzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RJZGVudGlmaWVyUmVhZHMoZXhwcmVzc2lvbiwgcmVhZHMpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHJlYWRzLmFkZChleHByZXNzaW9uLm5hbWUpXG4gIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGV4cHJlc3Npb24uYXJndW1lbnRzKSBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGFyZ3VtZW50LCByZWFkcylcbiAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgY29sbGVjdElkZW50aWZpZXJSZWFkcyhleHByZXNzaW9uLm9wZXJhbmQsIHJlYWRzKVxuICBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb2xsZWN0SWRlbnRpZmllclJlYWRzKGV4cHJlc3Npb24ubGVmdCwgcmVhZHMpXG4gICAgY29sbGVjdElkZW50aWZpZXJSZWFkcyhleHByZXNzaW9uLnJpZ2h0LCByZWFkcylcbiAgfVxufVxuXG4vKipcbiAqIFZpc2l0cyBuZXN0ZWQgc3RhdGVtZW50cyBpbiBzZW1hbnRpYyBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHsoc3RhdGVtZW50OiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnQpID0+IHZvaWR9IGNhbGxiYWNrIFZpc2l0b3IuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmlzaXRTdGF0ZW1lbnRzKGJsb2NrLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBibG9jay5zdGF0ZW1lbnRzKSB7XG4gICAgY2FsbGJhY2soc3RhdGVtZW50KVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHZpc2l0U3RhdGVtZW50cyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgY2FsbGJhY2spXG4gICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgdmlzaXRTdGF0ZW1lbnRzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGNhbGxiYWNrKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhbnkgcHJpbnQgc3RhdGVtZW50IHJlcXVpcmVzIGZtdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUHJpbnQgcHJlc2VuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc1ByaW50KG1vZHVsZSkge1xuICBsZXQgZm91bmQgPSBmYWxzZVxuXG4gIGZvciAoY29uc3Qgcm9vdCBvZiBbLi4ubW9kdWxlLmZ1bmN0aW9ucy5tYXAoKHtib2R5fSkgPT4gYm9keSksIG1vZHVsZS5lbnRyeVBvaW50LmJvZHldKSB7XG4gICAgdmlzaXRTdGF0ZW1lbnRzKHJvb3QsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIGZvdW5kID0gdHJ1ZVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGZvdW5kXG59XG5cbi8qKlxuICogRW1pdHMgdGhlIGZpeGVkIEdvIGZpbGUgc2NhZmZvbGQgYW5kIHNlbWFudGljIGJvZGllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdFByb2dyYW0obW9kdWxlLCB3cml0ZXIpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhcInBhY2thZ2UgbWFpblxcblwiLCBcIkdvIHBhY2thZ2Ugc2NhZmZvbGRcIiwgW21vZHVsZV0pXG4gIGlmIChoYXNQcmludChtb2R1bGUpKSB3cml0ZXIuc3ludGhldGljKCdcXG5pbXBvcnQgXCJmbXRcIlxcbicsIFwiR28gZm10IHByaW50IHNjYWZmb2xkXCIsIFttb2R1bGVdKVxuICBtb2R1bGUuZnVuY3Rpb25zLmZvckVhY2goKGRlY2xhcmF0aW9uLCBpbmRleCkgPT4ge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJkZWNsYXJhdGlvbiBzZXBhcmF0b3JcIiwgW2RlY2xhcmF0aW9uXSlcbiAgICBlbWl0RnVuY3Rpb24od3JpdGVyLCBkZWNsYXJhdGlvbiwgaW5kZXgpXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJlbnRyeS1wb2ludCBzZXBhcmF0b3JcIiwgW21vZHVsZS5lbnRyeVBvaW50XSlcbiAgd3JpdGVyLm1hcHBlZChcImZ1bmMgbWFpblwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50LCBwYXRoOiBcIi9lbnRyeVBvaW50XCJ9KVxuICB3cml0ZXIubWFwcGVkKFwiKClcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBtb2R1bGUuZW50cnlQb2ludCwgcGF0aDogXCIvZW50cnlQb2ludFwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJlbnRyeS1wb2ludCBzcGFjaW5nXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxuICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIHBhdGg6IFwiL2VudHJ5UG9pbnQvYm9keVwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiXFx0XCIsIFwiL2VudHJ5UG9pbnQvYm9keVwiKVxuICB3cml0ZXIubWFwcGVkKFwifVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IG1vZHVsZS5lbnRyeVBvaW50LCBwYXRoOiBcIi9lbnRyeVBvaW50XCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbbW9kdWxlLmVudHJ5UG9pbnRdLCBbXCIvZW50cnlQb2ludFwiXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgc2VtYW50aWMgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIEZ1bmN0aW9uIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEZ1bmN0aW9uIGluZGV4LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRGdW5jdGlvbih3cml0ZXIsIGRlY2xhcmF0aW9uLCBpbmRleCkge1xuICBjb25zdCBwYXRoID0gXCIvZnVuY3Rpb25zL1wiICsgaW5kZXhcblxuICB3cml0ZXIubWFwcGVkKFwiZnVuY1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJmdW5jdGlvbiBzcGFjaW5nXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChkZWNsYXJhdGlvbi5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW1ldGVyLCBwYXJhbWV0ZXJJbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSBwYXRoICsgXCIvcGFyYW1ldGVycy9cIiArIHBhcmFtZXRlckluZGV4XG5cbiAgICBpZiAocGFyYW1ldGVySW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJwYXJhbWV0ZXIgc2VwYXJhdG9yXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLCBwYXRoOiBwYXJhbWV0ZXJQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJwYXJhbWV0ZXIgc3BhY2luZ1wiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJnb1wiLCBwYXJhbWV0ZXIudHlwZSksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlci50eXBlLCBwYXRoOiBwYXJhbWV0ZXJQYXRoICsgXCIvdHlwZVwiLCByb2xlOiBcInR5cGVcIlxuICAgIH0pXG4gIH0pXG4gIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJlc3VsdCBzcGFjaW5nXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcImdvXCIsIGRlY2xhcmF0aW9uLnJldHVyblR5cGUpLCB7XG4gICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZGVjbGFyYXRpb24ucmV0dXJuVHlwZSwgcGF0aDogcGF0aCArIFwiL3JldHVyblR5cGVcIiwgcm9sZTogXCJ0eXBlXCJcbiAgfSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJib2R5IHNwYWNpbmdcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLmJvZHksIHBhdGg6IHBhdGggKyBcIi9ib2R5XCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIGRlY2xhcmF0aW9uLmJvZHksIFwiXFx0XCIsIHBhdGggKyBcIi9ib2R5XCIpXG4gIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYW4gb3JkZXJlZCBibG9jay5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggU2VtYW50aWMgcGF0aC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0QmxvY2sod3JpdGVyLCBibG9jaywgaW5kZW50LCBwYXRoKSB7XG4gIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT4gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoICsgXCIvc3RhdGVtZW50cy9cIiArIGluZGV4KSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgc3VwcG9ydGVkIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBzdGF0ZW1lbnQgU2VtYW50aWMgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggU2VtYW50aWMgcGF0aC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIHBhdGgpIHtcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgcmV0dXJuIGVtaXRMb2NhbCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoKVxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHJldHVybiBlbWl0SWYod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCwgdHJ1ZSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR28gVGFzayAwMDUgZXhwcmVzc2lvbiBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkNvbnRpbnVlU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgR28gc3RhdGVtZW50IHJlYWNoZWQgZW1pc3Npb24uXCIpXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXN0YXRlbWVudC5leHByZXNzaW9uKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR28gYmFyZSByZXR1cm4gcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgICB3cml0ZXIubWFwcGVkKFwicmV0dXJuXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcInJldHVybiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgcGF0aCArIFwiL2V4cHJlc3Npb25cIiwgXCJnb1wiLCBpZGVudGl0eSlcbiAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiZm10LlByaW50bG5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBwYXRoICsgXCIvZXhwcmVzc2lvblwiLCBcImdvXCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgR28gc3RhdGVtZW50IHJlYWNoZWQgZW1pc3Npb24gYWZ0ZXIgcHJlZmxpZ2h0LlwiKVxuICB9XG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBjb25kaXRpb25hbCwgdXNpbmcgZGlyZWN0IGVsc2UtaWYgZm9yIHRoZSBjYW5vbmljYWwgbmVzdGVkIHNoYXBlLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gc3RhdGVtZW50IENvbmRpdGlvbmFsLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggU2VtYW50aWMgcGF0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUluZGVudCBXaGV0aGVyIHRvIGVtaXQgbGVhZGluZyBpbmRlbnRhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0SWYod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCwgaW5jbHVkZUluZGVudCkge1xuICBpZiAoaW5jbHVkZUluZGVudCkgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChcImlmXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJjb25kaXRpb25hbCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGVtaXRDb25kaXRpb24od3JpdGVyLCBzdGF0ZW1lbnQuY29uZGl0aW9uLCBwYXRoICsgXCIvY29uZGl0aW9uXCIpXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiY29uZGl0aW9uYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKFwie1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudC5jb25zZXF1ZW50LCBwYXRoOiBwYXRoICsgXCIvY29uc2VxdWVudFwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmNvbnNlcXVlbnQsIGluZGVudCArIFwiXFx0XCIsIHBhdGggKyBcIi9jb25zZXF1ZW50XCIpXG4gIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmNvbnNlcXVlbnQsIHBhdGg6IHBhdGggKyBcIi9jb25zZXF1ZW50XCJ9KVxuICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYWx0ZXJuYXRlIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiZWxzZVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhbHRlcm5hdGUgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGNvbnN0IG5lc3RlZCA9IHN0YXRlbWVudC5hbHRlcm5hdGUuc3RhdGVtZW50cy5sZW5ndGggPT0gMSAmJiBzdGF0ZW1lbnQuYWx0ZXJuYXRlLnN0YXRlbWVudHNbMF0ua2luZCA9PSBcIklmU3RhdGVtZW50XCJcblxuICAgIGlmIChuZXN0ZWQpIHtcbiAgICAgIGVtaXRJZih3cml0ZXIsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQuYWx0ZXJuYXRlLnN0YXRlbWVudHNbMF0pLFxuICAgICAgICBpbmRlbnQsIHBhdGggKyBcIi9hbHRlcm5hdGUvc3RhdGVtZW50cy8wXCIsIGZhbHNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCJ7XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmFsdGVybmF0ZSwgcGF0aDogcGF0aCArIFwiL2FsdGVybmF0ZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5hbHRlcm5hdGUsIGluZGVudCArIFwiXFx0XCIsIHBhdGggKyBcIi9hbHRlcm5hdGVcIilcbiAgICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJ9XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LmFsdGVybmF0ZSwgcGF0aDogcGF0aCArIFwiL2FsdGVybmF0ZVwifSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEVtaXRzIGEgY29uZGl0aW9uIHdpdGhvdXQgdGhlIG9uZSByZWR1bmRhbnQgb3V0ZXIgcGFpciByZW1vdmVkIGJ5IGdvZm10LlxuICogQ2hpbGQgb3BlcmF0aW9ucyBzdGF5IHBhcmVudGhlc2l6ZWQgc28gdGhlIHNlbWFudGljIHRyZWUgcm91bmQtdHJpcHMgZXhhY3RseS5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBDb25kaXRpb24gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFNlbWFudGljIHBhdGguXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdENvbmRpdGlvbih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBwYXRoICsgXCIvbGVmdFwiLCBcImdvXCIsIGlkZW50aXR5KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGJpbmFyeVN5bnRheFtleHByZXNzaW9uLm9wZXJhdGlvbl0sIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIHBhdGggKyBcIi9yaWdodFwiLCBcImdvXCIsIGlkZW50aXR5KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJCb29sZWFuTm90XCIgPyBcIiFcIiA6IFwiLVwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBwYXRoICsgXCIvb3BlcmFuZFwiLCBcImdvXCIsIGlkZW50aXR5KVxuICAgIHJldHVyblxuICB9XG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgXCJnb1wiLCBpZGVudGl0eSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIGxvY2FsIGRlY2xhcmF0aW9uIG9yIGFzc2lnbm1lbnQuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsU3RhdGVtZW50fSBzdGF0ZW1lbnQgTG9jYWwgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggU2VtYW50aWMgcGF0aC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0TG9jYWwod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCkge1xuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgIXN0YXRlbWVudC5tdXRhYmxlKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQgKyBcIi8vIEBzZW1hbnRpZm9sZC1pbW11dGFibGVcXG5cIiwgXCJHbyBpbW11dGFibGUtbG9jYWwgY2FycmllclwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICB9XG4gIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50LnRhcmdldC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LnRhcmdldCwgcGF0aDogcGF0aCArIFwiL3RhcmdldFwiLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgcGF0aCArIFwiL2V4cHJlc3Npb25cIiwgXCJnb1wiLCBpZGVudGl0eSlcbiAgfSBlbHNlIHtcbiAgICB3cml0ZXIubWFwcGVkKFwidmFyXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcImdvXCIsIHN0YXRlbWVudC50eXBlKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LnR5cGUsIHBhdGg6IHBhdGggKyBcIi90eXBlXCIsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImFzc2lnbm1lbnQgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCI9XCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5pbml0aWFsaXplciwgcGF0aCArIFwiL2luaXRpYWxpemVyXCIsIFwiZ29cIiwgaWRlbnRpdHkpXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyByb290IHByb3ZlbmFuY2UgdG8gYXJ0aWZhY3QtbGV2ZWwgcmVsYXRlZCBvcmlnaW5zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY05vZGVQcm92ZW5hbmNlfSByb290IFJvb3QgcHJvdmVuYW5jZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119IFJlbGF0ZWQgcm9vdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0ZWRSb290T3JpZ2lucyhyb290KSB7XG4gIGlmIChyb290Lm9yaWdpbi5raW5kID09IFwic291cmNlXCIpIHtcbiAgICByZXR1cm4gW3tsb2NhdGlvbjogcm9vdC5vcmlnaW4ubG9jYXRpb24sIG5vZGVJZDogcm9vdC5pZCwgcm9sZTogXCJtb2R1bGVcIiwgc291cmNlSWQ6IHJvb3Qub3JpZ2luLnNvdXJjZUlkfV1cbiAgfVxuICBjb25zdCBvcmlnaW5zID0gcm9vdC5vcmlnaW4ua2luZCA9PSBcImRlcml2ZWRcIiA/IHJvb3Qub3JpZ2luLm9yaWdpbnMgOiByb290Lm9yaWdpbi5yZWxhdGVkT3JpZ2luc1xuXG4gIHJldHVybiBvcmlnaW5zLm1hcCgob3JpZ2luKSA9PiAoey4uLm9yaWdpbiwgbm9kZUlkOiBvcmlnaW4ubm9kZUlkID8/IHJvb3QuaWQsIHJvbGU6IG9yaWdpbi5yb2xlID8/IFwibW9kdWxlXCJ9KSlcbn1cblxuLyoqXG4gKiBQcmVzZXJ2ZXMgYW4gYWxyZWFkeSB2YWxpZGF0ZWQgR28gaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIElkZW50aWZpZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmNoYW5nZWQgc3BlbGxpbmcuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KG5hbWUpIHtcbiAgcmV0dXJuIG5hbWVcbn1cbiJdfQ==
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Constructs Java's non-executing compiler plan from staged generated artifacts.
3
+ * @param {Readonly<{
4
+ * artifacts: import("../semantic/types.js").GeneratedArtifactSet,
5
+ * buildPath: string,
6
+ * projectId: string,
7
+ * sourcePath: string,
8
+ * targetId: string,
9
+ * tools: readonly import("../semantic/types.js").DiscoveredToolchain[]
10
+ * }>} context - Exact validated candidate context.
11
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable javac plan.
12
+ */
13
+ export declare function createJavaCheckPlan(context: Readonly<{
14
+ artifacts: import("../semantic/types.js").GeneratedArtifactSet;
15
+ buildPath: string;
16
+ projectId: string;
17
+ sourcePath: string;
18
+ targetId: string;
19
+ tools: readonly import("../semantic/types.js").DiscoveredToolchain[];
20
+ }>): import("../semantic/types.js").TargetCheckPlan;
21
+ //# sourceMappingURL=java-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java-check.d.ts","sourceRoot":"","sources":["../../../src/backends/java-check.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAVhC,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,CAAC;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,OAAO,sBAAsB,EAAE,mBAAmB,EAAE,CAAA;CACrE,CAGuC,GAF9B,OAAO,sBAAsB,EAAE,eAAe,CA4D1D"}
@@ -0,0 +1,73 @@
1
+ // @ts-check
2
+ import path from "node:path";
3
+ import { SemantifoldDiagnostic } from "../diagnostic.js";
4
+ import { deterministicEnvironment } from "../toolchains.js";
5
+ /**
6
+ * Constructs Java's non-executing compiler plan from staged generated artifacts.
7
+ * @param {Readonly<{
8
+ * artifacts: import("../semantic/types.js").GeneratedArtifactSet,
9
+ * buildPath: string,
10
+ * projectId: string,
11
+ * sourcePath: string,
12
+ * targetId: string,
13
+ * tools: readonly import("../semantic/types.js").DiscoveredToolchain[]
14
+ * }>} context - Exact validated candidate context.
15
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable javac plan.
16
+ */
17
+ export function createJavaCheckPlan(context) {
18
+ const javac = context.tools.find(({ id }) => id == "javac");
19
+ if (!javac) {
20
+ throw new SemantifoldDiagnostic({
21
+ code: "INVALID_TARGET_CHECK_PLAN",
22
+ language: "java",
23
+ message: "Java developer checks require the declared 'javac' toolchain."
24
+ });
25
+ }
26
+ const artifactPaths = context.artifacts.artifacts
27
+ .filter(artifact => artifact.path.endsWith(".java"))
28
+ .map(artifact => path.join(context.sourcePath, artifact.path));
29
+ if (artifactPaths.length == 0) {
30
+ throw new SemantifoldDiagnostic({
31
+ code: "INVALID_TARGET_CHECK_PLAN",
32
+ language: "java",
33
+ message: "Java developer checks require at least one staged '.java' artifact."
34
+ });
35
+ }
36
+ const argv = Object.freeze(["-d", context.buildPath, ...artifactPaths]);
37
+ const pathArguments = Object.freeze([
38
+ Object.freeze({ index: 1, ownership: /** @type {const} */ ("build") }),
39
+ ...artifactPaths.map((_, index) => Object.freeze({ index: index + 2, ownership: /** @type {const} */ ("source") }))
40
+ ]);
41
+ const stage = Object.freeze({
42
+ argv,
43
+ cwd: context.sourcePath,
44
+ environment: deterministicEnvironment({}),
45
+ environmentPaths: Object.freeze([]),
46
+ executable: javac.executable,
47
+ inputHash: null,
48
+ inputs: Object.freeze(artifactPaths),
49
+ output: Object.freeze({
50
+ mediaType: "application/java-vm",
51
+ ownership: /** @type {const} */ ("build"),
52
+ path: context.buildPath,
53
+ role: "compiler-output"
54
+ }),
55
+ pathArguments,
56
+ stage: /** @type {const} */ ("compile"),
57
+ tool: javac,
58
+ transientPaths: Object.freeze([])
59
+ });
60
+ return Object.freeze({
61
+ artifactPaths: Object.freeze(artifactPaths),
62
+ buildPath: context.buildPath,
63
+ mode: /** @type {const} */ ("developer-check"),
64
+ projectId: context.projectId,
65
+ schema: /** @type {const} */ ("SemantifoldTargetCheckPlan"),
66
+ sourcePath: context.sourcePath,
67
+ stages: Object.freeze([stage]),
68
+ target: "java",
69
+ targetId: context.targetId,
70
+ version: /** @type {const} */ (1)
71
+ });
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS1jaGVjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9qYXZhLWNoZWNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFekQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBTztJQUN6QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQTtJQUV6RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUkscUJBQXFCLENBQUM7WUFDOUIsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxRQUFRLEVBQUUsTUFBTTtZQUNoQixPQUFPLEVBQUUsK0RBQStEO1NBQ3pFLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVM7U0FDOUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRWhFLElBQUksYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUkscUJBQXFCLENBQUM7WUFDOUIsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxRQUFRLEVBQUUsTUFBTTtZQUNoQixPQUFPLEVBQUUscUVBQXFFO1NBQy9FLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQztRQUNwRSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQ2xILENBQUMsQ0FBQTtJQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSTtRQUNKLEdBQUcsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUN2QixXQUFXLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1FBQ3pDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixTQUFTLEVBQUUsSUFBSTtRQUNmLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNwQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwQixTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN6QyxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDdkIsSUFBSSxFQUFFLGlCQUFpQjtTQUN4QixDQUFDO1FBQ0YsYUFBYTtRQUNiLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsS0FBSztRQUNYLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztLQUNsQyxDQUFDLENBQUE7SUFFRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDbkIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzNDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztRQUM1QixJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUM5QyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUMsNEJBQTRCLENBQUM7UUFDM0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxFQUFFLE1BQU07UUFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpY30gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtkZXRlcm1pbmlzdGljRW52aXJvbm1lbnR9IGZyb20gXCIuLi90b29sY2hhaW5zLmpzXCJcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIEphdmEncyBub24tZXhlY3V0aW5nIGNvbXBpbGVyIHBsYW4gZnJvbSBzdGFnZWQgZ2VuZXJhdGVkIGFydGlmYWN0cy5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8e1xuICogICBhcnRpZmFjdHM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0LFxuICogICBidWlsZFBhdGg6IHN0cmluZyxcbiAqICAgcHJvamVjdElkOiBzdHJpbmcsXG4gKiAgIHNvdXJjZVBhdGg6IHN0cmluZyxcbiAqICAgdGFyZ2V0SWQ6IHN0cmluZyxcbiAqICAgdG9vbHM6IHJlYWRvbmx5IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkRpc2NvdmVyZWRUb29sY2hhaW5bXVxuICogfT59IGNvbnRleHQgLSBFeGFjdCB2YWxpZGF0ZWQgY2FuZGlkYXRlIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGFyZ2V0Q2hlY2tQbGFufSBJbW11dGFibGUgamF2YWMgcGxhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUphdmFDaGVja1BsYW4oY29udGV4dCkge1xuICBjb25zdCBqYXZhYyA9IGNvbnRleHQudG9vbHMuZmluZCgoe2lkfSkgPT4gaWQgPT0gXCJqYXZhY1wiKVxuXG4gIGlmICghamF2YWMpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9UQVJHRVRfQ0hFQ0tfUExBTlwiLFxuICAgICAgbGFuZ3VhZ2U6IFwiamF2YVwiLFxuICAgICAgbWVzc2FnZTogXCJKYXZhIGRldmVsb3BlciBjaGVja3MgcmVxdWlyZSB0aGUgZGVjbGFyZWQgJ2phdmFjJyB0b29sY2hhaW4uXCJcbiAgICB9KVxuICB9XG4gIGNvbnN0IGFydGlmYWN0UGF0aHMgPSBjb250ZXh0LmFydGlmYWN0cy5hcnRpZmFjdHNcbiAgICAuZmlsdGVyKGFydGlmYWN0ID0+IGFydGlmYWN0LnBhdGguZW5kc1dpdGgoXCIuamF2YVwiKSlcbiAgICAubWFwKGFydGlmYWN0ID0+IHBhdGguam9pbihjb250ZXh0LnNvdXJjZVBhdGgsIGFydGlmYWN0LnBhdGgpKVxuXG4gIGlmIChhcnRpZmFjdFBhdGhzLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfVEFSR0VUX0NIRUNLX1BMQU5cIixcbiAgICAgIGxhbmd1YWdlOiBcImphdmFcIixcbiAgICAgIG1lc3NhZ2U6IFwiSmF2YSBkZXZlbG9wZXIgY2hlY2tzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHN0YWdlZCAnLmphdmEnIGFydGlmYWN0LlwiXG4gICAgfSlcbiAgfVxuICBjb25zdCBhcmd2ID0gT2JqZWN0LmZyZWV6ZShbXCItZFwiLCBjb250ZXh0LmJ1aWxkUGF0aCwgLi4uYXJ0aWZhY3RQYXRoc10pXG4gIGNvbnN0IHBhdGhBcmd1bWVudHMgPSBPYmplY3QuZnJlZXplKFtcbiAgICBPYmplY3QuZnJlZXplKHtpbmRleDogMSwgb3duZXJzaGlwOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJidWlsZFwiKX0pLFxuICAgIC4uLmFydGlmYWN0UGF0aHMubWFwKChfLCBpbmRleCkgPT4gT2JqZWN0LmZyZWV6ZSh7aW5kZXg6IGluZGV4ICsgMiwgb3duZXJzaGlwOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJzb3VyY2VcIil9KSlcbiAgXSlcbiAgY29uc3Qgc3RhZ2UgPSBPYmplY3QuZnJlZXplKHtcbiAgICBhcmd2LFxuICAgIGN3ZDogY29udGV4dC5zb3VyY2VQYXRoLFxuICAgIGVudmlyb25tZW50OiBkZXRlcm1pbmlzdGljRW52aXJvbm1lbnQoe30pLFxuICAgIGVudmlyb25tZW50UGF0aHM6IE9iamVjdC5mcmVlemUoW10pLFxuICAgIGV4ZWN1dGFibGU6IGphdmFjLmV4ZWN1dGFibGUsXG4gICAgaW5wdXRIYXNoOiBudWxsLFxuICAgIGlucHV0czogT2JqZWN0LmZyZWV6ZShhcnRpZmFjdFBhdGhzKSxcbiAgICBvdXRwdXQ6IE9iamVjdC5mcmVlemUoe1xuICAgICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL2phdmEtdm1cIixcbiAgICAgIG93bmVyc2hpcDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiYnVpbGRcIiksXG4gICAgICBwYXRoOiBjb250ZXh0LmJ1aWxkUGF0aCxcbiAgICAgIHJvbGU6IFwiY29tcGlsZXItb3V0cHV0XCJcbiAgICB9KSxcbiAgICBwYXRoQXJndW1lbnRzLFxuICAgIHN0YWdlOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJjb21waWxlXCIpLFxuICAgIHRvb2w6IGphdmFjLFxuICAgIHRyYW5zaWVudFBhdGhzOiBPYmplY3QuZnJlZXplKFtdKVxuICB9KVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBhcnRpZmFjdFBhdGhzOiBPYmplY3QuZnJlZXplKGFydGlmYWN0UGF0aHMpLFxuICAgIGJ1aWxkUGF0aDogY29udGV4dC5idWlsZFBhdGgsXG4gICAgbW9kZTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZGV2ZWxvcGVyLWNoZWNrXCIpLFxuICAgIHByb2plY3RJZDogY29udGV4dC5wcm9qZWN0SWQsXG4gICAgc2NoZW1hOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTZW1hbnRpZm9sZFRhcmdldENoZWNrUGxhblwiKSxcbiAgICBzb3VyY2VQYXRoOiBjb250ZXh0LnNvdXJjZVBhdGgsXG4gICAgc3RhZ2VzOiBPYmplY3QuZnJlZXplKFtzdGFnZV0pLFxuICAgIHRhcmdldDogXCJqYXZhXCIsXG4gICAgdGFyZ2V0SWQ6IGNvbnRleHQudGFyZ2V0SWQsXG4gICAgdmVyc2lvbjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKDEpXG4gIH0pXG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Constructs JavaScript's non-executing parse-check plan.
3
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
4
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable JavaScript plan.
5
+ */
6
+ export declare function createJavaScriptCheckPlan(context: import("../language-registry.js").TargetCheckPlanContext): import("../semantic/types.js").TargetCheckPlan;
7
+ //# sourceMappingURL=javascript-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"javascript-check.d.ts","sourceRoot":"","sources":["../../../src/backends/javascript-check.js"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAHtC,OAAO,yBAAyB,EAAE,sBAGI,GAFpC,OAAO,sBAAsB,EAAE,eAAe,CAuB1D"}
@@ -0,0 +1,29 @@
1
+ // @ts-check
2
+ import path from "node:path";
3
+ import { checkArtifacts, checkPlan, checkStage, checkTool, pathArgument } from "./check-plan.js";
4
+ import { SemantifoldDiagnostic } from "../diagnostic.js";
5
+ /**
6
+ * Constructs JavaScript's non-executing parse-check plan.
7
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
8
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable JavaScript plan.
9
+ */
10
+ export function createJavaScriptCheckPlan(context) {
11
+ const tool = checkTool(context, "node", "javascript");
12
+ const artifacts = checkArtifacts(context, artifact => artifact.path.endsWith(".js") || path.basename(artifact.path) == "package.json", "javascript", "only staged '.js' artifacts and package manifests");
13
+ const sources = artifacts.filter(artifact => artifact.endsWith(".js"));
14
+ const manifests = artifacts.filter(artifact => artifact.endsWith("package.json"));
15
+ if (sources.length == 0) {
16
+ throw new SemantifoldDiagnostic({ code: "INVALID_TARGET_CHECK_PLAN", language: "javascript",
17
+ message: "JavaScript developer checks require at least one staged '.js' artifact." });
18
+ }
19
+ return checkPlan(context, "javascript", artifacts, sources.map((source, index) => checkStage({
20
+ argv: ["--check", source],
21
+ cwd: context.sourcePath,
22
+ inputs: [source, ...(index == 0 ? manifests : [])],
23
+ output: null,
24
+ pathArguments: [pathArgument(1, "source")],
25
+ stage: "validate",
26
+ tool
27
+ })));
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jaGVjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9qYXZhc2NyaXB0LWNoZWNrLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxFQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5RixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUV0RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQU87SUFDL0MsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDckQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsRUFDbkksWUFBWSxFQUFFLG1EQUFtRCxDQUFDLENBQUE7SUFDcEUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUN0RSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBO0lBRWpGLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUkscUJBQXFCLENBQUMsRUFBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLFlBQVk7WUFDeEYsT0FBTyxFQUFFLHlFQUF5RSxFQUFDLENBQUMsQ0FBQTtJQUN4RixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUMzRixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1FBQ3pCLEdBQUcsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUN2QixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsTUFBTSxFQUFFLElBQUk7UUFDWixhQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLEtBQUssRUFBRSxVQUFVO1FBQ2pCLElBQUk7S0FDTCxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7Y2hlY2tBcnRpZmFjdHMsIGNoZWNrUGxhbiwgY2hlY2tTdGFnZSwgY2hlY2tUb29sLCBwYXRoQXJndW1lbnR9IGZyb20gXCIuL2NoZWNrLXBsYW4uanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIEphdmFTY3JpcHQncyBub24tZXhlY3V0aW5nIHBhcnNlLWNoZWNrIHBsYW4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCIpLlRhcmdldENoZWNrUGxhbkNvbnRleHR9IGNvbnRleHQgLSBWYWxpZGF0ZWQgY2FuZGlkYXRlIGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGFyZ2V0Q2hlY2tQbGFufSBJbW11dGFibGUgSmF2YVNjcmlwdCBwbGFuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSmF2YVNjcmlwdENoZWNrUGxhbihjb250ZXh0KSB7XG4gIGNvbnN0IHRvb2wgPSBjaGVja1Rvb2woY29udGV4dCwgXCJub2RlXCIsIFwiamF2YXNjcmlwdFwiKVxuICBjb25zdCBhcnRpZmFjdHMgPSBjaGVja0FydGlmYWN0cyhjb250ZXh0LCBhcnRpZmFjdCA9PiBhcnRpZmFjdC5wYXRoLmVuZHNXaXRoKFwiLmpzXCIpIHx8IHBhdGguYmFzZW5hbWUoYXJ0aWZhY3QucGF0aCkgPT0gXCJwYWNrYWdlLmpzb25cIixcbiAgICBcImphdmFzY3JpcHRcIiwgXCJvbmx5IHN0YWdlZCAnLmpzJyBhcnRpZmFjdHMgYW5kIHBhY2thZ2UgbWFuaWZlc3RzXCIpXG4gIGNvbnN0IHNvdXJjZXMgPSBhcnRpZmFjdHMuZmlsdGVyKGFydGlmYWN0ID0+IGFydGlmYWN0LmVuZHNXaXRoKFwiLmpzXCIpKVxuICBjb25zdCBtYW5pZmVzdHMgPSBhcnRpZmFjdHMuZmlsdGVyKGFydGlmYWN0ID0+IGFydGlmYWN0LmVuZHNXaXRoKFwicGFja2FnZS5qc29uXCIpKVxuXG4gIGlmIChzb3VyY2VzLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJJTlZBTElEX1RBUkdFVF9DSEVDS19QTEFOXCIsIGxhbmd1YWdlOiBcImphdmFzY3JpcHRcIixcbiAgICAgIG1lc3NhZ2U6IFwiSmF2YVNjcmlwdCBkZXZlbG9wZXIgY2hlY2tzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHN0YWdlZCAnLmpzJyBhcnRpZmFjdC5cIn0pXG4gIH1cblxuICByZXR1cm4gY2hlY2tQbGFuKGNvbnRleHQsIFwiamF2YXNjcmlwdFwiLCBhcnRpZmFjdHMsIHNvdXJjZXMubWFwKChzb3VyY2UsIGluZGV4KSA9PiBjaGVja1N0YWdlKHtcbiAgICBhcmd2OiBbXCItLWNoZWNrXCIsIHNvdXJjZV0sXG4gICAgY3dkOiBjb250ZXh0LnNvdXJjZVBhdGgsXG4gICAgaW5wdXRzOiBbc291cmNlLCAuLi4oaW5kZXggPT0gMCA/IG1hbmlmZXN0cyA6IFtdKV0sXG4gICAgb3V0cHV0OiBudWxsLFxuICAgIHBhdGhBcmd1bWVudHM6IFtwYXRoQXJndW1lbnQoMSwgXCJzb3VyY2VcIildLFxuICAgIHN0YWdlOiBcInZhbGlkYXRlXCIsXG4gICAgdG9vbFxuICB9KSkpXG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Constructs Kotlin/JVM's non-executing compiler plan.
3
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
4
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable Kotlin plan.
5
+ */
6
+ export declare function createKotlinCheckPlan(context: import("../language-registry.js").TargetCheckPlanContext): import("../semantic/types.js").TargetCheckPlan;
7
+ //# sourceMappingURL=kotlin-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kotlin-check.d.ts","sourceRoot":"","sources":["../../../src/backends/kotlin-check.js"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAHlC,OAAO,yBAAyB,EAAE,sBAGA,GAFhC,OAAO,sBAAsB,EAAE,eAAe,CAwB1D"}
@@ -0,0 +1,31 @@
1
+ // @ts-check
2
+ import path from "node:path";
3
+ import { checkArtifacts, checkOutput, checkPlan, checkStage, checkTool, environmentPath, pathArgument } from "./check-plan.js";
4
+ /**
5
+ * Constructs Kotlin/JVM's non-executing compiler plan.
6
+ * @param {import("../language-registry.js").TargetCheckPlanContext} context - Validated candidate context.
7
+ * @returns {import("../semantic/types.js").TargetCheckPlan} Immutable Kotlin plan.
8
+ */
9
+ export function createKotlinCheckPlan(context) {
10
+ const tool = checkTool(context, "kotlinc", "kotlin");
11
+ const artifacts = checkArtifacts(context, artifact => artifact.path.endsWith(".kt"), "kotlin", "only staged '.kt' artifacts");
12
+ const classes = path.join(context.buildPath, "classes");
13
+ const home = path.join(context.buildPath, "home");
14
+ const cache = path.join(context.buildPath, "cache");
15
+ const temporary = path.join(context.buildPath, "tmp");
16
+ return checkPlan(context, "kotlin", artifacts, [checkStage({
17
+ argv: ["-language-version", "2.4", "-api-version", "2.4", "-jvm-target", "25", "-Werror", ...artifacts, "-d", classes],
18
+ cwd: context.sourcePath,
19
+ environment: { HOME: home, TMPDIR: temporary, XDG_CACHE_HOME: cache },
20
+ environmentPaths: [environmentPath("HOME", "build"), environmentPath("TMPDIR", "build"), environmentPath("XDG_CACHE_HOME", "build")],
21
+ inputs: artifacts,
22
+ output: checkOutput(context.buildPath, "application/java-vm", "compiler-output"),
23
+ pathArguments: [
24
+ ...artifacts.map((_, index) => pathArgument(7 + index, "source")),
25
+ pathArgument(8 + artifacts.length, "build")
26
+ ],
27
+ stage: "compile",
28
+ tool
29
+ })]);
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia290bGluLWNoZWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2tvdGxpbi1jaGVjay5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsV0FBVyxFQUNYLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQTtBQUV4Qjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE9BQU87SUFDM0MsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDcEQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSw2QkFBNkIsQ0FBQyxDQUFBO0lBQzdILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUVyRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQztZQUN6RCxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDO1lBQ3RILEdBQUcsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUN2QixXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBQztZQUNuRSxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEksTUFBTSxFQUFFLFNBQVM7WUFDakIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDO1lBQ2hGLGFBQWEsRUFBRTtnQkFDYixHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDakUsWUFBWSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzthQUM1QztZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLElBQUk7U0FDTCxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7XG4gIGNoZWNrQXJ0aWZhY3RzLFxuICBjaGVja091dHB1dCxcbiAgY2hlY2tQbGFuLFxuICBjaGVja1N0YWdlLFxuICBjaGVja1Rvb2wsXG4gIGVudmlyb25tZW50UGF0aCxcbiAgcGF0aEFyZ3VtZW50XG59IGZyb20gXCIuL2NoZWNrLXBsYW4uanNcIlxuXG4vKipcbiAqIENvbnN0cnVjdHMgS290bGluL0pWTSdzIG5vbi1leGVjdXRpbmcgY29tcGlsZXIgcGxhbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIikuVGFyZ2V0Q2hlY2tQbGFuQ29udGV4dH0gY29udGV4dCAtIFZhbGlkYXRlZCBjYW5kaWRhdGUgY29udGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UYXJnZXRDaGVja1BsYW59IEltbXV0YWJsZSBLb3RsaW4gcGxhbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtvdGxpbkNoZWNrUGxhbihjb250ZXh0KSB7XG4gIGNvbnN0IHRvb2wgPSBjaGVja1Rvb2woY29udGV4dCwgXCJrb3RsaW5jXCIsIFwia290bGluXCIpXG4gIGNvbnN0IGFydGlmYWN0cyA9IGNoZWNrQXJ0aWZhY3RzKGNvbnRleHQsIGFydGlmYWN0ID0+IGFydGlmYWN0LnBhdGguZW5kc1dpdGgoXCIua3RcIiksIFwia290bGluXCIsIFwib25seSBzdGFnZWQgJy5rdCcgYXJ0aWZhY3RzXCIpXG4gIGNvbnN0IGNsYXNzZXMgPSBwYXRoLmpvaW4oY29udGV4dC5idWlsZFBhdGgsIFwiY2xhc3Nlc1wiKVxuICBjb25zdCBob21lID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcImhvbWVcIilcbiAgY29uc3QgY2FjaGUgPSBwYXRoLmpvaW4oY29udGV4dC5idWlsZFBhdGgsIFwiY2FjaGVcIilcbiAgY29uc3QgdGVtcG9yYXJ5ID0gcGF0aC5qb2luKGNvbnRleHQuYnVpbGRQYXRoLCBcInRtcFwiKVxuXG4gIHJldHVybiBjaGVja1BsYW4oY29udGV4dCwgXCJrb3RsaW5cIiwgYXJ0aWZhY3RzLCBbY2hlY2tTdGFnZSh7XG4gICAgYXJndjogW1wiLWxhbmd1YWdlLXZlcnNpb25cIiwgXCIyLjRcIiwgXCItYXBpLXZlcnNpb25cIiwgXCIyLjRcIiwgXCItanZtLXRhcmdldFwiLCBcIjI1XCIsIFwiLVdlcnJvclwiLCAuLi5hcnRpZmFjdHMsIFwiLWRcIiwgY2xhc3Nlc10sXG4gICAgY3dkOiBjb250ZXh0LnNvdXJjZVBhdGgsXG4gICAgZW52aXJvbm1lbnQ6IHtIT01FOiBob21lLCBUTVBESVI6IHRlbXBvcmFyeSwgWERHX0NBQ0hFX0hPTUU6IGNhY2hlfSxcbiAgICBlbnZpcm9ubWVudFBhdGhzOiBbZW52aXJvbm1lbnRQYXRoKFwiSE9NRVwiLCBcImJ1aWxkXCIpLCBlbnZpcm9ubWVudFBhdGgoXCJUTVBESVJcIiwgXCJidWlsZFwiKSwgZW52aXJvbm1lbnRQYXRoKFwiWERHX0NBQ0hFX0hPTUVcIiwgXCJidWlsZFwiKV0sXG4gICAgaW5wdXRzOiBhcnRpZmFjdHMsXG4gICAgb3V0cHV0OiBjaGVja091dHB1dChjb250ZXh0LmJ1aWxkUGF0aCwgXCJhcHBsaWNhdGlvbi9qYXZhLXZtXCIsIFwiY29tcGlsZXItb3V0cHV0XCIpLFxuICAgIHBhdGhBcmd1bWVudHM6IFtcbiAgICAgIC4uLmFydGlmYWN0cy5tYXAoKF8sIGluZGV4KSA9PiBwYXRoQXJndW1lbnQoNyArIGluZGV4LCBcInNvdXJjZVwiKSksXG4gICAgICBwYXRoQXJndW1lbnQoOCArIGFydGlmYWN0cy5sZW5ndGgsIFwiYnVpbGRcIilcbiAgICBdLFxuICAgIHN0YWdlOiBcImNvbXBpbGVcIixcbiAgICB0b29sXG4gIH0pXSlcbn1cbiJdfQ==
@@ -11,7 +11,7 @@ export declare const kotlinArtifactMetadata: Readonly<{
11
11
  run: Readonly<{
12
12
  arguments: readonly string[];
13
13
  toolchain: "java25";
14
- version: "25.0.4+7";
14
+ version: "25.0.4.1";
15
15
  }>;
16
16
  }>;
17
17
  /**