semantifold 0.3.0 → 0.4.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 (297) hide show
  1. package/README.md +58 -15
  2. package/build/index.d.ts +48 -2
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +57 -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/c-validation.d.ts.map +1 -1
  11. package/build/src/backends/c-validation.js +7 -3
  12. package/build/src/backends/cpp-validation.d.ts.map +1 -1
  13. package/build/src/backends/cpp-validation.js +7 -3
  14. package/build/src/backends/csharp.js +7 -1
  15. package/build/src/backends/dart-runtime.d.ts +2 -0
  16. package/build/src/backends/dart-runtime.d.ts.map +1 -0
  17. package/build/src/backends/dart-runtime.js +41 -0
  18. package/build/src/backends/dart.d.ts +20 -0
  19. package/build/src/backends/dart.d.ts.map +1 -0
  20. package/build/src/backends/dart.js +321 -0
  21. package/build/src/backends/effects.d.ts +60 -0
  22. package/build/src/backends/effects.d.ts.map +1 -0
  23. package/build/src/backends/effects.js +746 -0
  24. package/build/src/backends/go.js +18 -4
  25. package/build/src/backends/identifiers.d.ts +36 -4
  26. package/build/src/backends/identifiers.d.ts.map +1 -1
  27. package/build/src/backends/identifiers.js +154 -10
  28. package/build/src/backends/index.d.ts.map +1 -1
  29. package/build/src/backends/index.js +27 -4
  30. package/build/src/backends/ios.d.ts +68 -0
  31. package/build/src/backends/ios.d.ts.map +1 -0
  32. package/build/src/backends/ios.js +1503 -0
  33. package/build/src/backends/java.d.ts.map +1 -1
  34. package/build/src/backends/java.js +429 -36
  35. package/build/src/backends/javascript.d.ts +6 -0
  36. package/build/src/backends/javascript.d.ts.map +1 -1
  37. package/build/src/backends/javascript.js +380 -24
  38. package/build/src/backends/kotlin-runtime.d.ts +3 -0
  39. package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
  40. package/build/src/backends/kotlin-runtime.js +29 -0
  41. package/build/src/backends/kotlin.d.ts +23 -0
  42. package/build/src/backends/kotlin.d.ts.map +1 -0
  43. package/build/src/backends/kotlin.js +136 -0
  44. package/build/src/backends/native-validation.d.ts +2 -2
  45. package/build/src/backends/native-validation.d.ts.map +1 -1
  46. package/build/src/backends/native-validation.js +2 -2
  47. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  48. package/build/src/backends/ordered-expressions.js +39 -7
  49. package/build/src/backends/php-stdlib-support.d.ts +19 -0
  50. package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
  51. package/build/src/backends/php-stdlib-support.js +227 -0
  52. package/build/src/backends/php.d.ts.map +1 -1
  53. package/build/src/backends/php.js +448 -33
  54. package/build/src/backends/program.d.ts +81 -0
  55. package/build/src/backends/program.d.ts.map +1 -0
  56. package/build/src/backends/program.js +1308 -0
  57. package/build/src/backends/python.js +7 -1
  58. package/build/src/backends/ruby.d.ts.map +1 -1
  59. package/build/src/backends/ruby.js +310 -24
  60. package/build/src/backends/rust-runtime.d.ts +7 -0
  61. package/build/src/backends/rust-runtime.d.ts.map +1 -0
  62. package/build/src/backends/rust-runtime.js +32 -0
  63. package/build/src/backends/rust-validation.d.ts +9 -0
  64. package/build/src/backends/rust-validation.d.ts.map +1 -0
  65. package/build/src/backends/rust-validation.js +78 -0
  66. package/build/src/backends/rust.d.ts +24 -0
  67. package/build/src/backends/rust.d.ts.map +1 -0
  68. package/build/src/backends/rust.js +344 -0
  69. package/build/src/backends/scalars.d.ts +14 -6
  70. package/build/src/backends/scalars.d.ts.map +1 -1
  71. package/build/src/backends/scalars.js +167 -17
  72. package/build/src/backends/shared.d.ts +23 -4
  73. package/build/src/backends/shared.d.ts.map +1 -1
  74. package/build/src/backends/shared.js +2158 -62
  75. package/build/src/backends/stdlib-support.d.ts +14 -0
  76. package/build/src/backends/stdlib-support.d.ts.map +1 -0
  77. package/build/src/backends/stdlib-support.js +237 -0
  78. package/build/src/backends/swift-runtime.d.ts +3 -0
  79. package/build/src/backends/swift-runtime.d.ts.map +1 -0
  80. package/build/src/backends/swift-runtime.js +14 -0
  81. package/build/src/backends/swift.d.ts +8 -0
  82. package/build/src/backends/swift.d.ts.map +1 -0
  83. package/build/src/backends/swift.js +127 -0
  84. package/build/src/backends/typescript.d.ts.map +1 -1
  85. package/build/src/backends/typescript.js +344 -24
  86. package/build/src/backends/wasm.d.ts +43 -0
  87. package/build/src/backends/wasm.d.ts.map +1 -0
  88. package/build/src/backends/wasm.js +2164 -0
  89. package/build/src/backends/writer.d.ts +235 -4
  90. package/build/src/backends/writer.d.ts.map +1 -1
  91. package/build/src/backends/writer.js +468 -3
  92. package/build/src/diagnostic.d.ts +4 -3
  93. package/build/src/diagnostic.d.ts.map +1 -1
  94. package/build/src/diagnostic.js +5 -3
  95. package/build/src/frontends/c.d.ts.map +1 -1
  96. package/build/src/frontends/c.js +5 -3
  97. package/build/src/frontends/cpp.d.ts.map +1 -1
  98. package/build/src/frontends/cpp.js +5 -3
  99. package/build/src/frontends/csharp.d.ts.map +1 -1
  100. package/build/src/frontends/csharp.js +7 -3
  101. package/build/src/frontends/dart.d.ts +10 -0
  102. package/build/src/frontends/dart.d.ts.map +1 -0
  103. package/build/src/frontends/dart.js +913 -0
  104. package/build/src/frontends/index.d.ts +3 -1
  105. package/build/src/frontends/index.d.ts.map +1 -1
  106. package/build/src/frontends/index.js +15 -5
  107. package/build/src/frontends/java.d.ts +110 -1
  108. package/build/src/frontends/java.d.ts.map +1 -1
  109. package/build/src/frontends/java.js +1725 -70
  110. package/build/src/frontends/javascript-typescript.d.ts +69 -1
  111. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  112. package/build/src/frontends/javascript-typescript.js +1825 -93
  113. package/build/src/frontends/kotlin.d.ts +10 -0
  114. package/build/src/frontends/kotlin.d.ts.map +1 -0
  115. package/build/src/frontends/kotlin.js +685 -0
  116. package/build/src/frontends/php.d.ts +118 -1
  117. package/build/src/frontends/php.d.ts.map +1 -1
  118. package/build/src/frontends/php.js +1583 -76
  119. package/build/src/frontends/program.d.ts +74 -0
  120. package/build/src/frontends/program.d.ts.map +1 -0
  121. package/build/src/frontends/program.js +989 -0
  122. package/build/src/frontends/ruby.d.ts +68 -1
  123. package/build/src/frontends/ruby.d.ts.map +1 -1
  124. package/build/src/frontends/ruby.js +1446 -101
  125. package/build/src/frontends/rust-parser.d.ts +11 -0
  126. package/build/src/frontends/rust-parser.d.ts.map +1 -0
  127. package/build/src/frontends/rust-parser.js +15 -0
  128. package/build/src/frontends/rust.d.ts +14 -0
  129. package/build/src/frontends/rust.d.ts.map +1 -0
  130. package/build/src/frontends/rust.js +715 -0
  131. package/build/src/frontends/scalars.d.ts +10 -0
  132. package/build/src/frontends/scalars.d.ts.map +1 -1
  133. package/build/src/frontends/scalars.js +28 -2
  134. package/build/src/frontends/swift.d.ts +10 -0
  135. package/build/src/frontends/swift.d.ts.map +1 -0
  136. package/build/src/frontends/swift.js +860 -0
  137. package/build/src/frontends/types.d.ts +186 -0
  138. package/build/src/frontends/types.d.ts.map +1 -0
  139. package/build/src/frontends/types.js +634 -0
  140. package/build/src/language-registry.d.ts +46 -4
  141. package/build/src/language-registry.d.ts.map +1 -1
  142. package/build/src/language-registry.js +167 -13
  143. package/build/src/mapping.d.ts +2 -2
  144. package/build/src/mapping.d.ts.map +1 -1
  145. package/build/src/mapping.js +31 -10
  146. package/build/src/semantic/capabilities.d.ts +66 -0
  147. package/build/src/semantic/capabilities.d.ts.map +1 -0
  148. package/build/src/semantic/capabilities.js +649 -0
  149. package/build/src/semantic/effects.d.ts +26 -0
  150. package/build/src/semantic/effects.d.ts.map +1 -0
  151. package/build/src/semantic/effects.js +764 -0
  152. package/build/src/semantic/generics.d.ts +23 -0
  153. package/build/src/semantic/generics.d.ts.map +1 -0
  154. package/build/src/semantic/generics.js +61 -0
  155. package/build/src/semantic/lifetime.d.ts +37 -0
  156. package/build/src/semantic/lifetime.d.ts.map +1 -0
  157. package/build/src/semantic/lifetime.js +527 -0
  158. package/build/src/semantic/provenance.d.ts +9 -2
  159. package/build/src/semantic/provenance.d.ts.map +1 -1
  160. package/build/src/semantic/provenance.js +462 -20
  161. package/build/src/semantic/scalars.d.ts +11 -0
  162. package/build/src/semantic/scalars.d.ts.map +1 -1
  163. package/build/src/semantic/scalars.js +16 -1
  164. package/build/src/semantic/stdlib.d.ts +254 -0
  165. package/build/src/semantic/stdlib.d.ts.map +1 -0
  166. package/build/src/semantic/stdlib.js +880 -0
  167. package/build/src/semantic/types.d.ts +2952 -202
  168. package/build/src/semantic/types.d.ts.map +1 -1
  169. package/build/src/semantic/types.js +688 -15
  170. package/build/src/semantic/validate.d.ts +85 -5
  171. package/build/src/semantic/validate.d.ts.map +1 -1
  172. package/build/src/semantic/validate.js +2576 -98
  173. package/build/src/stdlib-facades.d.ts +304 -0
  174. package/build/src/stdlib-facades.d.ts.map +1 -0
  175. package/build/src/stdlib-facades.js +1167 -0
  176. package/build/src/stdlib-negotiation.d.ts +69 -0
  177. package/build/src/stdlib-negotiation.d.ts.map +1 -0
  178. package/build/src/stdlib-negotiation.js +403 -0
  179. package/build/src/stdlib-providers.d.ts +72 -0
  180. package/build/src/stdlib-providers.d.ts.map +1 -0
  181. package/build/src/stdlib-providers.js +339 -0
  182. package/build/src/toolchains.d.ts +55 -1
  183. package/build/src/toolchains.d.ts.map +1 -1
  184. package/build/src/toolchains.js +15 -4
  185. package/docs/architecture.md +45 -13
  186. package/docs/dart.md +60 -0
  187. package/docs/goals.md +3 -3
  188. package/docs/ios.md +121 -0
  189. package/docs/kotlin.md +42 -0
  190. package/docs/language-support.md +231 -26
  191. package/docs/multi-file-modules.md +52 -0
  192. package/docs/parser-qualification.md +121 -8
  193. package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
  194. package/docs/rust.md +88 -0
  195. package/docs/source-maps.md +15 -7
  196. package/docs/standard-library-portability.md +39 -8
  197. package/docs/swift.md +44 -0
  198. package/docs/testing.md +366 -4
  199. package/docs/webassembly.md +52 -0
  200. package/index.js +63 -8
  201. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
  202. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
  203. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
  204. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
  205. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
  231. package/package.json +5 -2
  232. package/src/artifact-path.js +47 -2
  233. package/src/artifacts.js +67 -0
  234. package/src/backends/c-validation.js +6 -1
  235. package/src/backends/cpp-validation.js +6 -1
  236. package/src/backends/csharp.js +3 -0
  237. package/src/backends/dart-runtime.js +41 -0
  238. package/src/backends/dart.js +326 -0
  239. package/src/backends/effects.js +705 -0
  240. package/src/backends/go.js +14 -2
  241. package/src/backends/identifiers.js +160 -9
  242. package/src/backends/index.js +27 -2
  243. package/src/backends/ios.js +1612 -0
  244. package/src/backends/java.js +454 -36
  245. package/src/backends/javascript.js +389 -23
  246. package/src/backends/kotlin-runtime.js +29 -0
  247. package/src/backends/kotlin.js +141 -0
  248. package/src/backends/native-validation.js +1 -1
  249. package/src/backends/ordered-expressions.js +40 -6
  250. package/src/backends/php-stdlib-support.js +239 -0
  251. package/src/backends/php.js +469 -32
  252. package/src/backends/program.js +1407 -0
  253. package/src/backends/python.js +3 -0
  254. package/src/backends/ruby.js +326 -23
  255. package/src/backends/rust-runtime.js +34 -0
  256. package/src/backends/rust-validation.js +75 -0
  257. package/src/backends/rust.js +335 -0
  258. package/src/backends/scalars.js +141 -16
  259. package/src/backends/shared.js +2304 -124
  260. package/src/backends/stdlib-support.js +234 -0
  261. package/src/backends/swift-runtime.js +14 -0
  262. package/src/backends/swift.js +132 -0
  263. package/src/backends/typescript.js +349 -23
  264. package/src/backends/wasm.js +2208 -0
  265. package/src/backends/writer.js +520 -2
  266. package/src/diagnostic.js +4 -2
  267. package/src/frontends/c.js +4 -2
  268. package/src/frontends/cpp.js +4 -2
  269. package/src/frontends/csharp.js +4 -2
  270. package/src/frontends/dart.js +963 -0
  271. package/src/frontends/index.js +14 -4
  272. package/src/frontends/java.js +1977 -69
  273. package/src/frontends/javascript-typescript.js +2046 -102
  274. package/src/frontends/kotlin.js +713 -0
  275. package/src/frontends/php.js +1725 -79
  276. package/src/frontends/program.js +1062 -0
  277. package/src/frontends/ruby.js +1624 -98
  278. package/src/frontends/rust-parser.js +18 -0
  279. package/src/frontends/rust.js +714 -0
  280. package/src/frontends/scalars.js +31 -1
  281. package/src/frontends/swift.js +893 -0
  282. package/src/frontends/types.js +750 -0
  283. package/src/language-registry.js +172 -12
  284. package/src/mapping.js +33 -9
  285. package/src/semantic/capabilities.js +671 -0
  286. package/src/semantic/effects.js +737 -0
  287. package/src/semantic/generics.js +58 -0
  288. package/src/semantic/lifetime.js +517 -0
  289. package/src/semantic/provenance.js +412 -19
  290. package/src/semantic/scalars.js +17 -0
  291. package/src/semantic/stdlib.js +921 -0
  292. package/src/semantic/types.js +765 -14
  293. package/src/semantic/validate.js +2934 -209
  294. package/src/stdlib-facades.js +1211 -0
  295. package/src/stdlib-negotiation.js +446 -0
  296. package/src/stdlib-providers.js +377 -0
  297. package/src/toolchains.js +16 -3
@@ -619,10 +619,14 @@ function validateCheckedArithmetic(module) {
619
619
  const visitBlock = (block) => block.statements.forEach((statement) => {
620
620
  if (statement.kind == "LocalDeclaration")
621
621
  visitExpression(statement.initializer);
622
- else if (statement.kind == "AssignmentStatement" || statement.kind == "PrintStatement" || statement.kind == "ReturnStatement") {
622
+ else if (statement.kind == "AssignmentStatement" || statement.kind == "ExpressionStatement" || statement.kind == "PrintStatement") {
623
623
  visitExpression(statement.expression);
624
624
  }
625
- else {
625
+ else if (statement.kind == "ReturnStatement") {
626
+ if (statement.expression)
627
+ visitExpression(statement.expression);
628
+ }
629
+ else if (statement.kind == "IfStatement") {
626
630
  visitExpression(statement.condition);
627
631
  visitBlock(statement.consequent);
628
632
  if (statement.alternate)
@@ -705,4 +709,4 @@ export function parseCSharp({ filename, source }) {
705
709
  validateCheckedArithmetic(module);
706
710
  return module;
707
711
  }
708
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NoYXJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9jc2hhcnAuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLGNBQWMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN2RSxPQUFPLEVBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQ3BHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFFN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUUzQixNQUFNLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxDQUFDLEVBQUMsc0JBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRTNHLE1BQU0sZUFBZSxHQUFHLDJCQUEyQixDQUFBO0FBQ25ELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUN2QyxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3hDLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxN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Q0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDeEcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXRELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTdCLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxTQUFTLENBQUE7WUFDcEIsU0FBUTtRQUNWLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUU1QixJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDL0YsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDN0IsU0FBUTtRQUNWLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxD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QUFJLEdBQUcsRUFBRSxFQUFDLENBQUE7SUFDM0QsTUFBTSxNQUFNLEdBQUc7UUFDYixVQUFVLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUNoRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDckMsUUFBUTtLQUNULENBQUE7SUFDRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLGVBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUU5SCxJQUFJLFlBQVk7UUFBRSxPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRSw2QkFBNkIsRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ2pJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUN0Qyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFBhcnNlciBmcm9tIFwidHJlZS1zaXR0ZXJcIlxuaW1wb3J0IENTaGFycExhbmd1YWdlIGZyb20gXCJ0cmVlLXNpdHRlci1jLXNoYXJwL2JpbmRpbmdzL25vZGUvaW5kZXguanNcIlxuaW1wb3J0IHttaXNzaW5nVHlwZSwgcGFyc2VGYWlsdXJlLCBTZW1hbnRpZm9sZERpYWdub3N0aWMsIHVuc3VwcG9ydGVkU3ludGF4fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xvY2F0aW9uRnJvbU9mZnNldHMsIG1vZHVsZUxvY2F0aW9uLCB1dGY4Qnl0ZU9mZnNldFRvVXRmMTZPZmZzZXR9IGZyb20gXCIuLi9zZW1hbnRpYy9sb2NhdGlvbi5qc1wiXG5pbXBvcnQge3dpdGhBZGFwdGVkT3BlcmF0aW9ufSBmcm9tIFwiLi4vc2VtYW50aWMvb3BlcmF0b3JzLmpzXCJcbmltcG9ydCB7d2l0aFBhcnNlclJhbmdlc30gZnJvbSBcIi4uL3NlbWFudGljL3Byb3ZlbmFuY2UuanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy92YWxpZGF0ZS5qc1wiXG5pbXBvcnQge3NvdXJjZVNjYWxhclR5cGV9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuXG5jb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKClcblxucGFyc2VyLnNldExhbmd1YWdlKC8qKiBAdHlwZSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuTGFuZ3VhZ2V9ICovICgvKiogQHR5cGUge3Vua25vd259ICovIChDU2hhcnBMYW5ndWFnZSkpKVxuXG5jb25zdCBpbW11dGFibGVNYXJrZXIgPSBcIi8vIEBzZW1hbnRpZm9sZC1pbW11dGFibGVcIlxuY29uc3QgY2hlY2tlZEFyaXRobWV0aWMgPSBuZXcgV2Vha1NldCgpXG5jb25zdCBjc2hhcnBSZXNlcnZlZElkZW50aWZpZXJzID0gbmV3IFNldChbXG4gIFwiYWJzdHJhY3RcIiwgXCJhZGRcIiwgXCJhbGlhc1wiLCBcImFsbG93c1wiLCBcImFuZFwiLCBcImFzXCIsIFwiYXNjZW5kaW5nXCIsIFwiYXN5bmNcIiwgXCJhd2FpdFwiLCBcImJhc2VcIiwgXCJib29sXCIsIFwiYnJlYWtcIixcbiAgXCJieVwiLCBcImJ5dGVcIiwgXCJjYXNlXCIsIFwiY2F0Y2hcIiwgXCJjaGFyXCIsIFwiY2hlY2tlZFwiLCBcImNsYXNzXCIsIFwiY29uc3RcIiwgXCJjb250aW51ZVwiLCBcImRlY2ltYWxcIiwgXCJkZWZhdWx0XCIsXG4gIFwiZGVsZWdhdGVcIiwgXCJkZXNjZW5kaW5nXCIsIFwiZG9cIiwgXCJkb3VibGVcIiwgXCJkeW5hbWljXCIsIFwiZWxzZVwiLCBcImVudW1cIiwgXCJlcXVhbHNcIiwgXCJldmVudFwiLCBcImV4cGxpY2l0XCIsIFwiZXh0ZW5zaW9uXCIsIFwiZXh0ZXJuXCIsXG4gIFwiZmFsc2VcIiwgXCJmaWVsZFwiLCBcImZpbGVcIiwgXCJmaW5hbGx5XCIsIFwiZml4ZWRcIiwgXCJmbG9hdFwiLCBcImZvclwiLCBcImZvcmVhY2hcIiwgXCJmcm9tXCIsIFwiZ2V0XCIsIFwiZ2xvYmFsXCIsIFwiZ290b1wiLFxuICBcImdyb3VwXCIsIFwiaWZcIiwgXCJpbXBsaWNpdFwiLCBcImluXCIsIFwiaW5pdFwiLCBcImludFwiLCBcImludGVyZmFjZVwiLCBcImludGVybmFsXCIsIFwiaW50b1wiLCBcImlzXCIsIFwiam9pblwiLCBcImxldFwiLCBcImxvY2tcIixcbiAgXCJsb25nXCIsIFwibWFuYWdlZFwiLCBcIm5hbWVvZlwiLCBcIm5hbWVzcGFjZVwiLCBcIm5ld1wiLCBcIm5pbnRcIiwgXCJub3RcIiwgXCJub3RudWxsXCIsIFwibnVsbFwiLCBcIm51aW50XCIsIFwib2JqZWN0XCIsIFwib25cIixcbiAgXCJvcGVyYXRvclwiLCBcIm9yXCIsIFwib3JkZXJieVwiLCBcIm91dFwiLCBcIm92ZXJyaWRlXCIsIFwicGFyYW1zXCIsIFwicGFydGlhbFwiLCBcInByaXZhdGVcIiwgXCJwcm90ZWN0ZWRcIiwgXCJwdWJsaWNcIiwgXCJyZWFkb25seVwiLFxuICBcInJlY29yZFwiLCBcInJlZlwiLCBcInJlbW92ZVwiLCBcInJlcXVpcmVkXCIsIFwicmV0dXJuXCIsIFwic2J5dGVcIiwgXCJzY29wZWRcIiwgXCJzZWFsZWRcIiwgXCJzZWxlY3RcIiwgXCJzZXRcIiwgXCJzaG9ydFwiLCBcInNpemVvZlwiLFxuICBcInN0YWNrYWxsb2NcIiwgXCJzdGF0aWNcIiwgXCJzdHJpbmdcIiwgXCJzdHJ1Y3RcIiwgXCJzd2l0Y2hcIiwgXCJ0aGlzXCIsIFwidGhyb3dcIiwgXCJ0cnVlXCIsIFwidHJ5XCIsIFwidHlwZW9mXCIsIFwidWludFwiLCBcInVsb25nXCIsXG4gIFwidW5jaGVja2VkXCIsIFwidW5tYW5hZ2VkXCIsIFwidW5zYWZlXCIsIFwidXNob3J0XCIsIFwidXNpbmdcIiwgXCJ2YWx1ZVwiLCBcInZhclwiLCBcInZpcnR1YWxcIiwgXCJ2b2lkXCIsIFwidm9sYXRpbGVcIiwgXCJ3aGVuXCIsXG4gIFwid2hlcmVcIiwgXCJ3aGlsZVwiLCBcIndpdGhcIiwgXCJ5aWVsZFwiXG5dKVxuY29uc3QgYmluYXJ5T3BlcmF0aW9ucyA9IG5ldyBNYXAoW1xuICBbXCIrXCIsIFwiQWRkXCJdLCBbXCItXCIsIFwiU3VidHJhY3RcIl0sIFtcIipcIiwgXCJNdWx0aXBseVwiXSwgW1wiPT1cIiwgXCJFcXVhbFwiXSwgW1wiIT1cIiwgXCJOb3RFcXVhbFwiXSxcbiAgW1wiPFwiLCBcIkxlc3NUaGFuXCJdLCBbXCI8PVwiLCBcIkxlc3NUaGFuT3JFcXVhbFwiXSwgW1wiPlwiLCBcIkdyZWF0ZXJUaGFuXCJdLCBbXCI+PVwiLCBcIkdyZWF0ZXJUaGFuT3JFcXVhbFwiXSxcbiAgW1wiJiZcIiwgXCJBbmRcIl0sIFtcInx8XCIsIFwiT3JcIl1cbl0pXG5cbi8qKiBAdHlwZWRlZiB7e2NvbW1lbnRzOiBpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlW10sIHVzZWRJbW11dGFibGVNYXJrZXJzOiBTZXQ8aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZT59fSBDU2hhcnBDb250ZXh0ICovXG5cbi8qKlxuICogVmVyaWZpZXMgb25lIFRyZWUtc2l0dGVyIGJpbmRpbmcgaW5kZXggdGhyb3VnaCB0aGUgc2hhcmVkIGJ5dGUgY29udmVydGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gQmluZGluZy1yZXBvcnRlZCBVVEYtMTYgaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWZXJpZmllZCBVVEYtMTYgb2Zmc2V0LlxuICovXG5mdW5jdGlvbiBiaW5kaW5nSW5kZXhUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgaW5kZXgpIHtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPiBzb3VyY2UubGVuZ3RoIHx8XG4gICAgaW5kZXggPiAwICYmIGluZGV4IDwgc291cmNlLmxlbmd0aCAmJiAvW1xcdUQ4MDAtXFx1REJGRl0vdS50ZXN0KHNvdXJjZVtpbmRleCAtIDFdKSAmJiAvW1xcdURDMDAtXFx1REZGRl0vdS50ZXN0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgVHJlZS1zaXR0ZXIgc291cmNlIGluZGV4OiAke2luZGV4fWApXG4gIH1cbiAgcmV0dXJuIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldChzb3VyY2UsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzb3VyY2Uuc2xpY2UoMCwgaW5kZXgpKS5sZW5ndGgpXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHVucGFpcmVkIFVURi0xNiBzdXJyb2dhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBJbnZhbGlkIG9mZnNldCwgb3IgLTEuXG4gKi9cbmZ1bmN0aW9uIGZpcnN0TG9uZVN1cnJvZ2F0ZU9mZnNldChzb3VyY2UpIHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCB1bml0ID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpXG5cbiAgICBpZiAodW5pdCA+PSAweEQ4MDAgJiYgdW5pdCA8PSAweERCRkYpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpXG5cbiAgICAgIGlmIChuZXh0ID49IDB4REMwMCAmJiBuZXh0IDw9IDB4REZGRikgaW5kZXggKz0gMVxuICAgICAgZWxzZSByZXR1cm4gaW5kZXhcbiAgICB9IGVsc2UgaWYgKHVuaXQgPj0gMHhEQzAwICYmIHVuaXQgPD0gMHhERkZGKSByZXR1cm4gaW5kZXhcbiAgfVxuICByZXR1cm4gLTFcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgYmluZGluZyByYW5nZSB0byBhIHNlbWFudGljIHNvdXJjZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcnNlciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBFeGFjdCBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgYmluZGluZ0luZGV4VG9VdGYxNk9mZnNldChzb3VyY2UsIG5vZGUuc3RhcnRJbmRleCksXG4gICAgYmluZGluZ0luZGV4VG9VdGYxNk9mZnNldChzb3VyY2UsIG5vZGUuZW5kSW5kZXgpKVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIG9uZSBuYW1lZCBncmFtbWFyIGZpZWxkLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gRmllbGQgb3duZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgLSBHcmFtbWFyIGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gUmVxdWlyZWQgY2hpbGQuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkRmllbGQobm9kZSwgZmllbGQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKGZpZWxkKVxuXG4gIGlmICghY2hpbGQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBgJHtub2RlLnR5cGV9IHdpdGhvdXQgJHtmaWVsZH1gLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIHJldHVybiBjaGlsZFxufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBldmVyeSBwYXJzZXIgY2hpbGQgYW5kIHJlamVjdHMgZXhwbGljaXQgb3IgcHJvcGFnYXRlZCByZWNvdmVyeS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEN1cnJlbnQgcGFyc2VyIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQYXJzZXJUcmVlKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgaWYgKG5vZGUuaGFzRXJyb3IgfHwgbm9kZS5pc0Vycm9yIHx8IG5vZGUuaXNNaXNzaW5nKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIlBBUlNFX0VSUk9SXCIsXG4gICAgICBsYW5ndWFnZTogXCJjc2hhcnBcIixcbiAgICAgIGxvY2F0aW9uOiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgICBtZXNzYWdlOiBgVHJlZS1zaXR0ZXIgZXhwb3NlZCByZWNvdmVyeSBhdCAnJHtub2RlLnR5cGV9Jy5gXG4gICAgfSlcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZS5jaGlsZENvdW50OyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkKGluZGV4KVxuXG4gICAgaWYgKCFjaGlsZCkgdGhyb3cgbmV3IEVycm9yKGBUcmVlLXNpdHRlciBvbWl0dGVkIGNoaWxkICR7aW5kZXh9IG9mICR7bm9kZS50eXBlfS5gKVxuICAgIHZhbGlkYXRlUGFyc2VyVHJlZShjaGlsZCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdHMgbmFtZWQgc2VtYW50aWMgY2hpbGRyZW4gd2hpbGUgcmV0YWluaW5nIGNvbW1lbnRzIGluIHRoZSBwYXJzZXIgdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIFBhcmVudCBwYXJzZXIgbm9kZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlW119IE5vbi1jb21tZW50IG5hbWVkIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubmFtZWRDaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlICE9IFwiY29tbWVudFwiKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgaWRlbnRpZmllciBhZ2FpbnN0IHRoZSBleGFjdCBDIyBzb3VyY2UgcHJvZmlsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIElkZW50aWZpZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gRGlhZ25vc3RpYyByb2xlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge3N0cmluZ30gQWNjZXB0ZWQgaWRlbnRpZmllci5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpZmllcihub2RlLCByb2xlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IG5hbWUgPSBub2RlLnRleHRcblxuICBpZiAobm9kZS50eXBlICE9IFwiaWRlbnRpZmllclwiIHx8ICEvXltBLVphLXpfXVtBLVphLXowLTlfXSokL3UudGVzdChuYW1lKSB8fCBjc2hhcnBSZXNlcnZlZElkZW50aWZpZXJzLmhhcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBgJHtyb2xlfSBpZGVudGlmaWVyICcke25hbWV9J2AsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gbmFtZVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBzdXBwb3J0ZWQgc2NhbGFyIHR5cGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGUgfCBudWxsfSBub2RlIC0gVHlwZSBub2RlLCBpZiBwcmVzZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBUeXBlZCBzdWJqZWN0IGZvciBkaWFnbm9zdGljcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBPd25pbmcgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd1Zhcl0gLSBXaGV0aGVyIGluZmVycmVkIGB2YXJgIHByb2R1Y2VzIE1JU1NJTkdfVFlQRS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UeXBlUmVmZXJlbmNlfSBTZW1hbnRpYyBzY2FsYXIgdHlwZS5cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGUobm9kZSwgc3ViamVjdCwgb3duZXJMb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgYWxsb3dWYXIgPSBmYWxzZSkge1xuICBpZiAoIW5vZGUpIHJldHVybiBtaXNzaW5nVHlwZShcImNzaGFycFwiLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uKVxuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChhbGxvd1ZhciAmJiBub2RlLnRleHQgPT0gXCJ2YXJcIikgcmV0dXJuIG1pc3NpbmdUeXBlKFwiY3NoYXJwXCIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24pXG4gIGNvbnN0IHR5cGUgPSBzb3VyY2VTY2FsYXJUeXBlKFwiY3NoYXJwXCIsIG5vZGUudGV4dCwgbG9jYXRpb24pXG5cbiAgaWYgKCF0eXBlIHx8ICFbXCJwcmVkZWZpbmVkX3R5cGVcIiwgXCJxdWFsaWZpZWRfbmFtZVwiXS5pbmNsdWRlcyhub2RlLnR5cGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIGB1bnN1cHBvcnRlZCBzY2FsYXIgdHlwZSAnJHtub2RlLnRleHR9J2AsIGxvY2F0aW9uKVxuICB9XG4gIHJldHVybiB0eXBlXG59XG5cbi8qKlxuICogRmluZHMgZXhhY3RseSBvbmUgYWNjZXB0ZWQgb3BlcmF0b3IgdG9rZW4gb3duZWQgYnkgYSBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIE9wZXJhdGlvbiBub2RlLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gc3BlbGxpbmdzIC0gQWNjZXB0ZWQgb3BlcmF0b3Igc3BlbGxpbmdzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IE9wZXJhdG9yIHRva2VuLlxuICovXG5mdW5jdGlvbiBvcGVyYXRvclRva2VuKG5vZGUsIHNwZWxsaW5ncywgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBmaWVsZCA9IG5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoXCJvcGVyYXRvclwiKVxuICBjb25zdCBjYW5kaWRhdGVzID0gZmllbGQgPyBbZmllbGRdIDogbm9kZS5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiAhY2hpbGQuaXNOYW1lZCAmJiBzcGVsbGluZ3MuaGFzKGNoaWxkLnR5cGUpKVxuXG4gIGlmIChjYW5kaWRhdGVzLmxlbmd0aCAhPSAxIHx8ICFzcGVsbGluZ3MuaGFzKGNhbmRpZGF0ZXNbMF0udHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgYCR7bm9kZS50eXBlfSBvcGVyYXRvcmAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlc1swXVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHByZXNzaW9uIGFuZCByZWNvcmRzIGV4YWN0IGNoZWNrZWQtd3JhcHBlciBvd25lcnNoaXAuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBFeHByZXNzaW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGVja2VkUm9vdF0gLSBXaGV0aGVyIHRoZSBub2RlIGlzIHRoZSBkaXJlY3QgY2hlY2tlZC1leHByZXNzaW9uIG9wZXJhbmQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEV4cHJlc3Npb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgY2hlY2tlZFJvb3QgPSBmYWxzZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgPT0gXCJwYXJlbnRoZXNpemVkX2V4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihub2RlKVxuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbiAgICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oY2hpbGRyZW5bMF0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImNoZWNrZWRfZXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpXG4gICAgY29uc3QgY2hlY2tlZFRva2VucyA9IG5vZGUuY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gIWNoaWxkLmlzTmFtZWQgJiYgY2hpbGQudHlwZSA9PSBcImNoZWNrZWRcIilcblxuICAgIGlmIChjaGVja2VkVG9rZW5zLmxlbmd0aCAhPSAxIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8XG4gICAgICAhW1wiYmluYXJ5X2V4cHJlc3Npb25cIiwgXCJwcmVmaXhfdW5hcnlfZXhwcmVzc2lvblwiXS5pbmNsdWRlcyhjaGlsZHJlblswXS50eXBlKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiY2hlY2tlZCBleHByZXNzaW9uIHNoYXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleHByZXNzaW9uID0gY29udmVydEV4cHJlc3Npb24oY2hpbGRyZW5bMF0sIGZpbGVuYW1lLCBzb3VyY2UsIHRydWUpXG5cbiAgICBjaGVja2VkQXJpdGhtZXRpYy5hZGQoZXhwcmVzc2lvbilcbiAgICBleHByZXNzaW9uLmxvY2F0aW9uID0gbG9jYXRpb25cbiAgICByZXR1cm4gZXhwcmVzc2lvblxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJpZGVudGlmaWVyXCIpIHtcbiAgICBjb25zdCBuYW1lID0gaWRlbnRpZmllcihub2RlLCBcInJlZmVyZW5jZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpLCBsb2NhdGlvbiwgbmFtZX0sIHtuYW1lOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImludGVnZXJfbGl0ZXJhbFwiKSB7XG4gICAgaWYgKCEvXig/OjB8WzEtOV1bMC05XSopTCQvdS50ZXN0KG5vZGUudGV4dCkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIm5vbmNhbm9uaWNhbCBsb25nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIoQmlnSW50KG5vZGUudGV4dC5zbGljZSgwLCAtMSkpKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSW50ZWdlckxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZX0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImJvb2xlYW5fbGl0ZXJhbFwiKSB7XG4gICAgaWYgKG5vZGUudGV4dCAhPSBcInRydWVcIiAmJiBub2RlLnRleHQgIT0gXCJmYWxzZVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJib29sZWFuIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJvb2xlYW5MaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IG5vZGUudGV4dCA9PSBcInRydWVcIn0sIHtsaXRlcmFsOiBsb2NhdGlvbn0pXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcInN0cmluZ19saXRlcmFsXCIpIHtcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU3RyaW5nTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlOiBkZWNvZGVTdHJpbmcobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9LCB7XG4gICAgICBsaXRlcmFsOiBsb2NhdGlvblxuICAgIH0pXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcInByZWZpeF91bmFyeV9leHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHNlbWFudGljQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBvcGVyYXRvciA9IG9wZXJhdG9yVG9rZW4obm9kZSwgbmV3IFNldChbXCIhXCIsIFwiLVwiXSksIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDEgfHwgb3BlcmF0b3IudHlwZSA9PSBcIi1cIiAmJiAhY2hlY2tlZFJvb3QpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcInVud3JhcHBlZCBvciBtYWxmb3JtZWQgdW5hcnkgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHdpdGhBZGFwdGVkT3BlcmF0aW9uKHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgICAga2luZDogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgb3BlcmFuZDogY29udmVydEV4cHJlc3Npb24oY2hpbGRyZW5bMF0sIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSksIG9wZXJhdG9yLnR5cGUgPT0gXCIhXCIgPyBcIk5vdFwiIDogXCJOZWdhdGVcIikpKVxuXG4gICAgaWYgKGNoZWNrZWRSb290KSBjaGVja2VkQXJpdGhtZXRpYy5hZGQoZXhwcmVzc2lvbilcbiAgICByZXR1cm4gZXhwcmVzc2lvblxuICB9XG4gIGlmIChub2RlLnR5cGUgPT0gXCJiaW5hcnlfZXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgbGVmdE5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwibGVmdFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IHJpZ2h0Tm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJyaWdodFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JUb2tlbihub2RlLCBuZXcgU2V0KGJpbmFyeU9wZXJhdGlvbnMua2V5cygpKSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICBjb25zdCBhZGFwdGVkID0gYmluYXJ5T3BlcmF0aW9ucy5nZXQob3BlcmF0b3IudHlwZSlcblxuICAgIGlmICghYWRhcHRlZCB8fCBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpLmxlbmd0aCAhPSAyIHx8IFtcIi1cIiwgXCIqXCJdLmluY2x1ZGVzKG9wZXJhdG9yLnR5cGUpICYmICFjaGVja2VkUm9vdCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwidW53cmFwcGVkIG9yIHVuc3VwcG9ydGVkIGJpbmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleHByZXNzaW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIkJpbmFyeUV4cHJlc3Npb25cIixcbiAgICAgIGxlZnQ6IGNvbnZlcnRFeHByZXNzaW9uKGxlZnROb2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmlnaHQ6IGNvbnZlcnRFeHByZXNzaW9uKHJpZ2h0Tm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIikuQWRhcHRlZE9wZXJhdGlvbn0gKi8gKGFkYXB0ZWQpKSkpXG5cbiAgICBpZiAoY2hlY2tlZFJvb3QpIGNoZWNrZWRBcml0aG1ldGljLmFkZChleHByZXNzaW9uKVxuICAgIHJldHVybiBleHByZXNzaW9uXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImludm9jYXRpb25fZXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2FsbGVlTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJmdW5jdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFyZ3VtZW50c05vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiYXJndW1lbnRzXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICBpZiAoY2FsbGVlTm9kZS50eXBlICE9IFwiaWRlbnRpZmllclwiIHx8IGFyZ3VtZW50c05vZGUudHlwZSAhPSBcImFyZ3VtZW50X2xpc3RcIikge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwicXVhbGlmaWVkIG9yIGR5bmFtaWMgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYXJndW1lbnRzXyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltdfSAqLyAoXG4gICAgICBzZW1hbnRpY0NoaWxkcmVuKGFyZ3VtZW50c05vZGUpLm1hcCgoYXJndW1lbnQpID0+IGNvbnZlcnRBcmd1bWVudChhcmd1bWVudCwgZmlsZW5hbWUsIHNvdXJjZSkpKVxuICAgIGNvbnN0IGNhbGxlZSA9IGlkZW50aWZpZXIoY2FsbGVlTm9kZSwgXCJjYWxsZWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHthcmd1bWVudHM6IGFyZ3VtZW50c18sIGNhbGxlZSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQ2FsbEV4cHJlc3Npb25cIiksIGxvY2F0aW9ufSwge1xuICAgICAgY2FsbGVlOiBub2RlTG9jYXRpb24oY2FsbGVlTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9KVxuICB9XG4gIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQXJndW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBTZW1hbnRpYyBhcmd1bWVudCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0QXJndW1lbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjaGlsZHJlbiA9IHNlbWFudGljQ2hpbGRyZW4obm9kZSlcblxuICBpZiAobm9kZS50eXBlICE9IFwiYXJndW1lbnRcIiB8fCBjaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBub2RlLmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiAhY2hpbGQuaXNOYW1lZCAmJiBjaGlsZC50eXBlID09IFwiOlwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIm5vbi1wb3NpdGlvbmFsIGFyZ3VtZW50XCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4gY29udmVydEV4cHJlc3Npb24oY2hpbGRyZW5bMF0sIGZpbGVuYW1lLCBzb3VyY2UpXG59XG5cbi8qKlxuICogRGVjb2RlcyBvbmUgb3JkaW5hcnkgQyMgc3RyaW5nIGxpdGVyYWwgd2l0aG91dCBpbnRlcnBvbGF0aW9uIG9yIHJhdyBmb3Jtcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIFN0cmluZyBsaXRlcmFsIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZWNvZGVkIFVuaWNvZGUgc2NhbGFyIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlU3RyaW5nKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdGV4dCA9IG5vZGUudGV4dFxuXG4gIGlmICghdGV4dC5zdGFydHNXaXRoKFwiXFxcIlwiKSB8fCAhdGV4dC5lbmRzV2l0aChcIlxcXCJcIikgfHwgdGV4dC5zdGFydHNXaXRoKFwiXFxcIlxcXCJcXFwiXCIpIHx8IC9bXFxyXFxuXS91LnRlc3QodGV4dCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJub25jYW5vbmljYWwgc3RyaW5nIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gIH1cbiAgbGV0IGRlY29kZWQgPSBcIlwiXG4gIGNvbnN0IHNpbXBsZSA9IG5ldyBNYXAoW1tcIlxcXCJcIiwgXCJcXFwiXCJdLCBbXCJcXFxcXCIsIFwiXFxcXFwiXSwgW1wiMFwiLCBcIlxcMFwiXSwgW1wiYVwiLCBcIlxcdTAwMDdcIl0sIFtcImJcIiwgXCJcXGJcIl0sIFtcImZcIiwgXCJcXGZcIl0sXG4gICAgW1wiblwiLCBcIlxcblwiXSwgW1wiclwiLCBcIlxcclwiXSwgW1widFwiLCBcIlxcdFwiXSwgW1widlwiLCBcIlxcdlwiXV0pXG5cbiAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHRleHQubGVuZ3RoIC0gMTsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNoYXJhY3RlciA9IHRleHRbaW5kZXhdXG5cbiAgICBpZiAoY2hhcmFjdGVyICE9IFwiXFxcXFwiKSB7XG4gICAgICBkZWNvZGVkICs9IGNoYXJhY3RlclxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXNjYXBlID0gdGV4dFsrK2luZGV4XVxuXG4gICAgaWYgKGVzY2FwZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJpbnZhbGlkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gICAgaWYgKHNpbXBsZS5oYXMoZXNjYXBlKSkge1xuICAgICAgZGVjb2RlZCArPSBzaW1wbGUuZ2V0KGVzY2FwZSlcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHdpZHRoID0gZXNjYXBlID09IFwidVwiID8gNCA6IGVzY2FwZSA9PSBcIlVcIiA/IDggOiAwXG4gICAgY29uc3QgZGlnaXRzID0gdGV4dC5zbGljZShpbmRleCArIDEsIGluZGV4ICsgMSArIHdpZHRoKVxuXG4gICAgaWYgKCF3aWR0aCB8fCBkaWdpdHMubGVuZ3RoICE9IHdpZHRoIHx8ICEvXlswLTlBLUZhLWZdKyQvdS50ZXN0KGRpZ2l0cykpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcInVuc3VwcG9ydGVkIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGluZGV4ICs9IHdpZHRoXG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIucGFyc2VJbnQoZGlnaXRzLCAxNilcblxuICAgIGlmIChlc2NhcGUgPT0gXCJVXCIgJiYgKHZhbHVlID4gMHgxMEZGRkYgfHwgdmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REZGRikpIHtcbiAgICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgZXNjYXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNvZGVkICs9IGVzY2FwZSA9PSBcIlVcIiA/IFN0cmluZy5mcm9tQ29kZVBvaW50KHZhbHVlKSA6IFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUpXG4gIH1cbiAgaWYgKCFoYXNPbmx5VW5pY29kZVNjYWxhcnMoZGVjb2RlZCkpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImludmFsaWQgVW5pY29kZSBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgcmV0dXJuIGRlY29kZWRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgaW5pdGlhbGl6ZWQgbG9jYWwgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMb2NhbCBzdGF0ZW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7Q1NoYXJwQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQtY2FycmllciBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9ufSBTZW1hbnRpYyBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydExvY2FsKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgZGVjbGFyYXRpb24gPSBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpWzBdXG5cbiAgaWYgKHNlbWFudGljQ2hpbGRyZW4obm9kZSkubGVuZ3RoICE9IDEgfHwgZGVjbGFyYXRpb24/LnR5cGUgIT0gXCJ2YXJpYWJsZV9kZWNsYXJhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgdHlwZU5vZGUgPSBkZWNsYXJhdGlvbi5jaGlsZEZvckZpZWxkTmFtZShcInR5cGVcIilcbiAgY29uc3QgZGVjbGFyYXRvcnMgPSBzZW1hbnRpY0NoaWxkcmVuKGRlY2xhcmF0aW9uKS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlID09IFwidmFyaWFibGVfZGVjbGFyYXRvclwiKVxuXG4gIGlmIChkZWNsYXJhdG9ycy5sZW5ndGggIT0gMSB8fCBzZW1hbnRpY0NoaWxkcmVuKGRlY2xhcmF0aW9uKS5sZW5ndGggIT0gMikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImxvY2FsIGRlY2xhcmF0aW9uIHNoYXBlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yc1swXVxuICBjb25zdCBuYW1lTm9kZSA9IHJlcXVpcmVkRmllbGQoZGVjbGFyYXRvciwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHZhbHVlcyA9IHNlbWFudGljQ2hpbGRyZW4oZGVjbGFyYXRvcikuZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQuaWQgIT0gbmFtZU5vZGUuaWQpXG5cbiAgaWYgKHZhbHVlcy5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibG9jYWwgd2l0aG91dCBvbmUgaW5pdGlhbGl6ZXJcIiwgbG9jYXRpb24pXG4gIGNvbnN0IG5hbWUgPSBpZGVudGlmaWVyKG5hbWVOb2RlLCBcImxvY2FsXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWUgPT0gXCJTeXN0ZW1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibG9jYWwgY2FwdHVyZXMgU3lzdGVtXCIsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JUb2tlbihkZWNsYXJhdG9yLCBuZXcgU2V0KFtcIj1cIl0pLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBtdXRhYmxlID0gIXRha2VJbW11dGFibGVNYXJrZXIobm9kZSwgY29udGV4dClcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgaW5pdGlhbGl6ZXI6IGNvbnZlcnRFeHByZXNzaW9uKHZhbHVlc1swXSwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTG9jYWxEZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbixcbiAgICBtdXRhYmxlLFxuICAgIG5hbWUsXG4gICAgdHlwZTogY29udmVydFR5cGUodHlwZU5vZGUsIGBMb2NhbCAnJHtuYW1lfSdgLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSksIG9wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDbGFpbXMgYW4gZXhhY3RseSBhZGphY2VudCBpbW11dGFibGUtbG9jYWwgY2FycmllciBpZiBwcmVzZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gTG9jYWwgZGVjbGFyYXRpb24gbm9kZS5cbiAqIEBwYXJhbSB7Q1NoYXJwQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQtY2FycmllciBzdGF0ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBsb2NhbCBpcyBpbW11dGFibGUuXG4gKi9cbmZ1bmN0aW9uIHRha2VJbW11dGFibGVNYXJrZXIobm9kZSwgY29udGV4dCkge1xuICBjb25zdCBtYXJrZXIgPSBjb250ZXh0LmNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+IGNvbW1lbnQudGV4dCA9PSBpbW11dGFibGVNYXJrZXIgJiZcbiAgICBjb21tZW50LmVuZFBvc2l0aW9uLnJvdyArIDEgPT0gbm9kZS5zdGFydFBvc2l0aW9uLnJvdyAmJiBjb21tZW50LnN0YXJ0UG9zaXRpb24uY29sdW1uID09IG5vZGUuc3RhcnRQb3NpdGlvbi5jb2x1bW4pXG5cbiAgaWYgKCFtYXJrZXIpIHJldHVybiBmYWxzZVxuICBjb250ZXh0LnVzZWRJbW11dGFibGVNYXJrZXJzLmFkZChtYXJrZXIpXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHN1cHBvcnRlZCBDIyBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBTdGF0ZW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7Q1NoYXJwQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQtY2FycmllciBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IFNlbWFudGljIHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFN0YXRlbWVudChub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcImxvY2FsX2RlY2xhcmF0aW9uX3N0YXRlbWVudFwiKSByZXR1cm4gY29udmVydExvY2FsKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJyZXR1cm5fc3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHNlbWFudGljQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwicmV0dXJuIHdpdGhvdXQgb25lIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlJldHVyblN0YXRlbWVudFwiKSwgbG9jYXRpb259XG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImlmX3N0YXRlbWVudFwiKSByZXR1cm4gY29udmVydElmKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGlmIChub2RlLnR5cGUgPT0gXCJleHByZXNzaW9uX3N0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuICAgIGlmIChjaGlsZHJlblswXS50eXBlID09IFwiYXNzaWdubWVudF9leHByZXNzaW9uXCIpIHJldHVybiBjb252ZXJ0QXNzaWdubWVudChjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuIGNvbnZlcnRQcmludChjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHBsYWluIGlkZW50aWZpZXIgYXNzaWdubWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEFzc2lnbm1lbnQgZXhwcmVzc2lvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBPd25pbmcgc3RhdGVtZW50IGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkFzc2lnbm1lbnRTdGF0ZW1lbnR9IFNlbWFudGljIGFzc2lnbm1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBc3NpZ25tZW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxlZnQgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwibGVmdFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCByaWdodCA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJyaWdodFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBvcGVyYXRvciA9IG9wZXJhdG9yVG9rZW4obm9kZSwgbmV3IFNldChbXCI9XCJdKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobGVmdC50eXBlICE9IFwiaWRlbnRpZmllclwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJhc3NpZ25tZW50IHRhcmdldFwiLCBub2RlTG9jYXRpb24obGVmdCwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IG5hbWUgPSBpZGVudGlmaWVyKGxlZnQsIFwiYXNzaWdubWVudCB0YXJnZXRcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZUxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKGxlZnQsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGV4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKHJpZ2h0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uLFxuICAgIHRhcmdldDogd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uOiBuYW1lTG9jYXRpb24sIG5hbWV9LCB7bmFtZTogbmFtZUxvY2F0aW9ufSlcbiAgfSwge29wZXJhdG9yOiBub2RlTG9jYXRpb24ob3BlcmF0b3IsIGZpbGVuYW1lLCBzb3VyY2UpfSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZXhhY3QgU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lIHByaW50IHNjYWZmb2xkLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gSW52b2NhdGlvbiBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbG9jYXRpb24gLSBPd25pbmcgc3RhdGVtZW50IGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlByaW50U3RhdGVtZW50fSBTZW1hbnRpYyBwcmludCBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQcmludChub2RlLCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbikge1xuICBpZiAobm9kZS50eXBlICE9IFwiaW52b2NhdGlvbl9leHByZXNzaW9uXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImV4cHJlc3Npb24gc3RhdGVtZW50IG90aGVyIHRoYW4gcHJpbnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICBjb25zdCBjYWxsZWUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiZnVuY3Rpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJhcmd1bWVudHNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYXJndW1lbnRzXyA9IHNlbWFudGljQ2hpbGRyZW4oYXJndW1lbnRzTm9kZSlcblxuICBpZiAoIWlzUHJpbnRSZWNlaXZlcihjYWxsZWUpIHx8IGFyZ3VtZW50c05vZGUudHlwZSAhPSBcImFyZ3VtZW50X2xpc3RcIiB8fCBhcmd1bWVudHNfLmxlbmd0aCAhPSAxKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwicHJpbnQgY2FsbCBzaGFwZVwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgcmV0dXJuIHtleHByZXNzaW9uOiBjb252ZXJ0QXJndW1lbnQoYXJndW1lbnRzX1swXSwgZmlsZW5hbWUsIHNvdXJjZSksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIlByaW50U3RhdGVtZW50XCIpLCBsb2NhdGlvbn1cbn1cblxuLyoqXG4gKiBSZWNvZ25pemVzIG9ubHkgdGhlIGZ1bGx5IHF1YWxpZmllZCBwcmludCByZWNlaXZlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIENhbmRpZGF0ZSBjYWxsZWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgY2FsbGVlIGlzIHRoZSBleGFjdCBwcmludCByZWNlaXZlci5cbiAqL1xuZnVuY3Rpb24gaXNQcmludFJlY2VpdmVyKG5vZGUpIHtcbiAgaWYgKG5vZGUudHlwZSAhPSBcIm1lbWJlcl9hY2Nlc3NfZXhwcmVzc2lvblwiKSByZXR1cm4gZmFsc2VcbiAgY29uc3Qgb3V0ZXJFeHByZXNzaW9uID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcImV4cHJlc3Npb25cIilcbiAgY29uc3Qgb3V0ZXJOYW1lID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcIm5hbWVcIilcblxuICBpZiAob3V0ZXJOYW1lPy50ZXh0ICE9IFwiV3JpdGVMaW5lXCIgfHwgb3V0ZXJFeHByZXNzaW9uPy50eXBlICE9IFwibWVtYmVyX2FjY2Vzc19leHByZXNzaW9uXCIpIHJldHVybiBmYWxzZVxuICByZXR1cm4gb3V0ZXJFeHByZXNzaW9uLmNoaWxkRm9yRmllbGROYW1lKFwiZXhwcmVzc2lvblwiKT8udHlwZSA9PSBcImlkZW50aWZpZXJcIiAmJlxuICAgIG91dGVyRXhwcmVzc2lvbi5jaGlsZEZvckZpZWxkTmFtZShcImV4cHJlc3Npb25cIik/LnRleHQgPT0gXCJTeXN0ZW1cIiAmJiBvdXRlckV4cHJlc3Npb24uY2hpbGRGb3JGaWVsZE5hbWUoXCJuYW1lXCIpPy50ZXh0ID09IFwiQ29uc29sZVwiXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGJyYWNlZCBjb25kaXRpb25hbCBhbmQgb3B0aW9uYWwgYWx0ZXJuYXRlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gSWYtc3RhdGVtZW50IG5vZGUuXG4gKiBAcGFyYW0ge0NTaGFycENvbnRleHR9IGNvbnRleHQgLSBDb21tZW50LWNhcnJpZXIgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9IFNlbWFudGljIGNvbmRpdGlvbmFsLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0SWYobm9kZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjb25kaXRpb24gPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiY29uZGl0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbnNlcXVlbmNlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcImNvbnNlcXVlbmNlXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGFsdGVybmF0aXZlID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcImFsdGVybmF0aXZlXCIpXG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oYWx0ZXJuYXRpdmUgPyB7YWx0ZXJuYXRlOiBhbHRlcm5hdGl2ZS50eXBlID09IFwiaWZfc3RhdGVtZW50XCJcbiAgICAgID8ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJsb2NrXCIpLCBsb2NhdGlvbjogbm9kZUxvY2F0aW9uKGFsdGVybmF0aXZlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbY29udmVydElmKGFsdGVybmF0aXZlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKV19XG4gICAgICA6IGNvbnZlcnRCbG9jayhhbHRlcm5hdGl2ZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSl9IDoge30pLFxuICAgIGNvbmRpdGlvbjogY29udmVydEV4cHJlc3Npb24oY29uZGl0aW9uLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBjb25zZXF1ZW50OiBjb252ZXJ0QmxvY2soY29uc2VxdWVuY2UsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIklmU3RhdGVtZW50XCIpLFxuICAgIGxvY2F0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgbGV4aWNhbCBDIyBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEJsb2NrIG5vZGUuXG4gKiBAcGFyYW0ge0NTaGFycENvbnRleHR9IGNvbnRleHQgLSBDb21tZW50LWNhcnJpZXIgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IFNlbWFudGljIGJsb2NrLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0QmxvY2sobm9kZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJibG9ja1wiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbiAgcmV0dXJuIHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJCbG9ja1wiKSwgbG9jYXRpb24sXG4gICAgc3RhdGVtZW50czogc2VtYW50aWNDaGlsZHJlbihub2RlKS5tYXAoKHN0YXRlbWVudCkgPT4gY29udmVydFN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpKX1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgZXhhY3QgcHJpdmF0ZSBzdGF0aWMgc2VtYW50aWMgbWV0aG9kLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWV0aG9kIG5vZGUuXG4gKiBAcGFyYW0ge0NTaGFycENvbnRleHR9IGNvbnRleHQgLSBDb21tZW50LWNhcnJpZXIgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gU2VtYW50aWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRGdW5jdGlvbihub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihub2RlKVxuICBjb25zdCBtb2RpZmllcnMgPSBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlID09IFwibW9kaWZpZXJcIilcblxuICBpZiAobm9kZS50eXBlICE9IFwibWV0aG9kX2RlY2xhcmF0aW9uXCIgfHwgbW9kaWZpZXJzLm1hcCgoe3RleHR9KSA9PiB0ZXh0KS5qb2luKFwiIFwiKSAhPSBcInByaXZhdGUgc3RhdGljXCIgfHxcbiAgICBjaGlsZHJlbi5sZW5ndGggIT0gNiB8fCBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwidHlwZV9wYXJhbWV0ZXJzXCIpIHx8IG5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoXCJjb25zdHJhaW50c1wiKSB8fFxuICAgICFub2RlLmNoaWxkRm9yRmllbGROYW1lKFwiYm9keVwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIm1ldGhvZCBzY2FmZm9sZGluZ1wiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHBhcmFtZXRlcnNOb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcInBhcmFtZXRlcnNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgcmV0dXJuTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJyZXR1cm5zXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGJvZHlOb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcImJvZHlcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgbmFtZSA9IGlkZW50aWZpZXIobmFtZU5vZGUsIFwiZnVuY3Rpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoW1wiTWFpblwiLCBcIlByb2dyYW1cIiwgXCJTeXN0ZW1cIl0uaW5jbHVkZXMobmFtZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgYHJlc2VydmVkIHNlbWFudGljIG1ldGhvZCAnJHtuYW1lfSdgLCBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlck5vZGVzID0gc2VtYW50aWNDaGlsZHJlbihwYXJhbWV0ZXJzTm9kZSlcblxuICBpZiAocGFyYW1ldGVyTm9kZXMubGVuZ3RoICE9IDIgfHwgcGFyYW1ldGVyTm9kZXMuc29tZSgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHlwZSAhPSBcInBhcmFtZXRlclwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImZ1bmN0aW9uIHBhcmFtZXRlciBjb3VudCBvciBzaGFwZVwiLCBub2RlTG9jYXRpb24ocGFyYW1ldGVyc05vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJOb2Rlcy5tYXAoKHBhcmFtZXRlck5vZGUpID0+IGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1ldGVyTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG5cbiAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe1xuICAgIGJvZHk6IGNvbnZlcnRCbG9jayhib2R5Tm9kZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiKSxcbiAgICBsb2NhdGlvbixcbiAgICBuYW1lLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJuVHlwZTogY29udmVydFR5cGUocmV0dXJuTm9kZSwgYEZ1bmN0aW9uICcke25hbWV9JyByZXR1cm5gLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleHBsaWNpdGx5IHR5cGVkIHVubW9kaWZpZWQgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyYW1ldGVyIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyfSBTZW1hbnRpYyBwYXJhbWV0ZXIuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRQYXJhbWV0ZXIobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHR5cGVOb2RlID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcInR5cGVcIilcblxuICBpZiAoc2VtYW50aWNDaGlsZHJlbihub2RlKS5sZW5ndGggIT0gMikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwicGFyYW1ldGVyIG1vZGlmaWVycyBvciBkZWZhdWx0c1wiLCBsb2NhdGlvbilcbiAgY29uc3QgbmFtZSA9IGlkZW50aWZpZXIobmFtZU5vZGUsIFwicGFyYW1ldGVyXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWUgPT0gXCJTeXN0ZW1cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwicGFyYW1ldGVyIGNhcHR1cmVzIFN5c3RlbVwiLCBub2RlTG9jYXRpb24obmFtZU5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUGFyYW1ldGVyXCIpLCBsb2NhdGlvbiwgbmFtZSxcbiAgICB0eXBlOiBjb252ZXJ0VHlwZSh0eXBlTm9kZSwgYFBhcmFtZXRlciAnJHtuYW1lfSdgLCBsb2NhdGlvbiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfSwge25hbWU6IG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGFjdCBmaW5hbCB6ZXJvLWFyZ3VtZW50IE1haW4gbWV0aG9kLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gTWFpbiBtZXRob2Qgbm9kZS5cbiAqIEBwYXJhbSB7Q1NoYXJwQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQtY2FycmllciBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FbnRyeVBvaW50fSBTZW1hbnRpYyBlbnRyeSBwb2ludC5cbiAqL1xuZnVuY3Rpb24gY29udmVydE1haW4obm9kZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjaGlsZHJlbiA9IHNlbWFudGljQ2hpbGRyZW4obm9kZSlcbiAgY29uc3QgbW9kaWZpZXJzID0gY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4gY2hpbGQudHlwZSA9PSBcIm1vZGlmaWVyXCIpXG4gIGNvbnN0IG5hbWUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCByZXR1cm5zID0gcmVxdWlyZWRGaWVsZChub2RlLCBcInJldHVybnNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJwYXJhbWV0ZXJzXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGJvZHkgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiYm9keVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gNiB8fCBtb2RpZmllcnMubWFwKCh7dGV4dH0pID0+IHRleHQpLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZSBzdGF0aWNcIiB8fCBuYW1lLnRleHQgIT0gXCJNYWluXCIgfHwgcmV0dXJucy50ZXh0ICE9IFwidm9pZFwiIHx8XG4gICAgc2VtYW50aWNDaGlsZHJlbihwYXJhbWV0ZXJzKS5sZW5ndGggIT0gMCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiTWFpbiBzY2FmZm9sZGluZ1wiLCBsb2NhdGlvbilcbiAgcmV0dXJuIHtib2R5OiBjb252ZXJ0QmxvY2soYm9keSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSksIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkVudHJ5UG9pbnRcIiksIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIFJlcXVpcmVzIGV4YWN0bHkgb25lIGNoZWNrZWQgd3JhcHBlciBhcm91bmQgZXZlcnkgaW50ZWdlciBhcml0aG1ldGljIHJvb3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBSZXNvbHZlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDaGVja2VkQXJpdGhtZXRpYyhtb2R1bGUpIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uW119ICovXG4gIGNvbnN0IGV4cHJlc3Npb25zID0gW11cbiAgLyoqXG4gICAqIENvbGxlY3RzIGV4cHJlc3Npb25zIHJlY3Vyc2l2ZWx5LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBDdXJyZW50IGV4cHJlc3Npb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29uc3QgdmlzaXRFeHByZXNzaW9uID0gKGV4cHJlc3Npb24pID0+IHtcbiAgICBleHByZXNzaW9ucy5wdXNoKGV4cHJlc3Npb24pXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5vcGVyYW5kKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ubGVmdClcbiAgICAgIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLnJpZ2h0KVxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCh2aXNpdEV4cHJlc3Npb24pXG4gIH1cbiAgLyoqXG4gICAqIENvbGxlY3RzIGV4cHJlc3Npb25zIGZyb20gYSBzZW1hbnRpYyBibG9jay5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBDdXJyZW50IGJsb2NrLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbnN0IHZpc2l0QmxvY2sgPSAoYmxvY2spID0+IGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmluaXRpYWxpemVyKVxuICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmV4cHJlc3Npb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuY29uZGl0aW9uKVxuICAgICAgdmlzaXRCbG9jayhzdGF0ZW1lbnQuY29uc2VxdWVudClcbiAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2aXNpdEJsb2NrKHN0YXRlbWVudC5hbHRlcm5hdGUpXG4gICAgfVxuICB9KVxuXG4gIG1vZHVsZS5mdW5jdGlvbnMuZm9yRWFjaCgoZGVjbGFyYXRpb24pID0+IHZpc2l0QmxvY2soZGVjbGFyYXRpb24uYm9keSkpXG4gIHZpc2l0QmxvY2sobW9kdWxlLmVudHJ5UG9pbnQuYm9keSlcbiAgZm9yIChjb25zdCBleHByZXNzaW9uIG9mIGV4cHJlc3Npb25zKSB7XG4gICAgY29uc3QgYXJpdGhtZXRpYyA9IGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiIHx8XG4gICAgICBleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIgJiYgW1wiSW50ZWdlckFkZFwiLCBcIkludGVnZXJTdWJ0cmFjdFwiLCBcIkludGVnZXJNdWx0aXBseVwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbilcblxuICAgIGlmIChhcml0aG1ldGljICE9IGNoZWNrZWRBcml0aG1ldGljLmhhcyhleHByZXNzaW9uKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIGFyaXRobWV0aWMgPyBcImludGVnZXIgYXJpdGhtZXRpYyB3aXRob3V0IGV4YWN0IGNoZWNrZWQgd3JhcHBlclwiIDogXCJjaGVja2VkIG5vbi1pbnRlZ2VyIGV4cHJlc3Npb25cIixcbiAgICAgICAgZXhwcmVzc2lvbi5sb2NhdGlvbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIHN0cmljdCBUYXNrIDAxNyBDIyBwcm9maWxlLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmd9fSBpbnB1dCAtIFBhcnNlciBpbnB1dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gU2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDU2hhcnAoe2ZpbGVuYW1lLCBzb3VyY2V9KSB7XG4gIGlmICghaGFzT25seVVuaWNvZGVTY2FsYXJzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBpbnZhbGlkT2Zmc2V0ID0gZmlyc3RMb25lU3Vycm9nYXRlT2Zmc2V0KHNvdXJjZSlcblxuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiUEFSU0VfRVJST1JcIiwgbGFuZ3VhZ2U6IFwiY3NoYXJwXCIsXG4gICAgICBsb2NhdGlvbjogbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBpbnZhbGlkT2Zmc2V0LCBpbnZhbGlkT2Zmc2V0ICsgMSksXG4gICAgICBtZXNzYWdlOiBcIkMjIHNvdXJjZSBjb250YWlucyBhbiBpbnZhbGlkIGxvbmUgVVRGLTE2IHN1cnJvZ2F0ZS5cIn0pXG4gIH1cbiAgbGV0IHRyZWVcblxuICB0cnkge1xuICAgIHRyZWUgPSBwYXJzZXIucGFyc2Uoc291cmNlKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBwYXJzZUZhaWx1cmUoXCJjc2hhcnBcIiwgZXJyb3IpXG4gIH1cbiAgY29uc3Qgcm9vdCA9IHRyZWUucm9vdE5vZGVcblxuICB2YWxpZGF0ZVBhcnNlclRyZWUocm9vdCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgaWYgKHJvb3QudHlwZSAhPSBcImNvbXBpbGF0aW9uX3VuaXRcIikgdGhyb3cgbmV3IEVycm9yKGBUcmVlLXNpdHRlciByZXR1cm5lZCBDIyByb290ICcke3Jvb3QudHlwZX0nLmApXG4gIGNvbnN0IGNoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihyb290KVxuICBjb25zdCBsb2NhdGlvbiA9IG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAzIHx8IGNoaWxkcmVuWzBdLnR5cGUgIT0gXCJwcmVwcm9jX251bGxhYmxlXCIgfHxcbiAgICAhL14jbnVsbGFibGUgZW5hYmxlKD86KD86XFxyXFxufFxcbnxcXHIpKSskL3UudGVzdChjaGlsZHJlblswXS50ZXh0KSB8fFxuICAgIGNoaWxkcmVuWzFdLnR5cGUgIT0gXCJmaWxlX3Njb3BlZF9uYW1lc3BhY2VfZGVjbGFyYXRpb25cIiB8fCBjaGlsZHJlblsyXS50eXBlICE9IFwiY2xhc3NfZGVjbGFyYXRpb25cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImNvbXBpbGF0aW9uLXVuaXQgc2NhZmZvbGRpbmdcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgbmFtZXNwYWNlTmFtZSA9IHJlcXVpcmVkRmllbGQoY2hpbGRyZW5bMV0sIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChuYW1lc3BhY2VOYW1lLnRleHQgIT0gXCJTZW1hbnRpZm9sZC5HZW5lcmF0ZWRcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIm5hbWVzcGFjZSBzY2FmZm9sZGluZ1wiLCBub2RlTG9jYXRpb24oY2hpbGRyZW5bMV0sIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNsYXNzTm9kZSA9IGNoaWxkcmVuWzJdXG4gIGNvbnN0IGNsYXNzTmFtZSA9IHJlcXVpcmVkRmllbGQoY2xhc3NOb2RlLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2xhc3NCb2R5ID0gcmVxdWlyZWRGaWVsZChjbGFzc05vZGUsIFwiYm9keVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc0NoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihjbGFzc05vZGUpXG4gIGNvbnN0IGNsYXNzTW9kaWZpZXJzID0gY2xhc3NDaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlID09IFwibW9kaWZpZXJcIilcblxuICBpZiAoY2xhc3NDaGlsZHJlbi5sZW5ndGggIT0gNCB8fCBjbGFzc05hbWUudGV4dCAhPSBcIlByb2dyYW1cIiB8fFxuICAgIGNsYXNzTW9kaWZpZXJzLm1hcCgoe3RleHR9KSA9PiB0ZXh0KS5qb2luKFwiIFwiKSAhPSBcImludGVybmFsIHN0YXRpY1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiUHJvZ3JhbSBjbGFzcyBzY2FmZm9sZGluZ1wiLCBub2RlTG9jYXRpb24oY2xhc3NOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBtZW1iZXJzID0gc2VtYW50aWNDaGlsZHJlbihjbGFzc0JvZHkpXG5cbiAgaWYgKG1lbWJlcnMubGVuZ3RoIDwgMiB8fCBtZW1iZXJzLnNvbWUoKG1lbWJlcikgPT4gbWVtYmVyLnR5cGUgIT0gXCJtZXRob2RfZGVjbGFyYXRpb25cIikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJQcm9ncmFtIG1lbWJlcnNcIiwgbm9kZUxvY2F0aW9uKGNsYXNzQm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgbWFpbk5vZGVzID0gbWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLmNoaWxkRm9yRmllbGROYW1lKFwibmFtZVwiKT8udGV4dCA9PSBcIk1haW5cIilcblxuICBpZiAobWFpbk5vZGVzLmxlbmd0aCAhPSAxIHx8IG1lbWJlcnMuYXQoLTEpPy5pZCAhPSBtYWluTm9kZXNbMF0uaWQpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJNYWluIG9yZGVyaW5nXCIsIG5vZGVMb2NhdGlvbihjbGFzc0JvZHksIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IGNvbW1lbnRzID0gcm9vdC5kZXNjZW5kYW50c09mVHlwZShcImNvbW1lbnRcIilcbiAgY29uc3QgY29udGV4dCA9IHtjb21tZW50cywgdXNlZEltbXV0YWJsZU1hcmtlcnM6IG5ldyBTZXQoKX1cbiAgY29uc3QgbW9kdWxlID0ge1xuICAgIGVudHJ5UG9pbnQ6IGNvbnZlcnRNYWluKG1haW5Ob2Rlc1swXSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAgZnVuY3Rpb25zOiBtZW1iZXJzLnNsaWNlKDAsIC0xKS5tYXAoKG1lbWJlcikgPT4gY29udmVydEZ1bmN0aW9uKG1lbWJlciwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIk1vZHVsZVwiKSxcbiAgICBsb2NhdGlvblxuICB9XG4gIGNvbnN0IHVudXNlZE1hcmtlciA9IGNvbW1lbnRzLmZpbmQoKGNvbW1lbnQpID0+IGNvbW1lbnQudGV4dCA9PSBpbW11dGFibGVNYXJrZXIgJiYgIWNvbnRleHQudXNlZEltbXV0YWJsZU1hcmtlcnMuaGFzKGNvbW1lbnQpKVxuXG4gIGlmICh1bnVzZWRNYXJrZXIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcInVuYXR0YWNoZWQgaW1tdXRhYmxlIG1hcmtlclwiLCBub2RlTG9jYXRpb24odW51c2VkTWFya2VyLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgdmFsaWRhdGVQYXJzZWRNb2R1bGUobW9kdWxlLCBcImNzaGFycFwiKVxuICB2YWxpZGF0ZUNoZWNrZWRBcml0aG1ldGljKG1vZHVsZSlcbiAgcmV0dXJuIG1vZHVsZVxufVxuIl19
712
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NoYXJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kcy9jc2hhcnAuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLGNBQWMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN2RSxPQUFPLEVBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQ3BHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFFN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUUzQixNQUFNLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxDQUFDLEVBQUMsc0JBQXVCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRTNHLE1BQU0sZUFBZSxHQUFHLDJCQUEyQixDQUFBO0FBQ25ELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtBQUN2QyxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3hDLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxN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Q0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDeEcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXRELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTdCLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxTQUFTLENBQUE7WUFDcEIsU0FBUTtRQUNWLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUU1QixJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDL0YsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDN0IsU0FBUTtRQUNWLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxD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cy1jaGVja1xuXG5pbXBvcnQgUGFyc2VyIGZyb20gXCJ0cmVlLXNpdHRlclwiXG5pbXBvcnQgQ1NoYXJwTGFuZ3VhZ2UgZnJvbSBcInRyZWUtc2l0dGVyLWMtc2hhcnAvYmluZGluZ3Mvbm9kZS9pbmRleC5qc1wiXG5pbXBvcnQge21pc3NpbmdUeXBlLCBwYXJzZUZhaWx1cmUsIFNlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRTeW50YXh9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bG9jYXRpb25Gcm9tT2Zmc2V0cywgbW9kdWxlTG9jYXRpb24sIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldH0gZnJvbSBcIi4uL3NlbWFudGljL2xvY2F0aW9uLmpzXCJcbmltcG9ydCB7d2l0aEFkYXB0ZWRPcGVyYXRpb259IGZyb20gXCIuLi9zZW1hbnRpYy9vcGVyYXRvcnMuanNcIlxuaW1wb3J0IHt3aXRoUGFyc2VyUmFuZ2VzfSBmcm9tIFwiLi4vc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZVBhcnNlZE1vZHVsZX0gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7c291cmNlU2NhbGFyVHlwZX0gZnJvbSBcIi4vc2NhbGFycy5qc1wiXG5cbmNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKVxuXG5wYXJzZXIuc2V0TGFuZ3VhZ2UoLyoqIEB0eXBlIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5MYW5ndWFnZX0gKi8gKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKENTaGFycExhbmd1YWdlKSkpXG5cbmNvbnN0IGltbXV0YWJsZU1hcmtlciA9IFwiLy8gQHNlbWFudGlmb2xkLWltbXV0YWJsZVwiXG5jb25zdCBjaGVja2VkQXJpdGhtZXRpYyA9IG5ldyBXZWFrU2V0KClcbmNvbnN0IGNzaGFycFJlc2VydmVkSWRlbnRpZmllcnMgPSBuZXcgU2V0KFtcbiAgXCJhYnN0cmFjdFwiLCBcImFkZFwiLCBcImFsaWFzXCIsIFwiYWxsb3dzXCIsIFwiYW5kXCIsIFwiYXNcIiwgXCJhc2NlbmRpbmdcIiwgXCJhc3luY1wiLCBcImF3YWl0XCIsIFwiYmFzZVwiLCBcImJvb2xcIiwgXCJicmVha1wiLFxuICBcImJ5XCIsIFwiYnl0ZVwiLCBcImNhc2VcIiwgXCJjYXRjaFwiLCBcImNoYXJcIiwgXCJjaGVja2VkXCIsIFwiY2xhc3NcIiwgXCJjb25zdFwiLCBcImNvbnRpbnVlXCIsIFwiZGVjaW1hbFwiLCBcImRlZmF1bHRcIixcbiAgXCJkZWxlZ2F0ZVwiLCBcImRlc2NlbmRpbmdcIiwgXCJkb1wiLCBcImRvdWJsZVwiLCBcImR5bmFtaWNcIiwgXCJlbHNlXCIsIFwiZW51bVwiLCBcImVxdWFsc1wiLCBcImV2ZW50XCIsIFwiZXhwbGljaXRcIiwgXCJleHRlbnNpb25cIiwgXCJleHRlcm5cIixcbiAgXCJmYWxzZVwiLCBcImZpZWxkXCIsIFwiZmlsZVwiLCBcImZpbmFsbHlcIiwgXCJmaXhlZFwiLCBcImZsb2F0XCIsIFwiZm9yXCIsIFwiZm9yZWFjaFwiLCBcImZyb21cIiwgXCJnZXRcIiwgXCJnbG9iYWxcIiwgXCJnb3RvXCIsXG4gIFwiZ3JvdXBcIiwgXCJpZlwiLCBcImltcGxpY2l0XCIsIFwiaW5cIiwgXCJpbml0XCIsIFwiaW50XCIsIFwiaW50ZXJmYWNlXCIsIFwiaW50ZXJuYWxcIiwgXCJpbnRvXCIsIFwiaXNcIiwgXCJqb2luXCIsIFwibGV0XCIsIFwibG9ja1wiLFxuICBcImxvbmdcIiwgXCJtYW5hZ2VkXCIsIFwibmFtZW9mXCIsIFwibmFtZXNwYWNlXCIsIFwibmV3XCIsIFwibmludFwiLCBcIm5vdFwiLCBcIm5vdG51bGxcIiwgXCJudWxsXCIsIFwibnVpbnRcIiwgXCJvYmplY3RcIiwgXCJvblwiLFxuICBcIm9wZXJhdG9yXCIsIFwib3JcIiwgXCJvcmRlcmJ5XCIsIFwib3V0XCIsIFwib3ZlcnJpZGVcIiwgXCJwYXJhbXNcIiwgXCJwYXJ0aWFsXCIsIFwicHJpdmF0ZVwiLCBcInByb3RlY3RlZFwiLCBcInB1YmxpY1wiLCBcInJlYWRvbmx5XCIsXG4gIFwicmVjb3JkXCIsIFwicmVmXCIsIFwicmVtb3ZlXCIsIFwicmVxdWlyZWRcIiwgXCJyZXR1cm5cIiwgXCJzYnl0ZVwiLCBcInNjb3BlZFwiLCBcInNlYWxlZFwiLCBcInNlbGVjdFwiLCBcInNldFwiLCBcInNob3J0XCIsIFwic2l6ZW9mXCIsXG4gIFwic3RhY2thbGxvY1wiLCBcInN0YXRpY1wiLCBcInN0cmluZ1wiLCBcInN0cnVjdFwiLCBcInN3aXRjaFwiLCBcInRoaXNcIiwgXCJ0aHJvd1wiLCBcInRydWVcIiwgXCJ0cnlcIiwgXCJ0eXBlb2ZcIiwgXCJ1aW50XCIsIFwidWxvbmdcIixcbiAgXCJ1bmNoZWNrZWRcIiwgXCJ1bm1hbmFnZWRcIiwgXCJ1bnNhZmVcIiwgXCJ1c2hvcnRcIiwgXCJ1c2luZ1wiLCBcInZhbHVlXCIsIFwidmFyXCIsIFwidmlydHVhbFwiLCBcInZvaWRcIiwgXCJ2b2xhdGlsZVwiLCBcIndoZW5cIixcbiAgXCJ3aGVyZVwiLCBcIndoaWxlXCIsIFwid2l0aFwiLCBcInlpZWxkXCJcbl0pXG5jb25zdCBiaW5hcnlPcGVyYXRpb25zID0gbmV3IE1hcChbXG4gIFtcIitcIiwgXCJBZGRcIl0sIFtcIi1cIiwgXCJTdWJ0cmFjdFwiXSwgW1wiKlwiLCBcIk11bHRpcGx5XCJdLCBbXCI9PVwiLCBcIkVxdWFsXCJdLCBbXCIhPVwiLCBcIk5vdEVxdWFsXCJdLFxuICBbXCI8XCIsIFwiTGVzc1RoYW5cIl0sIFtcIjw9XCIsIFwiTGVzc1RoYW5PckVxdWFsXCJdLCBbXCI+XCIsIFwiR3JlYXRlclRoYW5cIl0sIFtcIj49XCIsIFwiR3JlYXRlclRoYW5PckVxdWFsXCJdLFxuICBbXCImJlwiLCBcIkFuZFwiXSwgW1wifHxcIiwgXCJPclwiXVxuXSlcblxuLyoqIEB0eXBlZGVmIHt7Y29tbWVudHM6IGltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGVbXSwgdXNlZEltbXV0YWJsZU1hcmtlcnM6IFNldDxpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlPn19IENTaGFycENvbnRleHQgKi9cblxuLyoqXG4gKiBWZXJpZmllcyBvbmUgVHJlZS1zaXR0ZXIgYmluZGluZyBpbmRleCB0aHJvdWdoIHRoZSBzaGFyZWQgYnl0ZSBjb252ZXJ0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBCaW5kaW5nLXJlcG9ydGVkIFVURi0xNiBpbmRleC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZlcmlmaWVkIFVURi0xNiBvZmZzZXQuXG4gKi9cbmZ1bmN0aW9uIGJpbmRpbmdJbmRleFRvVXRmMTZPZmZzZXQoc291cmNlLCBpbmRleCkge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5kZXgpIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+IHNvdXJjZS5sZW5ndGggfHxcbiAgICBpbmRleCA+IDAgJiYgaW5kZXggPCBzb3VyY2UubGVuZ3RoICYmIC9bXFx1RDgwMC1cXHVEQkZGXS91LnRlc3Qoc291cmNlW2luZGV4IC0gMV0pICYmIC9bXFx1REMwMC1cXHVERkZGXS91LnRlc3Qoc291cmNlW2luZGV4XSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBUcmVlLXNpdHRlciBzb3VyY2UgaW5kZXg6ICR7aW5kZXh9YClcbiAgfVxuICByZXR1cm4gdXRmOEJ5dGVPZmZzZXRUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHNvdXJjZS5zbGljZSgwLCBpbmRleCkpLmxlbmd0aClcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgdW5wYWlyZWQgVVRGLTE2IHN1cnJvZ2F0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IEludmFsaWQgb2Zmc2V0LCBvciAtMS5cbiAqL1xuZnVuY3Rpb24gZmlyc3RMb25lU3Vycm9nYXRlT2Zmc2V0KHNvdXJjZSkge1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc291cmNlLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHVuaXQgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleClcblxuICAgIGlmICh1bml0ID49IDB4RDgwMCAmJiB1bml0IDw9IDB4REJGRikge1xuICAgICAgY29uc3QgbmV4dCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSlcblxuICAgICAgaWYgKG5leHQgPj0gMHhEQzAwICYmIG5leHQgPD0gMHhERkZGKSBpbmRleCArPSAxXG4gICAgICBlbHNlIHJldHVybiBpbmRleFxuICAgIH0gZWxzZSBpZiAodW5pdCA+PSAweERDMDAgJiYgdW5pdCA8PSAweERGRkYpIHJldHVybiBpbmRleFxuICB9XG4gIHJldHVybiAtMVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBiaW5kaW5nIHJhbmdlIHRvIGEgc2VtYW50aWMgc291cmNlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyc2VyIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICByZXR1cm4gbG9jYXRpb25Gcm9tT2Zmc2V0cyhmaWxlbmFtZSwgc291cmNlLCBiaW5kaW5nSW5kZXhUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbm9kZS5zdGFydEluZGV4KSxcbiAgICBiaW5kaW5nSW5kZXhUb1V0ZjE2T2Zmc2V0KHNvdXJjZSwgbm9kZS5lbmRJbmRleCkpXG59XG5cbi8qKlxuICogUmVxdWlyZXMgb25lIG5hbWVkIGdyYW1tYXIgZmllbGQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBGaWVsZCBvd25lci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCAtIEdyYW1tYXIgZmllbGQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBSZXF1aXJlZCBjaGlsZC5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZWRGaWVsZChub2RlLCBmaWVsZCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoZmllbGQpXG5cbiAgaWYgKCFjaGlsZCkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIGAke25vZGUudHlwZX0gd2l0aG91dCAke2ZpZWxkfWAsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgcmV0dXJuIGNoaWxkXG59XG5cbi8qKlxuICogVHJhdmVyc2VzIGV2ZXJ5IHBhcnNlciBjaGlsZCBhbmQgcmVqZWN0cyBleHBsaWNpdCBvciBwcm9wYWdhdGVkIHJlY292ZXJ5LlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ3VycmVudCBwYXJzZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcnNlclRyZWUobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBpZiAobm9kZS5oYXNFcnJvciB8fCBub2RlLmlzRXJyb3IgfHwgbm9kZS5pc01pc3NpbmcpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiUEFSU0VfRVJST1JcIixcbiAgICAgIGxhbmd1YWdlOiBcImNzaGFycFwiLFxuICAgICAgbG9jYXRpb246IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICAgIG1lc3NhZ2U6IGBUcmVlLXNpdHRlciBleHBvc2VkIHJlY292ZXJ5IGF0ICcke25vZGUudHlwZX0nLmBcbiAgICB9KVxuICB9XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2RlLmNoaWxkQ291bnQ7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGQoaW5kZXgpXG5cbiAgICBpZiAoIWNoaWxkKSB0aHJvdyBuZXcgRXJyb3IoYFRyZWUtc2l0dGVyIG9taXR0ZWQgY2hpbGQgJHtpbmRleH0gb2YgJHtub2RlLnR5cGV9LmApXG4gICAgdmFsaWRhdGVQYXJzZXJUcmVlKGNoaWxkLCBmaWxlbmFtZSwgc291cmNlKVxuICB9XG59XG5cbi8qKlxuICogU2VsZWN0cyBuYW1lZCBzZW1hbnRpYyBjaGlsZHJlbiB3aGlsZSByZXRhaW5pbmcgY29tbWVudHMgaW4gdGhlIHBhcnNlciB0cmVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gUGFyZW50IHBhcnNlciBub2RlLlxuICogQHJldHVybnMge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGVbXX0gTm9uLWNvbW1lbnQgbmFtZWQgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIHNlbWFudGljQ2hpbGRyZW4obm9kZSkge1xuICByZXR1cm4gbm9kZS5uYW1lZENoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgIT0gXCJjb21tZW50XCIpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBpZGVudGlmaWVyIGFnYWluc3QgdGhlIGV4YWN0IEMjIHNvdXJjZSBwcm9maWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gSWRlbnRpZmllciBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IHJvbGUgLSBEaWFnbm9zdGljIHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBY2NlcHRlZCBpZGVudGlmaWVyLlxuICovXG5mdW5jdGlvbiBpZGVudGlmaWVyKG5vZGUsIHJvbGUsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbmFtZSA9IG5vZGUudGV4dFxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgIS9eW0EtWmEtel9dW0EtWmEtejAtOV9dKiQvdS50ZXN0KG5hbWUpIHx8IGNzaGFycFJlc2VydmVkSWRlbnRpZmllcnMuaGFzKG5hbWUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIGAke3JvbGV9IGlkZW50aWZpZXIgJyR7bmFtZX0nYCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBuYW1lXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4YWN0IHN1cHBvcnRlZCBzY2FsYXIgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZSB8IG51bGx9IG5vZGUgLSBUeXBlIG5vZGUsIGlmIHByZXNlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIFR5cGVkIHN1YmplY3QgZm9yIGRpYWdub3N0aWNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE93bmluZyBkZWNsYXJhdGlvbiBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93VmFyXSAtIFdoZXRoZXIgaW5mZXJyZWQgYHZhcmAgcHJvZHVjZXMgTUlTU0lOR19UWVBFLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlR5cGVSZWZlcmVuY2V9IFNlbWFudGljIHNjYWxhciB0eXBlLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZShub2RlLCBzdWJqZWN0LCBvd25lckxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCBhbGxvd1ZhciA9IGZhbHNlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIG1pc3NpbmdUeXBlKFwiY3NoYXJwXCIsIHN1YmplY3QsIG93bmVyTG9jYXRpb24pXG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKGFsbG93VmFyICYmIG5vZGUudGV4dCA9PSBcInZhclwiKSByZXR1cm4gbWlzc2luZ1R5cGUoXCJjc2hhcnBcIiwgc3ViamVjdCwgb3duZXJMb2NhdGlvbilcbiAgY29uc3QgdHlwZSA9IHNvdXJjZVNjYWxhclR5cGUoXCJjc2hhcnBcIiwgbm9kZS50ZXh0LCBsb2NhdGlvbilcblxuICBpZiAoIXR5cGUgfHwgIVtcInByZWRlZmluZWRfdHlwZVwiLCBcInF1YWxpZmllZF9uYW1lXCJdLmluY2x1ZGVzKG5vZGUudHlwZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgYHVuc3VwcG9ydGVkIHNjYWxhciB0eXBlICcke25vZGUudGV4dH0nYCwgbG9jYXRpb24pXG4gIH1cbiAgcmV0dXJuIHR5cGVcbn1cblxuLyoqXG4gKiBGaW5kcyBleGFjdGx5IG9uZSBhY2NlcHRlZCBvcGVyYXRvciB0b2tlbiBvd25lZCBieSBhIHBhcnNlciBub2RlLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gT3BlcmF0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBzcGVsbGluZ3MgLSBBY2NlcHRlZCBvcGVyYXRvciBzcGVsbGluZ3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gT3BlcmF0b3IgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIG9wZXJhdG9yVG9rZW4obm9kZSwgc3BlbGxpbmdzLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGZpZWxkID0gbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcIm9wZXJhdG9yXCIpXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBmaWVsZCA/IFtmaWVsZF0gOiBub2RlLmNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+ICFjaGlsZC5pc05hbWVkICYmIHNwZWxsaW5ncy5oYXMoY2hpbGQudHlwZSkpXG5cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoICE9IDEgfHwgIXNwZWxsaW5ncy5oYXMoY2FuZGlkYXRlc1swXS50eXBlKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBgJHtub2RlLnR5cGV9IG9wZXJhdG9yYCwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBjYW5kaWRhdGVzWzBdXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cHJlc3Npb24gYW5kIHJlY29yZHMgZXhhY3QgY2hlY2tlZC13cmFwcGVyIG93bmVyc2hpcC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIEV4cHJlc3Npb24gbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrZWRSb290XSAtIFdoZXRoZXIgdGhlIG5vZGUgaXMgdGhlIGRpcmVjdCBjaGVja2VkLWV4cHJlc3Npb24gb3BlcmFuZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0RXhwcmVzc2lvbihub2RlLCBmaWxlbmFtZSwgc291cmNlLCBjaGVja2VkUm9vdCA9IGZhbHNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSA9PSBcInBhcmVudGhlc2l6ZWRfZXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDEpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuICAgIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiY2hlY2tlZF9leHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHNlbWFudGljQ2hpbGRyZW4obm9kZSlcbiAgICBjb25zdCBjaGVja2VkVG9rZW5zID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiAhY2hpbGQuaXNOYW1lZCAmJiBjaGlsZC50eXBlID09IFwiY2hlY2tlZFwiKVxuXG4gICAgaWYgKGNoZWNrZWRUb2tlbnMubGVuZ3RoICE9IDEgfHwgY2hpbGRyZW4ubGVuZ3RoICE9IDEgfHxcbiAgICAgICFbXCJiaW5hcnlfZXhwcmVzc2lvblwiLCBcInByZWZpeF91bmFyeV9leHByZXNzaW9uXCJdLmluY2x1ZGVzKGNoaWxkcmVuWzBdLnR5cGUpKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJjaGVja2VkIGV4cHJlc3Npb24gc2hhcGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSwgdHJ1ZSlcblxuICAgIGNoZWNrZWRBcml0aG1ldGljLmFkZChleHByZXNzaW9uKVxuICAgIGV4cHJlc3Npb24ubG9jYXRpb24gPSBsb2NhdGlvblxuICAgIHJldHVybiBleHByZXNzaW9uXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImlkZW50aWZpZXJcIikge1xuICAgIGNvbnN0IG5hbWUgPSBpZGVudGlmaWVyKG5vZGUsIFwicmVmZXJlbmNlXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiksIGxvY2F0aW9uLCBuYW1lfSwge25hbWU6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiaW50ZWdlcl9saXRlcmFsXCIpIHtcbiAgICBpZiAoIS9eKD86MHxbMS05XVswLTldKilMJC91LnRlc3Qobm9kZS50ZXh0KSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibm9uY2Fub25pY2FsIGxvbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihCaWdJbnQobm9kZS50ZXh0LnNsaWNlKDAsIC0xKSkpXG5cbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJbnRlZ2VyTGl0ZXJhbFwiKSwgbG9jYXRpb24sIHZhbHVlfSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiYm9vbGVhbl9saXRlcmFsXCIpIHtcbiAgICBpZiAobm9kZS50ZXh0ICE9IFwidHJ1ZVwiICYmIG5vZGUudGV4dCAhPSBcImZhbHNlXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImJvb2xlYW4gbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQm9vbGVhbkxpdGVyYWxcIiksIGxvY2F0aW9uLCB2YWx1ZTogbm9kZS50ZXh0ID09IFwidHJ1ZVwifSwge2xpdGVyYWw6IGxvY2F0aW9ufSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwic3RyaW5nX2xpdGVyYWxcIikge1xuICAgIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJTdHJpbmdMaXRlcmFsXCIpLCBsb2NhdGlvbiwgdmFsdWU6IGRlY29kZVN0cmluZyhub2RlLCBmaWxlbmFtZSwgc291cmNlKX0sIHtcbiAgICAgIGxpdGVyYWw6IGxvY2F0aW9uXG4gICAgfSlcbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwicHJlZml4X3VuYXJ5X2V4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihub2RlKVxuICAgIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JUb2tlbihub2RlLCBuZXcgU2V0KFtcIiFcIiwgXCItXCJdKSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMSB8fCBvcGVyYXRvci50eXBlID09IFwiLVwiICYmICFjaGVja2VkUm9vdCkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwidW53cmFwcGVkIG9yIG1hbGZvcm1lZCB1bmFyeSBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleHByZXNzaW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAod2l0aEFkYXB0ZWRPcGVyYXRpb24od2l0aFBhcnNlclJhbmdlcyh7XG4gICAgICBraW5kOiBcIlVuYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbG9jYXRpb24sXG4gICAgICBvcGVyYW5kOiBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KSwgb3BlcmF0b3IudHlwZSA9PSBcIiFcIiA/IFwiTm90XCIgOiBcIk5lZ2F0ZVwiKSkpXG5cbiAgICBpZiAoY2hlY2tlZFJvb3QpIGNoZWNrZWRBcml0aG1ldGljLmFkZChleHByZXNzaW9uKVxuICAgIHJldHVybiBleHByZXNzaW9uXG4gIH1cbiAgaWYgKG5vZGUudHlwZSA9PSBcImJpbmFyeV9leHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBsZWZ0Tm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJsZWZ0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgcmlnaHROb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcInJpZ2h0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRvclRva2VuKG5vZGUsIG5ldyBTZXQoYmluYXJ5T3BlcmF0aW9ucy5rZXlzKCkpLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIGNvbnN0IGFkYXB0ZWQgPSBiaW5hcnlPcGVyYXRpb25zLmdldChvcGVyYXRvci50eXBlKVxuXG4gICAgaWYgKCFhZGFwdGVkIHx8IHNlbWFudGljQ2hpbGRyZW4obm9kZSkubGVuZ3RoICE9IDIgfHwgW1wiLVwiLCBcIipcIl0uaW5jbHVkZXMob3BlcmF0b3IudHlwZSkgJiYgIWNoZWNrZWRSb290KSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJ1bndyYXBwZWQgb3IgdW5zdXBwb3J0ZWQgYmluYXJ5IGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh3aXRoQWRhcHRlZE9wZXJhdGlvbih3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICAgIGtpbmQ6IFwiQmluYXJ5RXhwcmVzc2lvblwiLFxuICAgICAgbGVmdDogY29udmVydEV4cHJlc3Npb24obGVmdE5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICByaWdodDogY29udmVydEV4cHJlc3Npb24ocmlnaHROb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0sIHtvcGVyYXRvcjogbm9kZUxvY2F0aW9uKG9wZXJhdG9yLCBmaWxlbmFtZSwgc291cmNlKX0pLCAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL29wZXJhdG9ycy5qc1wiKS5BZGFwdGVkT3BlcmF0aW9ufSAqLyAoYWRhcHRlZCkpKSlcblxuICAgIGlmIChjaGVja2VkUm9vdCkgY2hlY2tlZEFyaXRobWV0aWMuYWRkKGV4cHJlc3Npb24pXG4gICAgcmV0dXJuIGV4cHJlc3Npb25cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiaW52b2NhdGlvbl9leHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBjYWxsZWVOb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcImZ1bmN0aW9uXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gICAgY29uc3QgYXJndW1lbnRzTm9kZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJhcmd1bWVudHNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICAgIGlmIChjYWxsZWVOb2RlLnR5cGUgIT0gXCJpZGVudGlmaWVyXCIgfHwgYXJndW1lbnRzTm9kZS50eXBlICE9IFwiYXJndW1lbnRfbGlzdFwiKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJxdWFsaWZpZWQgb3IgZHluYW1pYyBjYWxsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBhcmd1bWVudHNfID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uW119ICovIChcbiAgICAgIHNlbWFudGljQ2hpbGRyZW4oYXJndW1lbnRzTm9kZSkubWFwKChhcmd1bWVudCkgPT4gY29udmVydEFyZ3VtZW50KGFyZ3VtZW50LCBmaWxlbmFtZSwgc291cmNlKSkpXG4gICAgY29uc3QgY2FsbGVlID0gaWRlbnRpZmllcihjYWxsZWVOb2RlLCBcImNhbGxlZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gICAgcmV0dXJuIHdpdGhQYXJzZXJSYW5nZXMoe2FyZ3VtZW50czogYXJndW1lbnRzXywgY2FsbGVlLCBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJDYWxsRXhwcmVzc2lvblwiKSwgbG9jYXRpb259LCB7XG4gICAgICBjYWxsZWU6IG5vZGVMb2NhdGlvbihjYWxsZWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBBcmd1bWVudCBub2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IFNlbWFudGljIGFyZ3VtZW50IGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBcmd1bWVudChub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihub2RlKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJhcmd1bWVudFwiIHx8IGNoaWxkcmVuLmxlbmd0aCAhPSAxIHx8IG5vZGUuY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+ICFjaGlsZC5pc05hbWVkICYmIGNoaWxkLnR5cGUgPT0gXCI6XCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibm9uLXBvc2l0aW9uYWwgYXJndW1lbnRcIiwgbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIHJldHVybiBjb252ZXJ0RXhwcmVzc2lvbihjaGlsZHJlblswXSwgZmlsZW5hbWUsIHNvdXJjZSlcbn1cblxuLyoqXG4gKiBEZWNvZGVzIG9uZSBvcmRpbmFyeSBDIyBzdHJpbmcgbGl0ZXJhbCB3aXRob3V0IGludGVycG9sYXRpb24gb3IgcmF3IGZvcm1zLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gU3RyaW5nIGxpdGVyYWwgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IERlY29kZWQgVW5pY29kZSBzY2FsYXIgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBkZWNvZGVTdHJpbmcobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0XG5cbiAgaWYgKCF0ZXh0LnN0YXJ0c1dpdGgoXCJcXFwiXCIpIHx8ICF0ZXh0LmVuZHNXaXRoKFwiXFxcIlwiKSB8fCB0ZXh0LnN0YXJ0c1dpdGgoXCJcXFwiXFxcIlxcXCJcIikgfHwgL1tcXHJcXG5dL3UudGVzdCh0ZXh0KSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIm5vbmNhbm9uaWNhbCBzdHJpbmcgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgfVxuICBsZXQgZGVjb2RlZCA9IFwiXCJcbiAgY29uc3Qgc2ltcGxlID0gbmV3IE1hcChbW1wiXFxcIlwiLCBcIlxcXCJcIl0sIFtcIlxcXFxcIiwgXCJcXFxcXCJdLCBbXCIwXCIsIFwiXFwwXCJdLCBbXCJhXCIsIFwiXFx1MDAwN1wiXSwgW1wiYlwiLCBcIlxcYlwiXSwgW1wiZlwiLCBcIlxcZlwiXSxcbiAgICBbXCJuXCIsIFwiXFxuXCJdLCBbXCJyXCIsIFwiXFxyXCJdLCBbXCJ0XCIsIFwiXFx0XCJdLCBbXCJ2XCIsIFwiXFx2XCJdXSlcblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgdGV4dC5sZW5ndGggLSAxOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgY2hhcmFjdGVyID0gdGV4dFtpbmRleF1cblxuICAgIGlmIChjaGFyYWN0ZXIgIT0gXCJcXFxcXCIpIHtcbiAgICAgIGRlY29kZWQgKz0gY2hhcmFjdGVyXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBlc2NhcGUgPSB0ZXh0WysraW5kZXhdXG5cbiAgICBpZiAoZXNjYXBlID09PSB1bmRlZmluZWQpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImludmFsaWQgc3RyaW5nIGVzY2FwZVwiLCBsb2NhdGlvbilcbiAgICBpZiAoc2ltcGxlLmhhcyhlc2NhcGUpKSB7XG4gICAgICBkZWNvZGVkICs9IHNpbXBsZS5nZXQoZXNjYXBlKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3Qgd2lkdGggPSBlc2NhcGUgPT0gXCJ1XCIgPyA0IDogZXNjYXBlID09IFwiVVwiID8gOCA6IDBcbiAgICBjb25zdCBkaWdpdHMgPSB0ZXh0LnNsaWNlKGluZGV4ICsgMSwgaW5kZXggKyAxICsgd2lkdGgpXG5cbiAgICBpZiAoIXdpZHRoIHx8IGRpZ2l0cy5sZW5ndGggIT0gd2lkdGggfHwgIS9eWzAtOUEtRmEtZl0rJC91LnRlc3QoZGlnaXRzKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwidW5zdXBwb3J0ZWQgc3RyaW5nIGVzY2FwZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaW5kZXggKz0gd2lkdGhcbiAgICBjb25zdCB2YWx1ZSA9IE51bWJlci5wYXJzZUludChkaWdpdHMsIDE2KVxuXG4gICAgaWYgKGVzY2FwZSA9PSBcIlVcIiAmJiAodmFsdWUgPiAweDEwRkZGRiB8fCB2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhERkZGKSkge1xuICAgICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBlc2NhcGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGRlY29kZWQgKz0gZXNjYXBlID09IFwiVVwiID8gU3RyaW5nLmZyb21Db2RlUG9pbnQodmFsdWUpIDogU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSlcbiAgfVxuICBpZiAoIWhhc09ubHlVbmljb2RlU2NhbGFycyhkZWNvZGVkKSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiaW52YWxpZCBVbmljb2RlIHN0cmluZyBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICByZXR1cm4gZGVjb2RlZFxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBpbml0aWFsaXplZCBsb2NhbCBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIExvY2FsIHN0YXRlbWVudCBub2RlLlxuICogQHBhcmFtIHtDU2hhcnBDb250ZXh0fSBjb250ZXh0IC0gQ29tbWVudC1jYXJyaWVyIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb259IFNlbWFudGljIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TG9jYWwobm9kZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkge1xuICBjb25zdCBsb2NhdGlvbiA9IG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBkZWNsYXJhdGlvbiA9IHNlbWFudGljQ2hpbGRyZW4obm9kZSlbMF1cblxuICBpZiAoc2VtYW50aWNDaGlsZHJlbihub2RlKS5sZW5ndGggIT0gMSB8fCBkZWNsYXJhdGlvbj8udHlwZSAhPSBcInZhcmlhYmxlX2RlY2xhcmF0aW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCB0eXBlTm9kZSA9IGRlY2xhcmF0aW9uLmNoaWxkRm9yRmllbGROYW1lKFwidHlwZVwiKVxuICBjb25zdCBkZWNsYXJhdG9ycyA9IHNlbWFudGljQ2hpbGRyZW4oZGVjbGFyYXRpb24pLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgPT0gXCJ2YXJpYWJsZV9kZWNsYXJhdG9yXCIpXG5cbiAgaWYgKGRlY2xhcmF0b3JzLmxlbmd0aCAhPSAxIHx8IHNlbWFudGljQ2hpbGRyZW4oZGVjbGFyYXRpb24pLmxlbmd0aCAhPSAyKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibG9jYWwgZGVjbGFyYXRpb24gc2hhcGVcIiwgbG9jYXRpb24pXG4gIH1cbiAgY29uc3QgZGVjbGFyYXRvciA9IGRlY2xhcmF0b3JzWzBdXG4gIGNvbnN0IG5hbWVOb2RlID0gcmVxdWlyZWRGaWVsZChkZWNsYXJhdG9yLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdmFsdWVzID0gc2VtYW50aWNDaGlsZHJlbihkZWNsYXJhdG9yKS5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC5pZCAhPSBuYW1lTm9kZS5pZClcblxuICBpZiAodmFsdWVzLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJsb2NhbCB3aXRob3V0IG9uZSBpbml0aWFsaXplclwiLCBsb2NhdGlvbilcbiAgY29uc3QgbmFtZSA9IGlkZW50aWZpZXIobmFtZU5vZGUsIFwibG9jYWxcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobmFtZSA9PSBcIlN5c3RlbVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJsb2NhbCBjYXB0dXJlcyBTeXN0ZW1cIiwgbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3Qgb3BlcmF0b3IgPSBvcGVyYXRvclRva2VuKGRlY2xhcmF0b3IsIG5ldyBTZXQoW1wiPVwiXSksIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG11dGFibGUgPSAhdGFrZUltbXV0YWJsZU1hcmtlcihub2RlLCBjb250ZXh0KVxuXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBpbml0aWFsaXplcjogY29udmVydEV4cHJlc3Npb24odmFsdWVzWzBdLCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJMb2NhbERlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uLFxuICAgIG11dGFibGUsXG4gICAgbmFtZSxcbiAgICB0eXBlOiBjb252ZXJ0VHlwZSh0eXBlTm9kZSwgYExvY2FsICcke25hbWV9J2AsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlLCB0cnVlKVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKSwgb3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENsYWltcyBhbiBleGFjdGx5IGFkamFjZW50IGltbXV0YWJsZS1sb2NhbCBjYXJyaWVyIGlmIHByZXNlbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBMb2NhbCBkZWNsYXJhdGlvbiBub2RlLlxuICogQHBhcmFtIHtDU2hhcnBDb250ZXh0fSBjb250ZXh0IC0gQ29tbWVudC1jYXJyaWVyIHN0YXRlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxvY2FsIGlzIGltbXV0YWJsZS5cbiAqL1xuZnVuY3Rpb24gdGFrZUltbXV0YWJsZU1hcmtlcihub2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1hcmtlciA9IGNvbnRleHQuY29tbWVudHMuZmluZCgoY29tbWVudCkgPT4gY29tbWVudC50ZXh0ID09IGltbXV0YWJsZU1hcmtlciAmJlxuICAgIGNvbW1lbnQuZW5kUG9zaXRpb24ucm93ICsgMSA9PSBub2RlLnN0YXJ0UG9zaXRpb24ucm93ICYmIGNvbW1lbnQuc3RhcnRQb3NpdGlvbi5jb2x1bW4gPT0gbm9kZS5zdGFydFBvc2l0aW9uLmNvbHVtbilcblxuICBpZiAoIW1hcmtlcikgcmV0dXJuIGZhbHNlXG4gIGNvbnRleHQudXNlZEltbXV0YWJsZU1hcmtlcnMuYWRkKG1hcmtlcilcbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgc3VwcG9ydGVkIEMjIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwidHJlZS1zaXR0ZXJcIikuU3ludGF4Tm9kZX0gbm9kZSAtIFN0YXRlbWVudCBub2RlLlxuICogQHBhcmFtIHtDU2hhcnBDb250ZXh0fSBjb250ZXh0IC0gQ29tbWVudC1jYXJyaWVyIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudH0gU2VtYW50aWMgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3RhdGVtZW50KG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobm9kZS50eXBlID09IFwibG9jYWxfZGVjbGFyYXRpb25fc3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0TG9jYWwobm9kZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgaWYgKG5vZGUudHlwZSA9PSBcInJldHVybl9zdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihub2RlKVxuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSAxKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJyZXR1cm4gd2l0aG91dCBvbmUgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICByZXR1cm4ge2V4cHJlc3Npb246IGNvbnZlcnRFeHByZXNzaW9uKGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUmV0dXJuU3RhdGVtZW50XCIpLCBsb2NhdGlvbn1cbiAgfVxuICBpZiAobm9kZS50eXBlID09IFwiaWZfc3RhdGVtZW50XCIpIHJldHVybiBjb252ZXJ0SWYobm9kZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgaWYgKG5vZGUudHlwZSA9PSBcImV4cHJlc3Npb25fc3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHNlbWFudGljQ2hpbGRyZW4obm9kZSlcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT0gMSkgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIG5vZGUudHlwZSwgbG9jYXRpb24pXG4gICAgaWYgKGNoaWxkcmVuWzBdLnR5cGUgPT0gXCJhc3NpZ25tZW50X2V4cHJlc3Npb25cIikgcmV0dXJuIGNvbnZlcnRBc3NpZ25tZW50KGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbilcbiAgICByZXR1cm4gY29udmVydFByaW50KGNoaWxkcmVuWzBdLCBmaWxlbmFtZSwgc291cmNlLCBsb2NhdGlvbilcbiAgfVxuICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgbm9kZS50eXBlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgcGxhaW4gaWRlbnRpZmllciBhc3NpZ25tZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQXNzaWdubWVudCBleHByZXNzaW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIE93bmluZyBzdGF0ZW1lbnQgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQXNzaWdubWVudFN0YXRlbWVudH0gU2VtYW50aWMgYXNzaWdubWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydEFzc2lnbm1lbnQobm9kZSwgZmlsZW5hbWUsIHNvdXJjZSwgbG9jYXRpb24pIHtcbiAgY29uc3QgbGVmdCA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJsZWZ0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHJpZ2h0ID0gcmVxdWlyZWRGaWVsZChub2RlLCBcInJpZ2h0XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG9wZXJhdG9yID0gb3BlcmF0b3JUb2tlbihub2RlLCBuZXcgU2V0KFtcIj1cIl0pLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChsZWZ0LnR5cGUgIT0gXCJpZGVudGlmaWVyXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIG5vZGVMb2NhdGlvbihsZWZ0LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgY29uc3QgbmFtZSA9IGlkZW50aWZpZXIobGVmdCwgXCJhc3NpZ25tZW50IHRhcmdldFwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lTG9jYXRpb24gPSBub2RlTG9jYXRpb24obGVmdCwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgZXhwcmVzc2lvbjogY29udmVydEV4cHJlc3Npb24ocmlnaHQsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGtpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb24sXG4gICAgdGFyZ2V0OiB3aXRoUGFyc2VyUmFuZ2VzKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSwgbG9jYXRpb246IG5hbWVMb2NhdGlvbiwgbmFtZX0sIHtuYW1lOiBuYW1lTG9jYXRpb259KVxuICB9LCB7b3BlcmF0b3I6IG5vZGVMb2NhdGlvbihvcGVyYXRvciwgZmlsZW5hbWUsIHNvdXJjZSl9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBleGFjdCBTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUgcHJpbnQgc2NhZmZvbGQuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBJbnZvY2F0aW9uIG5vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlIHRleHQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbiAtIE93bmluZyBzdGF0ZW1lbnQgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpbnRTdGF0ZW1lbnR9IFNlbWFudGljIHByaW50IHN0YXRlbWVudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFByaW50KG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UsIGxvY2F0aW9uKSB7XG4gIGlmIChub2RlLnR5cGUgIT0gXCJpbnZvY2F0aW9uX2V4cHJlc3Npb25cIikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiZXhwcmVzc2lvbiBzdGF0ZW1lbnQgb3RoZXIgdGhhbiBwcmludFwiLCBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIGNvbnN0IGNhbGxlZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJmdW5jdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhcmd1bWVudHNOb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcImFyZ3VtZW50c1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBhcmd1bWVudHNfID0gc2VtYW50aWNDaGlsZHJlbihhcmd1bWVudHNOb2RlKVxuXG4gIGlmICghaXNQcmludFJlY2VpdmVyKGNhbGxlZSkgfHwgYXJndW1lbnRzTm9kZS50eXBlICE9IFwiYXJndW1lbnRfbGlzdFwiIHx8IGFyZ3VtZW50c18ubGVuZ3RoICE9IDEpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJwcmludCBjYWxsIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihub2RlLCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICByZXR1cm4ge2V4cHJlc3Npb246IGNvbnZlcnRBcmd1bWVudChhcmd1bWVudHNfWzBdLCBmaWxlbmFtZSwgc291cmNlKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiUHJpbnRTdGF0ZW1lbnRcIiksIGxvY2F0aW9ufVxufVxuXG4vKipcbiAqIFJlY29nbml6ZXMgb25seSB0aGUgZnVsbHkgcXVhbGlmaWVkIHByaW50IHJlY2VpdmVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQ2FuZGlkYXRlIGNhbGxlZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBjYWxsZWUgaXMgdGhlIGV4YWN0IHByaW50IHJlY2VpdmVyLlxuICovXG5mdW5jdGlvbiBpc1ByaW50UmVjZWl2ZXIobm9kZSkge1xuICBpZiAobm9kZS50eXBlICE9IFwibWVtYmVyX2FjY2Vzc19leHByZXNzaW9uXCIpIHJldHVybiBmYWxzZVxuICBjb25zdCBvdXRlckV4cHJlc3Npb24gPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwiZXhwcmVzc2lvblwiKVxuICBjb25zdCBvdXRlck5hbWUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwibmFtZVwiKVxuXG4gIGlmIChvdXRlck5hbWU/LnRleHQgIT0gXCJXcml0ZUxpbmVcIiB8fCBvdXRlckV4cHJlc3Npb24/LnR5cGUgIT0gXCJtZW1iZXJfYWNjZXNzX2V4cHJlc3Npb25cIikgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvdXRlckV4cHJlc3Npb24uY2hpbGRGb3JGaWVsZE5hbWUoXCJleHByZXNzaW9uXCIpPy50eXBlID09IFwiaWRlbnRpZmllclwiICYmXG4gICAgb3V0ZXJFeHByZXNzaW9uLmNoaWxkRm9yRmllbGROYW1lKFwiZXhwcmVzc2lvblwiKT8udGV4dCA9PSBcIlN5c3RlbVwiICYmIG91dGVyRXhwcmVzc2lvbi5jaGlsZEZvckZpZWxkTmFtZShcIm5hbWVcIik/LnRleHQgPT0gXCJDb25zb2xlXCJcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBvbmUgYnJhY2VkIGNvbmRpdGlvbmFsIGFuZCBvcHRpb25hbCBhbHRlcm5hdGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBJZi1zdGF0ZW1lbnQgbm9kZS5cbiAqIEBwYXJhbSB7Q1NoYXJwQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQtY2FycmllciBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gU2VtYW50aWMgY29uZGl0aW9uYWwuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRJZihub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNvbmRpdGlvbiA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJjb25kaXRpb25cIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY29uc2VxdWVuY2UgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiY29uc2VxdWVuY2VcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYWx0ZXJuYXRpdmUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwiYWx0ZXJuYXRpdmVcIilcblxuICByZXR1cm4ge1xuICAgIC4uLihhbHRlcm5hdGl2ZSA/IHthbHRlcm5hdGU6IGFsdGVybmF0aXZlLnR5cGUgPT0gXCJpZl9zdGF0ZW1lbnRcIlxuICAgICAgPyB7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiQmxvY2tcIiksIGxvY2F0aW9uOiBub2RlTG9jYXRpb24oYWx0ZXJuYXRpdmUsIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgICAgICAgIHN0YXRlbWVudHM6IFtjb252ZXJ0SWYoYWx0ZXJuYXRpdmUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpXX1cbiAgICAgIDogY29udmVydEJsb2NrKGFsdGVybmF0aXZlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKX0gOiB7fSksXG4gICAgY29uZGl0aW9uOiBjb252ZXJ0RXhwcmVzc2lvbihjb25kaXRpb24sIGZpbGVuYW1lLCBzb3VyY2UpLFxuICAgIGNvbnNlcXVlbnQ6IGNvbnZlcnRCbG9jayhjb25zZXF1ZW5jZSwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiSWZTdGF0ZW1lbnRcIiksXG4gICAgbG9jYXRpb25cbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBsZXhpY2FsIEMjIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCJ0cmVlLXNpdHRlclwiKS5TeW50YXhOb2RlfSBub2RlIC0gQmxvY2sgbm9kZS5cbiAqIEBwYXJhbSB7Q1NoYXJwQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQtY2FycmllciBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gU2VtYW50aWMgYmxvY2suXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCbG9jayhub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5vZGUudHlwZSAhPSBcImJsb2NrXCIpIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBub2RlLnR5cGUsIGxvY2F0aW9uKVxuICByZXR1cm4ge2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkJsb2NrXCIpLCBsb2NhdGlvbixcbiAgICBzdGF0ZW1lbnRzOiBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpLm1hcCgoc3RhdGVtZW50KSA9PiBjb252ZXJ0U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgZmlsZW5hbWUsIHNvdXJjZSkpfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIG9uZSBleGFjdCBwcml2YXRlIHN0YXRpYyBzZW1hbnRpYyBtZXRob2QuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNZXRob2Qgbm9kZS5cbiAqIEBwYXJhbSB7Q1NoYXJwQ29udGV4dH0gY29udGV4dCAtIENvbW1lbnQtY2FycmllciBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBTZW1hbnRpYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29udmVydEZ1bmN0aW9uKG5vZGUsIGNvbnRleHQsIGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgY29uc3QgbG9jYXRpb24gPSBub2RlTG9jYXRpb24obm9kZSwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgY2hpbGRyZW4gPSBzZW1hbnRpY0NoaWxkcmVuKG5vZGUpXG4gIGNvbnN0IG1vZGlmaWVycyA9IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgPT0gXCJtb2RpZmllclwiKVxuXG4gIGlmIChub2RlLnR5cGUgIT0gXCJtZXRob2RfZGVjbGFyYXRpb25cIiB8fCBtb2RpZmllcnMubWFwKCh7dGV4dH0pID0+IHRleHQpLmpvaW4oXCIgXCIpICE9IFwicHJpdmF0ZSBzdGF0aWNcIiB8fFxuICAgIGNoaWxkcmVuLmxlbmd0aCAhPSA2IHx8IG5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoXCJ0eXBlX3BhcmFtZXRlcnNcIikgfHwgbm9kZS5jaGlsZEZvckZpZWxkTmFtZShcImNvbnN0cmFpbnRzXCIpIHx8XG4gICAgIW5vZGUuY2hpbGRGb3JGaWVsZE5hbWUoXCJib2R5XCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibWV0aG9kIHNjYWZmb2xkaW5nXCIsIGxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWVOb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgcGFyYW1ldGVyc05vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwicGFyYW1ldGVyc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCByZXR1cm5Ob2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcInJldHVybnNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYm9keU5vZGUgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwiYm9keVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBuYW1lID0gaWRlbnRpZmllcihuYW1lTm9kZSwgXCJmdW5jdGlvblwiLCBmaWxlbmFtZSwgc291cmNlKVxuXG4gIGlmIChbXCJNYWluXCIsIFwiUHJvZ3JhbVwiLCBcIlN5c3RlbVwiXS5pbmNsdWRlcyhuYW1lKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBgcmVzZXJ2ZWQgc2VtYW50aWMgbWV0aG9kICcke25hbWV9J2AsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVyTm9kZXMgPSBzZW1hbnRpY0NoaWxkcmVuKHBhcmFtZXRlcnNOb2RlKVxuXG4gIGlmIChwYXJhbWV0ZXJOb2Rlcy5sZW5ndGggIT0gMiB8fCBwYXJhbWV0ZXJOb2Rlcy5zb21lKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50eXBlICE9IFwicGFyYW1ldGVyXCIpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIGNvdW50IG9yIHNoYXBlXCIsIG5vZGVMb2NhdGlvbihwYXJhbWV0ZXJzTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgcGFyYW1ldGVycyA9IHBhcmFtZXRlck5vZGVzLm1hcCgocGFyYW1ldGVyTm9kZSkgPT4gY29udmVydFBhcmFtZXRlcihwYXJhbWV0ZXJOb2RlLCBmaWxlbmFtZSwgc291cmNlKSlcblxuICByZXR1cm4gd2l0aFBhcnNlclJhbmdlcyh7XG4gICAgYm9keTogY29udmVydEJsb2NrKGJvZHlOb2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIpLFxuICAgIGxvY2F0aW9uLFxuICAgIG5hbWUsXG4gICAgcGFyYW1ldGVycyxcbiAgICByZXR1cm5UeXBlOiBjb252ZXJ0VHlwZShyZXR1cm5Ob2RlLCBgRnVuY3Rpb24gJyR7bmFtZX0nIHJldHVybmAsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgb25lIGV4cGxpY2l0bHkgdHlwZWQgdW5tb2RpZmllZCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBQYXJhbWV0ZXIgbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJ9IFNlbWFudGljIHBhcmFtZXRlci5cbiAqL1xuZnVuY3Rpb24gY29udmVydFBhcmFtZXRlcihub2RlLCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IG5hbWVOb2RlID0gcmVxdWlyZWRGaWVsZChub2RlLCBcIm5hbWVcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgdHlwZU5vZGUgPSBub2RlLmNoaWxkRm9yRmllbGROYW1lKFwidHlwZVwiKVxuXG4gIGlmIChzZW1hbnRpY0NoaWxkcmVuKG5vZGUpLmxlbmd0aCAhPSAyKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJwYXJhbWV0ZXIgbW9kaWZpZXJzIG9yIGRlZmF1bHRzXCIsIGxvY2F0aW9uKVxuICBjb25zdCBuYW1lID0gaWRlbnRpZmllcihuYW1lTm9kZSwgXCJwYXJhbWV0ZXJcIiwgZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAobmFtZSA9PSBcIlN5c3RlbVwiKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJwYXJhbWV0ZXIgY2FwdHVyZXMgU3lzdGVtXCIsIG5vZGVMb2NhdGlvbihuYW1lTm9kZSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIHJldHVybiB3aXRoUGFyc2VyUmFuZ2VzKHtcbiAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJQYXJhbWV0ZXJcIiksIGxvY2F0aW9uLCBuYW1lLFxuICAgIHR5cGU6IGNvbnZlcnRUeXBlKHR5cGVOb2RlLCBgUGFyYW1ldGVyICcke25hbWV9J2AsIGxvY2F0aW9uLCBmaWxlbmFtZSwgc291cmNlKVxuICB9LCB7bmFtZTogbm9kZUxvY2F0aW9uKG5hbWVOb2RlLCBmaWxlbmFtZSwgc291cmNlKX0pXG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGV4YWN0IGZpbmFsIHplcm8tYXJndW1lbnQgTWFpbiBtZXRob2QuXG4gKiBAcGFyYW0ge2ltcG9ydChcInRyZWUtc2l0dGVyXCIpLlN5bnRheE5vZGV9IG5vZGUgLSBNYWluIG1ldGhvZCBub2RlLlxuICogQHBhcmFtIHtDU2hhcnBDb250ZXh0fSBjb250ZXh0IC0gQ29tbWVudC1jYXJyaWVyIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVudHJ5UG9pbnR9IFNlbWFudGljIGVudHJ5IHBvaW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TWFpbihub2RlLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSB7XG4gIGNvbnN0IGxvY2F0aW9uID0gbm9kZUxvY2F0aW9uKG5vZGUsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNoaWxkcmVuID0gc2VtYW50aWNDaGlsZHJlbihub2RlKVxuICBjb25zdCBtb2RpZmllcnMgPSBjaGlsZHJlbi5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC50eXBlID09IFwibW9kaWZpZXJcIilcbiAgY29uc3QgbmFtZSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IHJldHVybnMgPSByZXF1aXJlZEZpZWxkKG5vZGUsIFwicmV0dXJuc1wiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBwYXJhbWV0ZXJzID0gcmVxdWlyZWRGaWVsZChub2RlLCBcInBhcmFtZXRlcnNcIiwgZmlsZW5hbWUsIHNvdXJjZSlcbiAgY29uc3QgYm9keSA9IHJlcXVpcmVkRmllbGQobm9kZSwgXCJib2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCAhPSA2IHx8IG1vZGlmaWVycy5tYXAoKHt0ZXh0fSkgPT4gdGV4dCkuam9pbihcIiBcIikgIT0gXCJwcml2YXRlIHN0YXRpY1wiIHx8IG5hbWUudGV4dCAhPSBcIk1haW5cIiB8fCByZXR1cm5zLnRleHQgIT0gXCJ2b2lkXCIgfHxcbiAgICBzZW1hbnRpY0NoaWxkcmVuKHBhcmFtZXRlcnMpLmxlbmd0aCAhPSAwKSByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJNYWluIHNjYWZmb2xkaW5nXCIsIGxvY2F0aW9uKVxuICByZXR1cm4ge2JvZHk6IGNvbnZlcnRCbG9jayhib2R5LCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSwga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiRW50cnlQb2ludFwiKSwgbG9jYXRpb259XG59XG5cbi8qKlxuICogUmVxdWlyZXMgZXhhY3RseSBvbmUgY2hlY2tlZCB3cmFwcGVyIGFyb3VuZCBldmVyeSBpbnRlZ2VyIGFyaXRobWV0aWMgcm9vdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFJlc29sdmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNoZWNrZWRBcml0aG1ldGljKG1vZHVsZSkge1xuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXX0gKi9cbiAgY29uc3QgZXhwcmVzc2lvbnMgPSBbXVxuICAvKipcbiAgICogQ29sbGVjdHMgZXhwcmVzc2lvbnMgcmVjdXJzaXZlbHkuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIEN1cnJlbnQgZXhwcmVzc2lvbi5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25zdCB2aXNpdEV4cHJlc3Npb24gPSAoZXhwcmVzc2lvbikgPT4ge1xuICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcmVzc2lvbilcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHZpc2l0RXhwcmVzc2lvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gICAgZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oZXhwcmVzc2lvbi5sZWZ0KVxuICAgICAgdmlzaXRFeHByZXNzaW9uKGV4cHJlc3Npb24ucmlnaHQpXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKHZpc2l0RXhwcmVzc2lvbilcbiAgfVxuICAvKipcbiAgICogQ29sbGVjdHMgZXhwcmVzc2lvbnMgZnJvbSBhIHNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIEN1cnJlbnQgYmxvY2suXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29uc3QgdmlzaXRCbG9jayA9IChibG9jaykgPT4gYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQpID0+IHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIpXG4gICAgZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICB2aXNpdEV4cHJlc3Npb24oc3RhdGVtZW50LmV4cHJlc3Npb24pXG4gICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24pIHZpc2l0RXhwcmVzc2lvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgdmlzaXRFeHByZXNzaW9uKHN0YXRlbWVudC5jb25kaXRpb24pXG4gICAgICB2aXNpdEJsb2NrKHN0YXRlbWVudC5jb25zZXF1ZW50KVxuICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHZpc2l0QmxvY2soc3RhdGVtZW50LmFsdGVybmF0ZSlcbiAgICB9XG4gIH0pXG5cbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbikgPT4gdmlzaXRCbG9jayhkZWNsYXJhdGlvbi5ib2R5KSlcbiAgdmlzaXRCbG9jayhtb2R1bGUuZW50cnlQb2ludC5ib2R5KVxuICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgZXhwcmVzc2lvbnMpIHtcbiAgICBjb25zdCBhcml0aG1ldGljID0gZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIgfHxcbiAgICAgIGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKVxuXG4gICAgaWYgKGFyaXRobWV0aWMgIT0gY2hlY2tlZEFyaXRobWV0aWMuaGFzKGV4cHJlc3Npb24pKSB7XG4gICAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgYXJpdGhtZXRpYyA/IFwiaW50ZWdlciBhcml0aG1ldGljIHdpdGhvdXQgZXhhY3QgY2hlY2tlZCB3cmFwcGVyXCIgOiBcImNoZWNrZWQgbm9uLWludGVnZXIgZXhwcmVzc2lvblwiLFxuICAgICAgICBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgc3RyaWN0IFRhc2sgMDE3IEMjIHByb2ZpbGUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZ319IGlucHV0IC0gUGFyc2VyIGlucHV0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNTaGFycCh7ZmlsZW5hbWUsIHNvdXJjZX0pIHtcbiAgaWYgKCFoYXNPbmx5VW5pY29kZVNjYWxhcnMoc291cmNlKSkge1xuICAgIGNvbnN0IGludmFsaWRPZmZzZXQgPSBmaXJzdExvbmVTdXJyb2dhdGVPZmZzZXQoc291cmNlKVxuXG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJQQVJTRV9FUlJPUlwiLCBsYW5ndWFnZTogXCJjc2hhcnBcIixcbiAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIGludmFsaWRPZmZzZXQsIGludmFsaWRPZmZzZXQgKyAxKSxcbiAgICAgIG1lc3NhZ2U6IFwiQyMgc291cmNlIGNvbnRhaW5zIGFuIGludmFsaWQgbG9uZSBVVEYtMTYgc3Vycm9nYXRlLlwifSlcbiAgfVxuICBsZXQgdHJlZVxuXG4gIHRyeSB7XG4gICAgdHJlZSA9IHBhcnNlci5wYXJzZShzb3VyY2UpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHBhcnNlRmFpbHVyZShcImNzaGFycFwiLCBlcnJvcilcbiAgfVxuICBjb25zdCByb290ID0gdHJlZS5yb290Tm9kZVxuXG4gIHZhbGlkYXRlUGFyc2VyVHJlZShyb290LCBmaWxlbmFtZSwgc291cmNlKVxuICBpZiAocm9vdC50eXBlICE9IFwiY29tcGlsYXRpb25fdW5pdFwiKSB0aHJvdyBuZXcgRXJyb3IoYFRyZWUtc2l0dGVyIHJldHVybmVkIEMjIHJvb3QgJyR7cm9vdC50eXBlfScuYClcbiAgY29uc3QgY2hpbGRyZW4gPSBzZW1hbnRpY0NoaWxkcmVuKHJvb3QpXG4gIGNvbnN0IGxvY2F0aW9uID0gbW9kdWxlTG9jYXRpb24oZmlsZW5hbWUsIHNvdXJjZSlcblxuICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9IDMgfHwgY2hpbGRyZW5bMF0udHlwZSAhPSBcInByZXByb2NfbnVsbGFibGVcIiB8fFxuICAgICEvXiNudWxsYWJsZSBlbmFibGUoPzooPzpcXHJcXG58XFxufFxccikpKyQvdS50ZXN0KGNoaWxkcmVuWzBdLnRleHQpIHx8XG4gICAgY2hpbGRyZW5bMV0udHlwZSAhPSBcImZpbGVfc2NvcGVkX25hbWVzcGFjZV9kZWNsYXJhdGlvblwiIHx8IGNoaWxkcmVuWzJdLnR5cGUgIT0gXCJjbGFzc19kZWNsYXJhdGlvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwiY29tcGlsYXRpb24tdW5pdCBzY2FmZm9sZGluZ1wiLCBsb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lc3BhY2VOYW1lID0gcmVxdWlyZWRGaWVsZChjaGlsZHJlblsxXSwgXCJuYW1lXCIsIGZpbGVuYW1lLCBzb3VyY2UpXG5cbiAgaWYgKG5hbWVzcGFjZU5hbWUudGV4dCAhPSBcIlNlbWFudGlmb2xkLkdlbmVyYXRlZFwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwibmFtZXNwYWNlIHNjYWZmb2xkaW5nXCIsIG5vZGVMb2NhdGlvbihjaGlsZHJlblsxXSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY2xhc3NOb2RlID0gY2hpbGRyZW5bMl1cbiAgY29uc3QgY2xhc3NOYW1lID0gcmVxdWlyZWRGaWVsZChjbGFzc05vZGUsIFwibmFtZVwiLCBmaWxlbmFtZSwgc291cmNlKVxuICBjb25zdCBjbGFzc0JvZHkgPSByZXF1aXJlZEZpZWxkKGNsYXNzTm9kZSwgXCJib2R5XCIsIGZpbGVuYW1lLCBzb3VyY2UpXG4gIGNvbnN0IGNsYXNzQ2hpbGRyZW4gPSBzZW1hbnRpY0NoaWxkcmVuKGNsYXNzTm9kZSlcbiAgY29uc3QgY2xhc3NNb2RpZmllcnMgPSBjbGFzc0NoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLnR5cGUgPT0gXCJtb2RpZmllclwiKVxuXG4gIGlmIChjbGFzc0NoaWxkcmVuLmxlbmd0aCAhPSA0IHx8IGNsYXNzTmFtZS50ZXh0ICE9IFwiUHJvZ3JhbVwiIHx8XG4gICAgY2xhc3NNb2RpZmllcnMubWFwKCh7dGV4dH0pID0+IHRleHQpLmpvaW4oXCIgXCIpICE9IFwiaW50ZXJuYWwgc3RhdGljXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRTeW50YXgoXCJjc2hhcnBcIiwgXCJQcm9ncmFtIGNsYXNzIHNjYWZmb2xkaW5nXCIsIG5vZGVMb2NhdGlvbihjbGFzc05vZGUsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB9XG4gIGNvbnN0IG1lbWJlcnMgPSBzZW1hbnRpY0NoaWxkcmVuKGNsYXNzQm9keSlcblxuICBpZiAobWVtYmVycy5sZW5ndGggPCAyIHx8IG1lbWJlcnMuc29tZSgobWVtYmVyKSA9PiBtZW1iZXIudHlwZSAhPSBcIm1ldGhvZF9kZWNsYXJhdGlvblwiKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIlByb2dyYW0gbWVtYmVyc1wiLCBub2RlTG9jYXRpb24oY2xhc3NCb2R5LCBmaWxlbmFtZSwgc291cmNlKSlcbiAgfVxuICBjb25zdCBtYWluTm9kZXMgPSBtZW1iZXJzLmZpbHRlcigobWVtYmVyKSA9PiBtZW1iZXIuY2hpbGRGb3JGaWVsZE5hbWUoXCJuYW1lXCIpPy50ZXh0ID09IFwiTWFpblwiKVxuXG4gIGlmIChtYWluTm9kZXMubGVuZ3RoICE9IDEgfHwgbWVtYmVycy5hdCgtMSk/LmlkICE9IG1haW5Ob2Rlc1swXS5pZCkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZFN5bnRheChcImNzaGFycFwiLCBcIk1haW4gb3JkZXJpbmdcIiwgbm9kZUxvY2F0aW9uKGNsYXNzQm9keSwgZmlsZW5hbWUsIHNvdXJjZSkpXG4gIH1cbiAgY29uc3QgY29tbWVudHMgPSByb290LmRlc2NlbmRhbnRzT2ZUeXBlKFwiY29tbWVudFwiKVxuICBjb25zdCBjb250ZXh0ID0ge2NvbW1lbnRzLCB1c2VkSW1tdXRhYmxlTWFya2VyczogbmV3IFNldCgpfVxuICBjb25zdCBtb2R1bGUgPSB7XG4gICAgZW50cnlQb2ludDogY29udmVydE1haW4obWFpbk5vZGVzWzBdLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSxcbiAgICBmdW5jdGlvbnM6IG1lbWJlcnMuc2xpY2UoMCwgLTEpLm1hcCgobWVtYmVyKSA9PiBjb252ZXJ0RnVuY3Rpb24obWVtYmVyLCBjb250ZXh0LCBmaWxlbmFtZSwgc291cmNlKSksXG4gICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiTW9kdWxlXCIpLFxuICAgIGxvY2F0aW9uXG4gIH1cbiAgY29uc3QgdW51c2VkTWFya2VyID0gY29tbWVudHMuZmluZCgoY29tbWVudCkgPT4gY29tbWVudC50ZXh0ID09IGltbXV0YWJsZU1hcmtlciAmJiAhY29udGV4dC51c2VkSW1tdXRhYmxlTWFya2Vycy5oYXMoY29tbWVudCkpXG5cbiAgaWYgKHVudXNlZE1hcmtlcikgcmV0dXJuIHVuc3VwcG9ydGVkU3ludGF4KFwiY3NoYXJwXCIsIFwidW5hdHRhY2hlZCBpbW11dGFibGUgbWFya2VyXCIsIG5vZGVMb2NhdGlvbih1bnVzZWRNYXJrZXIsIGZpbGVuYW1lLCBzb3VyY2UpKVxuICB2YWxpZGF0ZVBhcnNlZE1vZHVsZShtb2R1bGUsIFwiY3NoYXJwXCIpXG4gIHZhbGlkYXRlQ2hlY2tlZEFyaXRobWV0aWMobW9kdWxlKVxuICByZXR1cm4gbW9kdWxlXG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Parses the strict Task 029 Dart VM/native profile through the qualified grammar.
3
+ * @param {{filename: string, source: string}} input Exact source request.
4
+ * @returns {import("../semantic/types.js").SemanticModule} Semantic module.
5
+ */
6
+ export declare function parseDart({ filename, source }: {
7
+ filename: string;
8
+ source: string;
9
+ }): import("../semantic/types.js").SemanticModule;
10
+ //# sourceMappingURL=dart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dart.d.ts","sourceRoot":"","sources":["../../../src/frontends/dart.js"],"names":[],"mappings":"AAs6BA;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAHjC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAGA,GAF/B,OAAO,sBAAsB,EAAE,cAAc,CAyBzD"}