semantifold 0.3.0 → 0.5.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 (303) hide show
  1. package/README.md +61 -15
  2. package/build/index.d.ts +52 -2
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +60 -8
  5. package/build/src/artifact-path.d.ts +23 -1
  6. package/build/src/artifact-path.d.ts.map +1 -1
  7. package/build/src/artifact-path.js +45 -3
  8. package/build/src/artifacts.d.ts.map +1 -1
  9. package/build/src/artifacts.js +66 -1
  10. package/build/src/backends/android.d.ts +49 -0
  11. package/build/src/backends/android.d.ts.map +1 -0
  12. package/build/src/backends/android.js +1274 -0
  13. package/build/src/backends/c-validation.d.ts.map +1 -1
  14. package/build/src/backends/c-validation.js +7 -3
  15. package/build/src/backends/cpp-validation.d.ts.map +1 -1
  16. package/build/src/backends/cpp-validation.js +7 -3
  17. package/build/src/backends/csharp.js +7 -1
  18. package/build/src/backends/dart-runtime.d.ts +2 -0
  19. package/build/src/backends/dart-runtime.d.ts.map +1 -0
  20. package/build/src/backends/dart-runtime.js +41 -0
  21. package/build/src/backends/dart.d.ts +20 -0
  22. package/build/src/backends/dart.d.ts.map +1 -0
  23. package/build/src/backends/dart.js +321 -0
  24. package/build/src/backends/effects.d.ts +60 -0
  25. package/build/src/backends/effects.d.ts.map +1 -0
  26. package/build/src/backends/effects.js +746 -0
  27. package/build/src/backends/go.js +18 -4
  28. package/build/src/backends/identifiers.d.ts +36 -4
  29. package/build/src/backends/identifiers.d.ts.map +1 -1
  30. package/build/src/backends/identifiers.js +160 -10
  31. package/build/src/backends/index.d.ts.map +1 -1
  32. package/build/src/backends/index.js +27 -4
  33. package/build/src/backends/ios.d.ts +68 -0
  34. package/build/src/backends/ios.d.ts.map +1 -0
  35. package/build/src/backends/ios.js +1503 -0
  36. package/build/src/backends/java.d.ts.map +1 -1
  37. package/build/src/backends/java.js +429 -36
  38. package/build/src/backends/javascript.d.ts +6 -0
  39. package/build/src/backends/javascript.d.ts.map +1 -1
  40. package/build/src/backends/javascript.js +380 -24
  41. package/build/src/backends/kotlin-runtime.d.ts +3 -0
  42. package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
  43. package/build/src/backends/kotlin-runtime.js +29 -0
  44. package/build/src/backends/kotlin.d.ts +33 -0
  45. package/build/src/backends/kotlin.d.ts.map +1 -0
  46. package/build/src/backends/kotlin.js +138 -0
  47. package/build/src/backends/native-validation.d.ts +2 -2
  48. package/build/src/backends/native-validation.d.ts.map +1 -1
  49. package/build/src/backends/native-validation.js +2 -2
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  51. package/build/src/backends/ordered-expressions.js +39 -7
  52. package/build/src/backends/php-stdlib-support.d.ts +19 -0
  53. package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
  54. package/build/src/backends/php-stdlib-support.js +227 -0
  55. package/build/src/backends/php.d.ts.map +1 -1
  56. package/build/src/backends/php.js +448 -33
  57. package/build/src/backends/program.d.ts +83 -0
  58. package/build/src/backends/program.d.ts.map +1 -0
  59. package/build/src/backends/program.js +1309 -0
  60. package/build/src/backends/python.js +7 -1
  61. package/build/src/backends/ruby.d.ts.map +1 -1
  62. package/build/src/backends/ruby.js +310 -24
  63. package/build/src/backends/rust-runtime.d.ts +7 -0
  64. package/build/src/backends/rust-runtime.d.ts.map +1 -0
  65. package/build/src/backends/rust-runtime.js +32 -0
  66. package/build/src/backends/rust-validation.d.ts +9 -0
  67. package/build/src/backends/rust-validation.d.ts.map +1 -0
  68. package/build/src/backends/rust-validation.js +78 -0
  69. package/build/src/backends/rust.d.ts +24 -0
  70. package/build/src/backends/rust.d.ts.map +1 -0
  71. package/build/src/backends/rust.js +344 -0
  72. package/build/src/backends/scalars.d.ts +14 -6
  73. package/build/src/backends/scalars.d.ts.map +1 -1
  74. package/build/src/backends/scalars.js +167 -17
  75. package/build/src/backends/shared.d.ts +23 -4
  76. package/build/src/backends/shared.d.ts.map +1 -1
  77. package/build/src/backends/shared.js +2174 -62
  78. package/build/src/backends/stdlib-support.d.ts +14 -0
  79. package/build/src/backends/stdlib-support.d.ts.map +1 -0
  80. package/build/src/backends/stdlib-support.js +237 -0
  81. package/build/src/backends/swift-runtime.d.ts +3 -0
  82. package/build/src/backends/swift-runtime.d.ts.map +1 -0
  83. package/build/src/backends/swift-runtime.js +14 -0
  84. package/build/src/backends/swift.d.ts +8 -0
  85. package/build/src/backends/swift.d.ts.map +1 -0
  86. package/build/src/backends/swift.js +127 -0
  87. package/build/src/backends/typescript.d.ts.map +1 -1
  88. package/build/src/backends/typescript.js +344 -24
  89. package/build/src/backends/wasm.d.ts +43 -0
  90. package/build/src/backends/wasm.d.ts.map +1 -0
  91. package/build/src/backends/wasm.js +2164 -0
  92. package/build/src/backends/writer.d.ts +255 -4
  93. package/build/src/backends/writer.d.ts.map +1 -1
  94. package/build/src/backends/writer.js +491 -3
  95. package/build/src/diagnostic.d.ts +4 -3
  96. package/build/src/diagnostic.d.ts.map +1 -1
  97. package/build/src/diagnostic.js +5 -3
  98. package/build/src/frontends/c.d.ts.map +1 -1
  99. package/build/src/frontends/c.js +5 -3
  100. package/build/src/frontends/cpp.d.ts.map +1 -1
  101. package/build/src/frontends/cpp.js +5 -3
  102. package/build/src/frontends/csharp.d.ts.map +1 -1
  103. package/build/src/frontends/csharp.js +7 -3
  104. package/build/src/frontends/dart.d.ts +10 -0
  105. package/build/src/frontends/dart.d.ts.map +1 -0
  106. package/build/src/frontends/dart.js +913 -0
  107. package/build/src/frontends/index.d.ts +3 -1
  108. package/build/src/frontends/index.d.ts.map +1 -1
  109. package/build/src/frontends/index.js +15 -5
  110. package/build/src/frontends/java.d.ts +110 -1
  111. package/build/src/frontends/java.d.ts.map +1 -1
  112. package/build/src/frontends/java.js +1725 -70
  113. package/build/src/frontends/javascript-typescript.d.ts +69 -1
  114. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  115. package/build/src/frontends/javascript-typescript.js +1825 -93
  116. package/build/src/frontends/kotlin.d.ts +10 -0
  117. package/build/src/frontends/kotlin.d.ts.map +1 -0
  118. package/build/src/frontends/kotlin.js +685 -0
  119. package/build/src/frontends/php.d.ts +118 -1
  120. package/build/src/frontends/php.d.ts.map +1 -1
  121. package/build/src/frontends/php.js +1583 -76
  122. package/build/src/frontends/program.d.ts +74 -0
  123. package/build/src/frontends/program.d.ts.map +1 -0
  124. package/build/src/frontends/program.js +989 -0
  125. package/build/src/frontends/ruby.d.ts +68 -1
  126. package/build/src/frontends/ruby.d.ts.map +1 -1
  127. package/build/src/frontends/ruby.js +1446 -101
  128. package/build/src/frontends/rust-parser.d.ts +11 -0
  129. package/build/src/frontends/rust-parser.d.ts.map +1 -0
  130. package/build/src/frontends/rust-parser.js +15 -0
  131. package/build/src/frontends/rust.d.ts +14 -0
  132. package/build/src/frontends/rust.d.ts.map +1 -0
  133. package/build/src/frontends/rust.js +715 -0
  134. package/build/src/frontends/scalars.d.ts +10 -0
  135. package/build/src/frontends/scalars.d.ts.map +1 -1
  136. package/build/src/frontends/scalars.js +28 -2
  137. package/build/src/frontends/swift.d.ts +10 -0
  138. package/build/src/frontends/swift.d.ts.map +1 -0
  139. package/build/src/frontends/swift.js +860 -0
  140. package/build/src/frontends/types.d.ts +186 -0
  141. package/build/src/frontends/types.d.ts.map +1 -0
  142. package/build/src/frontends/types.js +634 -0
  143. package/build/src/language-registry.d.ts +46 -4
  144. package/build/src/language-registry.d.ts.map +1 -1
  145. package/build/src/language-registry.js +177 -13
  146. package/build/src/mapping.d.ts +2 -2
  147. package/build/src/mapping.d.ts.map +1 -1
  148. package/build/src/mapping.js +31 -10
  149. package/build/src/semantic/capabilities.d.ts +66 -0
  150. package/build/src/semantic/capabilities.d.ts.map +1 -0
  151. package/build/src/semantic/capabilities.js +649 -0
  152. package/build/src/semantic/effects.d.ts +26 -0
  153. package/build/src/semantic/effects.d.ts.map +1 -0
  154. package/build/src/semantic/effects.js +764 -0
  155. package/build/src/semantic/generics.d.ts +23 -0
  156. package/build/src/semantic/generics.d.ts.map +1 -0
  157. package/build/src/semantic/generics.js +61 -0
  158. package/build/src/semantic/lifetime.d.ts +37 -0
  159. package/build/src/semantic/lifetime.d.ts.map +1 -0
  160. package/build/src/semantic/lifetime.js +527 -0
  161. package/build/src/semantic/provenance.d.ts +9 -2
  162. package/build/src/semantic/provenance.d.ts.map +1 -1
  163. package/build/src/semantic/provenance.js +462 -20
  164. package/build/src/semantic/scalars.d.ts +11 -0
  165. package/build/src/semantic/scalars.d.ts.map +1 -1
  166. package/build/src/semantic/scalars.js +16 -1
  167. package/build/src/semantic/stdlib.d.ts +254 -0
  168. package/build/src/semantic/stdlib.d.ts.map +1 -0
  169. package/build/src/semantic/stdlib.js +880 -0
  170. package/build/src/semantic/types.d.ts +3108 -178
  171. package/build/src/semantic/types.d.ts.map +1 -1
  172. package/build/src/semantic/types.js +730 -15
  173. package/build/src/semantic/validate.d.ts +85 -5
  174. package/build/src/semantic/validate.d.ts.map +1 -1
  175. package/build/src/semantic/validate.js +2576 -98
  176. package/build/src/stdlib-facades.d.ts +304 -0
  177. package/build/src/stdlib-facades.d.ts.map +1 -0
  178. package/build/src/stdlib-facades.js +1167 -0
  179. package/build/src/stdlib-negotiation.d.ts +69 -0
  180. package/build/src/stdlib-negotiation.d.ts.map +1 -0
  181. package/build/src/stdlib-negotiation.js +403 -0
  182. package/build/src/stdlib-providers.d.ts +72 -0
  183. package/build/src/stdlib-providers.d.ts.map +1 -0
  184. package/build/src/stdlib-providers.js +339 -0
  185. package/build/src/toolchains.d.ts +55 -1
  186. package/build/src/toolchains.d.ts.map +1 -1
  187. package/build/src/toolchains.js +15 -4
  188. package/docs/android.md +79 -0
  189. package/docs/architecture.md +47 -13
  190. package/docs/dart.md +60 -0
  191. package/docs/goals.md +3 -3
  192. package/docs/ios.md +121 -0
  193. package/docs/kotlin.md +42 -0
  194. package/docs/language-support.md +238 -26
  195. package/docs/multi-file-modules.md +52 -0
  196. package/docs/parser-qualification.md +121 -8
  197. package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
  198. package/docs/rust.md +88 -0
  199. package/docs/source-maps.md +17 -7
  200. package/docs/specification.md +5 -0
  201. package/docs/standard-library-portability.md +39 -8
  202. package/docs/swift.md +44 -0
  203. package/docs/testing.md +381 -4
  204. package/docs/webassembly.md +52 -0
  205. package/index.js +66 -8
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
  236. package/package.json +5 -2
  237. package/src/artifact-path.js +47 -2
  238. package/src/artifacts.js +67 -0
  239. package/src/backends/android.js +1370 -0
  240. package/src/backends/c-validation.js +6 -1
  241. package/src/backends/cpp-validation.js +6 -1
  242. package/src/backends/csharp.js +3 -0
  243. package/src/backends/dart-runtime.js +41 -0
  244. package/src/backends/dart.js +326 -0
  245. package/src/backends/effects.js +705 -0
  246. package/src/backends/go.js +14 -2
  247. package/src/backends/identifiers.js +166 -9
  248. package/src/backends/index.js +27 -2
  249. package/src/backends/ios.js +1612 -0
  250. package/src/backends/java.js +454 -36
  251. package/src/backends/javascript.js +389 -23
  252. package/src/backends/kotlin-runtime.js +29 -0
  253. package/src/backends/kotlin.js +144 -0
  254. package/src/backends/native-validation.js +1 -1
  255. package/src/backends/ordered-expressions.js +40 -6
  256. package/src/backends/php-stdlib-support.js +239 -0
  257. package/src/backends/php.js +469 -32
  258. package/src/backends/program.js +1408 -0
  259. package/src/backends/python.js +3 -0
  260. package/src/backends/ruby.js +326 -23
  261. package/src/backends/rust-runtime.js +34 -0
  262. package/src/backends/rust-validation.js +75 -0
  263. package/src/backends/rust.js +335 -0
  264. package/src/backends/scalars.js +141 -16
  265. package/src/backends/shared.js +2314 -115
  266. package/src/backends/stdlib-support.js +234 -0
  267. package/src/backends/swift-runtime.js +14 -0
  268. package/src/backends/swift.js +132 -0
  269. package/src/backends/typescript.js +349 -23
  270. package/src/backends/wasm.js +2208 -0
  271. package/src/backends/writer.js +545 -2
  272. package/src/diagnostic.js +4 -2
  273. package/src/frontends/c.js +4 -2
  274. package/src/frontends/cpp.js +4 -2
  275. package/src/frontends/csharp.js +4 -2
  276. package/src/frontends/dart.js +963 -0
  277. package/src/frontends/index.js +14 -4
  278. package/src/frontends/java.js +1977 -69
  279. package/src/frontends/javascript-typescript.js +2046 -102
  280. package/src/frontends/kotlin.js +713 -0
  281. package/src/frontends/php.js +1725 -79
  282. package/src/frontends/program.js +1062 -0
  283. package/src/frontends/ruby.js +1624 -98
  284. package/src/frontends/rust-parser.js +18 -0
  285. package/src/frontends/rust.js +714 -0
  286. package/src/frontends/scalars.js +31 -1
  287. package/src/frontends/swift.js +893 -0
  288. package/src/frontends/types.js +750 -0
  289. package/src/language-registry.js +182 -12
  290. package/src/mapping.js +33 -9
  291. package/src/semantic/capabilities.js +671 -0
  292. package/src/semantic/effects.js +737 -0
  293. package/src/semantic/generics.js +58 -0
  294. package/src/semantic/lifetime.js +517 -0
  295. package/src/semantic/provenance.js +412 -19
  296. package/src/semantic/scalars.js +17 -0
  297. package/src/semantic/stdlib.js +921 -0
  298. package/src/semantic/types.js +810 -14
  299. package/src/semantic/validate.js +2934 -209
  300. package/src/stdlib-facades.js +1211 -0
  301. package/src/stdlib-negotiation.js +446 -0
  302. package/src/stdlib-providers.js +377 -0
  303. package/src/toolchains.js +16 -3
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Semantifold
2
2
 
3
- Task019 adds independent [C++20 source and target support](docs/cpp.md) (`cpp`): one deterministic `program.cpp`, owned UTF-8 `std::string` values, checked integer arithmetic, exact ordered-expression reparsing, and real Clang O0/O2 sanitizer acceptance. The official CPP grammar shares the existing private isolated parser runtime inside the single root distribution.
3
+ Task037 adds the first concrete standard-library portability slice: exact parser-proved Ruby `require "socket"`, genuine `TCPSocket.new(host, port)`, receiver `gets`/`close`, and one-string `puts`/`Kernel.puts` compile through executable Ruby facades and canonical v1 contracts to protected PHP providers using native `fsockopen`, `fgets`, `feof`, `fclose`, and stdout. Task036's neutral versioned facade foundation was delivered through PR #46 and merge `9aba48f9d48bcef4fd4c9275aec14bfcc4f0904c`; Task035's canonical contract/provider hub was delivered through PR #45 and merge `a2aad9d4932bfc6087adc4ff8bca43678c92413c`. Task034 supplies explicit compiler-authorized host effects, linear owned resources/references, typed host failures, exactly-once lowering, and path-complete explicit close. Task033 adds bounded nominal reference classes, Task032 adds strict-Boolean condition-controlled loops, and Task021 adds a [browser-oriented WebAssembly target](docs/webassembly.md).
4
4
 
5
- Semantifold is an early language-neutral semantic code toolkit. The current source tree proves a deliberately small ten-language end-to-end baseline: parse equivalent PHP, Ruby, JavaScript with JSDoc, TypeScript, Java, strictly annotated Python, canonical C#, bounded Go, C17, and C++20 programs into one typed semantic representation, then generate and execute equivalent programs in every target language. The published package remains `semantifold@0.2.0`; Task019 does not publish a release.
5
+ Semantifold is an early language-neutral semantic code toolkit. The source tree supports a deliberately small fourteen-language baseline: PHP, Ruby, JavaScript with JSDoc, TypeScript, Java, Kotlin/JVM, strictly annotated Python, canonical C#, bounded Go, C17, C++20, Rust edition 2021, strict Swift, and strict Dart VM/native source share one typed semantic representation. Browser WebAssembly is an additional target-only ID, not a fifteenth source language. The published baseline is `semantifold@0.4.0`. Android application generation is implemented on the Task 028 topic branch; exact-head TensorBuzz offline-build/KVM-emulator acceptance and merge remain coordinator-owned delivery gates.
6
6
 
7
7
  ## Current API
8
8
 
@@ -26,6 +26,12 @@ const javaSource = generate({language: "java", module})
26
26
 
27
27
  `parse` returns parser-independent discriminated semantic nodes with normalized types, source locations, a versioned source registry, and deterministic node/symbol provenance. `generate` accepts that shared module and returns an independently executable source program with its historical bytes unchanged. For each single-artifact target, `generateArtifact` adds an output filename, an authoritative range-based `SemantifoldMapping` v1, and a Source Map v3 sidecar:
28
28
 
29
+ Task 034 adds the explicit `createCapabilityAuthority(input)` boundary and optional `parse({capabilityAuthority, ...})` field. The helper validates, detaches, and deeply freezes a `SemantifoldCapabilityAuthority` schema-version-1 payload. It is compilation authority, not a source declaration or Task 035 standard-library contract version: an ordinary same-named function wins source resolution and cannot forge an effect. The returned single-module semantic graph contains deterministic capability/resource/failure/operation identities plus complete effect-site resolutions; `parseProgram` accepts the same optional authority so program modules may also declare the Task 035 canonical standard-library contract descriptor that `generateProgramArtifactSet` links against a negotiated target host provider set. `createStdlibContractRegistry`, `listStdlibModules`, and `resolveStdlibModule` expose the versioned canonical contract registry; `createStdlibProviderRegistry` and `listStdlibProviders` expose the target host provider registry; and `negotiateStdlibProviders` selects one stable compatible provider set for the transitive capability closure.
30
+
31
+ Task 036 adds `createStdlibFacadeRegistry`, `listStdlibFacades`, and `resolveStdlibFacade`. The built-in qualification corpus exposes one exact native-looking `compatibilityProbe(string): string` spelling per original-five source profile (snake case in PHP/Ruby), delegates through an internal executable facade module, and depends only on `semantifold.task034.resource-probe@1` operations `probeEffect` and `probeTrace`. `parseProgram` selects these definitions only from parser-proved native module plus symbol identity, records `SemantifoldStdlibFacadeResolution` evidence, and injects only the dependency-first reachable closure. `generateProgramArtifactSet` compiles those modules into collision-checked compatibility paths, marks them as support, preserves their source mappings, includes the complete `SemantifoldStdlibFacades` descriptor in link metadata, and validates the registry definition before returning any artifact. Dynamic or unresolved imports/requires, unsupported members, reflection, shadowing, reopening/monkey-patching, native extensions, caller authority, and compiler-owned name collisions fail with located diagnostics.
32
+
33
+ Task 037 extends only Ruby-source-to-PHP-target program generation. An exact literal `require "socket"` profile gates genuine `TCPSocket.new(host, port)`, zero-argument receiver `gets`/`close`, and exactly one-string unqualified `puts` or `Kernel.puts`; outside that profile Ruby program-mode `puts` retains its legacy behavior. The two compiler-owned Ruby facade modules call the canonical `semantifold.socket-client@1.0.0`, `semantifold.text-stream@1.0.0`, `semantifold.output@1.0.0`, and `semantifold.resource@1.0.0` operations directly. PHP provider artifacts under `providers/php/semantifold/` own and hide native handles, retain LF/CRLF, return one final unterminated UTF-8 line before absence, normalize warnings/failures into declared errors, write stdout completely, and make the first close attempt terminal. Other source facades, targets, socket APIs, output forms, transports, timeouts, and async behavior remain unsupported.
34
+
29
35
  ```js
30
36
  import {generateArtifact, originalPositionFor} from "semantifold"
31
37
 
@@ -33,31 +39,63 @@ const artifact = generateArtifact({language: "java", module})
33
39
  const original = originalPositionFor(artifact.mapping, {offset: artifact.code.indexOf("label")})
34
40
  ```
35
41
 
36
- Generated output always uses LF. Exact original content, including LF, CRLF, lone CR, and astral UTF-16 coordinates, remains in the source registry and `sourcesContent`. Optional inline/external `sourceMappingURL` directives apply only to JavaScript and TypeScript; PHP, Ruby, Java, Python, C#, Go, C, and CPP use the same rich/v3 model without foreign comments. See [source provenance and mappings](docs/source-maps.md) for schemas, lookups, composition, diagnostics, directives, and compatibility.
42
+ Generated text output always uses LF. Exact original content, including LF, CRLF, lone CR, and astral UTF-16 coordinates, remains in the source registry and `sourcesContent`. Optional inline/external `sourceMappingURL` directives apply only to JavaScript and TypeScript; PHP, Ruby, Java, Kotlin, Python, C#, Go, C, CPP, Rust, Swift, and Dart use the same rich/v3 model without foreign comments. Wasm instead uses rich byte ranges, a line-zero/byte-column Source Map v3 sidecar, and a relative `sourceMappingURL` custom section. See [source provenance and mappings](docs/source-maps.md) for schemas, lookups, composition, diagnostics, directives, and compatibility.
43
+
44
+ `supportedLanguages` is the immutable registry-derived list `php`, `ruby`, `javascript`, `typescript`, `java`, `kotlin`, `python`, `csharp`, `go`, `c`, `cpp`, `rust`, `swift`, and `dart`. `languageCapabilities` additionally includes target-only `wasm`, `ios`, and `android` records and exposes all seventeen IDs' independent frontend, text-backend, binary-backend, application-backend, and interoperability roles together with `generalFunctionsAndCalls`, `immutableCollections`, `optionalValues`, `orderedListIteration`, `orderedMapIteration`, `conditionControlledLoops`, `referenceClasses`, `effectfulCapabilitiesAndResources`, `closedRecords`, `typedErrors`, and `typeParametersAndGenerics` feature flags, artifact multiplicity, round-trip, mapping, acceptance-stage, and toolchain declarations. Unknown IDs use `UNSUPPORTED_LANGUAGE`; a registered ID missing a requested role uses `UNSUPPORTED_ROLE`; an existing backend that cannot represent a semantic module uses `UNSUPPORTED_CAPABILITY`.
45
+
46
+ `generateArtifactSet` is the additive single-module artifact API. Original text targets return an entry artifact with the exact legacy bytes and rich/v3 mappings; an external JavaScript-family map directive also returns the referenced serialized mapping sidecar. C# returns mapped `Program.cs` then synthetic-provenance `Semantifold.csproj`. Go returns exactly two ordered artifacts: fixed synthetic-provenance `go.mod` first, then mapped `main.go`; the fixed module is `example.com/semantifold/generated` with `go 1.26.0` and creates no `go.sum`. C returns mapped `program.c` followed by synthetic `semantifold_runtime.h`. Rust returns synthetic `Cargo.toml`, synthetic Cargo-generated `Cargo.lock`, then mapped `src/main.rs`, with fixed edition 2021 and Rust/Cargo 1.98.1. Dart returns synthetic `pubspec.yaml`, synthetic deterministic `pubspec.lock`, then mapped sole-entry `bin/program.dart`. Wasm binary/application generation returns `program.wasm`, `program.wasm.map`, `semantifold-loader.mjs`, then sole entry `index.html`, plus frozen `semantifold.browser.v1` ABI metadata. Because C#, Go, C, Rust, Dart, and Wasm are deliberately multi-artifact, `generate()` and `generateArtifact()` reject them with `UNSUPPORTED_ROLE`. Go accepts only an omitted filename or exact `main.go`, C accepts only omitted or exact `program.c`, Rust only omitted or exact `src/main.rs`, Dart only omitted or exact `bin/program.dart`, and Wasm only omitted or exact `program.wasm`; these multi-artifact backends reject unsupported mapping options rather than ignoring them. `createGeneratedArtifactSet` validates multi-file text, binary, mixed loader/binary, and application shapes transactionally: paths are ordered, unique, safe relative POSIX paths with no file/directory prefix collisions; content is explicitly text or bytes; media type, role, generated ownership, and provenance are required; exactly one artifact has role `entry`; and optional metadata is detached deeply frozen JSON. Binary content is held privately and returned as a fresh detached byte view on every read, so caller mutation cannot change validated bytes or their provenance. Generated helper files do not create semantic modules and are not Task 010 projects.
37
47
 
38
- `supportedLanguages` is the immutable registry-derived list `php`, `ruby`, `javascript`, `typescript`, `java`, `python`, `csharp`, `go`, `c`, and `cpp`. `languageCapabilities` exposes each ID's independent frontend, text-backend, binary-backend, application-backend, and interoperability roles together with artifact multiplicity, round-trip, mapping, acceptance-stage, and toolchain declarations. Unknown IDs use `UNSUPPORTED_LANGUAGE`; a registered ID missing a requested role uses `UNSUPPORTED_ROLE`; an existing backend that cannot represent a semantic module uses `UNSUPPORTED_CAPABILITY`.
48
+ Task 026 adds the target-only `ios` application backend through `generateArtifactSet({language: "ios", role: "application", ...})` and `generateProgramArtifactSet`. It lowers only the Task 022 Tasks 001–004 Swift subset, including Ruby-originating Task 010 projects, into deterministic captured semantic Swift, a synthetic SwiftUI shell, an unsigned Xcode project model, tests, exact assets, and a versioned ownership/provenance manifest with causal configuration spans and stable semantic-program identities. Artifact/resource paths use a closed portable ASCII alphabet while Unicode semantic source and generated text remain intact. Transactional create-only directory materialization remains deferred because Node's public filesystem API cannot provide both atomic no-replace directory publication and descriptor-relative no-follow operations without a separately authorized native boundary. Linux semantic execution and credential-free packed generation are implemented; real macOS/Xcode/Apple SDK/XCTest/XCUIAutomation/iOS Simulator acceptance is also deferred, so Task 026 is not delivered. See the [iOS application target](docs/ios.md).
39
49
 
40
- `generateArtifactSet` is the additive single-module artifact API. Original text targets return an entry artifact with the exact legacy bytes and rich/v3 mappings; an external JavaScript-family map directive also returns the referenced serialized mapping sidecar. C# returns mapped `Program.cs` then synthetic-provenance `Semantifold.csproj`. Go returns exactly two ordered artifacts: fixed synthetic-provenance `go.mod` first, then mapped `main.go`; the fixed module is `example.com/semantifold/generated` with `go 1.26.0` and creates no `go.sum`. C returns mapped `program.c` followed by synthetic `semantifold_runtime.h`. Because C#, Go, and C are deliberately multi-artifact, `generate()` and `generateArtifact()` reject them with `UNSUPPORTED_ROLE`. Go accepts only an omitted filename or exact `main.go`, and C accepts only omitted or exact `program.c`; these multi-artifact backends reject mapping options rather than ignoring them. `createGeneratedArtifactSet` validates multi-file text, binary, mixed loader/binary, and application shapes transactionally: paths are ordered, unique, safe relative POSIX paths with no file/directory prefix collisions; content is explicitly text or bytes; media type, role, generated ownership, and provenance are required; and exactly one artifact has role `entry`. Binary content is held privately and returned as a fresh detached byte view on every read, so caller mutation cannot change validated bytes or their provenance. Generated helper files do not create semantic modules and are not Task 010 projects.
50
+ Task 028 adds the target-only `android` application backend through the same artifact APIs. It lowers the Kotlin/JVM-supported semantic subset, including explicit Task 010 projects, into mapped namespaced Kotlin and a synthetic dependency-minimal Android Activity/native TextView project under fixed root `generated/android-app`. Configuration, manifests, SDK levels, resources/assets, output paths, checksums, and collisions are preflighted before rendering. The manifest has one exported launcher and no permissions or components beyond the Activity. The project carries exact Gradle 8.13, AGP 8.11.1, Kotlin 2.2.10, JDK 21.0.8, and API-35 metadata; its only Gradle library declarations are exact non-transitive test-implementation JUnit 4.13.2 and test-runtime Hamcrest Core 1.3. The implicit stdlib dependency is disabled, a checksum-pinned compiler stdlib is compile-input-only, and offline acceptance proves empty application runtime dependencies plus no JUnit/Hamcrest or Kotlin runtime implementation payload in the APK. No public materializer is exported. Real installation, labelled native-view assertion, activity recreation, emulator teardown, a second fresh boot/reinstall/relaunch, screenshots, UI XML, and failure diagnostics run only in the `/dev/kvm` TensorBuzz lane. See the [Android application target](docs/android.md).
51
+
52
+ `parseProgram({entryModule, sources})` and `generateProgramArtifactSet({language, program})` are the opt-in Task 010 project APIs for PHP, Ruby, JavaScript/JSDoc, TypeScript, and Java. Callers supply every source explicitly; parsing resolves an acyclic dependency-first semantic program with stable module-qualified declaration identities, exports/import bindings, one selected entry, and complete provenance. Generation plans and validates the whole target layout before returning an immutable mapped artifact set. It performs no source discovery, package/load/classpath/network resolution, file writes, or package-manager work. Existing single-module APIs and bytes remain unchanged. See [multi-file modules and names](docs/multi-file-modules.md) for the public request/result contract, canonical source profiles, target layouts, diagnostics, and migration notes.
53
+
54
+ Task 036 extends only this explicit program path with compiler-owned source-language facades. `createStdlibFacadeRegistry`, `listStdlibFacades`, and `resolveStdlibFacade` expose immutable versioned definitions and exact native module/symbol lookup. A parser-proved qualification import selects the dependency-only executable closure, records source identity evidence, and compiles those facade sources through the ordinary frontend/backend pipeline; generated facade files use the `support` role under a collision-safe `semantifold/facade/...` namespace. Application code cannot provide the facade's canonical authority, and malformed, dynamic, reflective, shadowed, reopened, native-extension, or forged inputs fail before artifacts are returned. Task 037 uses that route for its two Ruby facades, links only reachable canonical/provider modules, and retains mapped application/facade provenance plus protected synthetic provider provenance.
41
55
 
42
56
  Binary/resource provenance uses `SemantifoldByteMapping` v1 through `createByteMapping`, `parseByteMapping`, and `stringifyByteMapping`. Generated ranges are ordered, non-overlapping, half-open byte offsets with semantic identities or explicit synthetic reasons. They are never interpreted as UTF-16 positions.
43
57
 
44
- `discoverCanonicalToolchain` and `discoverToolchain` resolve an exact executable from a configured absolute override or one unambiguous canonical PATH command and capture its version. `runAcceptanceStages` materializes a validated artifact set in a unique temporary directory and runs applicable `parse`, `generate`, `restore`, `compile`, `link`, `validate`, `instantiate`, and `execute` stages with exact argument arrays, a deterministic locale/timezone, bounded per-stage timeouts, captured output, no shell, and normalized stage diagnostics. The canonical overrides are `SEMANTIFOLD_PHP`, `SEMANTIFOLD_RUBY`, `SEMANTIFOLD_NODE`, `SEMANTIFOLD_TSC`, `SEMANTIFOLD_JAVAC`, `SEMANTIFOLD_JAVA`, `SEMANTIFOLD_PYTHON`, `SEMANTIFOLD_DOTNET`, `SEMANTIFOLD_GO`, `SEMANTIFOLD_CLANG`, and `SEMANTIFOLD_CLANGPP`; none of these APIs installs or downloads a tool. C# requires .NET SDK major 10, while Go requires Go 1.26.x on Linux/amd64 with matching-GOROOT `gofmt`.
58
+ `discoverCanonicalToolchain` and `discoverToolchain` resolve an exact executable from a configured absolute override or one unambiguous canonical PATH command and capture its version. `runAcceptanceStages` materializes a validated artifact set in a unique temporary directory and runs applicable `parse`, `generate`, `restore`, `compile`, `link`, `validate`, `instantiate`, and `execute` stages with exact argument arrays, a deterministic locale/timezone, bounded per-stage timeouts, captured output, no shell, and normalized stage diagnostics. The canonical overrides are `SEMANTIFOLD_DART`, `SEMANTIFOLD_PHP`, `SEMANTIFOLD_RUBY`, `SEMANTIFOLD_NODE`, `SEMANTIFOLD_TSC`, `SEMANTIFOLD_JAVAC`, `SEMANTIFOLD_JAVA`, `SEMANTIFOLD_KOTLINC`, `SEMANTIFOLD_PYTHON`, `SEMANTIFOLD_DOTNET`, `SEMANTIFOLD_GO`, `SEMANTIFOLD_CLANG`, `SEMANTIFOLD_CLANGPP`, `SEMANTIFOLD_RUSTC`, `SEMANTIFOLD_CARGO`, `SEMANTIFOLD_SWIFTC`, `SEMANTIFOLD_WASM_VALIDATE`, and `SEMANTIFOLD_CHROMIUM`; none of these APIs installs or downloads a tool. The generic `php` profile accepts PHP 8.x, while closed-record execution and the Task 037 PHP provider use the canonical `php82` profile (through the same `SEMANTIFOLD_PHP` override) to require PHP 8.2 or newer with core stream functions. Dart requires exact SDK 3.13.3 stable on Linux x64, Kotlin exact 2.4.20 on pinned OpenJDK 25.0.4+7, and Swift exact 6.3.3 on Linux x86-64. Browser Wasm requires WABT 1.0.36 and Chrome/Chromium 152.0.7977.82 in addition to Node 24.
59
+
60
+ This is not general-purpose support for any of the fourteen languages. PHP, Ruby, JavaScript with JSDoc, TypeScript, and Java implement Task 005 general required functions/calls, Task 006 recursive immutable lists/maps, Task 007 explicit optional values, Task 008 ordered list iteration, Task 009 closed records, Task 010 explicit semantic projects, Task 011 typed unchecked errors, Task 012 invariant unbounded type parameters and generic declarations/applications, Task 014 insertion-ordered immutable map iteration, Task 032 strict-Boolean condition-controlled loops, Task 033 bounded reference classes, and Task 034's bounded effect/resource profile. Dart implements Task 005 general required functions/calls but none of those later profiles. `OptionalType {valueType}` contains only semantic presence or absence; it composes recursively as a declared list element or map value, and access preserves that optional result. A strict presence test can prove one simple binding present inside exactly the corresponding branch. Ruby uses exact `T?` metadata and `nil?`, JavaScript/JSDoc uses exact `T|null`, TypeScript uses exact `T | null`, PHP uses canonical `?T`, and Java uses exact `java.util.Optional<T>`/`Optional<T>` operations. Arbitrary unions, nested optionals, implicit nullable/default parameters, `undefined`, truthiness, nullish defaults/navigation, Java bare `null`, and unchecked unwrap remain unsupported. Collection support covers homogeneous literals, zero-based list indexing, total string-key map lookup, size, recursive typing, function passage, exact ordered list `for-each`, and the separate `OrderedMapType` pair-iteration profile. Ordinary `MapType` remains unordered and non-iterable. Ordered maps accept unique nonnumeric string keys, evaluate entries left-to-right, and visit key/value pairs in first-insertion order; aliases, mutation, key-only/value-only loops, and unordered conversions fail loudly. Java lowers only safe local ordered literals through a private `LinkedHashMap` insertion sequence and a non-escaping `Collections.unmodifiableSequencedMap` boundary. Every list, ordered-map, and condition-controlled loop has a deterministic semantic identity; each `break` or `continue` resolves to the nearest enclosing identity and cannot cross a function boundary. Collection loops evaluate their operand once and bind values immutably in body-local scope. A condition-controlled loop evaluates an exact Boolean condition before every iteration and may execute zero times; no loop body by itself proves a non-void function complete. Any outer mutable binding assigned on a nested loop path loses its known-value and optional-presence facts before the relevant repeated condition or body validation and after loop exit, including assignment paths ending in `break`, `continue`, or `return`; unaffected bindings keep stable facts. Task 007 does not turn an unchecked missing-key lookup into an optional operation. PHPDoc distinguishes `list<T>` from `array<string,T>`; JavaScript objects are never maps. Immutability is the accepted semantic operation boundary, not a deep-freezing promise. The other eight source languages and browser Wasm remain on the Tasks 001–004 two-parameter/scalar-return profile and reject later-feature modules transactionally. See [language support](docs/language-support.md) before using it on other code.
61
+
62
+ Task 009 models nominal product values as ordered `RecordDeclaration`/`RecordField` definitions, identity-bound `RecordType`, exact `RecordConstruction`, and resolved `MemberRead`. Records are closed and immutable: construction supplies every field once in declaration order, member access resolves to stable field identity, and structurally similar objects or maps are not records. Record declaration names cannot be captured by lexical parameters, locals, or iteration bindings. Presence-proven optional record receivers retain nominal field dispatch even when a field is named `length` or `size`, and Java zero-argument `equals()` record access remains distinct from one-argument string equality. Fields may recursively contain supported scalars, optionals, lists, maps, and records; an unmediated value cycle is rejected, while optional- or container-mediated recursion is accepted and compiled by every original-five target. Each frontend accepts only its documented canonical class shape. Backend preflight rejects target-reserved identifiers, including the deterministic PHP 8.2+ core/date/SPL/JSON type baseline and Ruby built-in type names, before emission; generated JavaScript and Ruby bind record freezing independently from user field and function names. Omitted or `undefined` external-IR `records` remains the legacy empty-record shape, while explicit `null` is malformed. Java uses a conventional final class with private-final storage, one constructor, and canonical accessors because pinned `@lezer/java@1.1.3` cannot faithfully represent Java `record` declarations. General classes, inheritance, interfaces/traits/mixins, extra methods, mutation, reflection, computed/dynamic members, decorators, equality/hashing, and copy/destructuring remain outside the profile. PR #34 delivered Task 009 after green TensorBuzz CI. This follow-up hardens JavaScript/Ruby record freezing and Java `equals()` member dispatch; its review and merge remain coordinator-owned.
63
+
64
+ Task 033 separately models closed nominal reference classes. Each class has deterministic declaration/member identities, ordered private fields, exactly one constructor that initializes every field once in declaration order, and exact instance methods. `ReferenceConstruction` allocates fresh identity; assignment and argument passage copy that reference, while private mutation remains available only through the semantic receiver in the declaring class. `MethodCallExpression` resolves nominally and evaluates its receiver before its left-to-right arguments. The original five accept one explicit parser-backed source profile and emit native class forms; every other registered role advertises `referenceClasses: false` and fails before artifact exposure. Inheritance, interfaces/traits/mixins, open classes or prototypes, overloads/virtual dispatch, reflection and lifecycle/protocol hooks, static members, public mutable fields, identity equality/hashing, finalizers, cloning/serialization, generic classes, and async methods remain excluded. Task 033 is single-module; both Task 010 program APIs reject class-bearing modules before resolution or output.
45
65
 
46
- This is not general-purpose support for any of the ten languages. The implemented subset is a two-parameter function using explicit integer, boolean, or string types; explicitly typed, initialized scalar locals; plain assignment to mutable locals; ordered lexical blocks; strictly boolean, nested `if` statements with optional `else`; explicit scalar returns; typed scalar operations; a two-argument function call; and sequenced printing. Operations cover integer add/subtract/multiply/negate and ordering, Boolean not/short-circuit and/or, same-type scalar value equality/inequality, and string concatenation. Non-void functions must return on every reachable path, and statements after an unconditional return are rejected. See [language support](docs/language-support.md) before using it on other code.
66
+ Task 034 adds `EffectCapabilityDeclaration`, `EffectCallExpression`, `OwnedResourceType`, `OwnedReferenceType`, explicit move/borrow nodes, declared nominal capability failures, and deterministic `effect:N` identities. Owned values may be direct immutable locals, parameters, returns, or the sole private owned field of an owned-reference class; they cannot be copied, reassigned, compared, serialized, nested in containers/optionals, or exposed through a field. Transfers require a move, borrows are immediate and nonescaping, and every reachable normal or failure path must close or transfer the owner. A borrow/read failure leaves the owner open; a close attempt is terminal even when close fails; subsequent use becomes the declared terminal failure without a second native operation. Optional absence represents only clean absence such as EOF and cannot absorb a typed host failure.
47
67
 
48
- Semantic integers must be JavaScript-safe mathematical integers and have one unsigned zero. Generated JavaScript and TypeScript canonically render scalar output for modules containing negation or multiplication so IEEE-754 `-0` is observed as `0` without folding or rewriting the semantic operation tree. Java generation narrows literals and compile-time-known arithmetic trees further to signed 32-bit `int`. C# uses checked signed-64-bit arithmetic. Go uses exact decimal `int64` literals, rejects compile-time-known results outside signed 64-bit, and otherwise preserves native runtime wrap outside the portable guarantee. Strings are parser-decoded Unicode scalar values and are re-escaped for each target without preserving source quotes or escapes. Equality never coerces and never applies to objects or collections. Division, remainder, exponentiation, bitwise/shift/update/compound operations, ternary/nullish forms, casts/assertions, truthiness, implicit returns, loops, switches, exceptions, and constant folding are unsupported. JavaScript and TypeScript functions must be synchronous and non-generator; Ruby annotations must be immediately associated comment blocks; and PHP accepts only an optional exact `declare(strict_types=1)`. Python requires exact `int`/`bool`/`str` annotations and its exact adjacent immutable carrier. C# requires its exact generated namespace/class shell. Go requires `package main`, at most the exact `fmt` import, explicit `int64`/`bool`/`string` types, final zero-argument `func main()`, and direct `fmt.Println`; assignment occurrence determines source-local mutability, while generated immutable locals carry exact adjacent `// @semantifold-immutable`. Frontends reject syntax instead of dropping receivers, arguments, parameters, declarations, or statements. Before emission, each backend recursively validates blocks, flow, scalar types, typed operations, modeled bindings, mutability, target identifiers, and literal representability.
68
+ Only the exact unversioned `semantifold.task034.resource-probe` authority has built-in conformance bindings, on the original five. It exists to prove real acquisition/read/close semantics and left-to-right exactly-once lowering, not to expose files or sockets as public APIs. Backends preflight the complete capability/effect/resource graph before writer allocation and reject unsupported targets or arbitrary authorities transactionally. Async/concurrency/cancellation, `finally`/`ensure`/`defer`, implicit cleanup, RAII/destructors/finalizers/GC close, retry, general effect polymorphism, unsafe handles, shared mutable resources, and distributed transactions remain absent. Task 035's delivered hub adds versioned canonical standard-library contracts, the target host provider registry and protected native binding, capability negotiation, and program-mode provider linking with tree-shaken provider artifacts. Task 036 adds only the bounded neutral qualification facades; public file, socket, console, and other host APIs remain outside its scope.
69
+
70
+ Task 011 adds parser-neutral `ErrorDeclaration`/`ErrorType`, exact `ErrorConstruction` and `RaiseStatement`, one-handler `TryStatement`, immutable catch bindings, and `ErrorMessageRead`. A raise is abrupt completion; an exact matching handler consumes only that nominal identity, while every unmatched identity propagates. Internal fixed-point call-effect analysis establishes handler reachability without adding checked effects to public function signatures. Ruby uses empty `StandardError` subclasses and explicit typed `rescue`; JavaScript/TypeScript use empty `Error` subclasses plus an exact `instanceof` guard that rethrows unmatched values; PHP uses final `RuntimeException` subclasses and exact typed catches; Java uses final unchecked `RuntimeException` subclasses. Only the immutable string message is portable. Arbitrary values, broad/multiple catches, checked exceptions, causes/stacks, retry/rethrow, `finally`/`ensure`/`else`, resources, async rejection, result types, and non-original-five lowering remain unsupported. Generated single- and multi-file projects reparse to the same nominal identities; other targets advertise `typedErrors: false` and fail transactionally with `UNSUPPORTED_CAPABILITY`.
71
+
72
+ Task 012 adds declaration-owned `TypeParameter` identities, `TypeVariableReference`, exact generic record applications, and inferred type arguments on resolved direct calls. Inference is deterministic first-order unification from arguments only: a present value for `Optional<T>` contributes its contained value type, while an optional argument supplied directly for `T` contributes the complete `Optional` type. Empty collections and absent optionals, including those nested recursively in list/map literals, are contextually checked only after another argument or evidence-bearing nested value has resolved the same variable, independent of argument order. Complete substitutions apply recursively to call returns, constructor fields, and member reads; parser-known argument and explicit-application types provide only conservative frontend classification context, with the semantic validator remaining authoritative. Conflicts, missing variables, recursive substitutions, raw record use, and wrong arity fail with stable diagnostics; caller-supplied resolved signatures also require dense inferred type-argument arrays recursively through record identities. A non-generic record has no `arguments` member at all, and Java construction must spell every generic application rather than borrowing its local declaration. TypeScript and Java use native declaration/application syntax. JavaScript, Ruby, and PHP preserve the same contract through exact parser-associated documentation, including optional type variables and optional applied records nested in collections and maps. PHP closes recursive constructor context from parser-known sibling call evidence, including a present scalar supplied for `Optional<T>`, while retaining an open variable only when its exact parameter identity belongs to the caller's lexical declaration. PHP omits a native type only for `Optional<T>` when `T` has no faithful native carrier; fixed optional scalar, record, list, and map documentation instead requires the exact matching nullable native carrier, while nonoptional documentation rejects that marker. Its documented generic getter is admitted only on the exact record receiver, including a presence-proven optional receiver through an explicit semantic unwrap, while ordinary property access remains rejected. PHP otherwise uses private promoted storage and documented accessors for generic records so a direct type variable remains immutable without inventing a top type. No target substitutes `any`, `mixed`, `Object`, a raw type, specialization copies, runtime tests, or wrappers. Bounds/defaults, variance/wildcards, higher-kinded and conditional/mapped/indexed types, explicit generic function application, casts, reflection, and expected-return-only inference remain excluded. All other registered roles advertise `typeParametersAndGenerics: false` and reject generic IR transactionally. PR #39 delivered Task 012 at `18e67d0de048259d3570c60e141c16a1d26719e2`; the post-merge PHP recursive-documentation correction is implemented locally with coordinator-owned CI and merge pending.
73
+
74
+ Task 013 is the terminal source-tree acceptance gate for the historical original-five Tasks 001–008 profile, delivered through PR 32 with its packed-consumer lifecycle correction in PR 33 on current `master`. Five substantial parser-native fixtures normalize to one complete semantic module, all 25 source→target routes validate and reparse equivalently, and byte-identical target outputs execute through real PHP, Ruby, Node.js, TypeScript/Node.js, and Java toolchains with exact results. Its comparator is spec-only and removes only source coordinates/provenance plus regenerated declaration identities. This gate adds no Task 009 capability, stdlib mapping, pairwise rewrite, map iteration, or expanded-language claim.
75
+
76
+ Semantic integers must be JavaScript-safe mathematical integers and have one unsigned zero. Generated JavaScript and TypeScript canonically render scalar output for modules containing negation or multiplication so IEEE-754 `-0` is observed as `0` without folding or rewriting the semantic operation tree. Java generation narrows literals and compile-time-known arithmetic trees further to signed 32-bit `int`. C# uses checked signed-64-bit arithmetic. Go uses exact decimal `int64` literals, rejects compile-time-known results outside signed 64-bit, and otherwise preserves native runtime wrap outside the portable guarantee. Strings are parser-decoded Unicode scalar values and are re-escaped for each target without preserving source quotes or escapes. Equality never coerces and never applies to objects or collections. Division, remainder, exponentiation, bitwise/shift/update/compound operations, ternary/nullish forms, general casts/assertions, truthiness, implicit returns, post-condition/basic/range/async loops, switches, exception behavior outside Task 011, and constant folding are unsupported. Task 006's exact TypeScript `Map#get(...)!` round-trip wrapper is the sole assertion exception and does not establish lookup totality. JavaScript and TypeScript functions must be synchronous and non-generator; Ruby annotations must be immediately associated comment blocks; and PHP accepts only an optional exact `declare(strict_types=1)`. Python requires exact `int`/`bool`/`str` annotations and its exact adjacent immutable carrier. C# requires its exact generated namespace/class shell. Go requires `package main`, at most the exact `fmt` import, explicit `int64`/`bool`/`string` types, final zero-argument `func main()`, and direct `fmt.Println`; assignment occurrence determines source-local mutability, while generated immutable locals carry exact adjacent `// @semantifold-immutable`. Frontends reject syntax instead of dropping receivers, arguments, parameters, declarations, or statements. Before emission, each backend recursively validates blocks, flow, scalar types, typed operations, modeled bindings, mutability, loop identities and control targets, target identifiers, literal representability, and expression acyclicity; malformed cycles fail with a located diagnostic before writer allocation.
49
77
 
50
78
  C17 support uses exact `int64_t`, `bool` and immutable UTF-8 byte slices. Its deterministic `program.c`/header pair preserves left-to-right and short-circuit effects through checked ordered-expression regions, uses checked signed-64-bit arithmetic, and owns concatenation storage until main cleanup. Reparse verifies the complete generated CST before collapsing temporary values. The qualified toolchain is Ubuntu Clang 21.1.8 on Linux x86-64 with mandatory O0/O2 ordinary and sanitizer execution. See the [C source/target profile](docs/c.md) and [portable toolchain commands](docs/testing.md).
51
79
 
52
- ## Standard-library portability direction
80
+ Rust accepts explicitly typed two-parameter free functions, `let`/`let mut`, scalar assignments, explicit returns and braced conditionals. Exact print, string, clone, borrow and overflow scaffolding collapses into existing semantic nodes. Source move validation rejects use-after-move and overlapping borrow/move expressions; generated clones preserve semantic copies at storage, call and print boundaries. Native operands retain left-to-right evaluation and short-circuiting. Dynamic integer overflow exits 70 with a fixed diagnostic in both Cargo modes. See the [complete Rust contract](docs/rust.md).
81
+
82
+ Swift accepts explicitly typed two-parameter unlabeled functions, `let`/`var`, scalar assignments, explicit returns, braced conditionals, and top-level printing. It emits one mapped `program.swift`; ordinary Swift String `==`/`!=` reject because exact target-only helpers preserve Unicode-scalar equality instead of Swift's canonical-equivalence behavior. Generated mutable locals carry synthetic warning-clean scaffolding. Exact Swift 6.3.3 debug/optimized acceptance passed after the canonical-image rebuild. See the [complete Swift contract](docs/swift.md).
83
+
84
+ Kotlin accepts top-level two-parameter functions with explicit `Long`, `Boolean`, or `String`, typed `val`/`var`, scalar assignments, explicit returns, braced conditionals, final `fun main()`, and direct `println`. It emits one mapped `Program.kt` plus immutable Kotlin 2.4/JVM 25 runnable-JAR metadata; private checked helpers preserve the semantic safe-integer range. Android, Gradle, Kotlin/Native, Kotlin/JS, and multiplatform projects remain excluded. See the [complete Kotlin/JVM contract](docs/kotlin.md).
85
+
86
+ Dart accepts explicitly typed synchronous top-level functions through Task 005, required positional parameters, typed initialized locals, assignment, scalar operators, strict Boolean branches, direct calls, explicit returns, and exact `void main()`/`print`. `generateArtifactSet({language: "dart"})` returns dependency-free `pubspec.yaml`, deterministic `pubspec.lock`, and mapped `bin/program.dart`; private canonical support keeps arithmetic inside the semantic safe-integer range and prevents analyzer constant folding from invalidating short-circuit acceptance. Exact Dart SDK 3.13.3 format/analyze/VM/native acceptance passes offline in isolated state. Flutter, browser Dart, imports/packages, dynamic/nullability, collections/classes, async/isolates, and exceptions remain excluded. See the [complete Dart VM/native contract](docs/dart.md).
87
+
88
+ Browser Wasm lowers the unchanged subset to signed `i64`, canonical Boolean `i32`, and UTF-8 pointer/length strings in one fixed exported memory. A private 1 MiB scratch arena supports checked runtime concatenation, and generation rejects unprovable allocation, more than 64 active semantic calls, or compile-time-known i64 overflow before returning bytes. The strict loader has no DOM/WASI allocator imports or semantic JavaScript fallback. See the [complete browser Wasm contract](docs/webassembly.md).
89
+
90
+ ## Bounded standard-library portability
53
91
 
54
- Standard-library portability is planned and is not implemented in `semantifold@0.2.0`. The design is hub-and-spoke, with two integrations per language: a source-facing **language compatibility stdlib/facade** preserves that language's familiar supported API shape in portable executable definitions, while a **target host provider/native binding** implements versioned **canonical Semantifold stdlib contracts/capabilities** with the target's genuine native standard library.
92
+ Standard-library portability is not released in `semantifold@0.3.0`. The source tree contains the delivered Task 035 canonical contract/provider hub, Task 036's bounded executable qualification facades, and Task 037's first concrete Ruby-to-PHP TCP candidate. The design is hub-and-spoke, with two integrations per language: a source-facing **language compatibility stdlib/facade** preserves that language's familiar supported API shape in portable executable definitions, while a **target host provider/native binding** implements versioned **canonical Semantifold stdlib contracts/capabilities** with the target's genuine native standard library.
55
93
 
56
- For example, planned Ruby-to-PHP compilation would compile a Ruby application with portable Ruby `TCPSocket` and bounded one-string `puts`/`Kernel.puts` compatibility facades through the semantic IR. The generated PHP could retain those source-compatible names in a collision-safe compatibility namespace, call canonical `SocketClient`, text-stream, output, and resource capabilities, and link only the required PHP provider modules. That provider would use native `fsockopen`, `fgets`, and `fclose` for socket operations and native stdout output without adding a duplicate LF. This requires no handwritten Ruby-on-PHP bridge, source-specific loop recognition, or whole-program intelligent refactor. See the [authoritative standard-library portability design](docs/standard-library-portability.md) and [dependency-ordered implementation plan](docs/plans/2026-09-05-standard-library-portability.md).
94
+ Ruby-to-PHP program generation compiles a Ruby application with portable Ruby `TCPSocket` and bounded one-string `puts`/`Kernel.puts` compatibility facades through semantic IR. The generated PHP retains those source-compatible names in a collision-safe compatibility namespace, calls canonical SocketClient, TextStream, Output, and Resource operations, and links only the required PHP provider modules. That protected provider uses native `fsockopen`, `fgets`, `feof`, and `fclose` for socket operations plus native stdout without adding a duplicate LF. This requires no handwritten Ruby-on-PHP bridge, source-specific loop recognition, or whole-program intelligent refactor. See the [authoritative standard-library portability design](docs/standard-library-portability.md) and [dependency-ordered implementation plan](docs/plans/2026-09-05-standard-library-portability.md).
57
95
 
58
96
  ## Development
59
97
 
60
- Use Node.js 24 and install with `npm ci`. Specs use `@velocious/testing@0.0.0` and the standalone `velocious-test` runner. Run a focused spec with `npx velocious-test spec/repository-contract.spec.js`. Task 018 local validation runs explicitly named changed/affected spec files sequentially; aggregate `npm test` discovery runs only in TensorBuzz.
98
+ Use Node.js 24 and install with `npm ci`. Specs use `@velocious/testing@0.0.0` and the standalone `velocious-test` runner. Run a focused spec with `npx velocious-test spec/repository-contract.spec.js`. Task021 local validation runs explicitly named changed/affected spec files sequentially; aggregate `npm test` discovery runs only in TensorBuzz.
61
99
 
62
100
  The aggregate suite includes direct real-toolchain specs that inherit the outer test process locale, so repository validation requires `LANG=C.UTF-8` and `LC_ALL=C.UTF-8`. The canonical container currently exports neither variable. This outer-suite requirement is separate from `runAcceptanceStages`, which normalizes the locale and timezone of every child it owns and does not depend on ambient locale.
63
101
 
@@ -78,13 +116,13 @@ npm pack --dry-run --json
78
116
  git diff --check
79
117
  ```
80
118
 
81
- The one `semantifold@0.2.0` distribution explicitly bundles root `tree-sitter@0.25.1` and a private internal package containing an isolated exact `tree-sitter@0.21.1` plus `tree-sitter-c@0.23.2` and `tree-sitter-cpp@0.23.4` dependency subtree. The private `packages/tree-sitter-legacy` workspace owns source checking and declaration generation, but has no export or publication identity. Its serializer returns only recursively frozen parser-neutral CST data; native parser, tree, node, and language handles stay inside the legacy runtime. The packed-consumer spec installs the real root tarball with a fresh npm cache and proves modern Go and legacy C parsing together without a workspace or registry fallback for the internal package.
119
+ The root distribution explicitly bundles root `tree-sitter@0.25.1` and a private internal package containing an isolated exact `tree-sitter@0.21.1` plus `tree-sitter-c@0.23.2`, `tree-sitter-cpp@0.23.4`, and `tree-sitter-rust@0.23.1` dependency subtree. The immutable Kotlin grammar remains an ordinary full-SHA HTTPS source-archive dependency. The private `packages/tree-sitter-legacy` workspace owns source checking and declaration generation, but has no export or publication identity. Its serializer returns only recursively frozen parser-neutral CST data; native parser, tree, node, and language handles stay inside the legacy runtime. The packed-consumer spec installs the real root tarball with a fresh npm cache and proves modern Kotlin/Go and legacy C/CPP/Rust parsing together without a workspace, SSH route, or registry fallback for the internal package.
82
120
 
83
121
  Because `install-links=true` installs a copy of the private runtime, run `npm ci` again after editing its shipped files under `packages/tree-sitter-legacy/runtime/`. Tests, lint, and `npm pack` reject a stale installed payload with that recovery instruction. The gate compares npm's source file inventory and every file's bytes, including the manifest, serializer, README, and license; it never copies or repairs dependencies itself.
84
122
 
85
- Consumers need no Semantifold-specific npm settings: default `npm install`, `npm ls --all`, and subsequent `npm ci` work with `install-links=false`. The repository alone uses `install-links=true` to materialize the local source. Root `acceptDependencies` accepts the exact private `0.1.0` package already present in the bundle; npm still resolves new installations from the declared `file:` source, never from a registry release of the internal name. The cold-consumer proof isolates user/global configuration, verifies the public registry and ordinary default, and repeats dependency, parser, and TypeScript checks after both install and clean reinstall.
123
+ Consumers need no Semantifold-specific npm settings: default `npm install`, `npm ls --all`, and subsequent `npm ci` work with `install-links=false`. The repository alone uses `install-links=true` to materialize the local source. Root `acceptDependencies` accepts only the exact private `0.1.0` package already present in the bundle; npm resolves the Kotlin grammar from its integrity-locked full-SHA HTTPS source archive. The cold-consumer proof isolates user/global configuration, verifies the public registry and ordinary default, rejects SSH lock entries, and repeats dependency, parser, TypeScript, Rust, and Kotlin/JVM checks after both install and clean reinstall.
86
124
 
87
- The execution specs require PHP CLI, Ruby, Python 3, TypeScript, a Java JDK, .NET 10, Clang 21.1.8 with compiler-rt, and Go 1.26 with matching `gofmt` in addition to Node; missing tools are failures. The canonical container provides them: `docker compose up --build --detach`, followed by `docker compose exec dev npm ci` and the commands above.
125
+ The execution specs require PHP CLI, Ruby, Python 3, TypeScript, a Java JDK, Kotlin/JVM 2.4.20, .NET 10, Clang 21.1.8 with compiler-rt, Go 1.26 with matching `gofmt`, the exact qualified Rust/Cargo 1.98.1 pair, Swift 6.3.3, Dart SDK 3.13.3, WABT 1.0.36, and headless Chrome/Chromium 152.0.7977.82 in addition to Node; missing tools are failures. The canonical container contract installs Kotlin, Java, and Dart during image construction; runtime tests never download a compiler or dependency.
88
126
 
89
127
  ## Documentation
90
128
 
@@ -92,9 +130,17 @@ The execution specs require PHP CLI, Ruby, Python 3, TypeScript, a Java JDK, .NE
92
130
  - [Architecture](docs/architecture.md)
93
131
  - [Coding standards](docs/coding-standards.md)
94
132
  - [Language support](docs/language-support.md)
133
+ - [Rust source and Cargo target](docs/rust.md)
134
+ - [Swift source and target](docs/swift.md)
135
+ - [Kotlin/JVM source and target](docs/kotlin.md)
136
+ - [Dart source and target](docs/dart.md)
137
+ - [Browser WebAssembly target](docs/webassembly.md)
138
+ - [iOS application target](docs/ios.md)
139
+ - [Android application target](docs/android.md)
95
140
  - [Parser qualification](docs/parser-qualification.md)
96
141
  - [Testing](docs/testing.md)
97
142
  - [Source provenance and mappings](docs/source-maps.md)
143
+ - [Multi-file modules and names](docs/multi-file-modules.md)
98
144
  - [Standard-library portability design](docs/standard-library-portability.md)
99
145
  - [Standard-library portability implementation plan](docs/plans/2026-09-05-standard-library-portability.md)
100
146
  - [Language feature roadmap](https://github.com/kaspernj/semantifold/blob/master/todo/README.md)
package/build/index.d.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  import { SemantifoldDiagnostic } from "./src/diagnostic.js";
2
2
  export { SemantifoldDiagnostic };
3
+ export { createCapabilityAuthority } from "./src/semantic/capabilities.js";
3
4
  export { languageCapabilities, supportedLanguages } from "./src/language-registry.js";
4
5
  export { createGeneratedArtifactSet } from "./src/artifacts.js";
6
+ export { createStdlibContractRegistry, listStdlibModules, resolveStdlibModule } from "./src/semantic/stdlib.js";
7
+ export { createStdlibProviderRegistry, listStdlibProviders } from "./src/stdlib-providers.js";
8
+ export { negotiateStdlibProviders } from "./src/stdlib-negotiation.js";
9
+ export { createStdlibFacadeRegistry, listStdlibFacades, resolveStdlibFacade } from "./src/stdlib-facades.js";
5
10
  export { createByteMapping, parseByteMapping, stringifyByteMapping } from "./src/binary-mapping.js";
6
11
  export { canonicalToolchains, discoverCanonicalToolchain, discoverToolchain } from "./src/toolchains.js";
7
12
  export { runAcceptanceStages } from "./src/acceptance.js";
@@ -14,13 +19,33 @@ export { composeMappings, composeSourceMaps, generatedPositionFor, mappingFromSo
14
19
  * @param {string} input.filename - Source filename used in diagnostics.
15
20
  * @param {import("./src/semantic/types.js").SemanticLanguage} input.language - Source language.
16
21
  * @param {string} input.source - Source text.
22
+ * @param {Readonly<import("./src/semantic/types.js").CapabilityAuthority> | import("./src/semantic/types.js").CapabilityAuthorityInput} [input.capabilityAuthority] - Explicit compiler authority.
17
23
  * @returns {import("./src/semantic/types.js").SemanticModule} Semantic module.
18
24
  */
19
25
  export declare function parse(input: {
20
26
  filename: string;
21
27
  language: import("./src/semantic/types.js").SemanticLanguage;
22
28
  source: string;
29
+ capabilityAuthority?: Readonly<import("./src/semantic/types.js").CapabilityAuthority> | import("./src/semantic/types.js").CapabilityAuthorityInput;
23
30
  }): import("./src/semantic/types.js").SemanticModule;
31
+ /**
32
+ * Parses a complete explicit multi-source project into one resolved semantic program.
33
+ * @param {object} input - Program parse request.
34
+ * @param {string} input.entryModule - Stable identity of the sole entry module.
35
+ * @param {{filename: string, id: string, language: import("./src/semantic/types.js").SemanticLanguage, source: string}[]} input.sources - Complete caller-supplied source set.
36
+ * @param {Readonly<import("./src/semantic/types.js").CapabilityAuthority> | import("./src/semantic/types.js").CapabilityAuthorityInput} [input.capabilityAuthority] - Explicit compiler authority shared by every program module.
37
+ * @returns {import("./src/semantic/types.js").SemanticProgram} Semantic program.
38
+ */
39
+ export declare function parseProgram(input: {
40
+ entryModule: string;
41
+ sources: {
42
+ filename: string;
43
+ id: string;
44
+ language: import("./src/semantic/types.js").SemanticLanguage;
45
+ source: string;
46
+ }[];
47
+ capabilityAuthority?: Readonly<import("./src/semantic/types.js").CapabilityAuthority> | import("./src/semantic/types.js").CapabilityAuthorityInput;
48
+ }): import("./src/semantic/types.js").SemanticProgram;
24
49
  /**
25
50
  * Generates target-language source from a shared semantic module.
26
51
  * @param {object} input - Generation request.
@@ -55,20 +80,42 @@ export declare function generateArtifact(input: {
55
80
  language?: import("./src/semantic/types.js").SemanticLanguage;
56
81
  }[];
57
82
  }): import("./src/semantic/types.js").GeneratedArtifact;
83
+ /**
84
+ * Generates a deterministic mapped artifact set for a complete semantic program.
85
+ * @param {object} input - Program generation request.
86
+ * @param {import("./src/semantic/types.js").BackendLanguage} input.language - Registered program target.
87
+ * @param {import("./src/semantic/types.js").SemanticProgram} input.program - Complete resolved program.
88
+ * @param {"text" | "application"} [input.role] - Explicit role; omitted preserves text generation.
89
+ * @param {import("./src/semantic/types.js").IosApplicationConfigurationInput | import("./src/semantic/types.js").AndroidApplicationConfigurationInput} [input.configuration] - Application configuration.
90
+ * @param {import("./src/semantic/types.js").IosApplicationAssetInput[] | import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.assets] - Exact caller assets.
91
+ * @param {import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.resources] - Exact Android caller resources.
92
+ * @returns {import("./src/semantic/types.js").GeneratedArtifactSet} Complete generated set.
93
+ */
94
+ export declare function generateProgramArtifactSet(input: {
95
+ language: import("./src/semantic/types.js").BackendLanguage;
96
+ program: import("./src/semantic/types.js").SemanticProgram;
97
+ role?: "text" | "application";
98
+ configuration?: import("./src/semantic/types.js").IosApplicationConfigurationInput | import("./src/semantic/types.js").AndroidApplicationConfigurationInput;
99
+ assets?: import("./src/semantic/types.js").IosApplicationAssetInput[] | import("./src/semantic/types.js").AndroidApplicationInputFile[];
100
+ resources?: import("./src/semantic/types.js").AndroidApplicationInputFile[];
101
+ }): import("./src/semantic/types.js").GeneratedArtifactSet;
58
102
  /**
59
103
  * Generates a deterministic artifact set for one semantic module.
60
104
  * @param {object} input - Artifact-set generation request.
61
- * @param {string} input.language - Registered target language or platform ID.
105
+ * @param {import("./src/semantic/types.js").BackendLanguage} input.language - Registered target language or platform ID.
62
106
  * @param {import("./src/semantic/types.js").SemanticModule} input.module - Semantic module.
63
107
  * @param {"text" | "binary" | "application"} [input.role] - Requested backend artifact role.
64
108
  * @param {string} [input.filename] - Safe output path for a text target.
65
109
  * @param {"none" | "external" | "inline"} [input.mapDirective] - JavaScript-family map directive.
66
110
  * @param {string} [input.sourceMapFilename] - External map filename.
67
111
  * @param {{filename: string, content: string, language?: import("./src/semantic/types.js").SemanticLanguage}[]} [input.sources] - Original sources.
112
+ * @param {import("./src/semantic/types.js").IosApplicationConfigurationInput | import("./src/semantic/types.js").AndroidApplicationConfigurationInput} [input.configuration] - Application configuration.
113
+ * @param {import("./src/semantic/types.js").IosApplicationAssetInput[] | import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.assets] - Exact caller assets.
114
+ * @param {import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.resources] - Exact Android caller resources.
68
115
  * @returns {import("./src/semantic/types.js").GeneratedArtifactSet} Complete generated set.
69
116
  */
70
117
  export declare function generateArtifactSet(input: {
71
- language: string;
118
+ language: import("./src/semantic/types.js").BackendLanguage;
72
119
  module: import("./src/semantic/types.js").SemanticModule;
73
120
  role?: "text" | "binary" | "application";
74
121
  filename?: string;
@@ -79,5 +126,8 @@ export declare function generateArtifactSet(input: {
79
126
  content: string;
80
127
  language?: import("./src/semantic/types.js").SemanticLanguage;
81
128
  }[];
129
+ configuration?: import("./src/semantic/types.js").IosApplicationConfigurationInput | import("./src/semantic/types.js").AndroidApplicationConfigurationInput;
130
+ assets?: import("./src/semantic/types.js").IosApplicationAssetInput[] | import("./src/semantic/types.js").AndroidApplicationInputFile[];
131
+ resources?: import("./src/semantic/types.js").AndroidApplicationInputFile[];
82
132
  }): import("./src/semantic/types.js").GeneratedArtifactSet;
83
133
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"AAKA,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAA;AAKzD,OAAO,EAAC,qBAAqB,EAAC,CAAA;AAC9B,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,4BAA4B,CAAA;AACnF,OAAO,EAAC,0BAA0B,EAAC,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAC,MAAM,yBAAyB,CAAA;AACjG,OAAO,EAAC,mBAAmB,EAAE,0BAA0B,EAAE,iBAAiB,EAAC,MAAM,qBAAqB,CAAA;AACtG,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,EALxB;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAAkE,QAAQ,EAAlE,OAAO,yBAAyB,EAAE,gBAAgB,CAC1D;IAAsB,MAAM,EAApB,MAAM,CACd;CAEwB,GAFd,OAAO,yBAAyB,EAAE,cAAc,CAI5D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAJ3B;IAAkE,QAAQ,EAAlE,OAAO,yBAAyB,EAAE,gBAAgB,CAC1D;IAAgE,MAAM,EAA9D,OAAO,yBAAyB,EAAE,cAAc,CACxD;CAE2B,GAFjB,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EARnC;IAAkE,QAAQ,EAAlE,OAAO,yBAAyB,EAAE,gBAAgB,CAC1D;IAAgE,MAAM,EAA9D,OAAO,yBAAyB,EAAE,cAAc,CACxD;IAAuB,QAAQ,AAA/B,CACA,EADQ,MAAM,CACd;IAA+C,YAAY,AAA3D,CACA,EADQ,MAAM,GAAG,UAAU,GAAG,QAAQ,CACtC;IAAuB,iBAAiB,AAAxC,CACA,EADQ,MAAM,CACd;IAAqH,OAAO,AAA5H,CACA,EADQ;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAC5G;CAEmC,GAFzB,OAAO,yBAAyB,EAAE,iBAAiB,CAI/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EATtC;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAAgE,MAAM,EAA9D,OAAO,yBAAyB,EAAE,cAAc,CACxD;IAAkD,IAAI,AAAtD,CACA,EADQ,MAAM,GAAG,QAAQ,GAAG,aAAa,CACzC;IAAuB,QAAQ,AAA/B,CACA,EADQ,MAAM,CACd;IAA+C,YAAY,AAA3D,CACA,EADQ,MAAM,GAAG,UAAU,GAAG,QAAQ,CACtC;IAAuB,iBAAiB,AAAxC,CACA,EADQ,MAAM,CACd;IAAqH,OAAO,AAA5H,CACA,EADQ;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CAC5G;CAEsC,GAF5B,OAAO,yBAAyB,EAAE,oBAAoB,CAsFlE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -1,13 +1,22 @@
1
1
  // @ts-check
2
2
  import { parseSource } from "./src/frontends/index.js";
3
+ import { parseProgramSource } from "./src/frontends/program.js";
3
4
  import { generateArtifactSource, generateSource } from "./src/backends/index.js";
5
+ import { generateProgramArtifacts } from "./src/backends/program.js";
4
6
  import { createGeneratedArtifactSet as constructArtifactSet } from "./src/artifacts.js";
5
- import { SemantifoldDiagnostic } from "./src/diagnostic.js";
7
+ import { SemantifoldDiagnostic, unsupportedCapability } from "./src/diagnostic.js";
6
8
  import { languageRegistry } from "./src/language-registry.js";
9
+ import { kotlinArtifactMetadata } from "./src/backends/kotlin.js";
10
+ import { preflightEffectCapabilities } from "./src/backends/effects.js";
7
11
  const artifactBackendRoles = new Set(["text", "binary", "application"]);
8
12
  export { SemantifoldDiagnostic };
13
+ export { createCapabilityAuthority } from "./src/semantic/capabilities.js";
9
14
  export { languageCapabilities, supportedLanguages } from "./src/language-registry.js";
10
15
  export { createGeneratedArtifactSet } from "./src/artifacts.js";
16
+ export { createStdlibContractRegistry, listStdlibModules, resolveStdlibModule } from "./src/semantic/stdlib.js";
17
+ export { createStdlibProviderRegistry, listStdlibProviders } from "./src/stdlib-providers.js";
18
+ export { negotiateStdlibProviders } from "./src/stdlib-negotiation.js";
19
+ export { createStdlibFacadeRegistry, listStdlibFacades, resolveStdlibFacade } from "./src/stdlib-facades.js";
11
20
  export { createByteMapping, parseByteMapping, stringifyByteMapping } from "./src/binary-mapping.js";
12
21
  export { canonicalToolchains, discoverCanonicalToolchain, discoverToolchain } from "./src/toolchains.js";
13
22
  export { runAcceptanceStages } from "./src/acceptance.js";
@@ -20,11 +29,23 @@ export { composeMappings, composeSourceMaps, generatedPositionFor, mappingFromSo
20
29
  * @param {string} input.filename - Source filename used in diagnostics.
21
30
  * @param {import("./src/semantic/types.js").SemanticLanguage} input.language - Source language.
22
31
  * @param {string} input.source - Source text.
32
+ * @param {Readonly<import("./src/semantic/types.js").CapabilityAuthority> | import("./src/semantic/types.js").CapabilityAuthorityInput} [input.capabilityAuthority] - Explicit compiler authority.
23
33
  * @returns {import("./src/semantic/types.js").SemanticModule} Semantic module.
24
34
  */
25
35
  export function parse(input) {
26
36
  return parseSource(input);
27
37
  }
38
+ /**
39
+ * Parses a complete explicit multi-source project into one resolved semantic program.
40
+ * @param {object} input - Program parse request.
41
+ * @param {string} input.entryModule - Stable identity of the sole entry module.
42
+ * @param {{filename: string, id: string, language: import("./src/semantic/types.js").SemanticLanguage, source: string}[]} input.sources - Complete caller-supplied source set.
43
+ * @param {Readonly<import("./src/semantic/types.js").CapabilityAuthority> | import("./src/semantic/types.js").CapabilityAuthorityInput} [input.capabilityAuthority] - Explicit compiler authority shared by every program module.
44
+ * @returns {import("./src/semantic/types.js").SemanticProgram} Semantic program.
45
+ */
46
+ export function parseProgram(input) {
47
+ return parseProgramSource(input);
48
+ }
28
49
  /**
29
50
  * Generates target-language source from a shared semantic module.
30
51
  * @param {object} input - Generation request.
@@ -49,16 +70,33 @@ export function generate(input) {
49
70
  export function generateArtifact(input) {
50
71
  return generateArtifactSource(input);
51
72
  }
73
+ /**
74
+ * Generates a deterministic mapped artifact set for a complete semantic program.
75
+ * @param {object} input - Program generation request.
76
+ * @param {import("./src/semantic/types.js").BackendLanguage} input.language - Registered program target.
77
+ * @param {import("./src/semantic/types.js").SemanticProgram} input.program - Complete resolved program.
78
+ * @param {"text" | "application"} [input.role] - Explicit role; omitted preserves text generation.
79
+ * @param {import("./src/semantic/types.js").IosApplicationConfigurationInput | import("./src/semantic/types.js").AndroidApplicationConfigurationInput} [input.configuration] - Application configuration.
80
+ * @param {import("./src/semantic/types.js").IosApplicationAssetInput[] | import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.assets] - Exact caller assets.
81
+ * @param {import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.resources] - Exact Android caller resources.
82
+ * @returns {import("./src/semantic/types.js").GeneratedArtifactSet} Complete generated set.
83
+ */
84
+ export function generateProgramArtifactSet(input) {
85
+ return generateProgramArtifacts(input);
86
+ }
52
87
  /**
53
88
  * Generates a deterministic artifact set for one semantic module.
54
89
  * @param {object} input - Artifact-set generation request.
55
- * @param {string} input.language - Registered target language or platform ID.
90
+ * @param {import("./src/semantic/types.js").BackendLanguage} input.language - Registered target language or platform ID.
56
91
  * @param {import("./src/semantic/types.js").SemanticModule} input.module - Semantic module.
57
92
  * @param {"text" | "binary" | "application"} [input.role] - Requested backend artifact role.
58
93
  * @param {string} [input.filename] - Safe output path for a text target.
59
94
  * @param {"none" | "external" | "inline"} [input.mapDirective] - JavaScript-family map directive.
60
95
  * @param {string} [input.sourceMapFilename] - External map filename.
61
96
  * @param {{filename: string, content: string, language?: import("./src/semantic/types.js").SemanticLanguage}[]} [input.sources] - Original sources.
97
+ * @param {import("./src/semantic/types.js").IosApplicationConfigurationInput | import("./src/semantic/types.js").AndroidApplicationConfigurationInput} [input.configuration] - Application configuration.
98
+ * @param {import("./src/semantic/types.js").IosApplicationAssetInput[] | import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.assets] - Exact caller assets.
99
+ * @param {import("./src/semantic/types.js").AndroidApplicationInputFile[]} [input.resources] - Exact Android caller resources.
62
100
  * @returns {import("./src/semantic/types.js").GeneratedArtifactSet} Complete generated set.
63
101
  */
64
102
  export function generateArtifactSet(input) {
@@ -69,7 +107,7 @@ export function generateArtifactSet(input) {
69
107
  message: "Artifact-set generation requires a request object."
70
108
  });
71
109
  }
72
- const { filename, language, mapDirective, module, role = "text", sourceMapFilename, sources } = input;
110
+ const { assets, configuration, filename, language, mapDirective, module, resources, role = "text", sourceMapFilename, sources } = input;
73
111
  if (typeof language != "string" || language.length == 0) {
74
112
  throw new SemantifoldDiagnostic({
75
113
  code: "INVALID_ARTIFACT_SET",
@@ -84,9 +122,21 @@ export function generateArtifactSet(input) {
84
122
  message: "Artifact backend role must be 'text', 'binary', or 'application'."
85
123
  });
86
124
  }
125
+ const target = languageRegistry.record(language);
126
+ preflightEffectCapabilities(module, /** @type {import("./src/semantic/types.js").BackendLanguage} */ (language));
127
+ const genericDeclaration = [...module?.records ?? [], ...module?.functions ?? []]
128
+ .find((declaration) => (declaration?.typeParameters?.length ?? 0) > 0);
129
+ if (genericDeclaration && !target.features.typeParametersAndGenerics) {
130
+ unsupportedCapability(/** @type {import("./src/semantic/types.js").BackendLanguage} */ (language), "Task 012 type parameters and generics", genericDeclaration.location ?? module.location);
131
+ }
132
+ if (Array.isArray(module?.records) && module.records.length > 0 && !target.features.closedRecords) {
133
+ unsupportedCapability(/** @type {import("./src/semantic/types.js").BackendLanguage} */ (language), "Task 009 closed records", module.records[0].location ?? module.location);
134
+ }
135
+ if (Array.isArray(module?.classes) && module.classes.length > 0 && !target.features.referenceClasses) {
136
+ unsupportedCapability(/** @type {import("./src/semantic/types.js").BackendLanguage} */ (language), "Task 033 reference classes", module.classes[0].location ?? module.location);
137
+ }
87
138
  if (role == "text") {
88
- const record = languageRegistry.record(language);
89
- if (record.artifactMultiplicity == "multiple") {
139
+ if (target.artifactMultiplicity == "multiple") {
90
140
  const backend = languageRegistry.resolve(language, "textBackend", module?.location);
91
141
  return constructArtifactSet(backend({ filename, language, mapDirective, module, sourceMapFilename, sources }));
92
142
  }
@@ -102,7 +152,7 @@ export function generateArtifactSet(input) {
102
152
  const artifacts = [{
103
153
  content: artifact.code,
104
154
  contentKind: "text",
105
- mediaType: /** @type {string} */ (record.mediaType),
155
+ mediaType: /** @type {string} */ (target.mediaType),
106
156
  ownership: "generated",
107
157
  path: artifact.filename,
108
158
  provenance: {
@@ -130,11 +180,13 @@ export function generateArtifactSet(input) {
130
180
  }
131
181
  return constructArtifactSet({
132
182
  artifacts,
183
+ ...(language == "kotlin" ? { metadata: kotlinArtifactMetadata } : {}),
133
184
  target: language
134
185
  });
135
186
  }
136
187
  const registryRole = role == "binary" ? "binaryBackend" : "applicationBackend";
137
188
  const backend = languageRegistry.resolve(language, registryRole, module?.location);
138
- return constructArtifactSet(backend({ filename, language, module, sources }));
189
+ return constructArtifactSet(backend(language == "android" ? input :
190
+ { assets, configuration, filename, language, mapDirective, module, resources, sourceMapFilename, sources }));
139
191
  }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsMEJBQTBCLElBQUksb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQTtBQUUzRCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxDQUFBO0FBQzlCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ25GLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ2pHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3RHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFD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UUFBUSxDQUFDLENBQUE7SUFFbEYsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUE7QUFDN0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlU291cmNlfSBmcm9tIFwiLi9zcmMvZnJvbnRlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVBcnRpZmFjdFNvdXJjZSwgZ2VuZXJhdGVTb3VyY2V9IGZyb20gXCIuL3NyYy9iYWNrZW5kcy9pbmRleC5qc1wiXG5pbXBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0IGFzIGNvbnN0cnVjdEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljfSBmcm9tIFwiLi9zcmMvZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xhbmd1YWdlUmVnaXN0cnl9IGZyb20gXCIuL3NyYy9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5cbmNvbnN0IGFydGlmYWN0QmFja2VuZFJvbGVzID0gbmV3IFNldChbXCJ0ZXh0XCIsIFwiYmluYXJ5XCIsIFwiYXBwbGljYXRpb25cIl0pXG5cbmV4cG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljfVxuZXhwb3J0IHtsYW5ndWFnZUNhcGFiaWxpdGllcywgc3VwcG9ydGVkTGFuZ3VhZ2VzfSBmcm9tIFwiLi9zcmMvbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIlxuZXhwb3J0IHtjcmVhdGVHZW5lcmF0ZWRBcnRpZmFjdFNldH0gZnJvbSBcIi4vc3JjL2FydGlmYWN0cy5qc1wiXG5leHBvcnQge2NyZWF0ZUJ5dGVNYXBwaW5nLCBwYXJzZUJ5dGVNYXBwaW5nLCBzdHJpbmdpZnlCeXRlTWFwcGluZ30gZnJvbSBcIi4vc3JjL2JpbmFyeS1tYXBwaW5nLmpzXCJcbmV4cG9ydCB7Y2Fub25pY2FsVG9vbGNoYWlucywgZGlzY292ZXJDYW5vbmljYWxUb29sY2hhaW4sIGRpc2NvdmVyVG9vbGNoYWlufSBmcm9tIFwiLi9zcmMvdG9vbGNoYWlucy5qc1wiXG5leHBvcnQge3J1bkFjY2VwdGFuY2VTdGFnZXN9IGZyb20gXCIuL3NyYy9hY2NlcHRhbmNlLmpzXCJcbmV4cG9ydCB7Z2V0Tm9kZVByb3ZlbmFuY2UsIGdldFN5bWJvbFByb3ZlbmFuY2V9IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmV4cG9ydCB7cHJpbWFyeUxvY2F0aW9ufSBmcm9tIFwiLi9zcmMvc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5leHBvcnQge1xuICBjb21wb3NlTWFwcGluZ3MsXG4gIGNvbXBvc2VTb3VyY2VNYXBzLFxuICBnZW5lcmF0ZWRQb3NpdGlvbkZvcixcbiAgbWFwcGluZ0Zyb21Tb3VyY2VNYXAsXG4gIG9yaWdpbmFsUG9zaXRpb25Gb3IsXG4gIHBhcnNlTWFwcGluZyxcbiAgcmVtYXBEaWFnbm9zdGljLFxuICByZW1hcExvY2F0aW9uLFxuICBzcGFuc0Zvck5vZGUsXG4gIHNwYW5zRm9yU3ltYm9sLFxuICBzdHJpbmdpZnlNYXBwaW5nLFxuICB0b1NvdXJjZU1hcFYzXG59IGZyb20gXCIuL3NyYy9tYXBwaW5nLmpzXCJcblxuLyoqXG4gKiBQYXJzZXMgc291cmNlIGludG8gU2VtYW50aWZvbGQncyBzaGFyZWQgc2VtYW50aWMgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZSByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lIHVzZWQgaW4gZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICByZXR1cm4gcGFyc2VTb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRhcmdldC1sYW5ndWFnZSBzb3VyY2UgZnJvbSBhIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge3N0cmluZ30gR2VuZXJhdGVkIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlKGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByZXVzYWJsZSBvdXRwdXQgYXJ0aWZhY3Qgd2l0aCByaWNoIGFuZCBTb3VyY2UgTWFwIHYzIG1hcHBpbmdzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gR2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IGlucHV0Lm1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuZmlsZW5hbWVdIC0gT3V0cHV0IGZpbGVuYW1lLlxuICogQHBhcmFtIHtcIm5vbmVcIiB8IFwiZXh0ZXJuYWxcIiB8IFwiaW5saW5lXCJ9IFtpbnB1dC5tYXBEaXJlY3RpdmVdIC0gSmF2YVNjcmlwdC1mYW1pbHkgbWFwIGRpcmVjdGl2ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuc291cmNlTWFwRmlsZW5hbWVdIC0gRXh0ZXJuYWwgbWFwIGZpbGVuYW1lLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119IFtpbnB1dC5zb3VyY2VzXSAtIFNvdXJjZXMgZm9yIGNhbGxlci1hdXRob3JlZCBtb2R1bGVzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0fSBHZW5lcmF0ZWQgYXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFydGlmYWN0KGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGRldGVybWluaXN0aWMgYXJ0aWZhY3Qgc2V0IGZvciBvbmUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5sYW5ndWFnZSAtIFJlZ2lzdGVyZWQgdGFyZ2V0IGxhbmd1YWdlIG9yIHBsYXRmb3JtIElELlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtcInRleHRcIiB8IFwiYmluYXJ5XCIgfCBcImFwcGxpY2F0aW9uXCJ9IFtpbnB1dC5yb2xlXSAtIFJlcXVlc3RlZCBiYWNrZW5kIGFydGlmYWN0IHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LmZpbGVuYW1lXSAtIFNhZmUgb3V0cHV0IHBhdGggZm9yIGEgdGV4dCB0YXJnZXQuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBtYXAgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW2lucHV0LnNvdXJjZXNdIC0gT3JpZ2luYWwgc291cmNlcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFNldH0gQ29tcGxldGUgZ2VuZXJhdGVkIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXJ0aWZhY3RTZXQoaW5wdXQpIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGlucHV0KSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICE9IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlOiBcImFydGlmYWN0XCIsXG4gICAgICBtZXNzYWdlOiBcIkFydGlmYWN0LXNldCBnZW5lcmF0aW9uIHJlcXVpcmVzIGEgcmVxdWVzdCBvYmplY3QuXCJcbiAgICB9KVxuICB9XG4gIGNvbnN0IHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCByb2xlID0gXCJ0ZXh0XCIsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSA9IGlucHV0XG5cbiAgaWYgKHR5cGVvZiBsYW5ndWFnZSAhPSBcInN0cmluZ1wiIHx8IGxhbmd1YWdlLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZTogXCJhcnRpZmFjdFwiLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcgbGFuZ3VhZ2Ugb3IgdGFyZ2V0IElELlwiXG4gICAgfSlcbiAgfVxuICBpZiAodHlwZW9mIHJvbGUgIT0gXCJzdHJpbmdcIiB8fCAhYXJ0aWZhY3RCYWNrZW5kUm9sZXMuaGFzKHJvbGUpKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3QgYmFja2VuZCByb2xlIG11c3QgYmUgJ3RleHQnLCAnYmluYXJ5Jywgb3IgJ2FwcGxpY2F0aW9uJy5cIlxuICAgIH0pXG4gIH1cblxuICBpZiAocm9sZSA9PSBcInRleHRcIikge1xuICAgIGNvbnN0IHJlY29yZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVjb3JkKGxhbmd1YWdlKVxuXG4gICAgaWYgKHJlY29yZC5hcnRpZmFjdE11bHRpcGxpY2l0eSA9PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgIGNvbnN0IGJhY2tlbmQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlc29sdmUobGFuZ3VhZ2UsIFwidGV4dEJhY2tlbmRcIiwgbW9kdWxlPy5sb2NhdGlvbilcblxuICAgICAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KGJhY2tlbmQoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSkpXG4gICAgfVxuICAgIGNvbnN0IGFydGlmYWN0ID0gZ2VuZXJhdGVBcnRpZmFjdFNvdXJjZSh7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGxhbmd1YWdlOiAvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBtYXBEaXJlY3RpdmUsXG4gICAgICBtb2R1bGUsXG4gICAgICBzb3VyY2VNYXBGaWxlbmFtZSxcbiAgICAgIHNvdXJjZXNcbiAgICB9KVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSAqL1xuICAgIGNvbnN0IGFydGlmYWN0cyA9IFt7XG4gICAgICBjb250ZW50OiBhcnRpZmFjdC5jb2RlLFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlY29yZC5tZWRpYVR5cGUpLFxuICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgcGF0aDogYXJ0aWZhY3QuZmlsZW5hbWUsXG4gICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgIGtpbmQ6IFwidGV4dFwiLFxuICAgICAgICBtYXBwaW5nOiBhcnRpZmFjdC5tYXBwaW5nLFxuICAgICAgICBzb3VyY2VNYXA6IGFydGlmYWN0LnNvdXJjZU1hcCxcbiAgICAgICAgc291cmNlTWFwRmlsZW5hbWU6IGFydGlmYWN0LnNvdXJjZU1hcEZpbGVuYW1lXG4gICAgICB9LFxuICAgICAgcm9sZTogXCJlbnRyeVwiXG4gICAgfV1cblxuICAgIGlmIChtYXBEaXJlY3RpdmUgPT0gXCJleHRlcm5hbFwiKSB7XG4gICAgICBhcnRpZmFjdHMucHVzaCh7XG4gICAgICAgIGNvbnRlbnQ6IGAke0pTT04uc3RyaW5naWZ5KGFydGlmYWN0LnNvdXJjZU1hcCl9XFxuYCxcbiAgICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgIHBhdGg6IGFydGlmYWN0LnNvdXJjZU1hcEZpbGVuYW1lLFxuICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAga2luZDogXCJzeW50aGV0aWNcIixcbiAgICAgICAgICByZWFzb246IFwiU2VyaWFsaXplZCBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24gZm9yIHRoZSBnZW5lcmF0ZWQgZW50cnkgYXJ0aWZhY3QuXCIsXG4gICAgICAgICAgcmVsYXRlZE9yaWdpbnM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IFwibWFwcGluZ1wiXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJ1Y3RBcnRpZmFjdFNldCh7XG4gICAgICBhcnRpZmFjdHMsXG4gICAgICB0YXJnZXQ6IGxhbmd1YWdlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHJlZ2lzdHJ5Um9sZSA9IHJvbGUgPT0gXCJiaW5hcnlcIiA/IFwiYmluYXJ5QmFja2VuZFwiIDogXCJhcHBsaWNhdGlvbkJhY2tlbmRcIlxuICBjb25zdCBiYWNrZW5kID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCByZWdpc3RyeVJvbGUsIG1vZHVsZT8ubG9jYXRpb24pXG5cbiAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KGJhY2tlbmQoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgbW9kdWxlLCBzb3VyY2VzfSkpXG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQzdELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRSxPQUFPLEVBQUMsMEJBQTBCLElBQUksb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRixPQUFPLEVBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUMvRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUVyRSxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxDQUFBO0FBQzlCLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFBO0FBQ3hFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ25GLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzdELE9BQU8sRUFBQyw0QkFBNEIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzdHLE9BQU8sRUFBQyw0QkFBNEIsRUFB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QVksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFFbEYsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzlHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtwYXJzZVNvdXJjZX0gZnJvbSBcIi4vc3JjL2Zyb250ZW5kcy9pbmRleC5qc1wiXG5pbXBvcnQge3BhcnNlUHJvZ3JhbVNvdXJjZX0gZnJvbSBcIi4vc3JjL2Zyb250ZW5kcy9wcm9ncmFtLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVBcnRpZmFjdFNvdXJjZSwgZ2VuZXJhdGVTb3VyY2V9IGZyb20gXCIuL3NyYy9iYWNrZW5kcy9pbmRleC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlUHJvZ3JhbUFydGlmYWN0c30gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL3Byb2dyYW0uanNcIlxuaW1wb3J0IHtjcmVhdGVHZW5lcmF0ZWRBcnRpZmFjdFNldCBhcyBjb25zdHJ1Y3RBcnRpZmFjdFNldH0gZnJvbSBcIi4vc3JjL2FydGlmYWN0cy5qc1wiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi9zcmMvZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xhbmd1YWdlUmVnaXN0cnl9IGZyb20gXCIuL3NyYy9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5pbXBvcnQge2tvdGxpbkFydGlmYWN0TWV0YWRhdGF9IGZyb20gXCIuL3NyYy9iYWNrZW5kcy9rb3RsaW4uanNcIlxuaW1wb3J0IHtwcmVmbGlnaHRFZmZlY3RDYXBhYmlsaXRpZXN9IGZyb20gXCIuL3NyYy9iYWNrZW5kcy9lZmZlY3RzLmpzXCJcblxuY29uc3QgYXJ0aWZhY3RCYWNrZW5kUm9sZXMgPSBuZXcgU2V0KFtcInRleHRcIiwgXCJiaW5hcnlcIiwgXCJhcHBsaWNhdGlvblwiXSlcblxuZXhwb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9XG5leHBvcnQge2NyZWF0ZUNhcGFiaWxpdHlBdXRob3JpdHl9IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9jYXBhYmlsaXRpZXMuanNcIlxuZXhwb3J0IHtsYW5ndWFnZUNhcGFiaWxpdGllcywgc3VwcG9ydGVkTGFuZ3VhZ2VzfSBmcm9tIFwiLi9zcmMvbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIlxuZXhwb3J0IHtjcmVhdGVHZW5lcmF0ZWRBcnRpZmFjdFNldH0gZnJvbSBcIi4vc3JjL2FydGlmYWN0cy5qc1wiXG5leHBvcnQge2NyZWF0ZVN0ZGxpYkNvbnRyYWN0UmVnaXN0cnksIGxpc3RTdGRsaWJNb2R1bGVzLCByZXNvbHZlU3RkbGliTW9kdWxlfSBmcm9tIFwiLi9zcmMvc2VtYW50aWMvc3RkbGliLmpzXCJcbmV4cG9ydCB7Y3JlYXRlU3RkbGliUHJvdmlkZXJSZWdpc3RyeSwgbGlzdFN0ZGxpYlByb3ZpZGVyc30gZnJvbSBcIi4vc3JjL3N0ZGxpYi1wcm92aWRlcnMuanNcIlxuZXhwb3J0IHtuZWdvdGlhdGVTdGRsaWJQcm92aWRlcnN9IGZyb20gXCIuL3NyYy9zdGRsaWItbmVnb3RpYXRpb24uanNcIlxuZXhwb3J0IHtjcmVhdGVTdGRsaWJGYWNhZGVSZWdpc3RyeSwgbGlzdFN0ZGxpYkZhY2FkZXMsIHJlc29sdmVTdGRsaWJGYWNhZGV9IGZyb20gXCIuL3NyYy9zdGRsaWItZmFjYWRlcy5qc1wiXG5leHBvcnQge2NyZWF0ZUJ5dGVNYXBwaW5nLCBwYXJzZUJ5dGVNYXBwaW5nLCBzdHJpbmdpZnlCeXRlTWFwcGluZ30gZnJvbSBcIi4vc3JjL2JpbmFyeS1tYXBwaW5nLmpzXCJcbmV4cG9ydCB7Y2Fub25pY2FsVG9vbGNoYWlucywgZGlzY292ZXJDYW5vbmljYWxUb29sY2hhaW4sIGRpc2NvdmVyVG9vbGNoYWlufSBmcm9tIFwiLi9zcmMvdG9vbGNoYWlucy5qc1wiXG5leHBvcnQge3J1bkFjY2VwdGFuY2VTdGFnZXN9IGZyb20gXCIuL3NyYy9hY2NlcHRhbmNlLmpzXCJcbmV4cG9ydCB7Z2V0Tm9kZVByb3ZlbmFuY2UsIGdldFN5bWJvbFByb3ZlbmFuY2V9IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmV4cG9ydCB7cHJpbWFyeUxvY2F0aW9ufSBmcm9tIFwiLi9zcmMvc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5leHBvcnQge1xuICBjb21wb3NlTWFwcGluZ3MsXG4gIGNvbXBvc2VTb3VyY2VNYXBzLFxuICBnZW5lcmF0ZWRQb3NpdGlvbkZvcixcbiAgbWFwcGluZ0Zyb21Tb3VyY2VNYXAsXG4gIG9yaWdpbmFsUG9zaXRpb25Gb3IsXG4gIHBhcnNlTWFwcGluZyxcbiAgcmVtYXBEaWFnbm9zdGljLFxuICByZW1hcExvY2F0aW9uLFxuICBzcGFuc0Zvck5vZGUsXG4gIHNwYW5zRm9yU3ltYm9sLFxuICBzdHJpbmdpZnlNYXBwaW5nLFxuICB0b1NvdXJjZU1hcFYzXG59IGZyb20gXCIuL3NyYy9tYXBwaW5nLmpzXCJcblxuLyoqXG4gKiBQYXJzZXMgc291cmNlIGludG8gU2VtYW50aWZvbGQncyBzaGFyZWQgc2VtYW50aWMgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZSByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lIHVzZWQgaW4gZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtSZWFkb25seTxpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXBhYmlsaXR5QXV0aG9yaXR5PiB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhcGFiaWxpdHlBdXRob3JpdHlJbnB1dH0gW2lucHV0LmNhcGFiaWxpdHlBdXRob3JpdHldIC0gRXhwbGljaXQgY29tcGlsZXIgYXV0aG9yaXR5LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICByZXR1cm4gcGFyc2VTb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogUGFyc2VzIGEgY29tcGxldGUgZXhwbGljaXQgbXVsdGktc291cmNlIHByb2plY3QgaW50byBvbmUgcmVzb2x2ZWQgc2VtYW50aWMgcHJvZ3JhbS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFByb2dyYW0gcGFyc2UgcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5lbnRyeU1vZHVsZSAtIFN0YWJsZSBpZGVudGl0eSBvZiB0aGUgc29sZSBlbnRyeSBtb2R1bGUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBpZDogc3RyaW5nLCBsYW5ndWFnZTogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZSwgc291cmNlOiBzdHJpbmd9W119IGlucHV0LnNvdXJjZXMgLSBDb21wbGV0ZSBjYWxsZXItc3VwcGxpZWQgc291cmNlIHNldC5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQ2FwYWJpbGl0eUF1dGhvcml0eT4gfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5DYXBhYmlsaXR5QXV0aG9yaXR5SW5wdXR9IFtpbnB1dC5jYXBhYmlsaXR5QXV0aG9yaXR5XSAtIEV4cGxpY2l0IGNvbXBpbGVyIGF1dGhvcml0eSBzaGFyZWQgYnkgZXZlcnkgcHJvZ3JhbSBtb2R1bGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtfSBTZW1hbnRpYyBwcm9ncmFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKGlucHV0KSB7XG4gIHJldHVybiBwYXJzZVByb2dyYW1Tb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRhcmdldC1sYW5ndWFnZSBzb3VyY2UgZnJvbSBhIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge3N0cmluZ30gR2VuZXJhdGVkIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlKGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByZXVzYWJsZSBvdXRwdXQgYXJ0aWZhY3Qgd2l0aCByaWNoIGFuZCBTb3VyY2UgTWFwIHYzIG1hcHBpbmdzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gR2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IGlucHV0Lm1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuZmlsZW5hbWVdIC0gT3V0cHV0IGZpbGVuYW1lLlxuICogQHBhcmFtIHtcIm5vbmVcIiB8IFwiZXh0ZXJuYWxcIiB8IFwiaW5saW5lXCJ9IFtpbnB1dC5tYXBEaXJlY3RpdmVdIC0gSmF2YVNjcmlwdC1mYW1pbHkgbWFwIGRpcmVjdGl2ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuc291cmNlTWFwRmlsZW5hbWVdIC0gRXh0ZXJuYWwgbWFwIGZpbGVuYW1lLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119IFtpbnB1dC5zb3VyY2VzXSAtIFNvdXJjZXMgZm9yIGNhbGxlci1hdXRob3JlZCBtb2R1bGVzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0fSBHZW5lcmF0ZWQgYXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFydGlmYWN0KGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGRldGVybWluaXN0aWMgbWFwcGVkIGFydGlmYWN0IHNldCBmb3IgYSBjb21wbGV0ZSBzZW1hbnRpYyBwcm9ncmFtLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUHJvZ3JhbSBnZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBSZWdpc3RlcmVkIHByb2dyYW0gdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW19IGlucHV0LnByb2dyYW0gLSBDb21wbGV0ZSByZXNvbHZlZCBwcm9ncmFtLlxuICogQHBhcmFtIHtcInRleHRcIiB8IFwiYXBwbGljYXRpb25cIn0gW2lucHV0LnJvbGVdIC0gRXhwbGljaXQgcm9sZTsgb21pdHRlZCBwcmVzZXJ2ZXMgdGV4dCBnZW5lcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dCB8IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkFuZHJvaWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25JbnB1dH0gW2lucHV0LmNvbmZpZ3VyYXRpb25dIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Bc3NldElucHV0W10gfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25JbnB1dEZpbGVbXX0gW2lucHV0LmFzc2V0c10gLSBFeGFjdCBjYWxsZXIgYXNzZXRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25JbnB1dEZpbGVbXX0gW2lucHV0LnJlc291cmNlc10gLSBFeGFjdCBBbmRyb2lkIGNhbGxlciByZXNvdXJjZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXR9IENvbXBsZXRlIGdlbmVyYXRlZCBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVByb2dyYW1BcnRpZmFjdFNldChpbnB1dCkge1xuICByZXR1cm4gZ2VuZXJhdGVQcm9ncmFtQXJ0aWZhY3RzKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGRldGVybWluaXN0aWMgYXJ0aWZhY3Qgc2V0IGZvciBvbmUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFJlZ2lzdGVyZWQgdGFyZ2V0IGxhbmd1YWdlIG9yIHBsYXRmb3JtIElELlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtcInRleHRcIiB8IFwiYmluYXJ5XCIgfCBcImFwcGxpY2F0aW9uXCJ9IFtpbnB1dC5yb2xlXSAtIFJlcXVlc3RlZCBiYWNrZW5kIGFydGlmYWN0IHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LmZpbGVuYW1lXSAtIFNhZmUgb3V0cHV0IHBhdGggZm9yIGEgdGV4dCB0YXJnZXQuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBtYXAgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW2lucHV0LnNvdXJjZXNdIC0gT3JpZ2luYWwgc291cmNlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9uSW5wdXQgfCBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5BbmRyb2lkQXBwbGljYXRpb25Db25maWd1cmF0aW9uSW5wdXR9IFtpbnB1dC5jb25maWd1cmF0aW9uXSAtIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQXNzZXRJbnB1dFtdIHwgaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQW5kcm9pZEFwcGxpY2F0aW9uSW5wdXRGaWxlW119IFtpbnB1dC5hc3NldHNdIC0gRXhhY3QgY2FsbGVyIGFzc2V0cy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQW5kcm9pZEFwcGxpY2F0aW9uSW5wdXRGaWxlW119IFtpbnB1dC5yZXNvdXJjZXNdIC0gRXhhY3QgQW5kcm9pZCBjYWxsZXIgcmVzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBDb21wbGV0ZSBnZW5lcmF0ZWQgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBcnRpZmFjdFNldChpbnB1dCkge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dCkgIT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJJTlZBTElEX0FSVElGQUNUX1NFVFwiLFxuICAgICAgbGFuZ3VhZ2U6IFwiYXJ0aWZhY3RcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWlyZXMgYSByZXF1ZXN0IG9iamVjdC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3Qge2Fzc2V0cywgY29uZmlndXJhdGlvbiwgZmlsZW5hbWUsIGxhbmd1YWdlLCBtYXBEaXJlY3RpdmUsIG1vZHVsZSwgcmVzb3VyY2VzLCByb2xlID0gXCJ0ZXh0XCIsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSA9IGlucHV0XG5cbiAgaWYgKHR5cGVvZiBsYW5ndWFnZSAhPSBcInN0cmluZ1wiIHx8IGxhbmd1YWdlLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZTogXCJhcnRpZmFjdFwiLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcgbGFuZ3VhZ2Ugb3IgdGFyZ2V0IElELlwiXG4gICAgfSlcbiAgfVxuICBpZiAodHlwZW9mIHJvbGUgIT0gXCJzdHJpbmdcIiB8fCAhYXJ0aWZhY3RCYWNrZW5kUm9sZXMuaGFzKHJvbGUpKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3QgYmFja2VuZCByb2xlIG11c3QgYmUgJ3RleHQnLCAnYmluYXJ5Jywgb3IgJ2FwcGxpY2F0aW9uJy5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgdGFyZ2V0ID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQobGFuZ3VhZ2UpXG4gIHByZWZsaWdodEVmZmVjdENhcGFiaWxpdGllcyhtb2R1bGUsIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyAobGFuZ3VhZ2UpKVxuICBjb25zdCBnZW5lcmljRGVjbGFyYXRpb24gPSBbLi4ubW9kdWxlPy5yZWNvcmRzID8/IFtdLCAuLi5tb2R1bGU/LmZ1bmN0aW9ucyA/PyBbXV1cbiAgICAuZmluZCgoZGVjbGFyYXRpb24pID0+IChkZWNsYXJhdGlvbj8udHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA+IDApXG5cbiAgaWYgKGdlbmVyaWNEZWNsYXJhdGlvbiAmJiAhdGFyZ2V0LmZlYXR1cmVzLnR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3MpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDEyIHR5cGUgcGFyYW1ldGVycyBhbmQgZ2VuZXJpY3NcIiwgZ2VuZXJpY0RlY2xhcmF0aW9uLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZT8ucmVjb3JkcykgJiYgbW9kdWxlLnJlY29yZHMubGVuZ3RoID4gMCAmJiAhdGFyZ2V0LmZlYXR1cmVzLmNsb3NlZFJlY29yZHMpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDA5IGNsb3NlZCByZWNvcmRzXCIsIG1vZHVsZS5yZWNvcmRzWzBdLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZT8uY2xhc3NlcykgJiYgbW9kdWxlLmNsYXNzZXMubGVuZ3RoID4gMCAmJiAhdGFyZ2V0LmZlYXR1cmVzLnJlZmVyZW5jZUNsYXNzZXMpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBcIlRhc2sgMDMzIHJlZmVyZW5jZSBjbGFzc2VzXCIsIG1vZHVsZS5jbGFzc2VzWzBdLmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAocm9sZSA9PSBcInRleHRcIikge1xuICAgIGlmICh0YXJnZXQuYXJ0aWZhY3RNdWx0aXBsaWNpdHkgPT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICBjb25zdCBiYWNrZW5kID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCBcInRleHRCYWNrZW5kXCIsIG1vZHVsZT8ubG9jYXRpb24pXG5cbiAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnRpZmFjdFNldChiYWNrZW5kKHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCBzb3VyY2VNYXBGaWxlbmFtZSwgc291cmNlc30pKVxuICAgIH1cbiAgICBjb25zdCBhcnRpZmFjdCA9IGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2Uoe1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBsYW5ndWFnZTogLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSAqLyAobGFuZ3VhZ2UpLFxuICAgICAgbWFwRGlyZWN0aXZlLFxuICAgICAgbW9kdWxlLFxuICAgICAgc291cmNlTWFwRmlsZW5hbWUsXG4gICAgICBzb3VyY2VzXG4gICAgfSlcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXX0gKi9cbiAgICBjb25zdCBhcnRpZmFjdHMgPSBbe1xuICAgICAgY29udGVudDogYXJ0aWZhY3QuY29kZSxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0YXJnZXQubWVkaWFUeXBlKSxcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IGFydGlmYWN0LmZpbGVuYW1lLFxuICAgICAgcHJvdmVuYW5jZToge1xuICAgICAgICBraW5kOiBcInRleHRcIixcbiAgICAgICAgbWFwcGluZzogYXJ0aWZhY3QubWFwcGluZyxcbiAgICAgICAgc291cmNlTWFwOiBhcnRpZmFjdC5zb3VyY2VNYXAsXG4gICAgICAgIHNvdXJjZU1hcEZpbGVuYW1lOiBhcnRpZmFjdC5zb3VyY2VNYXBGaWxlbmFtZVxuICAgICAgfSxcbiAgICAgIHJvbGU6IFwiZW50cnlcIlxuICAgIH1dXG5cbiAgICBpZiAobWFwRGlyZWN0aXZlID09IFwiZXh0ZXJuYWxcIikge1xuICAgICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgICBjb250ZW50OiBgJHtKU09OLnN0cmluZ2lmeShhcnRpZmFjdC5zb3VyY2VNYXApfVxcbmAsXG4gICAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICBwYXRoOiBhcnRpZmFjdC5zb3VyY2VNYXBGaWxlbmFtZSxcbiAgICAgICAgcHJvdmVuYW5jZToge1xuICAgICAgICAgIGtpbmQ6IFwic3ludGhldGljXCIsXG4gICAgICAgICAgcmVhc29uOiBcIlNlcmlhbGl6ZWQgU291cmNlIE1hcCB2MyBwcm9qZWN0aW9uIGZvciB0aGUgZ2VuZXJhdGVkIGVudHJ5IGFydGlmYWN0LlwiLFxuICAgICAgICAgIHJlbGF0ZWRPcmlnaW5zOiBbXVxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBcIm1hcHBpbmdcIlxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RydWN0QXJ0aWZhY3RTZXQoe1xuICAgICAgYXJ0aWZhY3RzLFxuICAgICAgLi4uKGxhbmd1YWdlID09IFwia290bGluXCIgPyB7bWV0YWRhdGE6IGtvdGxpbkFydGlmYWN0TWV0YWRhdGF9IDoge30pLFxuICAgICAgdGFyZ2V0OiBsYW5ndWFnZVxuICAgIH0pXG4gIH1cblxuICBjb25zdCByZWdpc3RyeVJvbGUgPSByb2xlID09IFwiYmluYXJ5XCIgPyBcImJpbmFyeUJhY2tlbmRcIiA6IFwiYXBwbGljYXRpb25CYWNrZW5kXCJcbiAgY29uc3QgYmFja2VuZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVzb2x2ZShsYW5ndWFnZSwgcmVnaXN0cnlSb2xlLCBtb2R1bGU/LmxvY2F0aW9uKVxuXG4gIHJldHVybiBjb25zdHJ1Y3RBcnRpZmFjdFNldChiYWNrZW5kKGxhbmd1YWdlID09IFwiYW5kcm9pZFwiID8gaW5wdXQgOlxuICAgIHthc3NldHMsIGNvbmZpZ3VyYXRpb24sIGZpbGVuYW1lLCBsYW5ndWFnZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHJlc291cmNlcywgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9KSlcbn1cbiJdfQ==