ws-spec-kit 0.1.0-beta.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 (353) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +79 -0
  3. package/dist/adapters/cli/output.d.ts +15 -0
  4. package/dist/adapters/cli/output.js +21 -0
  5. package/dist/adapters/cli/output.js.map +1 -0
  6. package/dist/adapters/cli/workflow.d.ts +25 -0
  7. package/dist/adapters/cli/workflow.js +131 -0
  8. package/dist/adapters/cli/workflow.js.map +1 -0
  9. package/dist/adapters/connectors/git-native.d.ts +23 -0
  10. package/dist/adapters/connectors/git-native.js +521 -0
  11. package/dist/adapters/connectors/git-native.js.map +1 -0
  12. package/dist/adapters/connectors/github-cli.d.ts +23 -0
  13. package/dist/adapters/connectors/github-cli.js +213 -0
  14. package/dist/adapters/connectors/github-cli.js.map +1 -0
  15. package/dist/adapters/connectors/gitlab-cli.d.ts +23 -0
  16. package/dist/adapters/connectors/gitlab-cli.js +199 -0
  17. package/dist/adapters/connectors/gitlab-cli.js.map +1 -0
  18. package/dist/adapters/connectors/lark-cli.d.ts +24 -0
  19. package/dist/adapters/connectors/lark-cli.js +296 -0
  20. package/dist/adapters/connectors/lark-cli.js.map +1 -0
  21. package/dist/adapters/process/redaction.d.ts +2 -0
  22. package/dist/adapters/process/redaction.js +51 -0
  23. package/dist/adapters/process/redaction.js.map +1 -0
  24. package/dist/adapters/process/spawn-json.d.ts +37 -0
  25. package/dist/adapters/process/spawn-json.js +312 -0
  26. package/dist/adapters/process/spawn-json.js.map +1 -0
  27. package/dist/adapters/skills/claude.d.ts +1 -0
  28. package/dist/adapters/skills/claude.js +3 -0
  29. package/dist/adapters/skills/claude.js.map +1 -0
  30. package/dist/adapters/skills/codex.d.ts +1 -0
  31. package/dist/adapters/skills/codex.js +3 -0
  32. package/dist/adapters/skills/codex.js.map +1 -0
  33. package/dist/adapters/skills/cursor.d.ts +1 -0
  34. package/dist/adapters/skills/cursor.js +3 -0
  35. package/dist/adapters/skills/cursor.js.map +1 -0
  36. package/dist/adapters/skills/generic.d.ts +1 -0
  37. package/dist/adapters/skills/generic.js +2 -0
  38. package/dist/adapters/skills/generic.js.map +1 -0
  39. package/dist/adapters/skills/install.d.ts +28 -0
  40. package/dist/adapters/skills/install.js +571 -0
  41. package/dist/adapters/skills/install.js.map +1 -0
  42. package/dist/application/acquire.d.ts +60 -0
  43. package/dist/application/acquire.js +964 -0
  44. package/dist/application/acquire.js.map +1 -0
  45. package/dist/application/application.d.ts +21 -0
  46. package/dist/application/application.js +31 -0
  47. package/dist/application/application.js.map +1 -0
  48. package/dist/application/artifact-reader.d.ts +1 -0
  49. package/dist/application/artifact-reader.js +150 -0
  50. package/dist/application/artifact-reader.js.map +1 -0
  51. package/dist/application/artifact-writer.d.ts +1 -0
  52. package/dist/application/artifact-writer.js +268 -0
  53. package/dist/application/artifact-writer.js.map +1 -0
  54. package/dist/application/artifact.d.ts +28 -0
  55. package/dist/application/artifact.js +523 -0
  56. package/dist/application/artifact.js.map +1 -0
  57. package/dist/application/decide.d.ts +12 -0
  58. package/dist/application/decide.js +168 -0
  59. package/dist/application/decide.js.map +1 -0
  60. package/dist/application/doctor-connectors.d.ts +34 -0
  61. package/dist/application/doctor-connectors.js +99 -0
  62. package/dist/application/doctor-connectors.js.map +1 -0
  63. package/dist/application/external-action.d.ts +164 -0
  64. package/dist/application/external-action.js +670 -0
  65. package/dist/application/external-action.js.map +1 -0
  66. package/dist/application/initial-stages.d.ts +3 -0
  67. package/dist/application/initial-stages.js +7 -0
  68. package/dist/application/initial-stages.js.map +1 -0
  69. package/dist/application/inspect.d.ts +2 -0
  70. package/dist/application/inspect.js +31 -0
  71. package/dist/application/inspect.js.map +1 -0
  72. package/dist/application/profile.d.ts +32 -0
  73. package/dist/application/profile.js +70 -0
  74. package/dist/application/profile.js.map +1 -0
  75. package/dist/application/snapshot.d.ts +75 -0
  76. package/dist/application/snapshot.js +338 -0
  77. package/dist/application/snapshot.js.map +1 -0
  78. package/dist/application/start.d.ts +43 -0
  79. package/dist/application/start.js +360 -0
  80. package/dist/application/start.js.map +1 -0
  81. package/dist/application/state.d.ts +17 -0
  82. package/dist/application/state.js +94 -0
  83. package/dist/application/state.js.map +1 -0
  84. package/dist/application/submit.d.ts +18 -0
  85. package/dist/application/submit.js +1090 -0
  86. package/dist/application/submit.js.map +1 -0
  87. package/dist/cli/commands/core.d.ts +2 -0
  88. package/dist/cli/commands/core.js +205 -0
  89. package/dist/cli/commands/core.js.map +1 -0
  90. package/dist/cli/commands/public-contract.d.ts +12 -0
  91. package/dist/cli/commands/public-contract.js +47 -0
  92. package/dist/cli/commands/public-contract.js.map +1 -0
  93. package/dist/cli/main.d.ts +2 -0
  94. package/dist/cli/main.js +23 -0
  95. package/dist/cli/main.js.map +1 -0
  96. package/dist/domain/artifacts.d.ts +52 -0
  97. package/dist/domain/artifacts.js +241 -0
  98. package/dist/domain/artifacts.js.map +1 -0
  99. package/dist/domain/digests.d.ts +11 -0
  100. package/dist/domain/digests.js +106 -0
  101. package/dist/domain/digests.js.map +1 -0
  102. package/dist/domain/external-receipt.d.ts +48 -0
  103. package/dist/domain/external-receipt.js +138 -0
  104. package/dist/domain/external-receipt.js.map +1 -0
  105. package/dist/domain/ids.d.ts +7 -0
  106. package/dist/domain/ids.js +5 -0
  107. package/dist/domain/ids.js.map +1 -0
  108. package/dist/domain/repository-path.d.ts +3 -0
  109. package/dist/domain/repository-path.js +87 -0
  110. package/dist/domain/repository-path.js.map +1 -0
  111. package/dist/domain/states.d.ts +38 -0
  112. package/dist/domain/states.js +69 -0
  113. package/dist/domain/states.js.map +1 -0
  114. package/dist/domain/work-package-identity.d.ts +2 -0
  115. package/dist/domain/work-package-identity.js +10 -0
  116. package/dist/domain/work-package-identity.js.map +1 -0
  117. package/dist/domain/workflow.d.ts +58 -0
  118. package/dist/domain/workflow.js +2 -0
  119. package/dist/domain/workflow.js.map +1 -0
  120. package/dist/engine/actor-roles.d.ts +15 -0
  121. package/dist/engine/actor-roles.js +53 -0
  122. package/dist/engine/actor-roles.js.map +1 -0
  123. package/dist/engine/approvals.d.ts +44 -0
  124. package/dist/engine/approvals.js +239 -0
  125. package/dist/engine/approvals.js.map +1 -0
  126. package/dist/engine/archive.d.ts +24 -0
  127. package/dist/engine/archive.js +442 -0
  128. package/dist/engine/archive.js.map +1 -0
  129. package/dist/engine/compiler.d.ts +25 -0
  130. package/dist/engine/compiler.js +828 -0
  131. package/dist/engine/compiler.js.map +1 -0
  132. package/dist/engine/control/condition.d.ts +10 -0
  133. package/dist/engine/control/condition.js +49 -0
  134. package/dist/engine/control/condition.js.map +1 -0
  135. package/dist/engine/control/loop.d.ts +23 -0
  136. package/dist/engine/control/loop.js +96 -0
  137. package/dist/engine/control/loop.js.map +1 -0
  138. package/dist/engine/control/retry.d.ts +15 -0
  139. package/dist/engine/control/retry.js +54 -0
  140. package/dist/engine/control/retry.js.map +1 -0
  141. package/dist/engine/docs-integrity.d.ts +13 -0
  142. package/dist/engine/docs-integrity.js +34 -0
  143. package/dist/engine/docs-integrity.js.map +1 -0
  144. package/dist/engine/expressions/ast.d.ts +18 -0
  145. package/dist/engine/expressions/ast.js +9 -0
  146. package/dist/engine/expressions/ast.js.map +1 -0
  147. package/dist/engine/expressions/evaluate.d.ts +7 -0
  148. package/dist/engine/expressions/evaluate.js +47 -0
  149. package/dist/engine/expressions/evaluate.js.map +1 -0
  150. package/dist/engine/expressions/parser.d.ts +2 -0
  151. package/dist/engine/expressions/parser.js +173 -0
  152. package/dist/engine/expressions/parser.js.map +1 -0
  153. package/dist/engine/external-effects/authorization.d.ts +146 -0
  154. package/dist/engine/external-effects/authorization.js +222 -0
  155. package/dist/engine/external-effects/authorization.js.map +1 -0
  156. package/dist/engine/external-effects/idempotency.d.ts +14 -0
  157. package/dist/engine/external-effects/idempotency.js +26 -0
  158. package/dist/engine/external-effects/idempotency.js.map +1 -0
  159. package/dist/engine/external-effects/reconciliation.d.ts +11 -0
  160. package/dist/engine/external-effects/reconciliation.js +18 -0
  161. package/dist/engine/external-effects/reconciliation.js.map +1 -0
  162. package/dist/engine/results.d.ts +14 -0
  163. package/dist/engine/results.js +88 -0
  164. package/dist/engine/results.js.map +1 -0
  165. package/dist/engine/scheduler.d.ts +60 -0
  166. package/dist/engine/scheduler.js +225 -0
  167. package/dist/engine/scheduler.js.map +1 -0
  168. package/dist/engine/tdd/green-gate.d.ts +6 -0
  169. package/dist/engine/tdd/green-gate.js +72 -0
  170. package/dist/engine/tdd/green-gate.js.map +1 -0
  171. package/dist/engine/tdd/red-gate.d.ts +30 -0
  172. package/dist/engine/tdd/red-gate.js +531 -0
  173. package/dist/engine/tdd/red-gate.js.map +1 -0
  174. package/dist/engine/tdd/types.d.ts +89 -0
  175. package/dist/engine/tdd/types.js +38 -0
  176. package/dist/engine/tdd/types.js.map +1 -0
  177. package/dist/engine/verification.d.ts +56 -0
  178. package/dist/engine/verification.js +196 -0
  179. package/dist/engine/verification.js.map +1 -0
  180. package/dist/policy/profile.d.ts +24 -0
  181. package/dist/policy/profile.js +23 -0
  182. package/dist/policy/profile.js.map +1 -0
  183. package/dist/policy/risk.d.ts +33 -0
  184. package/dist/policy/risk.js +138 -0
  185. package/dist/policy/risk.js.map +1 -0
  186. package/dist/protocol/application.d.ts +196 -0
  187. package/dist/protocol/application.js +2 -0
  188. package/dist/protocol/application.js.map +1 -0
  189. package/dist/protocol/public-contract.d.ts +81 -0
  190. package/dist/protocol/public-contract.js +231 -0
  191. package/dist/protocol/public-contract.js.map +1 -0
  192. package/dist/protocol/work-package.d.ts +55 -0
  193. package/dist/protocol/work-package.js +2 -0
  194. package/dist/protocol/work-package.js.map +1 -0
  195. package/dist/registry/connectors/external-executor.d.ts +4 -0
  196. package/dist/registry/connectors/external-executor.js +249 -0
  197. package/dist/registry/connectors/external-executor.js.map +1 -0
  198. package/dist/registry/connectors/feishu-document.d.ts +21 -0
  199. package/dist/registry/connectors/feishu-document.js +197 -0
  200. package/dist/registry/connectors/feishu-document.js.map +1 -0
  201. package/dist/registry/connectors/git-commit.d.ts +32 -0
  202. package/dist/registry/connectors/git-commit.js +122 -0
  203. package/dist/registry/connectors/git-commit.js.map +1 -0
  204. package/dist/registry/connectors/issue.d.ts +68 -0
  205. package/dist/registry/connectors/issue.js +301 -0
  206. package/dist/registry/connectors/issue.js.map +1 -0
  207. package/dist/registry/connectors/knowledge-publish.d.ts +30 -0
  208. package/dist/registry/connectors/knowledge-publish.js +157 -0
  209. package/dist/registry/connectors/knowledge-publish.js.map +1 -0
  210. package/dist/registry/connectors/local-requirement.d.ts +19 -0
  211. package/dist/registry/connectors/local-requirement.js +177 -0
  212. package/dist/registry/connectors/local-requirement.js.map +1 -0
  213. package/dist/registry/connectors/manifest.d.ts +6 -0
  214. package/dist/registry/connectors/manifest.js +164 -0
  215. package/dist/registry/connectors/manifest.js.map +1 -0
  216. package/dist/registry/connectors/registry.d.ts +11 -0
  217. package/dist/registry/connectors/registry.js +34 -0
  218. package/dist/registry/connectors/registry.js.map +1 -0
  219. package/dist/registry/connectors/requirement-source.d.ts +46 -0
  220. package/dist/registry/connectors/requirement-source.js +513 -0
  221. package/dist/registry/connectors/requirement-source.js.map +1 -0
  222. package/dist/registry/connectors/runtime.d.ts +38 -0
  223. package/dist/registry/connectors/runtime.js +127 -0
  224. package/dist/registry/connectors/runtime.js.map +1 -0
  225. package/dist/registry/connectors/secret-detector.d.ts +19 -0
  226. package/dist/registry/connectors/secret-detector.js +85 -0
  227. package/dist/registry/connectors/secret-detector.js.map +1 -0
  228. package/dist/registry/connectors/semver.d.ts +8 -0
  229. package/dist/registry/connectors/semver.js +57 -0
  230. package/dist/registry/connectors/semver.js.map +1 -0
  231. package/dist/registry/connectors/types.d.ts +45 -0
  232. package/dist/registry/connectors/types.js +2 -0
  233. package/dist/registry/connectors/types.js.map +1 -0
  234. package/dist/registry/executors/registry.d.ts +15 -0
  235. package/dist/registry/executors/registry.js +68 -0
  236. package/dist/registry/executors/registry.js.map +1 -0
  237. package/dist/registry/executors/types.d.ts +19 -0
  238. package/dist/registry/executors/types.js +2 -0
  239. package/dist/registry/executors/types.js.map +1 -0
  240. package/dist/registry/skills/lock.d.ts +3 -0
  241. package/dist/registry/skills/lock.js +278 -0
  242. package/dist/registry/skills/lock.js.map +1 -0
  243. package/dist/registry/skills/resolver.d.ts +16 -0
  244. package/dist/registry/skills/resolver.js +353 -0
  245. package/dist/registry/skills/resolver.js.map +1 -0
  246. package/dist/registry/skills/types.d.ts +75 -0
  247. package/dist/registry/skills/types.js +9 -0
  248. package/dist/registry/skills/types.js.map +1 -0
  249. package/dist/resources/catalog.d.ts +20 -0
  250. package/dist/resources/catalog.js +111 -0
  251. package/dist/resources/catalog.js.map +1 -0
  252. package/dist/schemas/definitions.d.ts +5 -0
  253. package/dist/schemas/definitions.js +958 -0
  254. package/dist/schemas/definitions.js.map +1 -0
  255. package/dist/schemas/generate.d.ts +1 -0
  256. package/dist/schemas/generate.js +26 -0
  257. package/dist/schemas/generate.js.map +1 -0
  258. package/dist/schemas/index.d.ts +11 -0
  259. package/dist/schemas/index.js +54 -0
  260. package/dist/schemas/index.js.map +1 -0
  261. package/dist/storage/control-plane.d.ts +136 -0
  262. package/dist/storage/control-plane.js +688 -0
  263. package/dist/storage/control-plane.js.map +1 -0
  264. package/dist/storage/events.d.ts +36 -0
  265. package/dist/storage/events.js +185 -0
  266. package/dist/storage/events.js.map +1 -0
  267. package/dist/storage/external-action-payload.d.ts +33 -0
  268. package/dist/storage/external-action-payload.js +190 -0
  269. package/dist/storage/external-action-payload.js.map +1 -0
  270. package/dist/storage/files.d.ts +13 -0
  271. package/dist/storage/files.js +45 -0
  272. package/dist/storage/files.js.map +1 -0
  273. package/dist/storage/git.d.ts +4 -0
  274. package/dist/storage/git.js +21 -0
  275. package/dist/storage/git.js.map +1 -0
  276. package/dist/storage/project-config.d.ts +11 -0
  277. package/dist/storage/project-config.js +60 -0
  278. package/dist/storage/project-config.js.map +1 -0
  279. package/dist/storage/repository.d.ts +14 -0
  280. package/dist/storage/repository.js +151 -0
  281. package/dist/storage/repository.js.map +1 -0
  282. package/dist/storage/work-items.d.ts +77 -0
  283. package/dist/storage/work-items.js +373 -0
  284. package/dist/storage/work-items.js.map +1 -0
  285. package/dist/storage/workflow-trust.d.ts +38 -0
  286. package/dist/storage/workflow-trust.js +310 -0
  287. package/dist/storage/workflow-trust.js.map +1 -0
  288. package/dist/workflow-package/loader.d.ts +12 -0
  289. package/dist/workflow-package/loader.js +249 -0
  290. package/dist/workflow-package/loader.js.map +1 -0
  291. package/dist/workflow-package/lock.d.ts +6 -0
  292. package/dist/workflow-package/lock.js +12 -0
  293. package/dist/workflow-package/lock.js.map +1 -0
  294. package/dist/workflow-package/path-boundary.d.ts +5 -0
  295. package/dist/workflow-package/path-boundary.js +38 -0
  296. package/dist/workflow-package/path-boundary.js.map +1 -0
  297. package/dist/workflow-package/trust.d.ts +27 -0
  298. package/dist/workflow-package/trust.js +61 -0
  299. package/dist/workflow-package/trust.js.map +1 -0
  300. package/dist/workflow-package/types.d.ts +176 -0
  301. package/dist/workflow-package/types.js +9 -0
  302. package/dist/workflow-package/types.js.map +1 -0
  303. package/dist/workflow-package/workflow-v1.d.ts +3 -0
  304. package/dist/workflow-package/workflow-v1.js +274 -0
  305. package/dist/workflow-package/workflow-v1.js.map +1 -0
  306. package/package.json +40 -0
  307. package/resources/catalog.yaml +37 -0
  308. package/resources/connectors/github-cli.yaml +24 -0
  309. package/resources/connectors/gitlab-cli.yaml +24 -0
  310. package/resources/connectors/lark-cli.yaml +28 -0
  311. package/resources/skills/bug-fixing/SKILL.md +16 -0
  312. package/resources/skills/code-review/SKILL.md +16 -0
  313. package/resources/skills/documentation-editing/SKILL.md +16 -0
  314. package/resources/skills/documentation-exploration/SKILL.md +16 -0
  315. package/resources/skills/documentation-review/SKILL.md +16 -0
  316. package/resources/skills/requirement-exploration/SKILL.md +16 -0
  317. package/resources/skills/solution-design/SKILL.md +16 -0
  318. package/resources/skills/task-planning/SKILL.md +16 -0
  319. package/resources/skills/tdd-implementation/SKILL.md +16 -0
  320. package/resources/workflows/documentation-delivery/manifest.yaml +8 -0
  321. package/resources/workflows/documentation-delivery/profiles/governed.yaml +23 -0
  322. package/resources/workflows/documentation-delivery/profiles/quick.yaml +23 -0
  323. package/resources/workflows/documentation-delivery/profiles/standard.yaml +21 -0
  324. package/resources/workflows/documentation-delivery/workflow.yaml +109 -0
  325. package/resources/workflows/feature-delivery/manifest.yaml +8 -0
  326. package/resources/workflows/feature-delivery/profiles/governed.yaml +27 -0
  327. package/resources/workflows/feature-delivery/profiles/quick.yaml +25 -0
  328. package/resources/workflows/feature-delivery/profiles/standard.yaml +26 -0
  329. package/resources/workflows/feature-delivery/workflow.yaml +150 -0
  330. package/schemas/builtin-agent-action-v1.schema.json +509 -0
  331. package/schemas/builtin-application-acquire-input-v1.schema.json +25 -0
  332. package/schemas/builtin-application-artifact-create-input-v1.schema.json +49 -0
  333. package/schemas/builtin-application-decision-input-v1.schema.json +284 -0
  334. package/schemas/builtin-application-inspect-input-v1.schema.json +20 -0
  335. package/schemas/builtin-application-project-config-snapshot-v1.schema.json +289 -0
  336. package/schemas/builtin-application-project-config-v1.schema.json +293 -0
  337. package/schemas/builtin-application-start-input-v1.schema.json +92 -0
  338. package/schemas/builtin-application-submit-input-v1.schema.json +145 -0
  339. package/schemas/builtin-artifact-v1.schema.json +48 -0
  340. package/schemas/builtin-evidence-v1.schema.json +65 -0
  341. package/schemas/builtin-external-action-grant-v1.schema.json +298 -0
  342. package/schemas/builtin-external-action-request-v1.schema.json +288 -0
  343. package/schemas/builtin-external-binding-v1.schema.json +59 -0
  344. package/schemas/builtin-external-receipt-v1.schema.json +109 -0
  345. package/schemas/builtin-external-write-receipt-v1.schema.json +253 -0
  346. package/schemas/builtin-source-artifact-v1.schema.json +293 -0
  347. package/schemas/builtin-submit-result-v1.schema.json +111 -0
  348. package/schemas/builtin-tdd-cycle-evidence-v1.schema.json +119 -0
  349. package/schemas/builtin-tdd-node-test-report-v1.schema.json +103 -0
  350. package/schemas/builtin-tdd-trusted-evidence-v1.schema.json +184 -0
  351. package/schemas/builtin-work-item-v1.schema.json +201 -0
  352. package/schemas/builtin-work-package-v1.schema.json +254 -0
  353. package/schemas/builtin-workflow-selection-v1.schema.json +40 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../../src/storage/control-plane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,kBAAkB,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,wBAAwB,EAA4B,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAE,MAAM,EAAkB,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAqD,MAAM,8CAA8C,CAAC;AAEvI,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACzJ,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAiC,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,oBAAoB,EAAsC,MAAM,aAAa,CAAC;AAClM,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,8BAA8B,EAA4B,MAAM,6CAA6C,CAAC;AACvH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AA+D/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAe/D,SAAS,gCAAgC,CAAC,MAAwB;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,eAA0B,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAoC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;WACrH,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI,WAAW,KAAK,IAAI;WAC3E,OAAO,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,wBAAwB,CAChC,wCAAwC,EACxC,+DAA+D,CAChE,CAAC;IACJ,CAAC;AACH,CAAC;AASD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAC5B;IAArB,YAAqB,IAAY,EAAE,OAAe;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QADI,SAAI,GAAJ,IAAI,CAAQ;QAE/B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAA4D,CAAC;AAErG,SAAS,kBAAkB,CAAC,IAAa,EAAE,KAAc;IACvD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA8B,EAAE,UAAkB;IACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC;IACjF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,+BAA+B,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACnF,CAAC,CAAE,MAA8B,CAAC,KAAK;QACvC,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,mBAAmB,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;WACvF,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;WACtH,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,UAAU,UAAU,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,mBAAmB,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO;QACL,YAAY,EAAE,oBAAoB;QAClC,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,SAAS,CAAC,MAAM;QAC7B,SAAS,EAAE,kBAAkB;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,UAA6B;IACxD,MAAM,MAAM,GAAG,OAAO,UAAU,CAAC,UAAU,GAAG,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,oBAAoB,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC;IACtE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;QACrF,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,6BAA6B,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,KAAoE,CAAC;IACzE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4D,CAAC;IACnF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,GAAG,KAAK,GAAG,MAAM,KAAK;YAAE,SAAS;QACrC,IAAI,GAAG,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;YAC7B,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC,aAAa,KAAK,GAAG,CAAC,UAAU;mBACtG,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,gBAAgB,KAAK,GAAG,CAAC,gBAAgB;mBACpF,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC;mBACnD,CAAC,kBAAkB,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC;mBAC3D,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;mBACrD,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC;mBAC7D,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC;mBAC7D,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/D,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,mCAAmC,CAAC,CAAC;YACxG,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,QAAQ,CAAC;YAAE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAC7I,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU;eACvF,GAAG,KAAK,GAAG,MAAM,SAAS,KAAK,CAAC,UAAU,EAAE;eAC5C,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,KAAK,GAAG,CAAC,aAAa;eAC9E,KAAK,CAAC,eAAe,KAAK,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,gBAAgB,KAAK,GAAG,CAAC,gBAAgB;eAChG,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC;eACnD,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC;eACnD,CAAC,kBAAkB,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC;eAC3D,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;eAC/G,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC;eAC7D,CAAC,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC;eAC7D,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,mCAAmC,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC;WACzD,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,6CAA6C,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,QAAgB,EAAE,UAA6B;IACpF,MAAM,EAAE,GAAG,EAAE,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO;IAC9B,IAAI,KAAmD,CAAC;IACxD,IAAI,MAA0D,CAAC;IAC/D,IAAI,CAAC;QACH,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAClC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC;YAC5D,sBAAsB,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;SAC7I,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,0CAA0C,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnF,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,0BAA0B,GAAG,CAAC,eAAe,OAAO,KAAK,CAAC,MAAM,YAAY,GAAG,CAAC,gBAAgB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7L,CAAC;AACH,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,YAAoB;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,yBAAyB,CAAC,EAAE,MAAM,CAAC,CAA+B,CAAC;QACpI,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACxJ,MAAM,IAAI,wBAAwB,CAAC,mCAAmC,EAAE,oBAAoB,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,MAA2B,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,UAAkB;IAChE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACxG,IAAI,OAA0E,CAAC;IAC/E,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAsE,CAAC;IACjI,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,iBAAiB,UAAU,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,KAAK,UAAU,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClI,MAAM,IAAI,wBAAwB,CAAC,+BAA+B,EAAE,+BAA+B,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAGtH,CAAC;IACF,IAAI,eAAe,CAAC,YAAY,KAAK,UAAU,CAAC,YAAY,IAAI,OAAO,eAAe,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QACnH,MAAM,IAAI,wBAAwB,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,wBAAwB,CAAC,mCAAmC,EAAE,uCAAuC,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,UAAkB,CAAC;IACvB,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;QAC5D,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,wBAAwB,CAAC,mCAAmC,EAAE,qCAAqC,CAAC,CAAC;IACjH,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7D,IAAI,gBAAgB,KAAK,EAAE,IAAI,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,wBAAwB,CAAC,mCAAmC,EAAE,gCAAgC,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC;QAC/F,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,cAAc,EAAE,UAAU;QAC1B,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,UAA6B;IACpD,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,CAAC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA6B;IACjE,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACzI,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAAc,EAAE,OAAe;IAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAsF;IACjI,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,MAAM,GAAsB,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;IACnJ,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7H,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,YAAqB,EAAE,EAAE;YAC9D,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAE,YAAsC,CAAC,IAAI,IAAI,EAAE,CAAC;gBAAE,MAAM,YAAY,CAAC;QAChH,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW,EAAE,UAAkB;IACzE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7D,MAAM,IAAI,wBAAwB,CAAC,+BAA+B,EAAE,kCAAkC,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,GAAW,EAAE,UAAkB;IAC/E,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5D,OAAO,2CAA2C,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2CAA2C,CAAC,YAAoB,EAAE,UAAkB;IACxG,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACrE,IAAI,KAAK,YAAY,eAAe;YAAE,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACpG,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACvD,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAAC,KAK5D;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACtF,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAC;IAChG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,gCAAgC,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,gCAAgC,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC;QAC7F,MAAM,IAAI,wBAAwB,CAAC,mCAAmC,EAAE,2CAA2C,CAAC,CAAC;IACvH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAa,CAAC;IACjD,IAAI,OAAO,QAAQ,CAAC,SAAS,EAAE,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;QAC5H,MAAM,IAAI,wBAAwB,CAAC,qCAAqC,EAAE,2CAA2C,CAAC,CAAC;IACzH,CAAC;IACD,IAAI,WAAgC,CAAC;IACrC,IAAI,CAAC;QACH,WAAW,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,wBAAwB,CAAC,qCAAqC,EAAE,0BAA0B,CAAC,CAAC;IACxG,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;WACvC,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,wBAAwB,CAAC,+BAA+B,EAAE,+BAA+B,CAAC,CAAC;IACvG,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC3E,IAAI,KAAK,YAAY,eAAe;YAAE,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACpG,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACjF,IAAI,OAAO,QAAQ,CAAC,MAAM,EAAE,UAAU,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;WAC9F,OAAO,QAAQ,CAAC,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,aAAa,KAAK,QAAQ;WACvG,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,oCAAoC,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,uBAAuB,GAA4B;QACvD,YAAY,EAAE,oBAAoB;QAClC,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU;QACtC,IAAI,EAAE,sBAAsB,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC1E,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc;QAC3C,SAAS,EAAE,kBAAkB;KAC9B,CAAC;IACF,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;WACjE,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,oDAAoD,CAAC,CAAC;IAC7H,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IAClG,IAAI,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnG,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,EAAE,2CAA2C,CAAC,CAAC;IACpH,CAAC;IACD,OAAO;QACL,WAAW;QACX,eAAe;QACf,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,eAAe,EAAE,oBAAoB;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAqI;IAC9K,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAChF,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IAC9E,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,YAAY;QAC3C,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU;QACvC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,iBAAiB,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa;QACjD,UAAU,EAAE,gBAAgB;KAC7B,CAAC;IACF,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3J,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAO5C;IACC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAsB;QACpC,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QACtD,MAAM,EAAE,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9G,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE,EAAE;QACpJ,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,EAAE;QACnB,yBAAyB,EAAE,EAAE;QAC7B,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,QAAQ,CAAC,SAAS;KACjC,CAAC;IACF,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1I,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,UAAkB;IACpE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAqB,CAAC;IACrH,IAAI,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACtF,MAAM,IAAI,wBAAwB,CAAC,+BAA+B,EAAE,iBAAiB,CAAC,CAAC;IACzF,CAAC;IACD,gCAAgC,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,UAAU,GAAsB;QACpC,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE,EAAE;YACrH,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,uBAAuB,EAAE,EAAE;QAC/F,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE;QAC7C,yBAAyB,EAAE,MAAM,CAAC,yBAAyB,IAAI,EAAE;QACjE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;QAClC,YAAY,EAAE,QAAQ,CAAC,SAAS;KACjC,CAAC;IACF,8BAA8B,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC;IACjG,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAS5B;IACC,IAAI,SAAS,GAAsB;QACjC,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QACtD,MAAM,EAAE,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAChH,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE,EAAE;QACpJ,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,EAAE;QACnB,yBAAyB,EAAE,EAAE;QAC7B,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE,CAAC;YAC/F,MAAM,IAAI,wBAAwB,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,wBAAwB,EAAE,CAAC;YACjD,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC,EAA6B,EAAE,CAAC,EAAE,CAAC;QAClJ,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,KAAK,oBAAoB,EAAE,CAAC;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,IAAI,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,CAAC;YAC3F,CAAC;YACD,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC,EAA0B,EAAE,CAAC,EAAE,EAAE,CAAC;QACrL,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,KAAK,mBAAmB,EAAE,CAAC;YACnD,MAAM,KAAK,GAAI,KAAK,CAAC,MAA8B,CAAC,KAAK,CAAC;YAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,gCAAgC,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,KAAK,CAAC,MAA+B,CAAC;YACrD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;gBAAE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,MAAM,KAAK,CAAC,SAAS,WAAW,CAAC,CAAC;YACxI,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACnD,8BAA8B,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC;YAC/F,sBAAsB,CAAC,SAAS,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;YACzE,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;QACxC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC;QAC1C,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC/D,CAAC;IACD,SAAS,CAAC,OAAO,GAAG;QAClB,GAAG,SAAS,CAAC,OAAO;QACpB,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,WAAW,IAAI,uBAAuB,EAAE;KACxE,CAAC;IACF,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;IAC5D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAA0C;IAClF,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,4BAA4B,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,oBAAoB,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,yBAAyB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,iBAA+C,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAqB,CAAC;YACrH,IAAI,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC5F,MAAM,IAAI,wBAAwB,CAAC,+BAA+B,EAAE,iBAAiB,CAAC,CAAC;YACzF,CAAC;YACD,gCAAgC,CAAC,MAAM,CAAC,CAAC;YACzC,iBAAiB,GAAG,MAAM,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,wBAAwB;gBAAE,MAAM,KAAK,CAAC;YAC3D,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACzG,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,MAAM,sCAAsC,CAAC;YAC7D,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,QAAQ;YACR,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,IAAI,QAAkB,CAAC;QACvB,IAAI,eAA0C,CAAC;QAC/C,IAAI,aAAqD,CAAC;QAC1D,IAAI,cAAoD,CAAC;QACzD,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QAC1C,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAClE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;QACzB,eAAe,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACvC,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7C,cAAc,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE,EAAE,CAAC;QAC7K,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACpH,IACE,iBAAiB,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM;gBAC9C,CAAC,iBAAiB,CAAC,YAAY,GAAG,CAAC,IAAI,aAAa,EAAE,SAAS,KAAK,iBAAiB,CAAC,aAAa,CAAC,EACpG,CAAC;gBACD,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,mBAAmB,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QACD,IAAI,SAAS,GAAG,YAAY,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ;YACR,YAAY,EAAE,QAAQ,CAAC,SAAS;YAChC,MAAM;YACN,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;YAC7D,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC;YACzD,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;SAC5D,CAAC,CAAC;QACH,MAAM,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;QAChG,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE;YACnF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QAC5E,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC;aACnE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;eAClD,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,mBAAmB;eACjD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC;aACvE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACpC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3H,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC;aAC1E,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aACtG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;aACpD,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,mBAAmB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACzG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,4BAA4B,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;aAC3E,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;eAC/D,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;mBAC3D,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC;aACzE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,yBAAyB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC;iBACnF,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;mBAC3D,CAAC,MAAM,CAAC,MAAM,KAAK,yBAAyB,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;uBACxG,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,iBAAiB,CAAC,CAAC,CAAC;iBAChF,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACrE,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;aACzE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,iBAAiB,CAAC;aAC9F,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;gBACjC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC/E,GAAG,cAAc;aAClB,CAAC,CAAC,CAAC;QACJ,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,mBAAmB,IAAI,kBAAkB,CAAC,IAAI,KAAK,CAAC,CAAC;QAC3G,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,IAAI,yBAAyB,CAAC,IAAI,GAAG,CAAC;eACjF,0BAA0B,CAAC,MAAM,GAAG,CAAC,IAAI,4BAA4B,CAAC,MAAM,GAAG,CAAC,IAAI,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9H,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG;gBACX,GAAG,SAAS;gBACZ,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ;gBAC9E,MAAM,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE;gBAC/B,MAAM,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE;gBAC/B,QAAQ,EAAE,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE;gBACnC,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE;gBACrC,eAAe,EAAE,EAAE,GAAG,SAAS,CAAC,eAAe,EAAE;gBACjD,yBAAyB,EAAE,EAAE,GAAG,SAAS,CAAC,yBAAyB,EAAE;gBACrE,QAAQ,EAAE,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE;gBACnC,OAAO,EAAE,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;aAClC,CAAC;YACF,KAAK,MAAM,SAAS,IAAI,4BAA4B,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,MAAM,KAAK,SAAS;oBAAE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,aAAa,CAAC,CAAC;gBAC1G,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;gBACrC,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC;gBACrE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrG,IAAI,KAAK,KAAK,SAAS;oBAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAChF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,WAAW;oBACrI,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE;oBACtB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,yBAAyB,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAExB,CAAC;gBACd,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,EAAE,WAAW,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS;uBACzE,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;oBAC3D,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,8BAA8B,CAAC,CAAC;gBACnG,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,SAAS;oBACrG,CAAC,CAAC,SAAS,GAAG,SAAS;oBACvB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;gBACpB,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;gBACxF,MAAM,WAAW,GAAG;oBAClB,GAAG,OAAO,CAAC,WAAW;oBACtB,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE;iBACrE,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;oBACrB,GAAG,KAAK;oBACR,SAAS,EAAE,gBAAgB;oBAC3B,iBAAiB,EAAE,yBAAyB,CAAC,WAAW,CAAC;iBAC1D,CAAC;gBACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG;oBACvB,GAAG,OAAO;oBACV,WAAW;iBACZ,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,yBAAyB,EAAE,CAAC;gBAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC;gBAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;YACzF,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,0BAA0B,EAAE,CAAC;gBACnD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAE,CAAC;gBAChD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;oBAAE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,cAAc,CAAC,CAAC;gBACpH,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG;oBAChC,MAAM,EAAE,yBAAyB;oBACjC,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,MAAM,EAAE,iCAAiC;oBACzC,UAAU,EAAE,WAAW;iBACxB,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;YACnH,MAAM,cAAc,GAAG,uBAAuB,QAAQ,CAAC,SAAS,EAAE,CAAC;YACnE,MAAM,KAAK,GAAgB;gBACzB,OAAO,EAAE,SAAS,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU;gBACrI,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI;gBACtG,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;gBAC9E,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;gBAC7H,wBAAwB,EAAE,QAAQ,CAAC,yBAAyB,IAAI,QAAQ,CAAC,wBAAwB,EAAE,yBAAyB,EAAE,IAAI;gBAClI,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;oBACjC,cAAc,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,IAAI,EAAE;oBAC1C,4BAA4B,EAAE,CAAC,GAAG,4BAA4B,CAAC,CAAC,IAAI,EAAE;oBACtE,yBAAyB,EAAE,CAAC,GAAG,yBAAyB,CAAC,CAAC,IAAI,EAAE;oBAChE,0BAA0B,EAAE,CAAC,GAAG,0BAA0B,CAAC,CAAC,IAAI,EAAE;iBACnE,CAAC,CAAC;gBACH,MAAM,EAAE;oBACN,UAAU,EAAE;wBACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,eAAe,EAAE,IAAI,CAAC,eAAe;wBACrC,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;wBACzD,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACxB;oBACD,KAAK,EAAE;wBACL,eAAe;wBACf,cAAc;wBACd,4BAA4B;wBAC5B,yBAAyB;wBACzB,0BAA0B;qBAC3B;iBACF;aACF,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;YAAC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC;YAAC,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1J,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,kBAAkB,CAAC,CAAC;YAClG,MAAM,KAAK,GAAI,WAAW,EAAE,MAAsF,EAAE,KAAK,CAAC;YAC1H,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAkD,CAAC;YAC1H,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,gBAAgB,EAAE,QAAQ,CAAC;YAC/D,MAAM,mBAAmB,GAAG,KAAK,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,mBAAmB,CAAC;YAChG,MAAM,kBAAkB,GAAG,gBAAgB,EAAE,kBAAkB,CAAC;YAChE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,OAAO,kBAAkB,KAAK,QAAQ;gBAAE,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAC;YACzM,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5K,CAAC;QACD,OAAO,SAAS,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,36 @@
1
+ export interface DomainEvent {
2
+ eventId: string;
3
+ eventType: "work-item.transitioned" | "stage.transitioned" | "claim.created" | "claim.renewed" | "claim.released" | "context.created" | "attempt.acquired" | "attempt.reacquired" | "artifact.authored" | "step.skipped" | "attempt.submitted" | "approval.requested" | "approval.decided" | "approval.expired" | "external-action.prepared" | "external-action.approved" | "external-action.rejected" | "external-action.executing" | "external-action.dispatched" | "external-action.verified" | "external-action.reconciliation-required" | "external-action.reconciled" | "evidence.recorded" | "source.captured" | "profile.selected" | "profile.upgraded" | "projection.invalidated" | "work-item.closed" | "lock.recovered";
4
+ occurredAt: string;
5
+ actor: string;
6
+ repositoryId: string;
7
+ workItemId: string;
8
+ stageId: string | null;
9
+ attemptId: string | null;
10
+ from: string;
11
+ to: string;
12
+ idempotencyKey: string;
13
+ workflowDigest: string;
14
+ configDigest: string;
15
+ baselineTreeDigest: string;
16
+ inputWorkspaceTreeDigest: string;
17
+ outputWorkspaceTreeDigest: string | null;
18
+ inputDigest: string;
19
+ result: unknown;
20
+ }
21
+ export interface StoredEvent extends DomainEvent {
22
+ sequence: number;
23
+ previousHash: string | null;
24
+ eventHash: string;
25
+ }
26
+ export declare class EventStoreError extends Error {
27
+ readonly code: string;
28
+ constructor(code: string, message: string);
29
+ }
30
+ export declare function readEvents(controlPlane: string): Promise<StoredEvent[]>;
31
+ export declare function repairIncompleteEventTail(controlPlane: string): Promise<boolean>;
32
+ declare function appendEventUnlocked(controlPlane: string, event: DomainEvent): Promise<StoredEvent>;
33
+ export declare function recoverStaleControlPlaneLock(controlPlane: string): Promise<boolean>;
34
+ export declare function withControlPlaneLock<T>(controlPlane: string, operation: () => Promise<T>): Promise<T>;
35
+ export declare function appendEvent(controlPlane: string, event: DomainEvent): Promise<StoredEvent>;
36
+ export { appendEventUnlocked };
@@ -0,0 +1,185 @@
1
+ import { open, readFile, unlink } from "node:fs/promises";
2
+ import { hostname } from "node:os";
3
+ import path from "node:path";
4
+ import * as canonicalizeModule from "canonicalize";
5
+ import { sha256 } from "../domain/digests.js";
6
+ const canonicalize = canonicalizeModule.default;
7
+ export class EventStoreError extends Error {
8
+ code;
9
+ constructor(code, message) {
10
+ super(message);
11
+ this.code = code;
12
+ this.name = "EventStoreError";
13
+ }
14
+ }
15
+ function eventHash(event) {
16
+ const content = canonicalize(event);
17
+ if (content === undefined)
18
+ throw new EventStoreError("WSSPEC_EVENT_INVALID", "事件无法规范化。");
19
+ return sha256(content);
20
+ }
21
+ export async function readEvents(controlPlane) {
22
+ let text;
23
+ try {
24
+ text = await readFile(path.join(controlPlane, "events.jsonl"), "utf8");
25
+ }
26
+ catch (error) {
27
+ if (error.code === "ENOENT")
28
+ return [];
29
+ throw error;
30
+ }
31
+ const events = [];
32
+ let previousHash = null;
33
+ for (const [index, line] of text.split("\n").entries()) {
34
+ if (line === "")
35
+ continue;
36
+ let event;
37
+ try {
38
+ event = JSON.parse(line);
39
+ }
40
+ catch {
41
+ throw new EventStoreError("WSSPEC_EVENT_CHAIN_INVALID", `事件日志第 ${index + 1} 行不是合法 JSON。`);
42
+ }
43
+ const { eventHash: actualHash, ...unsigned } = event;
44
+ if (event.sequence !== events.length + 1 || event.previousHash !== previousHash || eventHash(unsigned) !== actualHash) {
45
+ throw new EventStoreError("WSSPEC_EVENT_CHAIN_INVALID", `事件日志在序号 ${event.sequence} 处断链。`);
46
+ }
47
+ events.push(event);
48
+ previousHash = event.eventHash;
49
+ }
50
+ return events;
51
+ }
52
+ export async function repairIncompleteEventTail(controlPlane) {
53
+ const eventPath = path.join(controlPlane, "events.jsonl");
54
+ let content;
55
+ try {
56
+ content = await readFile(eventPath, "utf8");
57
+ }
58
+ catch (error) {
59
+ if (error.code === "ENOENT")
60
+ return false;
61
+ throw error;
62
+ }
63
+ if (content === "" || content.endsWith("\n"))
64
+ return false;
65
+ const lastNewline = content.lastIndexOf("\n");
66
+ const tail = content.slice(lastNewline + 1);
67
+ try {
68
+ JSON.parse(tail);
69
+ return false;
70
+ }
71
+ catch { /* An interrupted append is the only repairable corruption. */ }
72
+ const handle = await open(eventPath, "r+");
73
+ try {
74
+ await handle.truncate(lastNewline + 1);
75
+ await handle.sync();
76
+ }
77
+ finally {
78
+ await handle.close();
79
+ }
80
+ return true;
81
+ }
82
+ async function appendEventUnlocked(controlPlane, event) {
83
+ const current = await readEvents(controlPlane);
84
+ const unsigned = {
85
+ ...event,
86
+ sequence: current.length + 1,
87
+ previousHash: current.at(-1)?.eventHash ?? null,
88
+ };
89
+ const stored = { ...unsigned, eventHash: eventHash(unsigned) };
90
+ const handle = await open(path.join(controlPlane, "events.jsonl"), "a", 0o600);
91
+ try {
92
+ const content = canonicalize(stored);
93
+ if (content === undefined)
94
+ throw new EventStoreError("WSSPEC_EVENT_INVALID", "事件无法规范化。");
95
+ await handle.writeFile(`${content}\n`, "utf8");
96
+ await handle.sync();
97
+ }
98
+ finally {
99
+ await handle.close();
100
+ }
101
+ return stored;
102
+ }
103
+ const delay = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
104
+ async function readLock(lockPath) {
105
+ try {
106
+ const value = JSON.parse(await readFile(lockPath, "utf8"));
107
+ if (value.version !== 1 || typeof value.ownerToken !== "string" || typeof value.pid !== "number" || typeof value.hostname !== "string" || typeof value.createdAt !== "string")
108
+ return undefined;
109
+ return value;
110
+ }
111
+ catch {
112
+ return undefined;
113
+ }
114
+ }
115
+ function processIsAlive(pid) {
116
+ try {
117
+ process.kill(pid, 0);
118
+ return true;
119
+ }
120
+ catch (error) {
121
+ return error.code !== "ESRCH";
122
+ }
123
+ }
124
+ export async function recoverStaleControlPlaneLock(controlPlane) {
125
+ const lockPath = path.join(controlPlane, "runtime.lock");
126
+ const owner = await readLock(lockPath);
127
+ if (owner === undefined) {
128
+ try {
129
+ const handle = await open(lockPath, "r");
130
+ await handle.close();
131
+ }
132
+ catch (error) {
133
+ if (error.code === "ENOENT")
134
+ return false;
135
+ }
136
+ throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "控制面锁缺少可验证的所有者信息,不能自动清理。");
137
+ }
138
+ if (owner.hostname !== hostname() || processIsAlive(owner.pid))
139
+ throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "控制面锁的所有者仍可能存活,不能抢占。");
140
+ const confirmed = await readLock(lockPath);
141
+ if (confirmed?.ownerToken !== owner.ownerToken)
142
+ throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "控制面锁在恢复期间已经变化。");
143
+ await unlink(lockPath);
144
+ return true;
145
+ }
146
+ export async function withControlPlaneLock(controlPlane, operation) {
147
+ const lockPath = path.join(controlPlane, "runtime.lock");
148
+ const deadline = Date.now() + 5_000;
149
+ const owner = { version: 1, ownerToken: crypto.randomUUID(), pid: process.pid, hostname: hostname(), createdAt: new Date().toISOString() };
150
+ let handle;
151
+ while (true) {
152
+ try {
153
+ handle = await open(lockPath, "wx", 0o600);
154
+ await handle.writeFile(`${JSON.stringify(owner)}\n`, "utf8");
155
+ await handle.sync();
156
+ break;
157
+ }
158
+ catch (error) {
159
+ if (error.code === "EEXIST") {
160
+ const existing = await readLock(lockPath);
161
+ if (existing?.hostname === hostname() && !processIsAlive(existing.pid)) {
162
+ throw new EventStoreError("WSSPEC_CONTROL_PLANE_STALE_LOCK", "检测到异常退出遗留的控制面锁,请在确认所有者已退出后执行受控恢复。");
163
+ }
164
+ }
165
+ if (error.code !== "EEXIST" || Date.now() >= deadline) {
166
+ throw new EventStoreError("WSSPEC_CONTROL_PLANE_LOCKED", "共享控制面当前被其他进程占用。");
167
+ }
168
+ await delay(10);
169
+ }
170
+ }
171
+ try {
172
+ return await operation();
173
+ }
174
+ finally {
175
+ await handle.close();
176
+ const current = await readLock(lockPath);
177
+ if (current?.ownerToken === owner.ownerToken)
178
+ await unlink(lockPath).catch(() => undefined);
179
+ }
180
+ }
181
+ export async function appendEvent(controlPlane, event) {
182
+ return withControlPlaneLock(controlPlane, () => appendEventUnlocked(controlPlane, event));
183
+ }
184
+ export { appendEventUnlocked };
185
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/storage/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ExternalActionName, ExternalActionRequest, ExternalActionTarget } from "../engine/external-effects/authorization.js";
2
+ export interface PreparedExternalActionPayload {
3
+ digest: `sha256:${string}`;
4
+ content: string;
5
+ }
6
+ export declare class ExternalActionPayloadError extends Error {
7
+ readonly code: `WSSPEC_${string}`;
8
+ constructor(code: `WSSPEC_${string}`, message: string);
9
+ }
10
+ export declare function prepareExternalActionPayload(input: {
11
+ workItemId: string;
12
+ stepId: string;
13
+ attemptId: string;
14
+ provider: string;
15
+ action: ExternalActionName;
16
+ target: ExternalActionTarget;
17
+ payload: unknown;
18
+ }): PreparedExternalActionPayload;
19
+ export declare function persistExternalActionPayload(input: {
20
+ controlPlane: string;
21
+ artifact: PreparedExternalActionPayload;
22
+ }): Promise<{
23
+ digest: `sha256:${string}`;
24
+ created: boolean;
25
+ }>;
26
+ export declare function removeExternalActionPayload(input: {
27
+ controlPlane: string;
28
+ digest: `sha256:${string}`;
29
+ }): Promise<void>;
30
+ export declare function loadExternalActionPayload(input: {
31
+ controlPlane: string;
32
+ request: ExternalActionRequest;
33
+ }): Promise<unknown>;
@@ -0,0 +1,190 @@
1
+ import { lstat, mkdir, open, readFile, realpath, unlink } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { canonicalDigest } from "../engine/external-effects/idempotency.js";
4
+ import { inspectDecodedCredentialSurface } from "../registry/connectors/secret-detector.js";
5
+ const maximumPayloadArtifactBytes = 1024 * 1024;
6
+ export class ExternalActionPayloadError extends Error {
7
+ code;
8
+ constructor(code, message) {
9
+ super(`${code}: ${message}`);
10
+ this.code = code;
11
+ this.name = "ExternalActionPayloadError";
12
+ }
13
+ }
14
+ function invalid(code = "WSSPEC_EXTERNAL_PAYLOAD_ARTIFACT_INVALID") {
15
+ throw new ExternalActionPayloadError(code, "外部动作 payload 工件无效或与授权身份不匹配。");
16
+ }
17
+ function artifactFilename(directory, digest) {
18
+ if (!/^sha256:[a-f0-9]{64}$/u.test(digest))
19
+ return invalid();
20
+ return path.join(directory, `${digest.slice("sha256:".length)}.json`);
21
+ }
22
+ async function secureArtifactDirectory(controlPlane) {
23
+ const canonicalControlPlane = await realpath(controlPlane);
24
+ const secureChildDirectory = async (parent, name) => {
25
+ const directory = path.join(parent, name);
26
+ try {
27
+ await mkdir(directory, { mode: 0o700 });
28
+ }
29
+ catch (error) {
30
+ if (error.code !== "EEXIST")
31
+ return invalid();
32
+ }
33
+ const info = await lstat(directory);
34
+ if (!info.isDirectory() || info.isSymbolicLink())
35
+ return invalid();
36
+ const canonical = await realpath(directory);
37
+ if (canonical !== directory || path.dirname(canonical) !== parent)
38
+ return invalid();
39
+ return canonical;
40
+ };
41
+ const externalActions = await secureChildDirectory(canonicalControlPlane, "external-actions");
42
+ const payloads = await secureChildDirectory(externalActions, "payloads");
43
+ if (!payloads.startsWith(`${canonicalControlPlane}${path.sep}`)) {
44
+ return invalid();
45
+ }
46
+ return payloads;
47
+ }
48
+ function envelope(input) {
49
+ const serialized = JSON.stringify(input.payload);
50
+ if (serialized === undefined || Buffer.byteLength(serialized, "utf8") > maximumPayloadArtifactBytes
51
+ || !inspectDecodedCredentialSurface(serialized, {
52
+ maximumBytes: maximumPayloadArtifactBytes,
53
+ maximumDecodeRounds: 4,
54
+ }).ok) {
55
+ return invalid("WSSPEC_EXTERNAL_PAYLOAD_INVALID");
56
+ }
57
+ return {
58
+ version: 1,
59
+ kind: "external-action-payload",
60
+ workItemId: input.workItemId,
61
+ stepId: input.stepId,
62
+ attemptId: input.attemptId,
63
+ provider: input.provider,
64
+ action: input.action,
65
+ target: { ...input.target },
66
+ payloadDigest: canonicalDigest(input.payload),
67
+ payload: input.payload,
68
+ };
69
+ }
70
+ function parseEnvelope(value) {
71
+ if (value === null || typeof value !== "object" || Array.isArray(value))
72
+ return invalid();
73
+ const source = value;
74
+ const keys = ["action", "attemptId", "kind", "payload", "payloadDigest", "provider", "stepId", "target", "version", "workItemId"];
75
+ if (Object.keys(source).sort().join("\0") !== keys.sort().join("\0")
76
+ || source.version !== 1 || source.kind !== "external-action-payload"
77
+ || typeof source.workItemId !== "string" || typeof source.stepId !== "string"
78
+ || typeof source.attemptId !== "string" || typeof source.provider !== "string"
79
+ || !["git.commit", "issue.update", "knowledge.publish", "issue.close"].includes(source.action)
80
+ || source.target === null || typeof source.target !== "object" || Array.isArray(source.target)
81
+ || typeof source.payloadDigest !== "string")
82
+ return invalid();
83
+ const target = source.target;
84
+ if (Object.keys(target).sort().join("\0") !== "kind\0stableId"
85
+ || !["repository", "issue", "knowledge"].includes(target.kind) || typeof target.stableId !== "string")
86
+ return invalid();
87
+ const result = source;
88
+ if (canonicalDigest(result.payload) !== result.payloadDigest)
89
+ return invalid();
90
+ return result;
91
+ }
92
+ async function readArtifact(filename, expectedDigest) {
93
+ let before;
94
+ try {
95
+ before = await lstat(filename, { bigint: true });
96
+ }
97
+ catch {
98
+ return invalid();
99
+ }
100
+ if (!before.isFile() || before.isSymbolicLink() || before.nlink !== 1n || (before.mode & 63n) !== 0n || before.size < 1n
101
+ || before.size > BigInt(maximumPayloadArtifactBytes))
102
+ return invalid();
103
+ const canonical = await realpath(filename);
104
+ if (canonical !== filename)
105
+ return invalid();
106
+ const content = await readFile(filename, "utf8");
107
+ const after = await lstat(filename, { bigint: true });
108
+ if (before.dev !== after.dev || before.ino !== after.ino || before.size !== after.size || before.mtimeNs !== after.mtimeNs)
109
+ return invalid();
110
+ let parsed;
111
+ try {
112
+ parsed = JSON.parse(content);
113
+ }
114
+ catch {
115
+ return invalid();
116
+ }
117
+ const result = parseEnvelope(parsed);
118
+ if (canonicalDigest(result) !== expectedDigest)
119
+ return invalid();
120
+ return result;
121
+ }
122
+ export function prepareExternalActionPayload(input) {
123
+ const value = envelope(input);
124
+ const digest = canonicalDigest(value);
125
+ const content = `${JSON.stringify(value)}\n`;
126
+ if (Buffer.byteLength(content, "utf8") > maximumPayloadArtifactBytes) {
127
+ return invalid("WSSPEC_EXTERNAL_PAYLOAD_INVALID");
128
+ }
129
+ return { digest, content };
130
+ }
131
+ export async function persistExternalActionPayload(input) {
132
+ let parsed;
133
+ try {
134
+ parsed = JSON.parse(input.artifact.content);
135
+ }
136
+ catch {
137
+ return invalid();
138
+ }
139
+ const value = parseEnvelope(parsed);
140
+ if (canonicalDigest(value) !== input.artifact.digest)
141
+ return invalid();
142
+ const directory = await secureArtifactDirectory(input.controlPlane);
143
+ const filename = artifactFilename(directory, input.artifact.digest);
144
+ let handle;
145
+ let created = false;
146
+ try {
147
+ handle = await open(filename, "wx", 0o600);
148
+ created = true;
149
+ await handle.writeFile(input.artifact.content, "utf8");
150
+ await handle.sync();
151
+ }
152
+ catch (error) {
153
+ if (error.code !== "EEXIST") {
154
+ await handle?.close().catch(() => undefined);
155
+ handle = undefined;
156
+ if (created)
157
+ await unlink(filename).catch(() => undefined);
158
+ if (error instanceof ExternalActionPayloadError)
159
+ throw error;
160
+ return invalid();
161
+ }
162
+ }
163
+ finally {
164
+ await handle?.close();
165
+ }
166
+ await readArtifact(filename, input.artifact.digest);
167
+ return { digest: input.artifact.digest, created };
168
+ }
169
+ export async function removeExternalActionPayload(input) {
170
+ const directory = await secureArtifactDirectory(input.controlPlane);
171
+ const filename = artifactFilename(directory, input.digest);
172
+ try {
173
+ await unlink(filename);
174
+ }
175
+ catch (error) {
176
+ if (error.code !== "ENOENT")
177
+ throw error;
178
+ }
179
+ }
180
+ export async function loadExternalActionPayload(input) {
181
+ const directory = await secureArtifactDirectory(input.controlPlane);
182
+ const value = await readArtifact(artifactFilename(directory, input.request.payloadArtifactDigest), input.request.payloadArtifactDigest);
183
+ if (value.workItemId !== input.request.workItemId || value.stepId !== input.request.stepId
184
+ || value.attemptId !== input.request.attemptId || value.provider !== input.request.provider
185
+ || value.action !== input.request.action || value.target.kind !== input.request.target.kind
186
+ || value.target.stableId !== input.request.target.stableId || value.payloadDigest !== input.request.payloadDigest)
187
+ return invalid();
188
+ return value.payload;
189
+ }
190
+ //# sourceMappingURL=external-action-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-action-payload.js","sourceRoot":"","sources":["../../src/storage/external-action-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAE5F,MAAM,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAAC;AAoBhD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC9B;IAArB,YAAqB,IAAwB,EAAE,OAAe;QAC5D,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QADV,SAAI,GAAJ,IAAI,CAAoB;QAE3C,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,SAAS,OAAO,CAAC,OAA2B,0CAA0C;IACpF,MAAM,IAAI,0BAA0B,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,MAA0B;IACrE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,YAAoB;IACzD,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,oBAAoB,GAAG,KAAK,EAAE,MAAc,EAAE,IAAY,EAAmB,EAAE;QACnF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,EAAE,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,OAAO,OAAO,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,MAAM;YAAE,OAAO,OAAO,EAAE,CAAC;QACpF,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,oBAAoB,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAC9F,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QAChE,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,KAQjB;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,2BAA2B;WAC9F,CAAC,+BAA+B,CAAC,UAAU,EAAE;YAC9C,YAAY,EAAE,2BAA2B;YACzC,mBAAmB,EAAE,CAAC;SACvB,CAAC,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,yBAAyB;QAC/B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;QAC3B,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7C,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IAC1F,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAClI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;WAC/D,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,yBAAyB;WACjE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;WAC1E,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;WAC3E,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAgB,CAAC;WACrG,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;WAC3F,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAiC,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB;WACzD,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAc,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IACpI,MAAM,MAAM,GAAG,MAAkD,CAAC;IAClE,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,aAAa;QAAE,OAAO,OAAO,EAAE,CAAC;IAC/E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,cAAkC;IAC9E,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IACzD,MAAM,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;IAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE,IAAI,MAAM,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GAAM,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,EAAE;WACtH,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,2BAA2B,CAAC;QAAE,OAAO,OAAO,EAAE,CAAC;IACzE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,SAAS,KAAK,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAAE,OAAO,OAAO,EAAE,CAAC;IAC7I,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACrC,MAAM,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;IAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,cAAc;QAAE,OAAO,OAAO,EAAE,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAQ5C;IACC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,2BAA2B,EAAE,CAAC;QACrE,OAAO,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,KAGlD;IACC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACpD,MAAM,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;IAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,OAAO,EAAE,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC;IACX,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,GAAG,SAAS,CAAC;YACnB,IAAI,OAAO;gBAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,KAAK,YAAY,0BAA0B;gBAAE,MAAM,KAAK,CAAC;YAC7D,OAAO,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,KAGjD;IACC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAG/C;IACC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxI,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM;WACrF,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ;WACxF,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI;WACxF,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,EAAE,CAAC;IACtI,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface AtomicFileHandle {
2
+ writeFile(content: string, encoding: "utf8"): Promise<void>;
3
+ sync(): Promise<void>;
4
+ close(): Promise<void>;
5
+ }
6
+ export interface AtomicFileDependencies {
7
+ mkdir(directory: string): Promise<unknown>;
8
+ open(filename: string, flags: string, mode?: number): Promise<AtomicFileHandle>;
9
+ rename(source: string, target: string): Promise<void>;
10
+ unlink(filename: string): Promise<void>;
11
+ }
12
+ export declare function createWriteFileAtomic(overrides?: Partial<AtomicFileDependencies>): (target: string, content: string) => Promise<void>;
13
+ export declare const writeFileAtomic: (target: string, content: string) => Promise<void>;
@@ -0,0 +1,45 @@
1
+ import { mkdir, open, rename, unlink } from "node:fs/promises";
2
+ import path from "node:path";
3
+ const defaultDependencies = {
4
+ mkdir: async (directory) => mkdir(directory, { recursive: true }),
5
+ open: async (filename, flags, mode) => open(filename, flags, mode),
6
+ rename,
7
+ unlink,
8
+ };
9
+ export function createWriteFileAtomic(overrides = {}) {
10
+ const dependencies = { ...defaultDependencies, ...overrides };
11
+ return async (target, content) => {
12
+ const directory = path.dirname(target);
13
+ const temporary = path.join(directory, `.${path.basename(target)}.${process.pid}.${crypto.randomUUID()}.tmp`);
14
+ let handle;
15
+ let temporaryCreated = false;
16
+ let renamed = false;
17
+ try {
18
+ await dependencies.mkdir(directory);
19
+ handle = await dependencies.open(temporary, "wx", 0o600);
20
+ temporaryCreated = true;
21
+ await handle.writeFile(content, "utf8");
22
+ await handle.sync();
23
+ await handle.close();
24
+ handle = undefined;
25
+ await dependencies.rename(temporary, target);
26
+ renamed = true;
27
+ const directoryHandle = await dependencies.open(directory, "r");
28
+ try {
29
+ await directoryHandle.sync();
30
+ }
31
+ finally {
32
+ await directoryHandle.close();
33
+ }
34
+ }
35
+ catch (error) {
36
+ if (handle !== undefined)
37
+ await handle.close().catch(() => undefined);
38
+ if (temporaryCreated && !renamed)
39
+ await dependencies.unlink(temporary).catch(() => undefined);
40
+ throw error;
41
+ }
42
+ };
43
+ }
44
+ export const writeFileAtomic = createWriteFileAtomic();
45
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/storage/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAmB,MAAM,kBAAkB,CAAC;AAChF,OAAO,IAAI,MAAM,WAAW,CAAC;AAe7B,MAAM,mBAAmB,GAA2B;IAClD,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAmC,EAAE,IAAI,CAAwB;IACvH,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,YAA6C,EAAE;IACnF,MAAM,YAAY,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9G,IAAI,MAAoC,CAAC;QACzC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACzD,gBAAgB,GAAG,IAAI,CAAC;YACxB,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;oBAAS,CAAC;gBACT,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACtE,IAAI,gBAAgB,IAAI,CAAC,OAAO;gBAAE,MAAM,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function runGit(cwd: string, args: string[]): Promise<string>;
2
+ export declare function runGitRaw(cwd: string, args: string[]): Promise<string>;
3
+ export declare function repositoryRoot(cwd: string): Promise<string>;
4
+ export declare function gitCommonDir(cwd: string): Promise<string>;
@@ -0,0 +1,21 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execFileAsync = promisify(execFile);
4
+ export async function runGit(cwd, args) {
5
+ return (await runGitRaw(cwd, args)).trim();
6
+ }
7
+ export async function runGitRaw(cwd, args) {
8
+ const { stdout } = await execFileAsync("git", args, {
9
+ cwd,
10
+ encoding: "utf8",
11
+ maxBuffer: 16 * 1024 * 1024,
12
+ });
13
+ return stdout;
14
+ }
15
+ export async function repositoryRoot(cwd) {
16
+ return runGit(cwd, ["rev-parse", "--show-toplevel"]);
17
+ }
18
+ export async function gitCommonDir(cwd) {
19
+ return runGit(cwd, ["rev-parse", "--path-format=absolute", "--git-common-dir"]);
20
+ }
21
+ //# sourceMappingURL=git.js.map