pi-background-tasks 2.5.0 → 2.6.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 (203) hide show
  1. package/BACKGROUND-TASKS-INSTRUCTIONS.md +1 -1
  2. package/README.md +70 -25
  3. package/TESTING.md +42 -2
  4. package/TEST_PLAN.md +7 -4
  5. package/dist/extensions/anthropic-attribution-child.js +4 -0
  6. package/dist/extensions/anthropic-attribution-child.js.map +1 -0
  7. package/dist/extensions/anthropic-attribution.js +107 -0
  8. package/dist/extensions/anthropic-attribution.js.map +1 -0
  9. package/dist/extensions/background-tasks.js +2 -0
  10. package/dist/extensions/background-tasks.js.map +1 -0
  11. package/dist/extensions/delegate-child.js +2 -0
  12. package/dist/extensions/delegate-child.js.map +1 -0
  13. package/dist/extensions/fusion-child.js +2 -0
  14. package/dist/extensions/fusion-child.js.map +1 -0
  15. package/dist/package.json +5 -0
  16. package/dist/src/core/anthropic-attribution-path.js +24 -0
  17. package/dist/src/core/anthropic-attribution-path.js.map +1 -0
  18. package/dist/src/core/anthropic-attribution.js +2247 -0
  19. package/dist/src/core/anthropic-attribution.js.map +1 -0
  20. package/dist/src/core/attested-pi-contract.js +5 -0
  21. package/dist/src/core/attested-pi-contract.js.map +1 -0
  22. package/dist/src/core/attested-pi-run.js +749 -0
  23. package/dist/src/core/attested-pi-run.js.map +1 -0
  24. package/dist/src/core/canonical-json.js +19 -0
  25. package/dist/src/core/canonical-json.js.map +1 -0
  26. package/dist/src/core/common.js +787 -0
  27. package/dist/src/core/common.js.map +1 -0
  28. package/dist/src/core/config.js +78 -0
  29. package/dist/src/core/config.js.map +1 -0
  30. package/dist/src/core/context/parent-snapshot.js +75 -0
  31. package/dist/src/core/context/parent-snapshot.js.map +1 -0
  32. package/dist/src/core/context/token-budget.js +631 -0
  33. package/dist/src/core/context/token-budget.js.map +1 -0
  34. package/dist/src/core/context/visible-conversation-v2.js +390 -0
  35. package/dist/src/core/context/visible-conversation-v2.js.map +1 -0
  36. package/dist/src/core/delegate/artifacts.js +357 -0
  37. package/dist/src/core/delegate/artifacts.js.map +1 -0
  38. package/dist/src/core/delegate/budget.js +266 -0
  39. package/dist/src/core/delegate/budget.js.map +1 -0
  40. package/dist/src/core/delegate/facade-contract.js +7 -0
  41. package/dist/src/core/delegate/facade-contract.js.map +1 -0
  42. package/dist/src/core/delegate/hook-contract-evidence.json +18 -0
  43. package/dist/src/core/delegate/hook-contract.js +124 -0
  44. package/dist/src/core/delegate/hook-contract.js.map +1 -0
  45. package/dist/src/core/delegate/launch.js +366 -0
  46. package/dist/src/core/delegate/launch.js.map +1 -0
  47. package/dist/src/core/delegate/result-package.js +293 -0
  48. package/dist/src/core/delegate/result-package.js.map +1 -0
  49. package/dist/src/core/delegate/runner.js +398 -0
  50. package/dist/src/core/delegate/runner.js.map +1 -0
  51. package/dist/src/core/delegate/seed.js +334 -0
  52. package/dist/src/core/delegate/seed.js.map +1 -0
  53. package/dist/src/core/delegate/types.js +103 -0
  54. package/dist/src/core/delegate/types.js.map +1 -0
  55. package/dist/src/core/durable-fs.js +372 -0
  56. package/dist/src/core/durable-fs.js.map +1 -0
  57. package/dist/src/core/extension-api.js +382 -0
  58. package/dist/src/core/extension-api.js.map +1 -0
  59. package/dist/src/core/fusion/artifacts.js +654 -0
  60. package/dist/src/core/fusion/artifacts.js.map +1 -0
  61. package/dist/src/core/fusion/budget.js +949 -0
  62. package/dist/src/core/fusion/budget.js.map +1 -0
  63. package/dist/src/core/fusion/child-protocol.js +176 -0
  64. package/dist/src/core/fusion/child-protocol.js.map +1 -0
  65. package/dist/src/core/fusion/claude-cache.js +156 -0
  66. package/dist/src/core/fusion/claude-cache.js.map +1 -0
  67. package/dist/src/core/fusion/clean-context.js +64 -0
  68. package/dist/src/core/fusion/clean-context.js.map +1 -0
  69. package/dist/src/core/fusion/config.js +349 -0
  70. package/dist/src/core/fusion/config.js.map +1 -0
  71. package/dist/src/core/fusion/context.js +184 -0
  72. package/dist/src/core/fusion/context.js.map +1 -0
  73. package/dist/src/core/fusion/evaluation.js +696 -0
  74. package/dist/src/core/fusion/evaluation.js.map +1 -0
  75. package/dist/src/core/fusion/facade-contract.js +3 -0
  76. package/dist/src/core/fusion/facade-contract.js.map +1 -0
  77. package/dist/src/core/fusion/orchestrator.js +867 -0
  78. package/dist/src/core/fusion/orchestrator.js.map +1 -0
  79. package/dist/src/core/fusion/output-contract.js +27 -0
  80. package/dist/src/core/fusion/output-contract.js.map +1 -0
  81. package/dist/src/core/fusion/pi-child.js +1741 -0
  82. package/dist/src/core/fusion/pi-child.js.map +1 -0
  83. package/dist/src/core/fusion/prompts.js +260 -0
  84. package/dist/src/core/fusion/prompts.js.map +1 -0
  85. package/dist/src/core/fusion/result-package.js +857 -0
  86. package/dist/src/core/fusion/result-package.js.map +1 -0
  87. package/dist/src/core/fusion/source-policy.js +259 -0
  88. package/dist/src/core/fusion/source-policy.js.map +1 -0
  89. package/dist/src/core/fusion/types.js +207 -0
  90. package/dist/src/core/fusion/types.js.map +1 -0
  91. package/dist/src/core/fusion/web-fetch.js +777 -0
  92. package/dist/src/core/fusion/web-fetch.js.map +1 -0
  93. package/dist/src/core/fusion/workflows.js +126 -0
  94. package/dist/src/core/fusion/workflows.js.map +1 -0
  95. package/dist/src/core/lazy-module.js +181 -0
  96. package/dist/src/core/lazy-module.js.map +1 -0
  97. package/dist/src/core/pi-launch.js +431 -0
  98. package/dist/src/core/pi-launch.js.map +1 -0
  99. package/dist/src/core/registry.js +3331 -0
  100. package/dist/src/core/registry.js.map +1 -0
  101. package/dist/src/core/reload-shell-owner.js +1396 -0
  102. package/dist/src/core/reload-shell-owner.js.map +1 -0
  103. package/dist/src/core/shell-policy.js +80 -0
  104. package/dist/src/core/shell-policy.js.map +1 -0
  105. package/dist/src/core/task-durable.js +51 -0
  106. package/dist/src/core/task-durable.js.map +1 -0
  107. package/dist/src/core/update-check.js +92 -0
  108. package/dist/src/core/update-check.js.map +1 -0
  109. package/dist/src/core/windows-taskkill.js +185 -0
  110. package/dist/src/core/windows-taskkill.js.map +1 -0
  111. package/dist/src/delegate-child-extension.js +776 -0
  112. package/dist/src/delegate-child-extension.js.map +1 -0
  113. package/dist/src/delegate-extension.js +746 -0
  114. package/dist/src/delegate-extension.js.map +1 -0
  115. package/dist/src/extension.js +953 -0
  116. package/dist/src/extension.js.map +1 -0
  117. package/dist/src/fusion-child-extension.js +760 -0
  118. package/dist/src/fusion-child-extension.js.map +1 -0
  119. package/dist/src/fusion-extension.js +1030 -0
  120. package/dist/src/fusion-extension.js.map +1 -0
  121. package/dist/src/ui/background-tasks-manager.js +689 -0
  122. package/dist/src/ui/background-tasks-manager.js.map +1 -0
  123. package/dist/src/ui/fusion-model-selector.js +277 -0
  124. package/dist/src/ui/fusion-model-selector.js.map +1 -0
  125. package/docs/INDEX.md +35 -33
  126. package/docs/api/eventbus-v1.md +21 -5
  127. package/docs/choose-a-workflow.md +2 -0
  128. package/docs/commands/bg-clear.md +3 -3
  129. package/docs/commands/bg-update.md +3 -3
  130. package/docs/commands/bg.md +18 -6
  131. package/docs/commands/claude-cache.md +4 -4
  132. package/docs/commands/fusion-models.md +49 -4
  133. package/docs/commands/fusion.md +3 -3
  134. package/docs/commands/jobs.md +3 -3
  135. package/docs/commands/kill.md +3 -3
  136. package/docs/commands/logs.md +3 -3
  137. package/docs/commands/task-manager.md +5 -5
  138. package/docs/concepts/completion-delivery.md +6 -2
  139. package/docs/getting-started.md +7 -1
  140. package/docs/manifest.json +228 -42
  141. package/docs/operations/configuration.md +58 -5
  142. package/docs/operations/releasing.md +4 -2
  143. package/docs/operations/testing.md +22 -0
  144. package/docs/operations/troubleshooting.md +6 -2
  145. package/docs/read-before-edit.md +44 -31
  146. package/docs/reference/runtime-contracts.md +87 -51
  147. package/docs/reference/shortcuts-and-dock.md +28 -14
  148. package/docs/subsystems/anthropic-attribution.md +23 -11
  149. package/docs/subsystems/attested-pi-runs.md +12 -7
  150. package/docs/subsystems/background-task-runtime.md +53 -11
  151. package/docs/subsystems/child-launch-durability-and-safety.md +28 -9
  152. package/docs/subsystems/delegation.md +16 -3
  153. package/docs/subsystems/docs-freshness-gate.md +14 -7
  154. package/docs/subsystems/fusion.md +36 -11
  155. package/docs/subsystems/host-ui-and-telemetry.md +22 -9
  156. package/docs/tools/bg_delegate.md +3 -1
  157. package/docs/tools/bg_kill.md +3 -1
  158. package/docs/tools/bg_logs.md +3 -1
  159. package/docs/tools/bg_result.md +5 -3
  160. package/docs/tools/bg_run.md +31 -5
  161. package/docs/tools/bg_run_pi_attested.md +3 -1
  162. package/docs/tools/bg_status.md +3 -1
  163. package/docs/tools/fusion_investigate.md +3 -1
  164. package/docs/tools/fusion_reason.md +3 -1
  165. package/docs/tools/fusion_research.md +3 -1
  166. package/docs/tools/fusion_validate.md +3 -1
  167. package/extensions/anthropic-attribution-child.ts +3 -0
  168. package/extensions/anthropic-attribution.ts +166 -1
  169. package/package.json +12 -10
  170. package/src/core/anthropic-attribution-path.ts +5 -4
  171. package/src/core/anthropic-attribution.ts +293 -113
  172. package/src/core/attested-pi-contract.ts +4 -0
  173. package/src/core/attested-pi-run.ts +468 -81
  174. package/src/core/canonical-json.ts +21 -0
  175. package/src/core/common.ts +450 -40
  176. package/src/core/config.ts +121 -0
  177. package/src/core/context/visible-conversation-v2.ts +3 -6
  178. package/src/core/delegate/artifacts.ts +13 -9
  179. package/src/core/delegate/budget.ts +13 -6
  180. package/src/core/delegate/facade-contract.ts +6 -0
  181. package/src/core/delegate/result-package.ts +32 -14
  182. package/src/core/delegate/runner.ts +129 -58
  183. package/src/core/delegate/seed.ts +5 -7
  184. package/src/core/durable-fs.ts +178 -30
  185. package/src/core/extension-api.ts +36 -8
  186. package/src/core/fusion/artifacts.ts +17 -16
  187. package/src/core/fusion/clean-context.ts +8 -5
  188. package/src/core/fusion/config.ts +2 -1
  189. package/src/core/fusion/context.ts +2 -6
  190. package/src/core/fusion/facade-contract.ts +2 -0
  191. package/src/core/fusion/orchestrator.ts +3 -3
  192. package/src/core/fusion/prompts.ts +1 -1
  193. package/src/core/fusion/result-package.ts +259 -72
  194. package/src/core/fusion/source-policy.ts +43 -17
  195. package/src/core/lazy-module.ts +215 -0
  196. package/src/core/pi-launch.ts +390 -65
  197. package/src/core/registry.ts +2010 -381
  198. package/src/core/reload-shell-owner.ts +1662 -0
  199. package/src/core/shell-policy.ts +134 -0
  200. package/src/core/task-durable.ts +67 -0
  201. package/src/delegate-extension.ts +404 -144
  202. package/src/extension.ts +387 -114
  203. package/src/fusion-extension.ts +202 -96
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AASvC,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAc,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,gCAAgC,EAChC,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EAYb,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,eAAe,GAEhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAA8B,MAAM,oBAAoB,CAAC;AACxF,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EACL,iCAAiC,GAElC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAEpF;;;;;;;;;GASG;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,kBAAkB,GAAG,kDAAkD,CAAC;AAE9E,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;IACzF,OAAO,CAAC,KAAK,CAAC,sDAAsD,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC;AACH,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,IAAI,qBAAqB,CAAC;AAC/D,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC;AAC5C,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAC/C,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAC7C,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,KAAK,GAAG,UAAU,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AA6BD,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EACT,2GAA2G;KAC9G,CAAC;IACF,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,0CAA0C,EAAE,CAAC;IACjF,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACpB,WAAW,EACT,2PAA2P;KAC9P,CAAC;IACF,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC,CACpF;IACD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2DAA2D,EAAE,CAAC,CAC1F;IACD,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAC/B,IAAI,CAAC,OAAO,CAAC;QACX,WAAW,EACT,wIAAwI;KAC3I,CAAC,CACH;IACD,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAChC,IAAI,CAAC,OAAO,CAAC;QACX,WAAW,EACT,uIAAuI;KAC1I,CAAC,CACH;IACD,aAAa,EAAE,IAAI,CAAC,QAAQ,CAC1B,IAAI,CAAC,OAAO,CAAC;QACX,WAAW,EACT,mMAAmM;KACtM,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC;IAC1F,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,qEAAqE;KACnF,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC;IAClF,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC;IAC5F,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;QACtB,WAAW,EACT,qFAAqF;KACxF,CAAC;IACF,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,IAAI,CAAC,KAAK,CACR,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EACT,oFAAoF;KACvF,CAAC,CACH,CACF;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC,CAAC;IAC7F,cAAc,EAAE,IAAI,CAAC,QAAQ,CAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2DAA2D,EAAE,CAAC,CAC1F;CACF,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EACT,4FAA4F;KAC/F,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IACrE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CACrB,IAAI,CAAC,MAAM,CAAC;QACV,WAAW,EAAE,sCAAsC,UAAU,CAAC,aAAa,CAAC,cAAc,UAAU,CAAC,iBAAiB,CAAC,GAAG;KAC3H,CAAC,CACH;IACD,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,OAAO,CAAC;QACX,WAAW,EAAE,qEAAqE;KACnF,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;CAC9E,CAAC,CAAC;AAKH,SAAS,iBAAiB,CAAC,MAAsB,EAAE,OAAgC,EAAE,KAAY;IAC/F,KAAK,OAAO,CAAC;IACb,KAAK,KAAK,CAAC;IACX,MAAM,IAAI,GACR,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClG,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAAgB;IACrE,MAAM,MAAM,GAAG,0BAA0B,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,MAAM,gBAAgB,GAAG,4BAA4B,EAAE,CAAC;IACxD,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,gCAAgC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,UAAwC,CAAC;IAC7C,IAAI,kBAAqD,CAAC;IAC1D,IAAI,eAAyD,CAAC;IAC9D,IAAI,kBAAqD,CAAC;IAC1D,IAAI,sBAAgE,CAAC;IACrE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,cAA0C,CAAC;IAC/C,IAAI,kBAAsC,CAAC;IAC3C,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,sBAAsB,GAAG,KAAK,CAAC;IACnC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,cAAc,GAAG,UAAU,CAAC;IAChC,MAAM,oBAAoB,GAAG,IAAI,+BAA+B,EAAE,CAAC;IACnE,MAAM,iBAAiB,GAAG,IAAI,UAAU,CACtC,yBAAyB,EACzB,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CACjD,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAqB,EAAyB,EAAE,CAAC,CAAC;QACzE,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE;QAC5C,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC;QAC1C,QAAQ,EAAE,GAAG,EAAE;YACb,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YAC/C,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,WAAW;QACX,gBAAgB;KACjB,CAAC,CAAC;IACH,MAAM,YAAY,GAAmC,iCAAiC,CAAC;QACrF,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,QAAQ;QACR,UAAU,EAAE,GAAG,EAAE,CAAC,kBAAkB;QACpC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE;KAChD,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,CAAC,MAAc,EAAQ,EAAE;QACpD,IAAI,YAAqB,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAC/B,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,sBAAsB,CAAC;gBACrC,sBAAsB,GAAG,SAAS,CAAC;gBACnC,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBACtC,IAAI,CAAC;oBACH,gBAAgB,CAAC,eAAe,CAC9B,KAAK,EACL,IAAI,mBAAmB,CACrB,gCAAgC,EAChC,yDAAyD,CAC1D,CACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChE,MAAM,KAAK,GAAG,eAAe,CAAC;gBAC9B,IAAI,CAAC;oBACH,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;oBACrC,eAAe,GAAG,SAAS,CAAC;oBAC5B,kBAAkB,GAAG,SAAS,CAAC;gBACjC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,mBAAmB,GAAG,IAAI,CAAC;oBAC3B,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/B,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QACD,2EAA2E;QAC3E,2EAA2E;QAC3E,UAAU,GAAG,SAAS,CAAC;QACvB,kBAAkB,GAAG,SAAS,CAAC;QAC/B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,aAAa,CAAC,cAAc,CAAC,CAAC;YAC9B,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;QACD,IAAI,YAAY,KAAK,SAAS;YAAE,MAAM,YAAY,CAAC;IACrD,CAAC,CAAC;IAEF,2EAA2E;IAC3E,sEAAsE;IACtE,2EAA2E;IAC3E,0CAA0C;IAC1C,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE;QAC5B,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE;QAC5B,iBAAiB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE;QAClC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9B,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,yEAAyE;IACzE,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,QAAQ;YAAE,OAAO;QACrB,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,uBAAuB,CACtC,eAAe,CAAC,SAAS,IAAI,EAAE,EAC/B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CACtB,CAAC;QACF,IAAI,eAAe,KAAK,SAAS,IAAI,QAAQ,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACtE,IACE,kBAAkB,EAAE,OAAO,KAAK,QAAQ,CAAC,OAAO;gBAChD,kBAAkB,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;gBACnD,kBAAkB,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EACvD,CAAC;gBACD,MAAM,IAAI,mBAAmB,CAC3B,wCAAwC,EACxC,mFAAmF,CACpF,CAAC;YACJ,CAAC;YACD,UAAU,GAAG,GAAG,CAAC;YACjB,kBAAkB,GAAG,eAAe,CAAC;YACrC,OAAO;QACT,CAAC;QACD,MAAM,eAAe,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,gBAAgB,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACxF,sBAAsB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,sBAAsB,KAAK,KAAK,EAAE,CAAC;gBACrC,kEAAkE;gBAClE,4DAA4D;gBAC5D,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBACtC,sBAAsB,GAAG,SAAS,CAAC;gBACnC,gBAAgB,CAAC,eAAe,CAC9B,KAAK,EACL,IAAI,mBAAmB,CACrB,gCAAgC,EAChC,oDAAoD,CACrD,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAChE,sBAAsB,GAAG,SAAS,CAAC;YACnC,eAAe,GAAG,KAAK,CAAC;YACxB,kBAAkB,GAAG,QAAQ,CAAC;YAC9B,UAAU,GAAG,GAAG,CAAC;YACjB,kBAAkB,GAAG,eAAe,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,sBAAsB,KAAK,KAAK;gBAAE,sBAAsB,GAAG,SAAS,CAAC;YACzE,IAAI,CAAC;gBACH,gBAAgB,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,IACE,OAAO,UAAU,KAAK,QAAQ;oBAC9B,UAAU,KAAK,IAAI;oBACnB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,gCAAgC,EACpE,CAAC;oBACD,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,0CAA0C,CAAC,CAAC;gBAC5F,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC1E,uBAAuB,CAAC,EAAE,EAAE;YAC1B,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;gBACvC,UAAU,GAAG,GAAG,CAAC;gBACjB,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;gBAC7C,kBAAkB,GAAG,eAAe,CAAC;gBACrC,OAAO,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC7D,CAAC;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3C,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;YACvF,oBAAoB;SACrB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC9E,yBAAyB,CAAC,EAAE,EAAE;YAC5B,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;gBACxC,UAAU,GAAG,GAAG,CAAC;gBACjB,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;gBAC7C,kBAAkB,GAAG,eAAe,CAAC;gBACrC,OAAO,QAAQ,CAAC,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC;YACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3C,wBAAwB,EAAE,CAAC,MAAM,EAAE,EAAE,CACnC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC;YACvF,oBAAoB;SACrB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACvD,MAAM,EAAE,iCAAiC,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACtF,iCAAiC,CAAC,EAAE,EAAE;YACpC,WAAW,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC;YAC7D,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAC3D,oBAAoB;SACrB,CAAC,CAAC;IACL,CAAC;IAED,SAAS,mBAAmB;QAC1B,OAAO,QAAQ;aACZ,QAAQ,EAAE;aACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,SAAS,oBAAoB,CAAC,GAAG,GAAG,UAAU;QAC5C,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,MAAM;YAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpD,QAAQ,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,SAAS,0BAA0B,CAAC,GAAqB;QACvD,UAAU,GAAG,GAAG,CAAC;QACjB,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO;QACvB,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,OAAO,GAAG,CAAC;YACT,CAAC,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,mCAAmC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;YAC1F,CAAC,CAAC,+CAA+C,EACnD,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CACjC,CAAC;IACJ,CAAC;IAED,SAAS,QAAQ,CAAC,GAAG,GAAG,UAAU;QAChC,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG;YAAE,OAAO;QAC9C,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK;gBAAE,OAAO;YACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAChE,CAAC;YACF,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CACnC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAChE,CAAC;YACF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACnE,CAAC;YACF,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAC3F,MAAM,aAAa,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC;YACrF,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;gBACtD,GAAG,CAAC,EAAE,CAAC,SAAS,CACd,kBAAkB,EAClB,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAC/D,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3E,MAAM,SAAS,GAAG,QAAQ;gBACxB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,GAAG,aAAa,GAAG,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACvE,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC;YACvC,IAAI,aAAa;gBAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAC7C,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjG,CAAC;YACF,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,SAAS,CACtB,GAAqB,EACrB,OAAe,EACf,UAA4B,EAAE;QAE9B,UAAU,GAAG,GAAG,CAAC;QACjB,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7C,kBAAkB,GAAG,eAAe,CAAC;QACrC,OAAO,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,UAAU,mBAAmB,CAChC,GAAqB,EACrB,OAAmC;QAEnC,UAAU,GAAG,GAAG,CAAC;QACjB,MAAM,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7C,kBAAkB,GAAG,eAAe,CAAC;QACrC,OAAO,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,UAAU,eAAe,CAC5B,GAA+C,EAC/C,aAAsB;QAEtB,UAAU,GAAG,GAAG,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,kIAAkI,EAClI,OAAO,CACR,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QACrF,QAAQ,GAAG,IAAI,CAAC;QAChB,QAAQ,CAAC,GAAG,CAAC,CAAC;QACd,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CACjB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE;gBACjC,MAAM,cAAc,GAAG;oBACrB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;oBACnC,QAAQ,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;wBAC5C,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;wBAC/D,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAChB,CAAC;oBACD,cAAc,EAAE,KAAK,IAAI,EAAE;wBACzB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBACrD,QAAQ,CAAC,GAAG,CAAC,CAAC;wBACd,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,SAAS,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;wBAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;4BAC7D,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;wBACJ,CAAC;wBACD,MAAM,YAAY,GAAqB;4BACrC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;4BAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,aAAa,EAAE,IAAI,CAAC,aAAa;4BACjC,kBAAkB,EAAE,IAAI;4BACxB,mBAAmB,EAAE,KAAK;yBAC3B,CAAC;wBACF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;4BAAE,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBAChF,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;4BACnC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;wBACpD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;wBAC/D,QAAQ,CAAC,GAAG,CAAC,CAAC;wBACd,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,cAAc,EAAE,CAAC,IAAyB,EAAE,EAAE;wBAC5C,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,mBAAmB,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,UAAU,EAAE,EAC5E,MAAM,CACP,CAAC;oBACJ,CAAC;oBACD,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE;wBAC3B,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACxB,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAChB,CAAC;oBACD,gBAAgB,EAAE,CAAC,OAAiB,EAAE,EAAE;wBACtC,KAAK,MAAM,MAAM,IAAI,OAAO;4BAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACtD,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAChB,CAAC;oBACD,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;iBACpD,CAAC;gBACF,IAAI,aAAa;oBACf,OAAO,IAAI,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;wBAClD,GAAG,cAAc;wBACjB,aAAa;qBACd,CAAC,CAAC;gBACL,OAAO,IAAI,sBAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YACtE,CAAC,EACD;gBACE,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE;oBACd,MAAM,EAAE,eAAe;oBACvB,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,EAAE;oBACZ,SAAS,EAAE,KAAK;oBAChB,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;iBACzC;aACF,CACF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,QAAQ,GAAG,KAAK,CAAC;YACjB,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,EAAE,CAAC,uBAAuB,CACxB,8BAA8B,EAC9B,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,WAAW,CAAC;QAC3C,MAAM,KAAK,GACT,MAAM,KAAK,WAAW;YACpB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,KAAK,QAAQ;gBACnB,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,MAAM,KAAK,QAAQ;oBACnB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ,CAAC;QACnB,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,iBAAiB,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,EACjH,CAAC,EACD,CAAC,CACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,KAAK,UAAU,mBAAmB,CAAC,GAAqB;QACtD,IAAI,QAAQ,IAAI,kBAAkB;YAAE,OAAO;QAC3C,kBAAkB,GAAG,IAAI,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,IAAI,GAAG,CAAC,4BAA4B,CAAC,KAAK,GAAG;YAAE,OAAO;QACtD,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG;YAAE,OAAO;QACtC,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,MAAM,OAAO,GAA8B;YACzC,WAAW,EAAE,YAAY;YACzB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7E,CAAC;SACF,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC9C,IAAI,WAAW;YAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ;YAAE,OAAO;QACrB,IAAI,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;YACtD,kBAAkB,GAAG,MAAM,CAAC;YAC5B,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,yEAAyE;QACzE,qEAAqE;QACrE,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,UAAU,GAAG,GAAG,CAAC;QACjB,MAAM,eAAe,GAAG,kBAAkB,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;QACnE,kBAAkB,GAAG,eAAe,CAAC;QACrC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,CAAC,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ;YAAE,OAAO;QACrB,IAAI,cAAc,KAAK,SAAS;YAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,QAAQ;YAAE,OAAO;QACrB,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;YAC1C,QAAQ,EAAE,CAAC;QACb,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvB,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,cAAc,GAAG,kBAAkB,CAAC;QACpC,sFAAsF;QACtF,IAAI,CAAC,QAAQ;YAAE,KAAK,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7C,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,sBAAsB;YAAE,OAAO;QACnC,sBAAsB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC;YACH,uEAAuE;YACvE,wEAAwE;YACxE,qEAAqE;YACrE,MAAM,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;YAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEjC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACzB,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,QAAQ,CACrB,IAAI,EACJ,UAAU,EACV,sCAAsC,KAAK,CAAC,MAAM,GAAG,CACtD,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,EAAE,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACxF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvB,OAAO,CAAC,KAAK,CAAC,kDAAkD,OAAO,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACrC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,oCAAoC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,mBAAmB,CAAC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBACxF,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,2BAA2B,EAAE,CAAC;gBAC/C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CACX,yEAAyE,EACzE,KAAK,CACN,CAAC;gBACJ,CAAC;gBACD,QAAQ,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;gBAClD,eAAe,GAAG,SAAS,CAAC;gBAC5B,kBAAkB,GAAG,SAAS,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE;QACvB,WAAW,EACT,gGAAgG;QAClG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,WAAW,GAAqB;oBACpC,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,kBAAkB,EAAE,IAAI;oBACxB,mBAAmB,EAAE,KAAK;iBAC3B,CAAC;gBACF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;oBAAE,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC9D,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC/D,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,WAAW,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,UAAU,cAAc,IAAI,CAAC,OAAO,EAAE,EACrG,MAAM,CACP,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC5F,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE;QAC1B,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE;QAC7B,WAAW,EAAE,qCAAqC;QAClD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE;QAC7B,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtB,0BAA0B,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE;QAC9B,WAAW,EAAE,wEAAwE;QACrF,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,eAAe,IAAI,SAAS,CAAC;YAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,YAAY,CAAC;YACrF,MAAM,KAAK,GAAG;gBACZ,MAAM;oBACJ,CAAC,CAAC,uBAAuB,OAAO,kBAAkB,MAAM,mCAAmC;oBAC3F,CAAC,CAAC,uBAAuB,OAAO,gBAAgB;gBAClD,kBAAkB;gBAClB,oBAAoB,YAAY,SAAS;gBACzC,oBAAoB,SAAS,EAAE;gBAC/B,qGAAqG;gBACrG,gBAAgB,kBAAkB,OAAO;gBACzC,mEAAmE,kBAAkB,kBAAkB;gBACvG,mFAAmF;aACpF,CAAC;YACF,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YACxC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;QACzC,EAAE,CAAC,gBAAgB,CAAC,YAA4B,EAAE;YAChD,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACrB,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;QACzC,EAAE,CAAC,gBAAgB,CAAC,YAA4B,EAAE;YAChD,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACrB,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,gBAAgB,CAAC,YAA4B,EAAE;QAChD,WAAW,EACT,2FAA2F;QAC7F,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,0BAA0B,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE;QACzB,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtB,UAAU,GAAG,GAAG,CAAC;YACjB,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAC9E,MAAM,CACP,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE;QACzB,WAAW,EAAE,mEAAmE;QAChF,sBAAsB,EAAE,CAAC,MAAM,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,QAAQ;iBACrB,QAAQ,EAAE;iBACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;iBACnD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACd,KAAK,EAAE,IAAI,CAAC,EAAE;gBACd,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;gBAC5C,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;aACnE,CAAC,CAAC,CAAC;YACN,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,UAAU,GAAG,GAAG,CAAC;gBACjB,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACrE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC9D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE;QACzB,WAAW,EAAE,4CAA4C;QACzD,sBAAsB,EAAE,CAAC,MAAM,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,QAAQ;iBACrB,QAAQ,EAAE;iBACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;iBAChF,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACd,KAAK,EAAE,IAAI,CAAC,EAAE;gBACd,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE;gBAC5C,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;aAC7C,CAAC,CAAC,CAAC;YACN,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,UAAU,GAAG,GAAG,CAAC;gBACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/C,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACtC,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,UAAU,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,UAAU,EAAE,EAC1E,MAAM,CACP,CAAC;gBACF,QAAQ,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,OAAO,CACR,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAmC;QAChD,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,uXAAuX,UAAU,CAAC,aAAa,CAAC,GAAG;QACha,aAAa,EACX,6HAA6H;QAC/H,gBAAgB,EAAE;YAChB,iIAAiI;YACjI,gLAAgL;YAChL,2LAA2L;YAC3L,oPAAoP;YACpP,uRAAuR;YACvR,0JAA0J;YAC1J,qPAAqP;YACrP,oIAAoI;SACrI;QACD,UAAU,EAAE,WAAW;QACvB,gBAAgB,CAAC,IAAI;YACnB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAC7F,MAAM,KAAK,GAAG,IAA4B,CAAC;YAC3C,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACzF,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACb,iJAAiJ,CAClJ,CAAC;YACJ,CAAC;YACD,IACE,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC;gBAC5D,OAAO,KAAK,CAAC,aAAa,KAAK,SAAS,EACxC,CAAC;gBACD,MAAM,IAAI,mBAAmB,CAC3B,8BAA8B,EAC9B,mDAAmD,CACpD,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClD,MAAM,IAAI,mBAAmB,CAC3B,yCAAyC,EACzC,6CAA6C,CAC9C,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAqB;gBACjC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EACF,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC7B,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC;oBACpC,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC1C,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;YACF,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;gBAAE,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YACpF,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;gBAAE,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;YAC7F,IAAI,OAAO,KAAK,CAAC,kBAAkB,KAAK,SAAS;gBAC/C,QAAQ,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;YACzD,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,SAAS;gBAChD,QAAQ,CAAC,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,CAAC;YAC3D,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,SAAS;gBAAE,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YAC3F,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG;YACxD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,iJAAiJ,CAClJ,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpD,MAAM,IAAI,mBAAmB,CAC3B,yCAAyC,EACzC,6CAA6C,CAC9C,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAqB;gBACpC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;gBAC5C,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;gBACrD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;aACxD,CAAC;YACF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;gBAAE,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACnF,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;gBAAE,WAAW,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAC5F,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC/D,MAAM,kBAAkB,GAAG,gCAAgC,CACzD,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,mBAAmB,CACzB,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,WAAW,CAClB,2BAA2B,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,MAAM,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,aAAa,IAAI,CAAC,UAAU,KAAK,kBAAkB,CAAC,IAAI,EAAE,CACvL;gBACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;aAC3C,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK;YACpB,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,EAClI,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK;YAClC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YAChC,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EACvK,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7B,EAAE,CAAC,YAAY,CAA0C;YACvD,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,iBAAiB;YACxB,WAAW,EACT,kQAAkQ;YACpQ,aAAa,EACX,gFAAgF;YAClF,gBAAgB,EAAE;gBAChB,0IAA0I;gBAC1I,wHAAwH;gBACxH,0IAA0I;aAC3I;YACD,UAAU,EAAE,kBAAkB;YAC9B,gBAAgB,CAAC,IAAI;gBACnB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;oBACnC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBACpE,MAAM,KAAK,GAAG,IAAkC,CAAC;gBACjD,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;gBACtD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACxF,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;oBACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAC1D,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBAC1F,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBAC5F,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;oBACtC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,MAAM,QAAQ,GAA4B;oBACxC,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;iBAC7B,CAAC;gBACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;wBAChE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;oBAC5E,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;gBAC3C,CAAC;gBACD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;oBAAE,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC3E,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;oBAC1C,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;gBACjD,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG;gBACxD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACpD,OAAO;oBACL,OAAO,EAAE,WAAW,CAClB,4BAA4B,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,MAAM,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,aAAa,IAAI,CAAC,UAAU,kBAAkB,IAAI,CAAC,eAAe,IAAI,0BAA0B,EAAE,CAChO;oBACD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;iBAC3C,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,IAAI,EAAE,KAAK;gBACpB,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,EAAE,EAClI,CAAC,EACD,CAAC,CACF,CAAC;YACJ,CAAC;YACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK;gBAClC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;gBAChC,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC,eAAe,IAAI,SAAS,EAAE,CAAC,EAAE,EAChP,CAAC,EACD,CAAC,CACF,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,YAAY,CAAyC;QACtD,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,4IAA4I;QAC9I,aAAa,EACX,4FAA4F;QAC9F,gBAAgB,EAAE;YAChB,oFAAoF;YACpF,6IAA6I;YAC7I,yMAAyM;SAC1M;QACD,UAAU,EAAE,cAAc;QAC1B,OAAO,CAAC,WAAW,EAAE,MAAM;YACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7F,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,OAAO,OAAO,CAAC,OAAO,CAAC;gBACrB,OAAO,EAAE,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBACnD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK;YACpB,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC9G,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QACD,YAAY,EAAE,iBAAiB;KAChC,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAqC;QAClD,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,8HAA8H,UAAU,CAAC,aAAa,CAAC,sEAAsE;QAC1O,aAAa,EAAE,+EAA+E;QAC9F,gBAAgB,EAAE;YAChB,qGAAqG;YACrG,4GAA4G;YAC5G,kIAAkI;SACnI;QACD,UAAU,EAAE,YAAY;QACxB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,CACrC,IAAI,EACJ,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAClC,MAAM,CAAC,IAAI,IAAI,IAAI,CACpB,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK;YACpB,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EACpF,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK;YACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACnM,IAAI,OAAO,CAAC,SAAS;gBAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACnE,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO;qBAC1B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;qBAC9E,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpF,CAAC;YACD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAqC;QAClD,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,gGAAgG;QAClG,aAAa,EAAE,sCAAsC;QACrD,gBAAgB,EAAE;YAChB,wGAAwG;SACzG;QACD,UAAU,EAAE,YAAY;QACxB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,0BAA0B,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3G,OAAO;gBACL,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC;gBAC7B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;aACpD,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,IAAI,EAAE,KAAK;YACpB,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EACpF,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK;YAClC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YAChC,OAAO,IAAI,IAAI,CACb,GAAG,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EACtK,CAAC,EACD,CAAC,CACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { randomBytes } from 'node:crypto';\nimport { realpathSync } from 'node:fs';\nimport type {\n ExtensionAPI,\n ExtensionCommandContext,\n ExtensionContext,\n Theme,\n ThemeColor,\n ToolRenderResultOptions,\n} from '@earendil-works/pi-coding-agent';\nimport { formatSize } from '@earendil-works/pi-coding-agent';\nimport { Text, type KeyId } from '@earendil-works/pi-tui';\nimport { Type, type Static } from 'typebox';\nimport {\n DEFAULT_LOG_BYTES,\n MAX_LOG_BYTES,\n deriveCompletionDeliveryGuidance,\n deriveTaskNameFromCommand,\n formatSnapshotList,\n formatUpdateSegment,\n isNewerVersion,\n normalizeMaxBytes,\n normalizeTaskName,\n parseBgCommandArgs,\n taskDisplayName,\n truncateChars,\n type BgKillDetails,\n type BgLogsDetails,\n type BgRunDetails,\n type BgStatusDetails,\n type BgTask,\n type BgTaskSnapshot,\n type ReloadShellActivationClaimV1,\n type ReloadShellActivationLeaseV1,\n type ReloadShellIdentityV1,\n type StartAttestedPiTaskOptions,\n type StartTaskOptions,\n ReloadSurvivalError,\n rejectSurvivalForTaskKind,\n} from './core/common.js';\nimport {\n fetchLatestVersion,\n readPackageInfo,\n type FetchLatestVersionOptions,\n} from './core/update-check.js';\nimport { BackgroundTaskRegistry, type BackgroundTaskContext } from './core/registry.js';\nimport {\n getProcessReloadShellOwnerV1,\n makeReloadShellIdentity,\n} from './core/reload-shell-owner.js';\nimport { createShellPolicyGuidanceHandler, initializeShellPolicy } from './core/shell-policy.js';\nimport {\n installBackgroundTaskExtensionApi,\n type BackgroundTaskExtensionService,\n} from './core/extension-api.js';\nimport type { BackgroundTaskForUi, TaskManagerResult } from './ui/background-tasks-manager.js';\nimport { dockShortcutFooterHint, parseBackgroundTasksConfig } from './core/config.js';\nimport { LazyModule, SynchronousActivationCloseFence } from './core/lazy-module.js';\n\n/**\n * Project-local Pi background task manager.\n *\n * Scope:\n * - Explicit background shell jobs only: /bg and bg_run spawn commands directly.\n * - No Ctrl+B support for backgrounding an already-running built-in bash tool.\n * - Opted ordinary shell jobs can hand their same live process ownership to a\n * fresh extension activation on real same-process reload only.\n * - No PID/file adoption, process-restart survival, or crash recovery.\n */\n\nconst STATUS_INTERVAL_MS = 1000;\nconst COMMAND_PREVIEW_CHARS = 90;\nconst GIT_INSTALL_TARGET = 'git:github.com/ismailsaleekh/pi-background-tasks';\n\nconst packageInfo = readPackageInfo(new URL('../package.json', import.meta.url), (error) => {\n console.error(`[background-tasks] failed to read package version: ${error.message}`);\n});\nconst PACKAGE_NAME = packageInfo.name ?? 'pi-background-tasks';\nconst PACKAGE_VERSION = packageInfo.version;\nconst LIGHT_BLUE_BG = '\\x1b[48;2;183;223;255m';\nconst LIGHT_BLUE_FG = '\\x1b[38;2;11;70;110m';\nconst ANSI_RESET = '\\x1b[0m';\nfunction lightBlue(value: string): string {\n return `${LIGHT_BLUE_BG}${LIGHT_BLUE_FG}${value}${ANSI_RESET}`;\n}\n\nfunction textContent(text: string) {\n return [{ type: 'text' as const, text }];\n}\n\ninterface TextToolResult {\n content?: ReadonlyArray<{ type: string; text?: string }>;\n}\n\ninterface BgToolArgumentRecord {\n readonly command?: unknown;\n readonly name?: unknown;\n readonly description?: unknown;\n readonly isAgent?: unknown;\n readonly timeoutSeconds?: unknown;\n readonly notifyOnCompletion?: unknown;\n readonly triggerOnCompletion?: unknown;\n readonly surviveReload?: unknown;\n}\n\ninterface BgPiAttestedArgumentRecord {\n readonly name?: unknown;\n readonly provider?: unknown;\n readonly model?: unknown;\n readonly prompt?: unknown;\n readonly reportPath?: unknown;\n readonly extraPiArgs?: unknown;\n readonly thinking?: unknown;\n readonly timeoutSeconds?: unknown;\n readonly surviveReload?: unknown;\n}\n\nfunction optionalTrimmed(value: string): string | undefined {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nconst BgRunParams = Type.Object({\n name: Type.String({\n description:\n 'Short human-readable task name shown in the bg footer dock. Required; use 2-6 words, not the raw command.',\n }),\n command: Type.String({ description: 'Shell command to start in the background' }),\n isAgent: Type.Boolean({\n description:\n 'Required. Set true only when this background task launches an LLM/agent process, such as a child `pi -p ...` or `pi --mode json ...`, so Pi-agent telemetry can be collected. Set false for scripts, tests, servers, sleeps, and ordinary shell commands.',\n }),\n description: Type.Optional(\n Type.String({ description: 'Optional longer human-readable context for the task' }),\n ),\n timeoutSeconds: Type.Optional(\n Type.Number({ description: 'Optional timeout; task is failed and killed when exceeded' }),\n ),\n notifyOnCompletion: Type.Optional(\n Type.Boolean({\n description:\n 'Whether to deliver the durable terminal notification. Default: true; disable only when deliberately taking over completion monitoring.',\n }),\n ),\n triggerOnCompletion: Type.Optional(\n Type.Boolean({\n description:\n 'Whether that notification should automatically trigger a follow-up agent turn. Default: true for bg_run; requires notifyOnCompletion.',\n }),\n ),\n surviveReload: Type.Optional(\n Type.Boolean({\n description:\n 'Opt in to retaining this exact ordinary isAgent:false shell execution across a real same-process Pi reload. Default: false. Unsupported for agent, managed, delegate, Fusion, and attested tasks.',\n }),\n ),\n});\n\nconst BgPiAttestedParams = Type.Object({\n name: Type.String({ description: 'Short human-readable name for this attested Pi task.' }),\n provider: Type.String({\n description: 'Exact Pi provider to launch, for example openai-codex or anthropic.',\n }),\n model: Type.String({ description: 'Exact provider-local Pi model id to launch.' }),\n prompt: Type.String({ description: 'Prompt bytes passed as the single user prompt to Pi.' }),\n reportPath: Type.String({\n description:\n 'Relative path, inside the task cwd, that the child Pi run must write as its report.',\n }),\n extraPiArgs: Type.Optional(\n Type.Array(\n Type.String({\n description:\n 'Additional literal Pi argv entries; mode/provider/model/api-key args are rejected.',\n }),\n ),\n ),\n thinking: Type.Optional(Type.String({ description: 'Optional Pi thinking level argument.' })),\n timeoutSeconds: Type.Optional(\n Type.Number({ description: 'Optional timeout; task is failed and killed when exceeded' }),\n ),\n});\n\nconst BgStatusParams = Type.Object({\n taskId: Type.Optional(\n Type.String({\n description:\n 'Optional task ID or unambiguous prefix. If omitted, all running/recent tasks are returned.',\n }),\n ),\n});\n\nconst BgLogsParams = Type.Object({\n taskId: Type.String({ description: 'Task ID or unambiguous prefix' }),\n maxBytes: Type.Optional(\n Type.Number({\n description: `Maximum bytes to return, capped at ${formatSize(MAX_LOG_BYTES)}. Default: ${formatSize(DEFAULT_LOG_BYTES)}.`,\n }),\n ),\n tail: Type.Optional(\n Type.Boolean({\n description: 'Read the tail of the log when true, head when false. Default: true.',\n }),\n ),\n});\n\nconst BgKillParams = Type.Object({\n taskId: Type.String({ description: 'Task ID or unambiguous prefix to stop' }),\n});\n\ntype BgRunParamsValue = Static<typeof BgRunParams>;\ntype BgPiAttestedParamsValue = Static<typeof BgPiAttestedParams>;\n\nfunction renderPlainResult(result: TextToolResult, options: ToolRenderResultOptions, theme: Theme) {\n void options;\n void theme;\n const text =\n result.content?.map((part) => (part.type === 'text' ? (part.text ?? '') : '')).join('\\n') ?? '';\n return new Text(text, 0, 0);\n}\n\nexport default async function backgroundTasksExtension(pi: ExtensionAPI): Promise<void> {\n const config = parseBackgroundTasksConfig();\n const dockEntryHint = dockShortcutFooterHint(config.dockShortcut);\n const shellPolicy = initializeShellPolicy();\n const reloadShellOwner = getProcessReloadShellOwnerV1();\n pi.on('before_agent_start', createShellPolicyGuidanceHandler(shellPolicy));\n const seenTaskIds = new Set<string>();\n let currentCtx: ExtensionContext | undefined;\n let currentRegistryCtx: BackgroundTaskContext | undefined;\n let activationLease: ReloadShellActivationLeaseV1 | undefined;\n let activationIdentity: ReloadShellIdentityV1 | undefined;\n let pendingActivationClaim: ReloadShellActivationClaimV1 | undefined;\n let dockOpen = false;\n let statusInterval: NodeJS.Timeout | undefined;\n let latestKnownVersion: string | undefined;\n let updateCheckStarted = false;\n let disposed = false;\n let shutdownCleanupStarted = false;\n let reloadHandoffFailed = false;\n let shutdownReason = 'shutdown';\n const activationCloseFence = new SynchronousActivationCloseFence();\n const taskManagerLoader = new LazyModule(\n 'background-task-manager',\n () => import('./ui/background-tasks-manager.js'),\n );\n\n const registryContext = (ctx: ExtensionContext): BackgroundTaskContext => ({\n cwd: ctx.cwd,\n sessionId: ctx.sessionManager.getSessionId(),\n modelRegistry: ctx.modelRegistry,\n model: ctx.model,\n });\n\n const registry = new BackgroundTaskRegistry({\n onChange: () => {\n updateUi();\n },\n sendCompletionNotification: (message, options) => {\n pi.sendMessage(message, options);\n },\n publishTerminal: (task) => {\n eventService.publishTerminal(task);\n },\n shellPolicy,\n reloadShellOwner,\n });\n const eventService: BackgroundTaskExtensionService = installBackgroundTaskExtensionApi({\n events: pi.events,\n registry,\n getContext: () => currentRegistryCtx,\n isShuttingDown: () => registry.isShuttingDown(),\n });\n\n const beginSessionShutdown = (reason: string): void => {\n let handoffError: unknown;\n if (!disposed) {\n disposed = true;\n registry.closeTaskAdmissions();\n if (pendingActivationClaim !== undefined) {\n const claim = pendingActivationClaim;\n pendingActivationClaim = undefined;\n registry.abortReloadActivation(claim);\n try {\n reloadShellOwner.abortActivation(\n claim,\n new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n 'activation shut down while its reload claim was staging',\n ),\n );\n } catch (error) {\n handoffError = error;\n }\n } else if (reason === 'reload' && activationLease !== undefined) {\n const lease = activationLease;\n try {\n registry.prepareReloadHandoff(lease);\n activationLease = undefined;\n activationIdentity = undefined;\n } catch (error) {\n reloadHandoffFailed = true;\n handoffError = error;\n }\n }\n registry.setShuttingDown(true);\n eventService.close();\n }\n // Teardown remains active on repeated calls so even a handle assigned by a\n // racing continuation is still disposed rather than hidden by idempotence.\n currentCtx = undefined;\n currentRegistryCtx = undefined;\n if (statusInterval !== undefined) {\n clearInterval(statusInterval);\n statusInterval = undefined;\n }\n if (handoffError !== undefined) throw handoffError;\n };\n\n // Join the one synchronous all-lane barrier before any facade can register\n // asynchronous cleanup. The core callback performs an eligible reload\n // handoff first; every lazy lane then closes on the same call stack before\n // Pi can await any later cleanup handler.\n activationCloseFence.add(() => {\n beginSessionShutdown(shutdownReason);\n });\n activationCloseFence.add(() => {\n taskManagerLoader.close('session shutdown');\n });\n pi.on('session_shutdown', (event) => {\n shutdownReason = event.reason;\n activationCloseFence.close();\n });\n\n // This is the first session_start callback. Claim synchronously before the\n // first await, stage/import durably, then expose the fresh host adapter.\n pi.on('session_start', async (event, ctx) => {\n if (disposed) return;\n const nextRegistryCtx = registryContext(ctx);\n const identity = makeReloadShellIdentity(\n nextRegistryCtx.sessionId ?? '',\n realpathSync(ctx.cwd),\n );\n if (activationLease !== undefined && registry.hasCurrentReloadLease()) {\n if (\n activationIdentity?.hostPid !== identity.hostPid ||\n activationIdentity.sessionId !== identity.sessionId ||\n activationIdentity.cwdRealpath !== identity.cwdRealpath\n ) {\n throw new ReloadSurvivalError(\n 'pi_bg_reload_owner_activation_conflict',\n 'a repeated session_start changed the bound reload owner identity without shutdown',\n );\n }\n currentCtx = ctx;\n currentRegistryCtx = nextRegistryCtx;\n return;\n }\n const activationNonce = randomBytes(16).toString('hex');\n const claim = reloadShellOwner.beginActivation(identity, event.reason, activationNonce);\n pendingActivationClaim = claim;\n try {\n const adapter = await registry.stageReloadActivation(claim);\n if (pendingActivationClaim !== claim) {\n // The synchronous shutdown barrier already aborted this claim and\n // detached staged records while the durable import awaited.\n registry.abortReloadActivation(claim);\n return;\n }\n if (disposed) {\n registry.abortReloadActivation(claim);\n pendingActivationClaim = undefined;\n reloadShellOwner.abortActivation(\n claim,\n new ReloadSurvivalError(\n 'pi_bg_reload_owner_stale_claim',\n 'activation was disposed before reload claim commit',\n ),\n );\n return;\n }\n const lease = reloadShellOwner.commitActivation(claim, adapter);\n pendingActivationClaim = undefined;\n activationLease = lease;\n activationIdentity = identity;\n currentCtx = ctx;\n currentRegistryCtx = nextRegistryCtx;\n } catch (error) {\n registry.abortReloadActivation(claim);\n if (pendingActivationClaim === claim) pendingActivationClaim = undefined;\n try {\n reloadShellOwner.abortActivation(claim, error);\n } catch (abortError) {\n if (\n typeof abortError !== 'object' ||\n abortError === null ||\n Reflect.get(abortError, 'code') !== 'pi_bg_reload_owner_stale_claim'\n ) {\n throw new AggregateError([error, abortError], 'Reload activation claim and abort failed');\n }\n }\n throw error;\n }\n });\n\n if (config.features.fusion) {\n const { registerFusionExtension } = await import('./fusion-extension.js');\n registerFusionExtension(pi, {\n startManagedTask: async (ctx, options) => {\n currentCtx = ctx;\n const nextRegistryCtx = registryContext(ctx);\n currentRegistryCtx = nextRegistryCtx;\n return registry.startManagedTask(nextRegistryCtx, options);\n },\n snapshot: (task) => registry.snapshot(task),\n updateManagedTask: (task, state, line) => registry.updateManagedTask(task, state, line),\n activationCloseFence,\n });\n }\n\n if (config.features.delegate) {\n const { registerDelegateExtension } = await import('./delegate-extension.js');\n registerDelegateExtension(pi, {\n startDelegateTask: async (ctx, options) => {\n currentCtx = ctx;\n const nextRegistryCtx = registryContext(ctx);\n currentRegistryCtx = nextRegistryCtx;\n return registry.startDelegateTask(nextRegistryCtx, options);\n },\n snapshot: (task) => registry.snapshot(task),\n isDelegateTaskRegistered: (taskId) =>\n registry.allTasks().some((task) => task.id === taskId && task.delegate !== undefined),\n activationCloseFence,\n });\n }\n\n if (config.features.delegate || config.features.fusion) {\n const { registerBackgroundResultExtension } = await import('./delegate-extension.js');\n registerBackgroundResultExtension(pi, {\n resolveTask: (idOrPrefix) => registry.resolveTask(idOrPrefix),\n claimFusionUsage: (task) => registry.claimFusionUsage(task),\n activationCloseFence,\n });\n }\n\n function unseenFinishedTasks(): BgTask[] {\n return registry\n .allTasks()\n .filter((task) => task.status !== 'running' && !seenTaskIds.has(task.id));\n }\n\n function clearFinishedNotices(ctx = currentCtx): number {\n const unseen = unseenFinishedTasks();\n for (const task of unseen) seenTaskIds.add(task.id);\n updateUi(ctx);\n return unseen.length;\n }\n\n function notifyClearFinishedNotices(ctx: ExtensionContext): void {\n currentCtx = ctx;\n const cleared = clearFinishedNotices(ctx);\n if (!ctx.hasUI) return;\n ctx.ui.notify(\n cleared > 0\n ? `Cleared ${String(cleared)} finished background task notice${cleared === 1 ? '' : 's'}.`\n : 'No finished background task notices to clear.',\n cleared > 0 ? 'info' : 'warning',\n );\n }\n\n function updateUi(ctx = currentCtx): void {\n if (registry.isShuttingDown() || !ctx) return;\n try {\n if (!ctx.hasUI) return;\n const allTasks = registry.allTasks();\n const running = allTasks.filter((task) => task.status === 'running');\n const unseenFailed = allTasks.filter(\n (task) => task.status === 'failed' && !seenTaskIds.has(task.id),\n );\n const unseenStopped = allTasks.filter(\n (task) => task.status === 'killed' && !seenTaskIds.has(task.id),\n );\n const unseenDone = allTasks.filter(\n (task) => task.status === 'completed' && !seenTaskIds.has(task.id),\n );\n const unseenFinishedCount = unseenFailed.length + unseenStopped.length + unseenDone.length;\n const updateSegment = formatUpdateSegment(latestKnownVersion, PACKAGE_VERSION ?? '');\n ctx.ui.setWidget('background-tasks', undefined);\n if (running.length === 0 && unseenFinishedCount === 0) {\n ctx.ui.setStatus(\n 'background-tasks',\n updateSegment ? lightBlue(` bg ${updateSegment} `) : undefined,\n );\n return;\n }\n\n const parts: string[] = [];\n if (running.length > 0) parts.push(`${String(running.length)} running`);\n if (unseenFailed.length > 0) parts.push(`${String(unseenFailed.length)} failed`);\n if (unseenStopped.length > 0) parts.push(`${String(unseenStopped.length)} stopped`);\n if (unseenDone.length > 0) parts.push(`${String(unseenDone.length)} done`);\n const entryHint = dockOpen\n ? 'focused'\n : `${dockEntryHint}${unseenFinishedCount > 0 ? ' · /bg-clear' : ''}`;\n const segments = [...parts, entryHint];\n if (updateSegment) segments.push(updateSegment);\n const label = ` bg ${segments.join(' · ')} `;\n ctx.ui.setStatus('background-tasks', lightBlue(label));\n } catch (error) {\n console.error(\n `[background-tasks] UI update failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n currentCtx = undefined;\n }\n }\n\n async function startTask(\n ctx: ExtensionContext,\n command: string,\n options: StartTaskOptions = {},\n ): Promise<BgTask> {\n currentCtx = ctx;\n const nextRegistryCtx = registryContext(ctx);\n currentRegistryCtx = nextRegistryCtx;\n return registry.startTask(nextRegistryCtx, command, options);\n }\n\n async function startAttestedPiTask(\n ctx: ExtensionContext,\n options: StartAttestedPiTaskOptions,\n ): Promise<BgTask> {\n currentCtx = ctx;\n const nextRegistryCtx = registryContext(ctx);\n currentRegistryCtx = nextRegistryCtx;\n return registry.startAttestedPiTask(nextRegistryCtx, options);\n }\n\n async function openTaskManager(\n ctx: ExtensionCommandContext | ExtensionContext,\n initialTaskId?: string,\n ): Promise<void> {\n currentCtx = ctx;\n if (!ctx.hasUI) {\n ctx.ui.notify(\n 'Background task manager requires an interactive Pi UI. Use /jobs, /logs, or the bg_status/bg_logs tools in non-interactive mode.',\n 'error',\n );\n return;\n }\n const { BackgroundTasksManager } = await taskManagerLoader.run((runtime) => runtime);\n dockOpen = true;\n updateUi(ctx);\n try {\n await ctx.ui.custom<TaskManagerResult>(\n (tui, theme, _keybindings, done) => {\n const managerOptions = {\n getTasks: () => registry.allTasks(),\n stopTask: async (task: BackgroundTaskForUi) => {\n await registry.stopTask(registry.resolveTask(task.id), 'user');\n updateUi(ctx);\n },\n stopAllRunning: async () => {\n const result = await registry.stopAllRunning('user');\n updateUi(ctx);\n return result;\n },\n rerunTask: async (task: BackgroundTaskForUi) => {\n if (task.fusion !== undefined || task.delegate !== undefined) {\n throw new Error(\n 'Only shell-command tasks can be rerun from the dock; relaunch this typed workflow through its owning tool.',\n );\n }\n const rerunOptions: StartTaskOptions = {\n name: taskDisplayName(task),\n isAgent: task.isAgent,\n surviveReload: task.surviveReload,\n notifyOnCompletion: true,\n triggerOnCompletion: false,\n };\n if (task.description !== undefined) rerunOptions.description = task.description;\n if (task.timeoutSeconds !== undefined)\n rerunOptions.timeoutSeconds = task.timeoutSeconds;\n const rerun = await startTask(ctx, task.command, rerunOptions);\n updateUi(ctx);\n return rerun;\n },\n showOutputPath: (task: BackgroundTaskForUi) => {\n ctx.ui.notify(\n `Output path for ${taskDisplayName(task)} (${task.id}):\\n${task.outputPath}`,\n 'info',\n );\n },\n markSeen: (taskId: string) => {\n seenTaskIds.add(taskId);\n updateUi(ctx);\n },\n markFinishedSeen: (taskIds: string[]) => {\n for (const taskId of taskIds) seenTaskIds.add(taskId);\n updateUi(ctx);\n },\n isSeen: (taskId: string) => seenTaskIds.has(taskId),\n };\n if (initialTaskId)\n return new BackgroundTasksManager(tui, theme, done, {\n ...managerOptions,\n initialTaskId,\n });\n return new BackgroundTasksManager(tui, theme, done, managerOptions);\n },\n {\n overlay: true,\n overlayOptions: {\n anchor: 'bottom-center',\n width: '96%',\n minWidth: 64,\n maxHeight: '60%',\n margin: { bottom: 1, left: 1, right: 1 },\n },\n },\n );\n } finally {\n dockOpen = false;\n updateUi(ctx);\n }\n }\n\n pi.registerMessageRenderer<BgTaskSnapshot>(\n 'background-task-notification',\n (message, _options, theme) => {\n const task = message.details;\n const status = task?.status ?? 'completed';\n const color: ThemeColor =\n status === 'completed'\n ? 'success'\n : status === 'failed'\n ? 'error'\n : status === 'killed'\n ? 'warning'\n : 'accent';\n const id = task?.id ?? 'background task';\n const name = task ? taskDisplayName(task) : 'Background task';\n const output = task?.outputPath ? `\\n${theme.fg('dim', `Output: ${task.outputPath}`)}` : '';\n const error = task?.error ? `\\n${theme.fg('error', task.error)}` : '';\n return new Text(\n `${theme.fg(color, `[bg ${status}]`)} ${theme.fg('accent', name)} ${theme.fg('dim', `(${id})`)}${output}${error}`,\n 0,\n 0,\n );\n },\n );\n\n async function scheduleUpdateCheck(ctx: ExtensionContext): Promise<void> {\n if (disposed || updateCheckStarted) return;\n updateCheckStarted = true;\n const env = process.env;\n if (env['PI_BG_DISABLE_UPDATE_CHECK'] === '1') return;\n if (env['PI_OFFLINE'] === '1') return;\n if (!PACKAGE_VERSION) return;\n const options: FetchLatestVersionOptions = {\n packageName: PACKAGE_NAME,\n onError: (error) => {\n console.error(`[background-tasks] update check skipped: ${error.message}`);\n },\n };\n const registryUrl = env['PI_BG_REGISTRY_URL'];\n if (registryUrl) options.registryUrl = registryUrl;\n const latest = await fetchLatestVersion(options);\n if (disposed) return;\n if (latest && isNewerVersion(latest, PACKAGE_VERSION)) {\n latestKnownVersion = latest;\n updateUi(ctx);\n }\n }\n\n pi.on('session_start', async (_event, ctx) => {\n // Pi replacement binds a fresh extension instance. Never revive this old\n // activation if a late lifecycle dispatch reaches it after shutdown.\n if (disposed) return;\n registry.setShuttingDown(false);\n currentCtx = ctx;\n const nextRegistryCtx = currentRegistryCtx ?? registryContext(ctx);\n currentRegistryCtx = nextRegistryCtx;\n await registry.ensureRuntimeDir(nextRegistryCtx);\n if (disposed) return;\n updateUi(ctx);\n if (disposed) return;\n if (statusInterval !== undefined) clearInterval(statusInterval);\n if (disposed) return;\n const nextStatusInterval = setInterval(() => {\n updateUi();\n }, STATUS_INTERVAL_MS);\n if (disposed) {\n clearInterval(nextStatusInterval);\n return;\n }\n statusInterval = nextStatusInterval;\n // One-shot, non-blocking: never awaited on the session-start path or the status tick.\n if (!disposed) void scheduleUpdateCheck(ctx);\n });\n\n pi.on('session_shutdown', async (event, ctx) => {\n beginSessionShutdown(event.reason);\n if (shutdownCleanupStarted) return;\n shutdownCleanupStarted = true;\n try {\n // Admission closure aborts cooperative preflight and the drain retains\n // ownership until subprocess/file/managed cleanup settles. Any admitted\n // child is inserted synchronously before spawn and is visible below.\n await registry.waitForTaskAdmissions();\n const running = registry.allTasks().filter((task) => task.status === 'running');\n if (running.length === 0) return;\n\n const failures: string[] = [];\n await Promise.all(\n running.map(async (task) => {\n try {\n await registry.stopTask(\n task,\n 'shutdown',\n `Killed during Pi session shutdown (${event.reason})`,\n );\n } catch (error) {\n const message = `${task.id}: ${error instanceof Error ? error.message : String(error)}`;\n failures.push(message);\n console.error(`[background-tasks] shutdown cleanup failed for ${message}`);\n }\n }),\n );\n if (failures.length > 0 && ctx.hasUI) {\n ctx.ui.notify(`Background task cleanup failed:\\n${failures.join('\\n')}`, 'error');\n }\n } finally {\n eventService.close();\n if ((event.reason !== 'reload' || reloadHandoffFailed) && activationLease !== undefined) {\n try {\n await registry.waitForReloadHostSettlement();\n } catch (error) {\n console.error(\n '[background-tasks] reload owner host settlement failed during shutdown:',\n error,\n );\n }\n registry.releaseReloadActivation(activationLease);\n activationLease = undefined;\n activationIdentity = undefined;\n }\n }\n });\n\n pi.registerCommand('bg', {\n description:\n 'Start a tracked shell command: /bg [--survive-reload] [--agent] [--name \"Task name\"] <command>',\n handler: async (args, ctx) => {\n try {\n const parsed = parseBgCommandArgs(args);\n const taskOptions: StartTaskOptions = {\n isAgent: parsed.isAgent,\n surviveReload: parsed.surviveReload,\n notifyOnCompletion: true,\n triggerOnCompletion: false,\n };\n if (parsed.name !== undefined) taskOptions.name = parsed.name;\n const task = await startTask(ctx, parsed.command, taskOptions);\n ctx.ui.notify(\n `Started ${taskDisplayName(task)} (${task.id})\\nOutput: ${task.outputPath}\\nCommand: ${task.command}`,\n 'info',\n );\n } catch (error) {\n ctx.ui.notify(\n `Background task failed to start: ${error instanceof Error ? error.message : String(error)}`,\n 'error',\n );\n }\n },\n });\n\n pi.registerCommand('tasks', {\n description: 'Open the Claude-like background task manager UI',\n handler: async (args, ctx) => {\n const taskId = optionalTrimmed(args);\n await openTaskManager(ctx, taskId);\n },\n });\n\n pi.registerCommand('bg-tasks', {\n description: 'Open the background task manager UI',\n handler: async (args, ctx) => {\n const taskId = optionalTrimmed(args);\n await openTaskManager(ctx, taskId);\n },\n });\n\n pi.registerCommand('bg-clear', {\n description: 'Clear finished background task footer notices',\n handler: (_args, ctx) => {\n notifyClearFinishedNotices(ctx);\n return Promise.resolve();\n },\n });\n\n pi.registerCommand('bg-update', {\n description: 'Show how to update pi-background-tasks to the latest published version',\n handler: (_args, ctx) => {\n const current = PACKAGE_VERSION ?? 'unknown';\n const latest = latestKnownVersion;\n const pinnedNpm = latest ? `${PACKAGE_NAME}@${latest}` : `${PACKAGE_NAME}@<version>`;\n const lines = [\n latest\n ? `pi-background-tasks ${current} is installed; ${latest} is the latest published version.`\n : `pi-background-tasks ${current} is installed.`,\n 'Update from npm:',\n ` pi install npm:${PACKAGE_NAME}@latest`,\n ` pi install npm:${pinnedNpm}`,\n 'Git releases are independent of npm versions; use main only when you want current repository state:',\n ` pi install ${GIT_INSTALL_TARGET}@main`,\n `For a pinned git release, first verify the tag exists, then use ${GIT_INSTALL_TARGET}@<existing-tag>.`,\n 'This command only prints update instructions; it does not install or self-update.',\n ];\n ctx.ui.notify(lines.join('\\n'), 'info');\n return Promise.resolve();\n },\n });\n\n if (config.dockShortcut === 'shift+down') {\n pi.registerShortcut('shift+down' satisfies KeyId, {\n description: 'Open focused background task footer dock',\n handler: async (ctx) => {\n await openTaskManager(ctx);\n },\n });\n }\n\n if (config.dockShortcut === 'ctrl+alt+b') {\n pi.registerShortcut('ctrl+alt+b' satisfies KeyId, {\n description: 'Open focused background task footer dock',\n handler: async (ctx) => {\n await openTaskManager(ctx);\n },\n });\n }\n\n pi.registerShortcut('ctrl+alt+c' satisfies KeyId, {\n description:\n 'Clear finished background task footer notices (terminal-dependent fallback for /bg-clear)',\n handler: (ctx) => {\n notifyClearFinishedNotices(ctx);\n },\n });\n\n pi.registerCommand('jobs', {\n description: 'List running and recent background tasks',\n handler: (_args, ctx) => {\n currentCtx = ctx;\n ctx.ui.notify(\n formatSnapshotList(registry.allTasks().map((task) => registry.snapshot(task))),\n 'info',\n );\n updateUi(ctx);\n return Promise.resolve();\n },\n });\n\n pi.registerCommand('logs', {\n description: 'Show bounded output from a background task: /logs <id> [maxBytes]',\n getArgumentCompletions: (prefix) => {\n const matches = registry\n .allTasks()\n .filter((task) => task.id.startsWith(prefix.trim()))\n .slice(0, 20)\n .map((task) => ({\n value: task.id,\n label: `${task.id} ${taskDisplayName(task)}`,\n description: `${task.status} — ${truncateChars(task.command, 60)}`,\n }));\n return matches.length > 0 ? matches : null;\n },\n handler: async (args, ctx) => {\n try {\n currentCtx = ctx;\n const [id, bytes] = args.trim().split(/\\s+/, 2);\n const task = registry.resolveTask(id ?? '');\n const maxBytes = normalizeMaxBytes(Number(bytes), DEFAULT_LOG_BYTES);\n const logs = await registry.getTaskLogs(task, maxBytes, true);\n ctx.ui.notify(logs.text, 'info');\n } catch (error) {\n ctx.ui.notify(\n `Background logs error: ${error instanceof Error ? error.message : String(error)}`,\n 'error',\n );\n }\n },\n });\n\n pi.registerCommand('kill', {\n description: 'Stop a running background task: /kill <id>',\n getArgumentCompletions: (prefix) => {\n const matches = registry\n .allTasks()\n .filter((task) => task.status === 'running' && task.id.startsWith(prefix.trim()))\n .slice(0, 20)\n .map((task) => ({\n value: task.id,\n label: `${task.id} ${taskDisplayName(task)}`,\n description: truncateChars(task.command, 70),\n }));\n return matches.length > 0 ? matches : null;\n },\n handler: async (args, ctx) => {\n try {\n currentCtx = ctx;\n const task = registry.resolveTask(args.trim());\n await registry.stopTask(task, 'user');\n ctx.ui.notify(\n `Killed ${taskDisplayName(task)} (${task.id}). Output: ${task.outputPath}`,\n 'info',\n );\n updateUi(ctx);\n } catch (error) {\n ctx.ui.notify(\n `Background kill error: ${error instanceof Error ? error.message : String(error)}`,\n 'error',\n );\n }\n },\n });\n\n pi.registerTool<typeof BgRunParams, BgRunDetails>({\n name: 'bg_run',\n label: 'Background Run',\n description: `Start a named long-running shell command in the background and return immediately with a task ID and output path. By default, completed, failed, or killed terminal state is delivered automatically as <background-task-notification> and starts a follow-up agent turn; do not sleep or poll merely to wait. Output is written to .pi/tasks and model-visible logs are bounded to ${formatSize(MAX_LOG_BYTES)}.`,\n promptSnippet:\n 'Start a named long-running shell command; default terminal notification wakes a follow-up turn, so yield instead of polling',\n promptGuidelines: [\n 'Use bg_run instead of bash for commands expected to run for a long time, such as test suites, dev servers, watchers, or builds.',\n 'Always set isAgent: true only when the background task launches an LLM/agent process; set isAgent: false for scripts, tests, dev servers, sleeps, and ordinary shell commands.',\n 'When using bg_run, always set name to a concise 2-6 word human-readable label for the footer task dock; do not use the raw command as the name unless it is already short and meaningful.',\n 'bg_run returns immediately. With notifyOnCompletion:true and triggerOnCompletion:true (both defaults), completed, failed, or killed terminal state is delivered as <background-task-notification> and automatically starts a follow-up agent turn.',\n 'After a default bg_run launch, continue only independent useful work that does not merely wait for the task; otherwise briefly acknowledge it if useful, then end the current turn. Do not call sleep, bg_status, or bg_logs merely to wait; the terminal notification will wake you.',\n 'Treat <background-task-notification> as durable terminal truth. Do not call bg_status to reconfirm it; call bg_logs only when the task output is needed.',\n 'Use bg_status/bg_logs only when the user explicitly requests an update, automatic notification or wake-up was deliberately disabled, there is concrete evidence the task is hung, or a terminal notification arrived and output details are needed.',\n 'Do not set notifyOnCompletion:false or triggerOnCompletion:false unless intentionally opting out of automatic completion handling.',\n ],\n parameters: BgRunParams,\n prepareArguments(args): BgRunParamsValue {\n if (!args || typeof args !== 'object') throw new Error('bg_run arguments must be an object');\n const input = args as BgToolArgumentRecord;\n if (typeof input.command !== 'string') throw new Error('bg_run requires command string');\n if (typeof input.isAgent !== 'boolean') {\n throw new Error(\n 'bg_run requires isAgent boolean. Set true only for LLM/agent tasks; set false for scripts, tests, servers, sleeps, and ordinary shell commands.',\n );\n }\n if (\n Object.prototype.hasOwnProperty.call(input, 'surviveReload') &&\n typeof input.surviveReload !== 'boolean'\n ) {\n throw new ReloadSurvivalError(\n 'pi_bg_survive_reload_invalid',\n 'bg_run surviveReload must be boolean when present',\n );\n }\n if (input.surviveReload === true && input.isAgent) {\n throw new ReloadSurvivalError(\n 'pi_bg_survive_reload_requires_non_agent',\n 'bg_run surviveReload requires isAgent:false',\n );\n }\n const prepared: BgRunParamsValue = {\n command: input.command,\n name:\n normalizeTaskName(input.name) ??\n normalizeTaskName(input.description) ??\n deriveTaskNameFromCommand(input.command),\n isAgent: input.isAgent,\n };\n if (typeof input.description === 'string') prepared.description = input.description;\n if (typeof input.timeoutSeconds === 'number') prepared.timeoutSeconds = input.timeoutSeconds;\n if (typeof input.notifyOnCompletion === 'boolean')\n prepared.notifyOnCompletion = input.notifyOnCompletion;\n if (typeof input.triggerOnCompletion === 'boolean')\n prepared.triggerOnCompletion = input.triggerOnCompletion;\n if (typeof input.surviveReload === 'boolean') prepared.surviveReload = input.surviveReload;\n return prepared;\n },\n async execute(_toolCallId, params, _signal, _onUpdate, ctx) {\n if (typeof params.isAgent !== 'boolean') {\n throw new Error(\n 'bg_run requires isAgent boolean. Set true only for LLM/agent tasks; set false for scripts, tests, servers, sleeps, and ordinary shell commands.',\n );\n }\n if (params.surviveReload === true && params.isAgent) {\n throw new ReloadSurvivalError(\n 'pi_bg_survive_reload_requires_non_agent',\n 'bg_run surviveReload requires isAgent:false',\n );\n }\n const taskOptions: StartTaskOptions = {\n name: params.name,\n isAgent: params.isAgent,\n surviveReload: params.surviveReload ?? false,\n notifyOnCompletion: params.notifyOnCompletion ?? true,\n triggerOnCompletion: params.triggerOnCompletion ?? true,\n };\n if (params.description !== undefined) taskOptions.description = params.description;\n if (params.timeoutSeconds !== undefined) taskOptions.timeoutSeconds = params.timeoutSeconds;\n const task = await startTask(ctx, params.command, taskOptions);\n const completionDelivery = deriveCompletionDeliveryGuidance(\n task.notifyOnCompletion,\n task.triggerOnCompletion,\n );\n return {\n content: textContent(\n `Started background task ${taskDisplayName(task)} (${task.id})\\nStatus: ${task.status}\\nPID: ${String(task.pid ?? 'unknown')}\\nOutput: ${task.outputPath}\\n${completionDelivery.text}`,\n ),\n details: { task: registry.snapshot(task) },\n };\n },\n renderCall(args, theme) {\n return new Text(\n `${theme.fg('toolTitle', theme.bold('bg_run '))}${theme.fg('muted', truncateChars(taskDisplayName(args), COMMAND_PREVIEW_CHARS))}`,\n 0,\n 0,\n );\n },\n renderResult(result, _options, theme) {\n const { task } = result.details;\n return new Text(\n `${theme.fg('success', '✓ started')} ${theme.fg('accent', taskDisplayName(task))} ${theme.fg('dim', `(${task.id})`)}\\n${theme.fg('dim', `Output: ${task.outputPath}`)}`,\n 0,\n 0,\n );\n },\n });\n\n if (config.features.attested) {\n pi.registerTool<typeof BgPiAttestedParams, BgRunDetails>({\n name: 'bg_run_pi_attested',\n label: 'Attested Pi Run',\n description:\n 'Opt-in evidence-oriented direct Pi spawn. Launches exactly one `pi --mode json` child, records raw Pi events/stderr, hashes prompt/report/output, observes OAuth through ModelRegistry, and emits a strict attestation sidecar only after successful completion.',\n promptSnippet:\n 'Start an attested direct Pi agent task and return its task ID plus output path',\n promptGuidelines: [\n 'Use only when the user explicitly asks for an attested Pi evidence-producing task; ordinary background work should use bg_run unchanged.',\n 'Provide provider/model as structured fields and a relative reportPath that the child Pi prompt will write before exit.',\n 'Do not provide channel, auth, route, or hash claims; the producer observes those facts itself and fails loudly if it cannot attest them.',\n ],\n parameters: BgPiAttestedParams,\n prepareArguments(args): BgPiAttestedParamsValue {\n if (!args || typeof args !== 'object')\n throw new Error('bg_run_pi_attested arguments must be an object');\n const input = args as BgPiAttestedArgumentRecord;\n rejectSurvivalForTaskKind(input, 'attested Pi tasks');\n if (typeof input.name !== 'string') throw new Error('bg_run_pi_attested requires name');\n if (typeof input.provider !== 'string')\n throw new Error('bg_run_pi_attested requires provider');\n if (typeof input.model !== 'string') throw new Error('bg_run_pi_attested requires model');\n if (typeof input.prompt !== 'string') throw new Error('bg_run_pi_attested requires prompt');\n if (typeof input.reportPath !== 'string')\n throw new Error('bg_run_pi_attested requires reportPath');\n const prepared: BgPiAttestedParamsValue = {\n name: input.name,\n provider: input.provider,\n model: input.model,\n prompt: input.prompt,\n reportPath: input.reportPath,\n };\n if (Array.isArray(input.extraPiArgs)) {\n if (!input.extraPiArgs.every((entry) => typeof entry === 'string'))\n throw new Error('bg_run_pi_attested extraPiArgs entries must be strings');\n prepared.extraPiArgs = input.extraPiArgs;\n }\n if (typeof input.thinking === 'string') prepared.thinking = input.thinking;\n if (typeof input.timeoutSeconds === 'number')\n prepared.timeoutSeconds = input.timeoutSeconds;\n return prepared;\n },\n async execute(_toolCallId, params, _signal, _onUpdate, ctx) {\n const task = await startAttestedPiTask(ctx, params);\n return {\n content: textContent(\n `Started attested Pi task ${taskDisplayName(task)} (${task.id})\\nStatus: ${task.status}\\nPID: ${String(task.pid ?? 'unknown')}\\nOutput: ${task.outputPath}\\nAttestation: ${task.attestationPath ?? 'pending until completion'}`,\n ),\n details: { task: registry.snapshot(task) },\n };\n },\n renderCall(args, theme) {\n return new Text(\n `${theme.fg('toolTitle', theme.bold('bg_run_pi_attested '))}${theme.fg('muted', truncateChars(args.name, COMMAND_PREVIEW_CHARS))}`,\n 0,\n 0,\n );\n },\n renderResult(result, _options, theme) {\n const { task } = result.details;\n return new Text(\n `${theme.fg('success', '✓ started')} ${theme.fg('accent', taskDisplayName(task))} ${theme.fg('dim', `(${task.id})`)}\\n${theme.fg('dim', `Output: ${task.outputPath}`)}\\n${theme.fg('dim', `Attestation: ${task.attestationPath ?? 'pending'}`)}`,\n 0,\n 0,\n );\n },\n });\n }\n\n pi.registerTool<typeof BgStatusParams, BgStatusDetails>({\n name: 'bg_status',\n label: 'Background Status',\n description:\n 'Inspect one background task or list all running/recent background tasks. This is a point-in-time inspection tool, not a waiting primitive.',\n promptSnippet:\n 'Inspect point-in-time status for one or all background tasks; never poll it as a wait loop',\n promptGuidelines: [\n 'Use bg_status for deliberate point-in-time inspection, not as a waiting primitive.',\n 'A running result is not an instruction to poll again. Do not repeatedly call bg_status while an automatic terminal notification is pending.',\n 'Use bg_status when the user explicitly requests an update, automatic completion handling was disabled, or concrete evidence suggests a task is hung; terminal notifications do not need reconfirmation.',\n ],\n parameters: BgStatusParams,\n execute(_toolCallId, params) {\n const selected = params.taskId ? [registry.resolveTask(params.taskId)] : registry.allTasks();\n const snapshots = selected.map((task) => registry.snapshot(task));\n return Promise.resolve({\n content: textContent(formatSnapshotList(snapshots)),\n details: { tasks: snapshots },\n });\n },\n renderCall(args, theme) {\n return new Text(\n `${theme.fg('toolTitle', theme.bold('bg_status'))}${args.taskId ? ` ${theme.fg('accent', args.taskId)}` : ''}`,\n 0,\n 0,\n );\n },\n renderResult: renderPlainResult,\n });\n\n pi.registerTool<typeof BgLogsParams, BgLogsDetails>({\n name: 'bg_logs',\n label: 'Background Logs',\n description: `Read bounded output from a background task for deliberate inspection; this is not a waiting primitive. Output is capped at ${formatSize(MAX_LOG_BYTES)} for model safety and points to the full output file when truncated.`,\n promptSnippet: 'Read bounded task output when needed; never tail it repeatedly as a wait loop',\n promptGuidelines: [\n 'Use bg_logs with a modest maxBytes value only when task output is needed, without flooding context.',\n 'Do not repeatedly call bg_logs to wait for completion while an automatic terminal notification is pending.',\n 'Use bg_status first only when a deliberate inspection requires the current task state; do not reconfirm a terminal notification.',\n ],\n parameters: BgLogsParams,\n async execute(_toolCallId, params) {\n const task = registry.resolveTask(params.taskId);\n const logs = await registry.getTaskLogs(\n task,\n normalizeMaxBytes(params.maxBytes),\n params.tail ?? true,\n );\n return {\n content: textContent(logs.text),\n details: logs.details,\n };\n },\n renderCall(args, theme) {\n return new Text(\n `${theme.fg('toolTitle', theme.bold('bg_logs '))}${theme.fg('accent', args.taskId)}`,\n 0,\n 0,\n );\n },\n renderResult(result, { expanded }, theme) {\n const details = result.details;\n let text = `${theme.fg('accent', taskDisplayName(details.task))} ${theme.fg('dim', `(${details.task.id})`)} ${theme.fg('muted', details.tail ? 'tail' : 'head')} ${formatSize(details.bytesRead)}`;\n if (details.truncated) text += theme.fg('warning', ' (truncated)');\n text += `\\n${theme.fg('dim', `Full output: ${details.path}`)}`;\n if (expanded) {\n const output = result.content\n .map((content) => (content.type === 'text' ? content.text : '[image content]'))\n .join('\\n');\n text += `\\n${theme.fg('toolOutput', output.split('\\n').slice(0, 30).join('\\n'))}`;\n }\n return new Text(text, 0, 0);\n },\n });\n\n pi.registerTool<typeof BgKillParams, BgKillDetails>({\n name: 'bg_kill',\n label: 'Background Kill',\n description:\n 'Stop a running background task by ID. Fails loudly if the task is unknown or already finished.',\n promptSnippet: 'Stop a running background task by ID',\n promptGuidelines: [\n 'Use bg_kill when the user asks to stop a background task or when a bg_run command is no longer needed.',\n ],\n parameters: BgKillParams,\n async execute(_toolCallId, params) {\n const task = registry.resolveTask(params.taskId);\n await registry.stopTask(task, 'user');\n const message = `Killed background task ${taskDisplayName(task)} (${task.id}). Output: ${task.outputPath}`;\n return {\n content: textContent(message),\n details: { task: registry.snapshot(task), message },\n };\n },\n renderCall(args, theme) {\n return new Text(\n `${theme.fg('toolTitle', theme.bold('bg_kill '))}${theme.fg('accent', args.taskId)}`,\n 0,\n 0,\n );\n },\n renderResult(result, _options, theme) {\n const { task } = result.details;\n return new Text(\n `${theme.fg('warning', '■ killed')} ${theme.fg('accent', taskDisplayName(task))} ${theme.fg('dim', `(${task.id})`)}\\n${theme.fg('dim', `Output: ${task.outputPath}`)}`,\n 0,\n 0,\n );\n },\n });\n}\n"]}