prime-dev-cli 1.0.18 → 1.0.19

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 (247) hide show
  1. package/bin/cli.mjs +6 -1
  2. package/dist/server/.next/BUILD_ID +1 -1
  3. package/dist/server/.next/app-build-manifest.json +8 -8
  4. package/dist/server/.next/app-path-routes-manifest.json +4 -0
  5. package/dist/server/.next/build-manifest.json +6 -6
  6. package/dist/server/.next/cache/.rscinfo +1 -1
  7. package/dist/server/.next/cache/.tsbuildinfo +1 -1
  8. package/dist/server/.next/cache/eslint/.cache_1qa5vxt +1 -1
  9. package/dist/server/.next/fallback-build-manifest.json +6 -6
  10. package/dist/server/.next/next-minimal-server.js.nft.json +1 -1
  11. package/dist/server/.next/next-server.js.nft.json +1 -1
  12. package/dist/server/.next/prerender-manifest.json +9 -9
  13. package/dist/server/.next/required-server-files.json +1 -0
  14. package/dist/server/.next/server/app/_not-found/page/app-build-manifest.json +1 -1
  15. package/dist/server/.next/server/app/_not-found/page.js +1 -1
  16. package/dist/server/.next/server/app/_not-found/page.js.nft.json +1 -1
  17. package/dist/server/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/dist/server/.next/server/app/_not-found.html +1 -1
  19. package/dist/server/.next/server/app/_not-found.rsc +2 -2
  20. package/dist/server/.next/server/app/api/admin-status/route/app-build-manifest.json +10 -0
  21. package/dist/server/.next/server/app/api/admin-status/route/app-paths-manifest.json +3 -0
  22. package/dist/server/.next/server/app/api/admin-status/route/build-manifest.json +16 -0
  23. package/dist/server/.next/server/app/api/admin-status/route/next-font-manifest.json +6 -0
  24. package/dist/server/.next/server/app/api/admin-status/route/react-loadable-manifest.json +1 -0
  25. package/dist/server/.next/server/app/api/admin-status/route/server-reference-manifest.json +4 -0
  26. package/dist/server/.next/server/app/api/admin-status/route.js +8 -0
  27. package/dist/server/.next/server/app/api/admin-status/route.js.map +5 -0
  28. package/dist/server/.next/server/app/api/admin-status/route.js.nft.json +1 -0
  29. package/dist/server/.next/server/app/api/admin-status/route_client-reference-manifest.js +2 -0
  30. package/dist/server/.next/server/app/api/all-projects-envs/route.js +1 -1
  31. package/dist/server/.next/server/app/api/all-projects-envs/route.js.nft.json +1 -1
  32. package/dist/server/.next/server/app/api/check-mock-intercept/route.js +1 -1
  33. package/dist/server/.next/server/app/api/check-mock-intercept/route.js.nft.json +1 -1
  34. package/dist/server/.next/server/app/api/check-workspace/route.js +1 -1
  35. package/dist/server/.next/server/app/api/check-workspace/route.js.nft.json +1 -1
  36. package/dist/server/.next/server/app/api/cleanup-mock/route.js +1 -1
  37. package/dist/server/.next/server/app/api/cleanup-mock/route.js.nft.json +1 -1
  38. package/dist/server/.next/server/app/api/cleanup-project/route.js +1 -1
  39. package/dist/server/.next/server/app/api/cleanup-project/route.js.nft.json +1 -1
  40. package/dist/server/.next/server/app/api/current-branch/route.js +1 -1
  41. package/dist/server/.next/server/app/api/current-branch/route.js.nft.json +1 -1
  42. package/dist/server/.next/server/app/api/delete-mock-api/route.js +1 -1
  43. package/dist/server/.next/server/app/api/delete-mock-api/route.js.nft.json +1 -1
  44. package/dist/server/.next/server/app/api/get-mock-data/route.js +1 -1
  45. package/dist/server/.next/server/app/api/get-mock-data/route.js.nft.json +1 -1
  46. package/dist/server/.next/server/app/api/initialize-workspace/route.js +1 -1
  47. package/dist/server/.next/server/app/api/initialize-workspace/route.js.nft.json +1 -1
  48. package/dist/server/.next/server/app/api/memory-status/route.js +1 -1
  49. package/dist/server/.next/server/app/api/memory-status/route.js.nft.json +1 -1
  50. package/dist/server/.next/server/app/api/microapp-proxy-change-stream/route.js +1 -1
  51. package/dist/server/.next/server/app/api/microapp-proxy-change-stream/route.js.nft.json +1 -1
  52. package/dist/server/.next/server/app/api/microapp-proxy-config/route.js +1 -1
  53. package/dist/server/.next/server/app/api/microapp-proxy-config/route.js.nft.json +1 -1
  54. package/dist/server/.next/server/app/api/mock-file/route.js +1 -1
  55. package/dist/server/.next/server/app/api/mock-file/route.js.nft.json +1 -1
  56. package/dist/server/.next/server/app/api/mock-file-content/route.js +1 -1
  57. package/dist/server/.next/server/app/api/mock-file-content/route.js.nft.json +1 -1
  58. package/dist/server/.next/server/app/api/mock-open-status/route.js +1 -1
  59. package/dist/server/.next/server/app/api/mock-open-status/route.js.nft.json +1 -1
  60. package/dist/server/.next/server/app/api/mock-setting/route.js +1 -1
  61. package/dist/server/.next/server/app/api/mock-setting/route.js.nft.json +1 -1
  62. package/dist/server/.next/server/app/api/open-all-mock/route.js +1 -1
  63. package/dist/server/.next/server/app/api/open-all-mock/route.js.nft.json +1 -1
  64. package/dist/server/.next/server/app/api/open-project/route.js +1 -1
  65. package/dist/server/.next/server/app/api/open-project/route.js.nft.json +1 -1
  66. package/dist/server/.next/server/app/api/process/logs/route.js +1 -1
  67. package/dist/server/.next/server/app/api/process/logs/route.js.nft.json +1 -1
  68. package/dist/server/.next/server/app/api/process/logs/stream/route.js +1 -1
  69. package/dist/server/.next/server/app/api/process/logs/stream/route.js.nft.json +1 -1
  70. package/dist/server/.next/server/app/api/process/start/route.js +1 -1
  71. package/dist/server/.next/server/app/api/process/start/route.js.nft.json +1 -1
  72. package/dist/server/.next/server/app/api/process/status/route.js +1 -1
  73. package/dist/server/.next/server/app/api/process/status/route.js.nft.json +1 -1
  74. package/dist/server/.next/server/app/api/project-config/route.js +1 -1
  75. package/dist/server/.next/server/app/api/project-config/route.js.nft.json +1 -1
  76. package/dist/server/.next/server/app/api/retry-project/route.js +1 -1
  77. package/dist/server/.next/server/app/api/retry-project/route.js.nft.json +1 -1
  78. package/dist/server/.next/server/app/api/uat-git-flow/abort/route/app-build-manifest.json +10 -0
  79. package/dist/server/.next/server/app/api/uat-git-flow/abort/route/app-paths-manifest.json +3 -0
  80. package/dist/server/.next/server/app/api/uat-git-flow/abort/route/build-manifest.json +16 -0
  81. package/dist/server/.next/server/app/api/uat-git-flow/abort/route/next-font-manifest.json +6 -0
  82. package/dist/server/.next/server/app/api/uat-git-flow/abort/route/react-loadable-manifest.json +1 -0
  83. package/dist/server/.next/server/app/api/uat-git-flow/abort/route/server-reference-manifest.json +4 -0
  84. package/dist/server/.next/server/app/api/uat-git-flow/abort/route.js +8 -0
  85. package/dist/server/.next/server/app/api/uat-git-flow/abort/route.js.map +5 -0
  86. package/dist/server/.next/server/app/api/uat-git-flow/abort/route.js.nft.json +1 -0
  87. package/dist/server/.next/server/app/api/uat-git-flow/abort/route_client-reference-manifest.js +2 -0
  88. package/dist/server/.next/server/app/api/uat-git-flow/route/app-build-manifest.json +10 -0
  89. package/dist/server/.next/server/app/api/uat-git-flow/route/app-paths-manifest.json +3 -0
  90. package/dist/server/.next/server/app/api/uat-git-flow/route/build-manifest.json +16 -0
  91. package/dist/server/.next/server/app/api/uat-git-flow/route/next-font-manifest.json +6 -0
  92. package/dist/server/.next/server/app/api/uat-git-flow/route/react-loadable-manifest.json +1 -0
  93. package/dist/server/.next/server/app/api/uat-git-flow/route/server-reference-manifest.json +4 -0
  94. package/dist/server/.next/server/app/api/uat-git-flow/route.js +9 -0
  95. package/dist/server/.next/server/app/api/uat-git-flow/route.js.map +5 -0
  96. package/dist/server/.next/server/app/api/uat-git-flow/route.js.nft.json +1 -0
  97. package/dist/server/.next/server/app/api/uat-git-flow/route_client-reference-manifest.js +2 -0
  98. package/dist/server/.next/server/app/api/uat-git-flow/step/route/app-build-manifest.json +10 -0
  99. package/dist/server/.next/server/app/api/uat-git-flow/step/route/app-paths-manifest.json +3 -0
  100. package/dist/server/.next/server/app/api/uat-git-flow/step/route/build-manifest.json +16 -0
  101. package/dist/server/.next/server/app/api/uat-git-flow/step/route/next-font-manifest.json +6 -0
  102. package/dist/server/.next/server/app/api/uat-git-flow/step/route/react-loadable-manifest.json +1 -0
  103. package/dist/server/.next/server/app/api/uat-git-flow/step/route/server-reference-manifest.json +4 -0
  104. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js +9 -0
  105. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.map +5 -0
  106. package/dist/server/.next/server/app/api/uat-git-flow/step/route.js.nft.json +1 -0
  107. package/dist/server/.next/server/app/api/uat-git-flow/step/route_client-reference-manifest.js +2 -0
  108. package/dist/server/.next/server/app/api/workspace/create/route.js +1 -1
  109. package/dist/server/.next/server/app/api/workspace/create/route.js.nft.json +1 -1
  110. package/dist/server/.next/server/app/configuration/page/app-build-manifest.json +3 -3
  111. package/dist/server/.next/server/app/configuration/page.js +1 -1
  112. package/dist/server/.next/server/app/configuration/page.js.nft.json +1 -1
  113. package/dist/server/.next/server/app/configuration/page_client-reference-manifest.js +1 -1
  114. package/dist/server/.next/server/app/configuration.html +1 -1
  115. package/dist/server/.next/server/app/configuration.rsc +3 -3
  116. package/dist/server/.next/server/app/index.html +1 -1
  117. package/dist/server/.next/server/app/index.rsc +2 -2
  118. package/dist/server/.next/server/app/initialization/page/app-build-manifest.json +3 -3
  119. package/dist/server/.next/server/app/initialization/page.js +1 -1
  120. package/dist/server/.next/server/app/initialization/page.js.nft.json +1 -1
  121. package/dist/server/.next/server/app/initialization/page_client-reference-manifest.js +1 -1
  122. package/dist/server/.next/server/app/initialization.html +1 -1
  123. package/dist/server/.next/server/app/initialization.rsc +3 -3
  124. package/dist/server/.next/server/app/page/app-build-manifest.json +1 -1
  125. package/dist/server/.next/server/app/page.js +1 -1
  126. package/dist/server/.next/server/app/page.js.nft.json +1 -1
  127. package/dist/server/.next/server/app/page_client-reference-manifest.js +1 -1
  128. package/dist/server/.next/server/app-paths-manifest.json +4 -0
  129. package/dist/server/.next/server/chunks/{[root-of-the-server]__8fcbb2f0._.js → [root-of-the-server]__0879b2d6._.js} +2 -2
  130. package/dist/server/.next/server/chunks/[root-of-the-server]__0d56f35b._.js +3 -0
  131. package/dist/server/.next/server/chunks/[root-of-the-server]__0d56f35b._.js.map +1 -0
  132. package/dist/server/.next/server/chunks/{[root-of-the-server]__771e8133._.js → [root-of-the-server]__0e8a08fc._.js} +2 -2
  133. package/dist/server/.next/server/chunks/{[root-of-the-server]__21616bf9._.js → [root-of-the-server]__1e792460._.js} +2 -2
  134. package/dist/server/.next/server/chunks/{[root-of-the-server]__03c2b225._.js → [root-of-the-server]__2a29597f._.js} +2 -2
  135. package/dist/server/.next/server/chunks/{[root-of-the-server]__5348b4aa._.js → [root-of-the-server]__2a78acef._.js} +2 -2
  136. package/dist/server/.next/server/chunks/{[root-of-the-server]__5100a0c5._.js → [root-of-the-server]__2f8b52da._.js} +2 -2
  137. package/dist/server/.next/server/chunks/{[root-of-the-server]__3dfc0dc4._.js → [root-of-the-server]__2ffbf0d3._.js} +2 -2
  138. package/dist/server/.next/server/chunks/{[root-of-the-server]__899d82eb._.js → [root-of-the-server]__452b5f9c._.js} +2 -2
  139. package/dist/server/.next/server/chunks/[root-of-the-server]__4ab3dd83._.js +16 -0
  140. package/dist/server/.next/server/chunks/[root-of-the-server]__4ab3dd83._.js.map +1 -0
  141. package/dist/server/.next/server/chunks/{[root-of-the-server]__2fcc7175._.js → [root-of-the-server]__4b595942._.js} +2 -2
  142. package/dist/server/.next/server/chunks/{[root-of-the-server]__973c48a6._.js → [root-of-the-server]__4ec3205b._.js} +2 -2
  143. package/dist/server/.next/server/chunks/{[root-of-the-server]__072f5c45._.js → [root-of-the-server]__4fd52ac1._.js} +2 -2
  144. package/dist/server/.next/server/chunks/{[root-of-the-server]__6e5dc117._.js → [root-of-the-server]__5c9f62f9._.js} +2 -2
  145. package/dist/server/.next/server/chunks/[root-of-the-server]__6cbd50e9._.js +16 -0
  146. package/dist/server/.next/server/chunks/[root-of-the-server]__6cbd50e9._.js.map +1 -0
  147. package/dist/server/.next/server/chunks/[root-of-the-server]__703c317f._.js +3 -0
  148. package/dist/server/.next/server/chunks/[root-of-the-server]__703c317f._.js.map +1 -0
  149. package/dist/server/.next/server/chunks/{[root-of-the-server]__7500acb0._.js → [root-of-the-server]__8637b7f1._.js} +2 -2
  150. package/dist/server/.next/server/chunks/[root-of-the-server]__98088bea._.js +3 -0
  151. package/dist/server/.next/server/chunks/[root-of-the-server]__98088bea._.js.map +1 -0
  152. package/dist/server/.next/server/chunks/{[root-of-the-server]__94e10604._.js → [root-of-the-server]__a6fbefc6._.js} +2 -2
  153. package/dist/server/.next/server/chunks/{[root-of-the-server]__31a13318._.js → [root-of-the-server]__a74239fc._.js} +2 -2
  154. package/dist/server/.next/server/chunks/{[root-of-the-server]__388e6150._.js → [root-of-the-server]__aaa3fe74._.js} +2 -2
  155. package/dist/server/.next/server/chunks/{[root-of-the-server]__7fc974c9._.js → [root-of-the-server]__b176e8df._.js} +2 -2
  156. package/dist/server/.next/server/chunks/{[root-of-the-server]__a292866b._.js → [root-of-the-server]__be14bdb6._.js} +2 -2
  157. package/dist/server/.next/server/chunks/{[root-of-the-server]__f815ea40._.js → [root-of-the-server]__c18498ef._.js} +2 -2
  158. package/dist/server/.next/server/chunks/{[root-of-the-server]__c8b26634._.js → [root-of-the-server]__c9627539._.js} +2 -2
  159. package/dist/server/.next/server/chunks/{[root-of-the-server]__5355b75a._.js → [root-of-the-server]__dda45cac._.js} +2 -2
  160. package/dist/server/.next/server/chunks/{[root-of-the-server]__d0112f7b._.js → [root-of-the-server]__de18efbd._.js} +3 -3
  161. package/dist/server/.next/server/chunks/{[root-of-the-server]__d0112f7b._.js.map → [root-of-the-server]__de18efbd._.js.map} +1 -1
  162. package/dist/server/.next/server/chunks/{[root-of-the-server]__2ba93285._.js → [root-of-the-server]__e0b7050d._.js} +2 -2
  163. package/dist/server/.next/server/chunks/{[root-of-the-server]__419d3b16._.js → [root-of-the-server]__ec681197._.js} +2 -2
  164. package/dist/server/.next/server/chunks/_24087f66._.js +3 -0
  165. package/dist/server/.next/server/chunks/_24087f66._.js.map +1 -0
  166. package/dist/server/.next/server/chunks/_61c263b3._.js +3 -0
  167. package/dist/server/.next/server/chunks/_61c263b3._.js.map +1 -0
  168. package/dist/server/.next/server/chunks/ssr/[root-of-the-server]__2e9964e3._.js +3 -0
  169. package/dist/server/.next/server/chunks/ssr/{[root-of-the-server]__63c188bd._.js → [root-of-the-server]__b8a5c1ab._.js} +2 -2
  170. package/dist/server/.next/server/chunks/ssr/_5579d68f._.js +57 -0
  171. package/dist/server/.next/server/chunks/ssr/_5579d68f._.js.map +1 -0
  172. package/dist/server/.next/server/chunks/ssr/{_a1cb0beb._.js → _a1ab1c09._.js} +6 -2
  173. package/dist/server/.next/server/chunks/ssr/_a1ab1c09._.js.map +1 -0
  174. package/dist/server/.next/server/chunks/ssr/_ee0c9da0._.js +8 -0
  175. package/dist/server/.next/server/chunks/ssr/_ee0c9da0._.js.map +1 -0
  176. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js +1 -1
  177. package/dist/server/.next/server/chunks/ssr/packages_server_src_7cef6dbd._.js.map +1 -1
  178. package/dist/server/.next/server/middleware-build-manifest.js +4 -4
  179. package/dist/server/.next/server/pages/404.html +1 -1
  180. package/dist/server/.next/server/pages/500.html +1 -1
  181. package/dist/server/.next/server/pages/_app/build-manifest.json +2 -2
  182. package/dist/server/.next/server/pages/_document.js +1 -1
  183. package/dist/server/.next/server/pages/_document.js.nft.json +1 -1
  184. package/dist/server/.next/server/pages/_error/build-manifest.json +2 -2
  185. package/dist/server/.next/server/pages/_error.js +1 -1
  186. package/dist/server/.next/server/pages/_error.js.nft.json +1 -1
  187. package/dist/server/.next/server/server-reference-manifest.js +1 -1
  188. package/dist/server/.next/server/server-reference-manifest.json +1 -1
  189. package/dist/server/.next/static/chunks/{d65b8ba84ba3d819.js → 1091ba2f3c451a47.js} +1 -1
  190. package/dist/server/.next/static/chunks/{294d677a4838a994.js → 1154a499e8e3867b.js} +1 -1
  191. package/dist/server/.next/static/chunks/{f9ef1d12f3c1646a.js → 1aa036ed62a506c8.js} +2 -2
  192. package/dist/server/.next/static/chunks/205cbae70a6c50e1.js.map +1 -0
  193. package/dist/server/.next/static/chunks/{479d60165927b286.js.map → 2602bf706e977560.js.map} +1 -1
  194. package/dist/server/.next/static/chunks/2d2322acba49236a.js +57 -0
  195. package/dist/server/.next/static/chunks/{dcfeeb80bf779e48.js → 43c514797c454939.js} +6 -2
  196. package/dist/server/.next/static/chunks/511924c894f8e3de.css.map +1 -0
  197. package/dist/server/.next/static/chunks/861aac2fba8d4e28.css +3 -0
  198. package/dist/server/.next/static/chunks/888146b3e75fe817.js.map +1 -0
  199. package/dist/server/.next/static/chunks/9148331cad3a934e.js +7 -0
  200. package/dist/server/.next/static/chunks/99154153690ad580.js.map +1 -0
  201. package/dist/server/.next/static/chunks/9bc1bbb3fe6e5eb3.js +3 -0
  202. package/dist/server/.next/static/chunks/e70508cc9f59709d.js.map +1 -0
  203. package/dist/server/.next/static/chunks/pages/_app.js +2 -2
  204. package/dist/server/.next/static/chunks/pages/_error.js +2 -2
  205. package/dist/server/.next/trace +1 -1
  206. package/package.json +1 -1
  207. package/dist/server/.next/server/chunks/[root-of-the-server]__629e6d6a._.js +0 -3
  208. package/dist/server/.next/server/chunks/[root-of-the-server]__629e6d6a._.js.map +0 -1
  209. package/dist/server/.next/server/chunks/ssr/[root-of-the-server]__e3a2aebd._.js +0 -3
  210. package/dist/server/.next/server/chunks/ssr/_a1cb0beb._.js.map +0 -1
  211. package/dist/server/.next/server/chunks/ssr/_bee8e6b2._.js +0 -61
  212. package/dist/server/.next/server/chunks/ssr/_bee8e6b2._.js.map +0 -1
  213. package/dist/server/.next/static/chunks/1e69de6d92e0d593.js.map +0 -1
  214. package/dist/server/.next/static/chunks/249ab5825a2160c6.js.map +0 -1
  215. package/dist/server/.next/static/chunks/37783149158d61fd.css +0 -3
  216. package/dist/server/.next/static/chunks/851593de9d497459.css.map +0 -1
  217. package/dist/server/.next/static/chunks/a4de3104c17624f9.js.map +0 -1
  218. package/dist/server/.next/static/chunks/bb95e2f817926795.js +0 -3
  219. package/dist/server/.next/static/chunks/f90a10be5908d5fa.js +0 -61
  220. /package/dist/server/.next/server/chunks/{[root-of-the-server]__8fcbb2f0._.js.map → [root-of-the-server]__0879b2d6._.js.map} +0 -0
  221. /package/dist/server/.next/server/chunks/{[root-of-the-server]__771e8133._.js.map → [root-of-the-server]__0e8a08fc._.js.map} +0 -0
  222. /package/dist/server/.next/server/chunks/{[root-of-the-server]__21616bf9._.js.map → [root-of-the-server]__1e792460._.js.map} +0 -0
  223. /package/dist/server/.next/server/chunks/{[root-of-the-server]__03c2b225._.js.map → [root-of-the-server]__2a29597f._.js.map} +0 -0
  224. /package/dist/server/.next/server/chunks/{[root-of-the-server]__5348b4aa._.js.map → [root-of-the-server]__2a78acef._.js.map} +0 -0
  225. /package/dist/server/.next/server/chunks/{[root-of-the-server]__5100a0c5._.js.map → [root-of-the-server]__2f8b52da._.js.map} +0 -0
  226. /package/dist/server/.next/server/chunks/{[root-of-the-server]__3dfc0dc4._.js.map → [root-of-the-server]__2ffbf0d3._.js.map} +0 -0
  227. /package/dist/server/.next/server/chunks/{[root-of-the-server]__899d82eb._.js.map → [root-of-the-server]__452b5f9c._.js.map} +0 -0
  228. /package/dist/server/.next/server/chunks/{[root-of-the-server]__2fcc7175._.js.map → [root-of-the-server]__4b595942._.js.map} +0 -0
  229. /package/dist/server/.next/server/chunks/{[root-of-the-server]__973c48a6._.js.map → [root-of-the-server]__4ec3205b._.js.map} +0 -0
  230. /package/dist/server/.next/server/chunks/{[root-of-the-server]__072f5c45._.js.map → [root-of-the-server]__4fd52ac1._.js.map} +0 -0
  231. /package/dist/server/.next/server/chunks/{[root-of-the-server]__6e5dc117._.js.map → [root-of-the-server]__5c9f62f9._.js.map} +0 -0
  232. /package/dist/server/.next/server/chunks/{[root-of-the-server]__7500acb0._.js.map → [root-of-the-server]__8637b7f1._.js.map} +0 -0
  233. /package/dist/server/.next/server/chunks/{[root-of-the-server]__94e10604._.js.map → [root-of-the-server]__a6fbefc6._.js.map} +0 -0
  234. /package/dist/server/.next/server/chunks/{[root-of-the-server]__31a13318._.js.map → [root-of-the-server]__a74239fc._.js.map} +0 -0
  235. /package/dist/server/.next/server/chunks/{[root-of-the-server]__388e6150._.js.map → [root-of-the-server]__aaa3fe74._.js.map} +0 -0
  236. /package/dist/server/.next/server/chunks/{[root-of-the-server]__7fc974c9._.js.map → [root-of-the-server]__b176e8df._.js.map} +0 -0
  237. /package/dist/server/.next/server/chunks/{[root-of-the-server]__a292866b._.js.map → [root-of-the-server]__be14bdb6._.js.map} +0 -0
  238. /package/dist/server/.next/server/chunks/{[root-of-the-server]__f815ea40._.js.map → [root-of-the-server]__c18498ef._.js.map} +0 -0
  239. /package/dist/server/.next/server/chunks/{[root-of-the-server]__c8b26634._.js.map → [root-of-the-server]__c9627539._.js.map} +0 -0
  240. /package/dist/server/.next/server/chunks/{[root-of-the-server]__5355b75a._.js.map → [root-of-the-server]__dda45cac._.js.map} +0 -0
  241. /package/dist/server/.next/server/chunks/{[root-of-the-server]__2ba93285._.js.map → [root-of-the-server]__e0b7050d._.js.map} +0 -0
  242. /package/dist/server/.next/server/chunks/{[root-of-the-server]__419d3b16._.js.map → [root-of-the-server]__ec681197._.js.map} +0 -0
  243. /package/dist/server/.next/server/chunks/ssr/{[root-of-the-server]__e3a2aebd._.js.map → [root-of-the-server]__2e9964e3._.js.map} +0 -0
  244. /package/dist/server/.next/server/chunks/ssr/{[root-of-the-server]__63c188bd._.js.map → [root-of-the-server]__b8a5c1ab._.js.map} +0 -0
  245. /package/dist/server/.next/static/{rBe6tUwudOthfNpVSim6S → tz_bf3MbzRijrx8XdXPWA}/_buildManifest.js +0 -0
  246. /package/dist/server/.next/static/{rBe6tUwudOthfNpVSim6S → tz_bf3MbzRijrx8XdXPWA}/_clientMiddlewareManifest.json +0 -0
  247. /package/dist/server/.next/static/{rBe6tUwudOthfNpVSim6S → tz_bf3MbzRijrx8XdXPWA}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.10_@types+react-dom@19.1.6_@types+react@19.1.8__@types_7b46adce8be1bcd7dba6d0dca748f267/node_modules/@radix-ui/react-roving-focus/src/roving-focus-group.tsx","turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-tabs@1.1.12_@types+react-dom@19.1.6_@types+react@19.1.8__@types+react@1_6d771d0116623fb5c2e6e349f714bf48/node_modules/@radix-ui/react-tabs/src/tabs.tsx","turbopack:///[project]/packages/server/src/components/ui/tabs.tsx","turbopack:///[project]/node_modules/.pnpm/@radix-ui+number@1.1.1/node_modules/@radix-ui/number/src/number.ts","turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-popper@1.2.7_@types+react-dom@19.1.6_@types+react@19.1.8__@types+react@_598107c9f7060812e878f5f87b771bc2/node_modules/@radix-ui/react-popper/src/popper.tsx","turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-use-previous@1.1.1_@types+react@19.1.8_react@19.1.0/node_modules/@radix-ui/react-use-previous/src/use-previous.tsx","turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@19.1.6_@types+react@19.1.8__@typ_0370971a05d4b1c04ed7b348aefa2915/node_modules/@radix-ui/react-visually-hidden/src/visually-hidden.tsx","turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-select@2.2.5_@types+react-dom@19.1.6_@types+react@19.1.8__@types+react@_9be034c75d7b6be68cc4b04bf35a1721/node_modules/@radix-ui/react-select/src/select.tsx","turbopack:///[project]/node_modules/.pnpm/lucide-react@0.522.0_react@19.1.0/node_modules/lucide-react/src/icons/chevron-up.ts","turbopack:///[project]/packages/server/src/components/ui/select.tsx","turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-switch@1.2.5_@types+react-dom@19.1.6_@types+react@19.1.8__@types+react@_493359caf905e3ba119eff41a016151d/node_modules/@radix-ui/react-switch/src/switch.tsx","turbopack:///[project]/packages/server/src/components/ui/switch.tsx","turbopack:///[project]/packages/server/src/components/ui/table.tsx","turbopack:///[project]/node_modules/.pnpm/@radix-ui+react-checkbox@1.3.3_@types+react-dom@19.1.6_@types+react@19.1.8__@types+reac_9874f3495b8b03c103a9c34f18cfa71b/node_modules/@radix-ui/react-checkbox/src/checkbox.tsx","turbopack:///[project]/packages/server/src/components/ui/checkbox.tsx","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/_virtual/_rollupPluginBabelHelpers.js","turbopack:///[project]/node_modules/.pnpm/state-local@1.0.7/node_modules/state-local/lib/es/state-local.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/config/index.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/utils/curry.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/utils/isObject.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/validators/index.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/utils/compose.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/utils/deepMerge.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/utils/makeCancelable.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/loader/index.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+loader@1.5.0/node_modules/@monaco-editor/loader/lib/es/index.js","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/DiffEditor/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/DiffEditor/DiffEditor.tsx","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/MonacoContainer/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/MonacoContainer/MonacoContainer.tsx","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/MonacoContainer/styles.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/Loading/Loading.tsx","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/Loading/styles.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/Loading/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/hooks/useMount/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/hooks/useUpdate/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/utils/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/hooks/useMonaco/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/Editor/index.ts","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/Editor/Editor.tsx","turbopack:///[project]/node_modules/.pnpm/@monaco-editor+react@4.7.0_monaco-editor@0.52.2_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/@monaco-editor/react/src/hooks/usePrevious/index.ts","turbopack:///[project]/packages/server/src/components/MicroAppProxyTable.tsx","turbopack:///[project]/node_modules/.pnpm/styled-jsx@5.1.6_react@19.1.0/node_modules/styled-jsx/dist/index/index.js","turbopack:///[project]/node_modules/.pnpm/styled-jsx@5.1.6_react@19.1.0/node_modules/styled-jsx/style.js","turbopack:///[project]/packages/server/src/components/LogViewer.tsx","turbopack:///[project]/packages/server/src/components/BranchInfo.tsx","turbopack:///[project]/packages/server/src/app/configuration/page.tsx"],"sourcesContent":["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useDirection } from '@radix-ui/react-direction';\n\nimport type { Scope } from '@radix-ui/react-context';\n\nconst ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'RovingFocusGroup';\n\ntype ItemData = { id: string; focusable: boolean; active: boolean };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n HTMLSpanElement,\n ItemData\n>(GROUP_NAME);\n\ntype ScopedProps<P> = P & { __scopeRovingFocusGroup?: Scope };\nconst [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\n\ntype Orientation = React.AriaAttributes['aria-orientation'];\ntype Direction = 'ltr' | 'rtl';\n\ninterface RovingFocusGroupOptions {\n /**\n * The orientation of the group.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n */\n orientation?: Orientation;\n /**\n * The direction of navigation between items.\n */\n dir?: Direction;\n /**\n * Whether keyboard navigation should loop around\n * @defaultValue false\n */\n loop?: boolean;\n}\n\ntype RovingContextValue = RovingFocusGroupOptions & {\n currentTabStopId: string | null;\n onItemFocus(tabStopId: string): void;\n onItemShiftTab(): void;\n onFocusableItemAdd(): void;\n onFocusableItemRemove(): void;\n};\n\nconst [RovingFocusProvider, useRovingFocusContext] =\n createRovingFocusGroupContext<RovingContextValue>(GROUP_NAME);\n\ntype RovingFocusGroupElement = RovingFocusGroupImplElement;\ninterface RovingFocusGroupProps extends RovingFocusGroupImplProps {}\n\nconst RovingFocusGroup = React.forwardRef<RovingFocusGroupElement, RovingFocusGroupProps>(\n (props: ScopedProps<RovingFocusGroupProps>, forwardedRef) => {\n return (\n <Collection.Provider scope={props.__scopeRovingFocusGroup}>\n <Collection.Slot scope={props.__scopeRovingFocusGroup}>\n <RovingFocusGroupImpl {...props} ref={forwardedRef} />\n </Collection.Slot>\n </Collection.Provider>\n );\n }\n);\n\nRovingFocusGroup.displayName = GROUP_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype RovingFocusGroupImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface RovingFocusGroupImplProps\n extends Omit<PrimitiveDivProps, 'dir'>,\n RovingFocusGroupOptions {\n currentTabStopId?: string | null;\n defaultCurrentTabStopId?: string;\n onCurrentTabStopIdChange?: (tabStopId: string | null) => void;\n onEntryFocus?: (event: Event) => void;\n preventScrollOnEntryFocus?: boolean;\n}\n\nconst RovingFocusGroupImpl = React.forwardRef<\n RovingFocusGroupImplElement,\n RovingFocusGroupImplProps\n>((props: ScopedProps<RovingFocusGroupImplProps>, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef<RovingFocusGroupImplElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME,\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n\n return (\n <RovingFocusProvider\n scope={__scopeRovingFocusGroup}\n orientation={orientation}\n dir={direction}\n loop={loop}\n currentTabStopId={currentTabStopId}\n onItemFocus={React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n )}\n onItemShiftTab={React.useCallback(() => setIsTabbingBackOut(true), [])}\n onFocusableItemAdd={React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n )}\n onFocusableItemRemove={React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n )}\n >\n <Primitive.div\n tabIndex={isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0}\n data-orientation={orientation}\n {...groupProps}\n ref={composedRefs}\n style={{ outline: 'none', ...props.style }}\n onMouseDown={composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n })}\n onFocus={composeEventHandlers(props.onFocus, (event) => {\n // We normally wouldn't need this check, because we already check\n // that the focus is on the current target and not bubbling to it.\n // We do this because Safari doesn't focus buttons when clicked, and\n // instead, the wrapper will get focused and not through a bubbling event.\n const isKeyboardFocus = !isClickFocusRef.current;\n\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n ) as typeof items;\n const candidateNodes = candidateItems.map((item) => item.ref.current!);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n\n isClickFocusRef.current = false;\n })}\n onBlur={composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))}\n />\n </RovingFocusProvider>\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * RovingFocusGroupItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'RovingFocusGroupItem';\n\ntype RovingFocusItemElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface RovingFocusItemProps extends Omit<PrimitiveSpanProps, 'children'> {\n tabStopId?: string;\n focusable?: boolean;\n active?: boolean;\n children?:\n | React.ReactNode\n | ((props: { hasTabStop: boolean; isCurrentTabStop: boolean }) => React.ReactNode);\n}\n\nconst RovingFocusGroupItem = React.forwardRef<RovingFocusItemElement, RovingFocusItemProps>(\n (props: ScopedProps<RovingFocusItemProps>, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n\n return (\n <Collection.ItemSlot\n scope={__scopeRovingFocusGroup}\n id={id}\n focusable={focusable}\n active={active}\n >\n <Primitive.span\n tabIndex={isCurrentTabStop ? 0 : -1}\n data-orientation={context.orientation}\n {...itemProps}\n ref={forwardedRef}\n onMouseDown={composeEventHandlers(props.onMouseDown, (event) => {\n // We prevent focusing non-focusable items on `mousedown`.\n // Even though the item has tabIndex={-1}, that only means take it out of the tab order.\n if (!focusable) event.preventDefault();\n // Safari doesn't focus a button when clicked so we run our logic on mousedown also\n else context.onItemFocus(id);\n })}\n onFocus={composeEventHandlers(props.onFocus, () => context.onItemFocus(id))}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === 'Tab' && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current!);\n\n if (focusIntent === 'last') candidateNodes.reverse();\n else if (focusIntent === 'prev' || focusIntent === 'next') {\n if (focusIntent === 'prev') candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop\n ? wrapArray(candidateNodes, currentIndex + 1)\n : candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n }\n })}\n >\n {typeof children === 'function'\n ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null })\n : children}\n </Primitive.span>\n </Collection.ItemSlot>\n );\n }\n);\n\nRovingFocusGroupItem.displayName = ITEM_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\n// prettier-ignore\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: 'prev', ArrowUp: 'prev',\n ArrowRight: 'next', ArrowDown: 'next',\n PageUp: 'first', Home: 'first',\n PageDown: 'last', End: 'last',\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== 'rtl') return key;\n return key === 'ArrowLeft' ? 'ArrowRight' : key === 'ArrowRight' ? 'ArrowLeft' : key;\n}\n\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next';\n\nfunction getFocusIntent(event: React.KeyboardEvent, orientation?: Orientation, dir?: Direction) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key)) return undefined;\n if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key)) return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(candidates: HTMLElement[], preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>((_, index) => array[(startIndex + index) % array.length]!);\n}\n\nconst Root = RovingFocusGroup;\nconst Item = RovingFocusGroupItem;\n\nexport {\n createRovingFocusGroupScope,\n //\n RovingFocusGroup,\n RovingFocusGroupItem,\n //\n Root,\n Item,\n};\nexport type { RovingFocusGroupProps, RovingFocusItemProps };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { createRovingFocusGroupScope } from '@radix-ui/react-roving-focus';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport * as RovingFocusGroup from '@radix-ui/react-roving-focus';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useId } from '@radix-ui/react-id';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Tabs\n * -----------------------------------------------------------------------------------------------*/\n\nconst TABS_NAME = 'Tabs';\n\ntype ScopedProps<P> = P & { __scopeTabs?: Scope };\nconst [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope,\n]);\nconst useRovingFocusGroupScope = createRovingFocusGroupScope();\n\ntype TabsContextValue = {\n baseId: string;\n value: string;\n onValueChange: (value: string) => void;\n orientation?: TabsProps['orientation'];\n dir?: TabsProps['dir'];\n activationMode?: TabsProps['activationMode'];\n};\n\nconst [TabsProvider, useTabsContext] = createTabsContext<TabsContextValue>(TABS_NAME);\n\ntype TabsElement = React.ComponentRef<typeof Primitive.div>;\ntype RovingFocusGroupProps = React.ComponentPropsWithoutRef<typeof RovingFocusGroup.Root>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface TabsProps extends PrimitiveDivProps {\n /** The value for the selected tab, if controlled */\n value?: string;\n /** The value of the tab to select by default, if uncontrolled */\n defaultValue?: string;\n /** A function called when a new tab is selected */\n onValueChange?: (value: string) => void;\n /**\n * The orientation the tabs are layed out.\n * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n * @defaultValue horizontal\n */\n orientation?: RovingFocusGroupProps['orientation'];\n /**\n * The direction of navigation between toolbar items.\n */\n dir?: RovingFocusGroupProps['dir'];\n /**\n * Whether a tab is activated automatically or manually.\n * @defaultValue automatic\n * */\n activationMode?: 'automatic' | 'manual';\n}\n\nconst Tabs = React.forwardRef<TabsElement, TabsProps>(\n (props: ScopedProps<TabsProps>, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = 'horizontal',\n dir,\n activationMode = 'automatic',\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? '',\n caller: TABS_NAME,\n });\n\n return (\n <TabsProvider\n scope={__scopeTabs}\n baseId={useId()}\n value={value}\n onValueChange={setValue}\n orientation={orientation}\n dir={direction}\n activationMode={activationMode}\n >\n <Primitive.div\n dir={direction}\n data-orientation={orientation}\n {...tabsProps}\n ref={forwardedRef}\n />\n </TabsProvider>\n );\n }\n);\n\nTabs.displayName = TABS_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsList\n * -----------------------------------------------------------------------------------------------*/\n\nconst TAB_LIST_NAME = 'TabsList';\n\ntype TabsListElement = React.ComponentRef<typeof Primitive.div>;\ninterface TabsListProps extends PrimitiveDivProps {\n loop?: RovingFocusGroupProps['loop'];\n}\n\nconst TabsList = React.forwardRef<TabsListElement, TabsListProps>(\n (props: ScopedProps<TabsListProps>, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return (\n <RovingFocusGroup.Root\n asChild\n {...rovingFocusGroupScope}\n orientation={context.orientation}\n dir={context.dir}\n loop={loop}\n >\n <Primitive.div\n role=\"tablist\"\n aria-orientation={context.orientation}\n {...listProps}\n ref={forwardedRef}\n />\n </RovingFocusGroup.Root>\n );\n }\n);\n\nTabsList.displayName = TAB_LIST_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'TabsTrigger';\n\ntype TabsTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface TabsTriggerProps extends PrimitiveButtonProps {\n value: string;\n}\n\nconst TabsTrigger = React.forwardRef<TabsTriggerElement, TabsTriggerProps>(\n (props: ScopedProps<TabsTriggerProps>, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return (\n <RovingFocusGroup.Item\n asChild\n {...rovingFocusGroupScope}\n focusable={!disabled}\n active={isSelected}\n >\n <Primitive.button\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={contentId}\n data-state={isSelected ? 'active' : 'inactive'}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n id={triggerId}\n {...triggerProps}\n ref={forwardedRef}\n onMouseDown={composeEventHandlers(props.onMouseDown, (event) => {\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click)\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n // prevent focus to avoid accidental activation\n event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(props.onKeyDown, (event) => {\n if ([' ', 'Enter'].includes(event.key)) context.onValueChange(value);\n })}\n onFocus={composeEventHandlers(props.onFocus, () => {\n // handle \"automatic\" activation if necessary\n // ie. activate tab following focus\n const isAutomaticActivation = context.activationMode !== 'manual';\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })}\n />\n </RovingFocusGroup.Item>\n );\n }\n);\n\nTabsTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * TabsContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'TabsContent';\n\ntype TabsContentElement = React.ComponentRef<typeof Primitive.div>;\ninterface TabsContentProps extends PrimitiveDivProps {\n value: string;\n\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst TabsContent = React.forwardRef<TabsContentElement, TabsContentProps>(\n (props: ScopedProps<TabsContentProps>, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => (isMountAnimationPreventedRef.current = false));\n return () => cancelAnimationFrame(rAF);\n }, []);\n\n return (\n <Presence present={forceMount || isSelected}>\n {({ present }) => (\n <Primitive.div\n data-state={isSelected ? 'active' : 'inactive'}\n data-orientation={context.orientation}\n role=\"tabpanel\"\n aria-labelledby={triggerId}\n hidden={!present}\n id={contentId}\n tabIndex={0}\n {...contentProps}\n ref={forwardedRef}\n style={{\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? '0s' : undefined,\n }}\n >\n {present && children}\n </Primitive.div>\n )}\n </Presence>\n );\n }\n);\n\nTabsContent.displayName = CONTENT_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nfunction makeTriggerId(baseId: string, value: string) {\n return `${baseId}-trigger-${value}`;\n}\n\nfunction makeContentId(baseId: string, value: string) {\n return `${baseId}-content-${value}`;\n}\n\nconst Root = Tabs;\nconst List = TabsList;\nconst Trigger = TabsTrigger;\nconst Content = TabsContent;\n\nexport {\n createTabsScope,\n //\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n //\n Root,\n List,\n Trigger,\n Content,\n};\nexport type { TabsProps, TabsListProps, TabsTriggerProps, TabsContentProps };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Tabs({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n />\n )\n}\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n \"bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\"flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","function clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport { clamp };\n","import * as React from 'react';\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size,\n} from '@floating-ui/react-dom';\nimport * as ArrowPrimitive from '@radix-ui/react-arrow';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useSize } from '@radix-ui/react-use-size';\n\nimport type { Placement, Middleware } from '@floating-ui/react-dom';\nimport type { Scope } from '@radix-ui/react-context';\nimport type { Measurable } from '@radix-ui/rect';\n\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\ntype Side = (typeof SIDE_OPTIONS)[number];\ntype Align = (typeof ALIGN_OPTIONS)[number];\n\n/* -------------------------------------------------------------------------------------------------\n * Popper\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_NAME = 'Popper';\n\ntype ScopedProps<P> = P & { __scopePopper?: Scope };\nconst [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\n\ntype PopperContextValue = {\n anchor: Measurable | null;\n onAnchorChange(anchor: Measurable | null): void;\n};\nconst [PopperProvider, usePopperContext] = createPopperContext<PopperContextValue>(POPPER_NAME);\n\ninterface PopperProps {\n children?: React.ReactNode;\n}\nconst Popper: React.FC<PopperProps> = (props: ScopedProps<PopperProps>) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState<Measurable | null>(null);\n return (\n <PopperProvider scope={__scopePopper} anchor={anchor} onAnchorChange={setAnchor}>\n {children}\n </PopperProvider>\n );\n};\n\nPopper.displayName = POPPER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopperAnchor';\n\ntype PopperAnchorElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PopperAnchorProps extends PrimitiveDivProps {\n virtualRef?: React.RefObject<Measurable>;\n}\n\nconst PopperAnchor = React.forwardRef<PopperAnchorElement, PopperAnchorProps>(\n (props: ScopedProps<PopperAnchorProps>, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef<PopperAnchorElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n // Consumer can anchor the popper to something that isn't\n // a DOM node e.g. pointer position, so we override the\n // `anchorRef` with their virtual ref in this case.\n context.onAnchorChange(virtualRef?.current || ref.current);\n });\n\n return virtualRef ? null : <Primitive.div {...anchorProps} ref={composedRefs} />;\n }\n);\n\nPopperAnchor.displayName = ANCHOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopperContent';\n\ntype PopperContentContextValue = {\n placedSide: Side;\n onArrowChange(arrow: HTMLSpanElement | null): void;\n arrowX?: number;\n arrowY?: number;\n shouldHideArrow: boolean;\n};\n\nconst [PopperContentProvider, useContentContext] =\n createPopperContext<PopperContentContextValue>(CONTENT_NAME);\n\ntype Boundary = Element | null;\n\ntype PopperContentElement = React.ComponentRef<typeof Primitive.div>;\ninterface PopperContentProps extends PrimitiveDivProps {\n side?: Side;\n sideOffset?: number;\n align?: Align;\n alignOffset?: number;\n arrowPadding?: number;\n avoidCollisions?: boolean;\n collisionBoundary?: Boundary | Boundary[];\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n updatePositionStrategy?: 'optimized' | 'always';\n onPlaced?: () => void;\n}\n\nconst PopperContent = React.forwardRef<PopperContentElement, PopperContentProps>(\n (props: ScopedProps<PopperContentProps>, forwardedRef) => {\n const {\n __scopePopper,\n side = 'bottom',\n sideOffset = 0,\n align = 'center',\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = 'partial',\n hideWhenDetached = false,\n updatePositionStrategy = 'optimized',\n onPlaced,\n ...contentProps\n } = props;\n\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n\n const [content, setContent] = React.useState<HTMLDivElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n\n const [arrow, setArrow] = React.useState<HTMLSpanElement | null>(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n\n const desiredPlacement = (side + (align !== 'center' ? '-' + align : '')) as Placement;\n\n const collisionPadding =\n typeof collisionPaddingProp === 'number'\n ? collisionPaddingProp\n : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries,\n };\n\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: 'fixed',\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === 'always',\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor,\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === 'partial' ? limitShift() : undefined,\n ...detectOverflowOptions,\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`);\n contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`);\n contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`);\n contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`);\n },\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: 'referenceHidden', ...detectOverflowOptions }),\n ],\n });\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n\n const [contentZIndex, setContentZIndex] = React.useState<string>();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n return (\n <div\n ref={refs.setFloating}\n data-radix-popper-content-wrapper=\"\"\n style={{\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n minWidth: 'max-content',\n zIndex: contentZIndex,\n ['--radix-popper-transform-origin' as any]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y,\n ].join(' '),\n\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...(middlewareData.hide?.referenceHidden && {\n visibility: 'hidden',\n pointerEvents: 'none',\n }),\n }}\n // Floating UI interally calculates logical alignment based the `dir` attribute on\n // the reference/floating node, we must add this attribute here to ensure\n // this is calculated when portalled as well as inline.\n dir={props.dir}\n >\n <PopperContentProvider\n scope={__scopePopper}\n placedSide={placedSide}\n onArrowChange={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n shouldHideArrow={cannotCenterArrow}\n >\n <Primitive.div\n data-side={placedSide}\n data-align={placedAlign}\n {...contentProps}\n ref={composedRefs}\n style={{\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? 'none' : undefined,\n }}\n />\n </PopperContentProvider>\n </div>\n );\n }\n);\n\nPopperContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * PopperArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopperArrow';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\ntype PopperArrowElement = React.ComponentRef<typeof ArrowPrimitive.Root>;\ntype ArrowProps = React.ComponentPropsWithoutRef<typeof ArrowPrimitive.Root>;\ninterface PopperArrowProps extends ArrowProps {}\n\nconst PopperArrow = React.forwardRef<PopperArrowElement, PopperArrowProps>(function PopperArrow(\n props: ScopedProps<PopperArrowProps>,\n forwardedRef\n) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n <span\n ref={contentContext.onArrowChange}\n style={{\n position: 'absolute',\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: '',\n right: '0 0',\n bottom: 'center 0',\n left: '100% 0',\n }[contentContext.placedSide],\n transform: {\n top: 'translateY(100%)',\n right: 'translateY(50%) rotate(90deg) translateX(-50%)',\n bottom: `rotate(180deg)`,\n left: 'translateY(50%) rotate(-90deg) translateX(50%)',\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? 'hidden' : undefined,\n }}\n >\n <ArrowPrimitive.Root\n {...arrowProps}\n ref={forwardedRef}\n style={{\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: 'block',\n }}\n />\n </span>\n );\n});\n\nPopperArrow.displayName = ARROW_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction isNotNull<T>(value: T | null): value is T {\n return value !== null;\n}\n\nconst transformOrigin = (options: { arrowWidth: number; arrowHeight: number }): Middleware => ({\n name: 'transformOrigin',\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n let x = '';\n let y = '';\n\n if (placedSide === 'bottom') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === 'top') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === 'right') {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === 'left') {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n },\n});\n\nfunction getSideAndAlignFromPlacement(placement: Placement) {\n const [side, align = 'center'] = placement.split('-');\n return [side as Side, align as Align] as const;\n}\n\nconst Root = Popper;\nconst Anchor = PopperAnchor;\nconst Content = PopperContent;\nconst Arrow = PopperArrow;\n\nexport {\n createPopperScope,\n //\n Popper,\n PopperAnchor,\n PopperContent,\n PopperArrow,\n //\n Root,\n Anchor,\n Content,\n Arrow,\n //\n SIDE_OPTIONS,\n ALIGN_OPTIONS,\n};\nexport type { PopperProps, PopperAnchorProps, PopperContentProps, PopperArrowProps };\n","import * as React from 'react';\n\nfunction usePrevious<T>(value: T) {\n const ref = React.useRef({ value, previous: value });\n\n // We compare values before making an update to ensure that\n // a change has been made. This ensures the previous value is\n // persisted correctly between renders.\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\n\nexport { usePrevious };\n","import * as React from 'react';\nimport { Primitive } from '@radix-ui/react-primitive';\n\n/* -------------------------------------------------------------------------------------------------\n * VisuallyHidden\n * -----------------------------------------------------------------------------------------------*/\n\nconst VISUALLY_HIDDEN_STYLES = Object.freeze({\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: 'absolute',\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n wordWrap: 'normal',\n}) satisfies React.CSSProperties;\n\nconst NAME = 'VisuallyHidden';\n\ntype VisuallyHiddenElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface VisuallyHiddenProps extends PrimitiveSpanProps {}\n\nconst VisuallyHidden = React.forwardRef<VisuallyHiddenElement, VisuallyHiddenProps>(\n (props, forwardedRef) => {\n return (\n <Primitive.span\n {...props}\n ref={forwardedRef}\n style={{ ...VISUALLY_HIDDEN_STYLES, ...props.style }}\n />\n );\n }\n);\n\nVisuallyHidden.displayName = NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = VisuallyHidden;\n\nexport {\n VisuallyHidden,\n //\n Root,\n //\n VISUALLY_HIDDEN_STYLES,\n};\nexport type { VisuallyHiddenProps };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { clamp } from '@radix-ui/number';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { createCollection } from '@radix-ui/react-collection';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useDirection } from '@radix-ui/react-direction';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { useId } from '@radix-ui/react-id';\nimport * as PopperPrimitive from '@radix-ui/react-popper';\nimport { createPopperScope } from '@radix-ui/react-popper';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { createSlot } from '@radix-ui/react-slot';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { VISUALLY_HIDDEN_STYLES } from '@radix-ui/react-visually-hidden';\nimport { hideOthers } from 'aria-hidden';\nimport { RemoveScroll } from 'react-remove-scroll';\n\nimport type { Scope } from '@radix-ui/react-context';\n\ntype Direction = 'ltr' | 'rtl';\n\nconst OPEN_KEYS = [' ', 'Enter', 'ArrowUp', 'ArrowDown'];\nconst SELECTION_KEYS = [' ', 'Enter'];\n\n/* -------------------------------------------------------------------------------------------------\n * Select\n * -----------------------------------------------------------------------------------------------*/\n\nconst SELECT_NAME = 'Select';\n\ntype ItemData = { value: string; disabled: boolean; textValue: string };\nconst [Collection, useCollection, createCollectionScope] = createCollection<\n SelectItemElement,\n ItemData\n>(SELECT_NAME);\n\ntype ScopedProps<P> = P & { __scopeSelect?: Scope };\nconst [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope,\n]);\nconst usePopperScope = createPopperScope();\n\ntype SelectContextValue = {\n trigger: SelectTriggerElement | null;\n onTriggerChange(node: SelectTriggerElement | null): void;\n valueNode: SelectValueElement | null;\n onValueNodeChange(node: SelectValueElement): void;\n valueNodeHasChildren: boolean;\n onValueNodeHasChildrenChange(hasChildren: boolean): void;\n contentId: string;\n value: string | undefined;\n onValueChange(value: string): void;\n open: boolean;\n required?: boolean;\n onOpenChange(open: boolean): void;\n dir: SelectProps['dir'];\n triggerPointerDownPosRef: React.MutableRefObject<{ x: number; y: number } | null>;\n disabled?: boolean;\n};\n\nconst [SelectProvider, useSelectContext] = createSelectContext<SelectContextValue>(SELECT_NAME);\n\ntype NativeOption = React.ReactElement<React.ComponentProps<'option'>>;\n\ntype SelectNativeOptionsContextValue = {\n onNativeOptionAdd(option: NativeOption): void;\n onNativeOptionRemove(option: NativeOption): void;\n};\nconst [SelectNativeOptionsProvider, useSelectNativeOptionsContext] =\n createSelectContext<SelectNativeOptionsContextValue>(SELECT_NAME);\n\ninterface ControlledClearableSelectProps {\n value: string | undefined;\n defaultValue?: never;\n onValueChange: (value: string | undefined) => void;\n}\n\ninterface ControlledUnclearableSelectProps {\n value: string;\n defaultValue?: never;\n onValueChange: (value: string) => void;\n}\n\ninterface UncontrolledSelectProps {\n value?: never;\n defaultValue?: string;\n onValueChange?: {\n (value: string): void;\n (value: string | undefined): void;\n };\n}\n\ntype SelectControlProps =\n | ControlledClearableSelectProps\n | ControlledUnclearableSelectProps\n | UncontrolledSelectProps;\n\ninterface SelectSharedProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n dir?: Direction;\n name?: string;\n autoComplete?: string;\n disabled?: boolean;\n required?: boolean;\n form?: string;\n}\n\n// TODO: Should improve typing somewhat, but this would be a breaking change.\n// Consider using in the next major version (along with some testing to be sure\n// it works as expected and doesn't cause problems)\ntype _FutureSelectProps = SelectSharedProps & SelectControlProps;\n\ntype SelectProps = SelectSharedProps & {\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n};\n\nconst Select: React.FC<SelectProps> = (props: ScopedProps<SelectProps>) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form,\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState<SelectTriggerElement | null>(null);\n const [valueNode, setValueNode] = React.useState<SelectValueElement | null>(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SELECT_NAME,\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange as any,\n caller: SELECT_NAME,\n });\n const triggerPointerDownPosRef = React.useRef<{ x: number; y: number } | null>(null);\n\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = trigger ? form || !!trigger.closest('form') : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(new Set<NativeOption>());\n\n // The native `select` only associates the correct default value if the corresponding\n // `option` is rendered as a child **at the same time** as itself.\n // Because it might take a few renders for our items to gather the information to build\n // the native `option`(s), we generate a key on the `select` to make sure React re-builds it\n // each time the options change.\n const nativeSelectKey = Array.from(nativeOptionsSet)\n .map((option) => option.props.value)\n .join(';');\n\n return (\n <PopperPrimitive.Root {...popperScope}>\n <SelectProvider\n required={required}\n scope={__scopeSelect}\n trigger={trigger}\n onTriggerChange={setTrigger}\n valueNode={valueNode}\n onValueNodeChange={setValueNode}\n valueNodeHasChildren={valueNodeHasChildren}\n onValueNodeHasChildrenChange={setValueNodeHasChildren}\n contentId={useId()}\n value={value}\n onValueChange={setValue}\n open={open}\n onOpenChange={setOpen}\n dir={direction}\n triggerPointerDownPosRef={triggerPointerDownPosRef}\n disabled={disabled}\n >\n <Collection.Provider scope={__scopeSelect}>\n <SelectNativeOptionsProvider\n scope={props.__scopeSelect}\n onNativeOptionAdd={React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, [])}\n onNativeOptionRemove={React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, [])}\n >\n {children}\n </SelectNativeOptionsProvider>\n </Collection.Provider>\n\n {isFormControl ? (\n <SelectBubbleInput\n key={nativeSelectKey}\n aria-hidden\n required={required}\n tabIndex={-1}\n name={name}\n autoComplete={autoComplete}\n value={value}\n // enable form autofill\n onChange={(event) => setValue(event.target.value)}\n disabled={disabled}\n form={form}\n >\n {value === undefined ? <option value=\"\" /> : null}\n {Array.from(nativeOptionsSet)}\n </SelectBubbleInput>\n ) : null}\n </SelectProvider>\n </PopperPrimitive.Root>\n );\n};\n\nSelect.displayName = SELECT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'SelectTrigger';\n\ntype SelectTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface SelectTriggerProps extends PrimitiveButtonProps {}\n\nconst SelectTrigger = React.forwardRef<SelectTriggerElement, SelectTriggerProps>(\n (props: ScopedProps<SelectTriggerProps>, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef<React.PointerEvent['pointerType']>('touch');\n\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== undefined) {\n context.onValueChange(nextItem.value);\n }\n });\n\n const handleOpen = (pointerEvent?: React.MouseEvent | React.PointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n // reset typeahead when we open\n resetTypeahead();\n }\n\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY),\n };\n }\n };\n\n return (\n <PopperPrimitive.Anchor asChild {...popperScope}>\n <Primitive.button\n type=\"button\"\n role=\"combobox\"\n aria-controls={context.contentId}\n aria-expanded={context.open}\n aria-required={context.required}\n aria-autocomplete=\"none\"\n dir={context.dir}\n data-state={context.open ? 'open' : 'closed'}\n disabled={isDisabled}\n data-disabled={isDisabled ? '' : undefined}\n data-placeholder={shouldShowPlaceholder(context.value) ? '' : undefined}\n {...triggerProps}\n ref={composedRefs}\n // Enable compatibility with native label or custom `Label` \"click\" for Safari:\n onClick={composeEventHandlers(triggerProps.onClick, (event) => {\n // Whilst browsers generally have no issue focusing the trigger when clicking\n // on a label, Safari seems to struggle with the fact that there's no `onClick`.\n // We force `focus` in this case. Note: this doesn't create any other side-effect\n // because we are preventing default in `onPointerDown` so effectively\n // this only runs for a label \"click\"\n event.currentTarget.focus();\n\n // Open on click when using a touch or pen device\n if (pointerTypeRef.current !== 'mouse') {\n handleOpen(event);\n }\n })}\n onPointerDown={composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n\n // prevent implicit pointer capture\n // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture\n const target = event.target as HTMLElement;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n\n // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n // but not when the control key is pressed (avoiding MacOS right click); also not for touch\n // devices because that would open the menu on scroll. (pen devices behave as touch on iOS).\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === 'mouse') {\n handleOpen(event);\n // prevent trigger from stealing focus from the active item after opening.\n event.preventDefault();\n }\n })}\n onKeyDown={composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== '';\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === ' ') return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })}\n />\n </PopperPrimitive.Anchor>\n );\n }\n);\n\nSelectTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectValue\n * -----------------------------------------------------------------------------------------------*/\n\nconst VALUE_NAME = 'SelectValue';\n\ntype SelectValueElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SelectValueProps extends Omit<PrimitiveSpanProps, 'placeholder'> {\n placeholder?: React.ReactNode;\n}\n\nconst SelectValue = React.forwardRef<SelectValueElement, SelectValueProps>(\n (props: ScopedProps<SelectValueProps>, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, children, placeholder = '', ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== undefined;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n\n return (\n <Primitive.span\n {...valueProps}\n ref={composedRefs}\n // we don't want events from the portalled `SelectValue` children to bubble\n // through the item they came from\n style={{ pointerEvents: 'none' }}\n >\n {shouldShowPlaceholder(context.value) ? <>{placeholder}</> : children}\n </Primitive.span>\n );\n }\n);\n\nSelectValue.displayName = VALUE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectIcon\n * -----------------------------------------------------------------------------------------------*/\n\nconst ICON_NAME = 'SelectIcon';\n\ntype SelectIconElement = React.ComponentRef<typeof Primitive.span>;\ninterface SelectIconProps extends PrimitiveSpanProps {}\n\nconst SelectIcon = React.forwardRef<SelectIconElement, SelectIconProps>(\n (props: ScopedProps<SelectIconProps>, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return (\n <Primitive.span aria-hidden {...iconProps} ref={forwardedRef}>\n {children || '▼'}\n </Primitive.span>\n );\n }\n);\n\nSelectIcon.displayName = ICON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'SelectPortal';\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface SelectPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n}\n\nconst SelectPortal: React.FC<SelectPortalProps> = (props: ScopedProps<SelectPortalProps>) => {\n return <PortalPrimitive asChild {...props} />;\n};\n\nSelectPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'SelectContent';\n\ntype SelectContentElement = SelectContentImplElement;\ninterface SelectContentProps extends SelectContentImplProps {}\n\nconst SelectContent = React.forwardRef<SelectContentElement, SelectContentProps>(\n (props: ScopedProps<SelectContentProps>, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState<DocumentFragment>();\n\n // setting the fragment in `useLayoutEffect` as `DocumentFragment` doesn't exist on the server\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n\n if (!context.open) {\n const frag = fragment as Element | undefined;\n return frag\n ? ReactDOM.createPortal(\n <SelectContentProvider scope={props.__scopeSelect}>\n <Collection.Slot scope={props.__scopeSelect}>\n <div>{props.children}</div>\n </Collection.Slot>\n </SelectContentProvider>,\n frag\n )\n : null;\n }\n\n return <SelectContentImpl {...props} ref={forwardedRef} />;\n }\n);\n\nSelectContent.displayName = CONTENT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectContentImpl\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_MARGIN = 10;\n\ntype SelectContentContextValue = {\n content?: SelectContentElement | null;\n viewport?: SelectViewportElement | null;\n onViewportChange?: (node: SelectViewportElement | null) => void;\n itemRefCallback?: (node: SelectItemElement | null, value: string, disabled: boolean) => void;\n selectedItem?: SelectItemElement | null;\n onItemLeave?: () => void;\n itemTextRefCallback?: (\n node: SelectItemTextElement | null,\n value: string,\n disabled: boolean\n ) => void;\n focusSelectedItem?: () => void;\n selectedItemText?: SelectItemTextElement | null;\n position?: SelectContentProps['position'];\n isPositioned?: boolean;\n searchRef?: React.RefObject<string>;\n};\n\nconst [SelectContentProvider, useSelectContentContext] =\n createSelectContext<SelectContentContextValue>(CONTENT_NAME);\n\nconst CONTENT_IMPL_NAME = 'SelectContentImpl';\n\ntype SelectContentImplElement = SelectPopperPositionElement | SelectItemAlignedPositionElement;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\n\ntype SelectPopperPrivateProps = { onPlaced?: PopperContentProps['onPlaced'] };\n\ninterface SelectContentImplProps\n extends Omit<SelectPopperPositionProps, keyof SelectPopperPrivateProps>,\n Omit<SelectItemAlignedPositionProps, keyof SelectPopperPrivateProps> {\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: DismissableLayerProps['onEscapeKeyDown'];\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: DismissableLayerProps['onPointerDownOutside'];\n\n position?: 'item-aligned' | 'popper';\n}\n\nconst Slot = createSlot('SelectContent.RemoveScroll');\n\nconst SelectContentImpl = React.forwardRef<SelectContentImplElement, SelectContentImplProps>(\n (props: ScopedProps<SelectContentImplProps>, forwardedRef) => {\n const {\n __scopeSelect,\n position = 'item-aligned',\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState<SelectContentImplElement | null>(null);\n const [viewport, setViewport] = React.useState<SelectViewportElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState<SelectItemElement | null>(null);\n const [selectedItemText, setSelectedItemText] = React.useState<SelectItemTextElement | null>(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n\n // Make sure the whole tree has focus guards as our `Select` may be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n const focusFirst = React.useCallback(\n (candidates: Array<HTMLElement | null>) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n // if focus is already where we want to go, we don't want to keep going through the candidates\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: 'nearest' });\n // viewport might have padding so scroll to its edges when focusing first/last items.\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n\n // Since this is not dependent on layout, we want to ensure this runs at the same time as\n // other effects across components. Hence why we don't call `focusSelectedItem` inside `position`.\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n\n // prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n // and close on `pointerup` outside.\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0)),\n };\n };\n const handlePointerUp = (event: PointerEvent) => {\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n // otherwise, if the event was outside the content, close.\n if (!content.contains(event.target as HTMLElement)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener('pointermove', handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp, { capture: true, once: true });\n }\n\n return () => {\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener('blur', close);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('blur', close);\n window.removeEventListener('resize', close);\n };\n }, [onOpenChange]);\n\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => (nextItem.ref.current as HTMLElement).focus());\n }\n });\n\n const itemRefCallback = React.useCallback(\n (node: SelectItemElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node: SelectItemTextElement | null, value: string, disabled: boolean) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== undefined && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n\n const SelectPosition = position === 'popper' ? SelectPopperPosition : SelectItemAlignedPosition;\n\n // Silently ignore props that are not supported by `SelectItemAlignedPosition`\n const popperContentProps =\n SelectPosition === SelectPopperPosition\n ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n }\n : {};\n\n return (\n <SelectContentProvider\n scope={__scopeSelect}\n content={content}\n viewport={viewport}\n onViewportChange={setViewport}\n itemRefCallback={itemRefCallback}\n selectedItem={selectedItem}\n onItemLeave={handleItemLeave}\n itemTextRefCallback={itemTextRefCallback}\n focusSelectedItem={focusSelectedItem}\n selectedItemText={selectedItemText}\n position={position}\n isPositioned={isPositioned}\n searchRef={searchRef}\n >\n <RemoveScroll as={Slot} allowPinchZoom>\n <FocusScope\n asChild\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapped={context.open}\n onMountAutoFocus={(event) => {\n // we prevent open autofocus because we manually focus the selected item\n event.preventDefault();\n }}\n onUnmountAutoFocus={composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n })}\n >\n <DismissableLayer\n asChild\n disableOutsidePointerEvents\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n // When focus is trapped, a focusout event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={(event) => event.preventDefault()}\n onDismiss={() => context.onOpenChange(false)}\n >\n <SelectPosition\n role=\"listbox\"\n id={context.contentId}\n data-state={context.open ? 'open' : 'closed'}\n dir={context.dir}\n onContextMenu={(event) => event.preventDefault()}\n {...contentProps}\n {...popperContentProps}\n onPlaced={() => setIsPositioned(true)}\n ref={composedRefs}\n style={{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n ...contentProps.style,\n }}\n onKeyDown={composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab') event.preventDefault();\n\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current!);\n\n if (['ArrowUp', 'End'].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as SelectItemElement;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n\n /**\n * Imperative focus during keydown is risky so we prevent React's batching updates\n * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332\n */\n setTimeout(() => focusFirst(candidateNodes));\n\n event.preventDefault();\n }\n })}\n />\n </DismissableLayer>\n </FocusScope>\n </RemoveScroll>\n </SelectContentProvider>\n );\n }\n);\n\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemAlignedPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_ALIGNED_POSITION_NAME = 'SelectItemAlignedPosition';\n\ntype SelectItemAlignedPositionElement = React.ComponentRef<typeof Primitive.div>;\ninterface SelectItemAlignedPositionProps extends PrimitiveDivProps, SelectPopperPrivateProps {}\n\nconst SelectItemAlignedPosition = React.forwardRef<\n SelectItemAlignedPositionElement,\n SelectItemAlignedPositionProps\n>((props: ScopedProps<SelectItemAlignedPositionProps>, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState<HTMLDivElement | null>(null);\n const [content, setContent] = React.useState<SelectItemAlignedPositionElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (\n context.trigger &&\n context.valueNode &&\n contentWrapper &&\n content &&\n viewport &&\n selectedItem &&\n selectedItemText\n ) {\n const triggerRect = context.trigger.getBoundingClientRect();\n\n // -----------------------------------------------------------------------------------------\n // Horizontal positioning\n // -----------------------------------------------------------------------------------------\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n\n if (context.dir !== 'rtl') {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth),\n ]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.left = clampedLeft + 'px';\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth),\n ]);\n\n contentWrapper.style.minWidth = minContentWidth + 'px';\n contentWrapper.style.right = clampedRight + 'px';\n }\n\n // -----------------------------------------------------------------------------------------\n // Vertical positioning\n // -----------------------------------------------------------------------------------------\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; // prettier-ignore\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n\n if (willAlignWithoutTopOverflow) {\n const isLastItem =\n items.length > 0 && selectedItem === items[items.length - 1]!.ref.current;\n contentWrapper.style.bottom = 0 + 'px';\n const viewportOffsetBottom =\n content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight +\n // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) +\n viewportOffsetBottom +\n contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + 'px';\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0]!.ref.current;\n contentWrapper.style.top = 0 + 'px';\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth +\n viewport.offsetTop +\n // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) +\n selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + 'px';\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + 'px';\n contentWrapper.style.maxHeight = availableHeight + 'px';\n // -----------------------------------------------------------------------------------------\n\n onPlaced?.();\n\n // we don't want the initial scroll position adjustment to trigger \"expand on scroll\"\n // so we explicitly turn it on only after they've registered.\n requestAnimationFrame(() => (shouldExpandOnScrollRef.current = true));\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced,\n ]);\n\n useLayoutEffect(() => position(), [position]);\n\n // copy z-index from content to wrapper\n const [contentZIndex, setContentZIndex] = React.useState<string>();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n\n // When the viewport becomes scrollable at the top, the scroll up button will mount.\n // Because it is part of the normal flow, it will push down the viewport, thus throwing our\n // trigger => selectedItem alignment off by the amount the viewport was pushed down.\n // We wait for this to happen and then re-run the positining logic one more time to account for it.\n const handleScrollButtonChange = React.useCallback(\n (node: SelectScrollButtonImplElement | null) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n\n return (\n <SelectViewportProvider\n scope={__scopeSelect}\n contentWrapper={contentWrapper}\n shouldExpandOnScrollRef={shouldExpandOnScrollRef}\n onScrollButtonChange={handleScrollButtonChange}\n >\n <div\n ref={setContentWrapper}\n style={{\n display: 'flex',\n flexDirection: 'column',\n position: 'fixed',\n zIndex: contentZIndex,\n }}\n >\n <Primitive.div\n {...popperProps}\n ref={composedRefs}\n style={{\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: 'border-box',\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: '100%',\n ...popperProps.style,\n }}\n />\n </div>\n </SelectViewportProvider>\n );\n});\n\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectPopperPosition\n * -----------------------------------------------------------------------------------------------*/\n\nconst POPPER_POSITION_NAME = 'SelectPopperPosition';\n\ntype SelectPopperPositionElement = React.ComponentRef<typeof PopperPrimitive.Content>;\ntype PopperContentProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Content>;\ninterface SelectPopperPositionProps extends PopperContentProps, SelectPopperPrivateProps {}\n\nconst SelectPopperPosition = React.forwardRef<\n SelectPopperPositionElement,\n SelectPopperPositionProps\n>((props: ScopedProps<SelectPopperPositionProps>, forwardedRef) => {\n const {\n __scopeSelect,\n align = 'start',\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n\n return (\n <PopperPrimitive.Content\n {...popperScope}\n {...popperProps}\n ref={forwardedRef}\n align={align}\n collisionPadding={collisionPadding}\n style={{\n // Ensure border-box for floating-ui calculations\n boxSizing: 'border-box',\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n '--radix-select-content-transform-origin': 'var(--radix-popper-transform-origin)',\n '--radix-select-content-available-width': 'var(--radix-popper-available-width)',\n '--radix-select-content-available-height': 'var(--radix-popper-available-height)',\n '--radix-select-trigger-width': 'var(--radix-popper-anchor-width)',\n '--radix-select-trigger-height': 'var(--radix-popper-anchor-height)',\n },\n }}\n />\n );\n});\n\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectViewport\n * -----------------------------------------------------------------------------------------------*/\n\ntype SelectViewportContextValue = {\n contentWrapper?: HTMLDivElement | null;\n shouldExpandOnScrollRef?: React.RefObject<boolean>;\n onScrollButtonChange?: (node: SelectScrollButtonImplElement | null) => void;\n};\n\nconst [SelectViewportProvider, useSelectViewportContext] =\n createSelectContext<SelectViewportContextValue>(CONTENT_NAME, {});\n\nconst VIEWPORT_NAME = 'SelectViewport';\n\ntype SelectViewportElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface SelectViewportProps extends PrimitiveDivProps {\n nonce?: string;\n}\n\nconst SelectViewport = React.forwardRef<SelectViewportElement, SelectViewportProps>(\n (props: ScopedProps<SelectViewportProps>, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return (\n <>\n {/* Hide scrollbars cross-browser and enable momentum scroll for touch devices */}\n <style\n dangerouslySetInnerHTML={{\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`,\n }}\n nonce={nonce}\n />\n <Collection.Slot scope={__scopeSelect}>\n <Primitive.div\n data-radix-select-viewport=\"\"\n role=\"presentation\"\n {...viewportProps}\n ref={composedRefs}\n style={{\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: 'relative',\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: 'hidden auto',\n ...viewportProps.style,\n }}\n onScroll={composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n\n contentWrapper.style.height = clampedNextHeight + 'px';\n if (contentWrapper.style.bottom === '0px') {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n // ensure the content stays pinned to the bottom\n contentWrapper.style.justifyContent = 'flex-end';\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })}\n />\n </Collection.Slot>\n </>\n );\n }\n);\n\nSelectViewport.displayName = VIEWPORT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectGroup\n * -----------------------------------------------------------------------------------------------*/\n\nconst GROUP_NAME = 'SelectGroup';\n\ntype SelectGroupContextValue = { id: string };\n\nconst [SelectGroupContextProvider, useSelectGroupContext] =\n createSelectContext<SelectGroupContextValue>(GROUP_NAME);\n\ntype SelectGroupElement = React.ComponentRef<typeof Primitive.div>;\ninterface SelectGroupProps extends PrimitiveDivProps {}\n\nconst SelectGroup = React.forwardRef<SelectGroupElement, SelectGroupProps>(\n (props: ScopedProps<SelectGroupProps>, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return (\n <SelectGroupContextProvider scope={__scopeSelect} id={groupId}>\n <Primitive.div role=\"group\" aria-labelledby={groupId} {...groupProps} ref={forwardedRef} />\n </SelectGroupContextProvider>\n );\n }\n);\n\nSelectGroup.displayName = GROUP_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectLabel\n * -----------------------------------------------------------------------------------------------*/\n\nconst LABEL_NAME = 'SelectLabel';\n\ntype SelectLabelElement = React.ComponentRef<typeof Primitive.div>;\ninterface SelectLabelProps extends PrimitiveDivProps {}\n\nconst SelectLabel = React.forwardRef<SelectLabelElement, SelectLabelProps>(\n (props: ScopedProps<SelectLabelProps>, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return <Primitive.div id={groupContext.id} {...labelProps} ref={forwardedRef} />;\n }\n);\n\nSelectLabel.displayName = LABEL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItem\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_NAME = 'SelectItem';\n\ntype SelectItemContextValue = {\n value: string;\n disabled: boolean;\n textId: string;\n isSelected: boolean;\n onItemTextChange(node: SelectItemTextElement | null): void;\n};\n\nconst [SelectItemContextProvider, useSelectItemContext] =\n createSelectContext<SelectItemContextValue>(ITEM_NAME);\n\ntype SelectItemElement = React.ComponentRef<typeof Primitive.div>;\ninterface SelectItemProps extends PrimitiveDivProps {\n value: string;\n disabled?: boolean;\n textValue?: string;\n}\n\nconst SelectItem = React.forwardRef<SelectItemElement, SelectItemProps>(\n (props: ScopedProps<SelectItemProps>, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? '');\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, (node) =>\n contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n const pointerTypeRef = React.useRef<React.PointerEvent['pointerType']>('touch');\n\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n\n if (value === '') {\n throw new Error(\n 'A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.'\n );\n }\n\n return (\n <SelectItemContextProvider\n scope={__scopeSelect}\n value={value}\n disabled={disabled}\n textId={textId}\n isSelected={isSelected}\n onItemTextChange={React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? '').trim());\n }, [])}\n >\n <Collection.ItemSlot\n scope={__scopeSelect}\n value={value}\n disabled={disabled}\n textValue={textValue}\n >\n <Primitive.div\n role=\"option\"\n aria-labelledby={textId}\n data-highlighted={isFocused ? '' : undefined}\n // `isFocused` caveat fixes stuttering in VoiceOver\n aria-selected={isSelected && isFocused}\n data-state={isSelected ? 'checked' : 'unchecked'}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n tabIndex={disabled ? undefined : -1}\n {...itemProps}\n ref={composedRefs}\n onFocus={composeEventHandlers(itemProps.onFocus, () => setIsFocused(true))}\n onBlur={composeEventHandlers(itemProps.onBlur, () => setIsFocused(false))}\n onClick={composeEventHandlers(itemProps.onClick, () => {\n // Open on click when using a touch or pen device\n if (pointerTypeRef.current !== 'mouse') handleSelect();\n })}\n onPointerUp={composeEventHandlers(itemProps.onPointerUp, () => {\n // Using a mouse you should be able to do pointer down, move through\n // the list, and release the pointer over the item to select it.\n if (pointerTypeRef.current === 'mouse') handleSelect();\n })}\n onPointerDown={composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n })}\n onPointerMove={composeEventHandlers(itemProps.onPointerMove, (event) => {\n // Remember pointer type when sliding over to this item from another one\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === 'mouse') {\n // even though safari doesn't support this option, it's acceptable\n // as it only means it might scroll a few pixels when using the pointer.\n event.currentTarget.focus({ preventScroll: true });\n }\n })}\n onPointerLeave={composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n })}\n onKeyDown={composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== '';\n if (isTypingAhead && event.key === ' ') return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n // prevent page scroll if using the space key to select an item\n if (event.key === ' ') event.preventDefault();\n })}\n />\n </Collection.ItemSlot>\n </SelectItemContextProvider>\n );\n }\n);\n\nSelectItem.displayName = ITEM_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemText\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_TEXT_NAME = 'SelectItemText';\n\ntype SelectItemTextElement = React.ComponentRef<typeof Primitive.span>;\ninterface SelectItemTextProps extends PrimitiveSpanProps {}\n\nconst SelectItemText = React.forwardRef<SelectItemTextElement, SelectItemTextProps>(\n (props: ScopedProps<SelectItemTextProps>, forwardedRef) => {\n // We ignore `className` and `style` as this part shouldn't be styled.\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState<SelectItemTextElement | null>(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => (\n <option key={itemContext.value} value={itemContext.value} disabled={itemContext.disabled}>\n {textContent}\n </option>\n ),\n [itemContext.disabled, itemContext.value, textContent]\n );\n\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n\n return (\n <>\n <Primitive.span id={itemContext.textId} {...itemTextProps} ref={composedRefs} />\n\n {/* Portal the select item text into the trigger value node */}\n {itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren\n ? ReactDOM.createPortal(itemTextProps.children, context.valueNode)\n : null}\n </>\n );\n }\n);\n\nSelectItemText.displayName = ITEM_TEXT_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectItemIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst ITEM_INDICATOR_NAME = 'SelectItemIndicator';\n\ntype SelectItemIndicatorElement = React.ComponentRef<typeof Primitive.span>;\ninterface SelectItemIndicatorProps extends PrimitiveSpanProps {}\n\nconst SelectItemIndicator = React.forwardRef<SelectItemIndicatorElement, SelectItemIndicatorProps>(\n (props: ScopedProps<SelectItemIndicatorProps>, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? (\n <Primitive.span aria-hidden {...itemIndicatorProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollUpButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton';\n\ntype SelectScrollUpButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollUpButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollUpButton = React.forwardRef<\n SelectScrollUpButtonElement,\n SelectScrollUpButtonProps\n>((props: ScopedProps<SelectScrollUpButtonProps>, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const canScrollUp = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollUp ? (\n <SelectScrollButtonImpl\n {...props}\n ref={composedRefs}\n onAutoScroll={() => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollDownButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton';\n\ntype SelectScrollDownButtonElement = SelectScrollButtonImplElement;\ninterface SelectScrollDownButtonProps extends Omit<SelectScrollButtonImplProps, 'onAutoScroll'> {}\n\nconst SelectScrollDownButton = React.forwardRef<\n SelectScrollDownButtonElement,\n SelectScrollDownButtonProps\n>((props: ScopedProps<SelectScrollDownButtonProps>, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n const viewport = contentContext.viewport;\n function handleScroll() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n // we use Math.ceil here because if the UI is zoomed-in\n // `scrollTop` is not always reported as an integer\n const canScrollDown = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown);\n }\n handleScroll();\n viewport.addEventListener('scroll', handleScroll);\n return () => viewport.removeEventListener('scroll', handleScroll);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n\n return canScrollDown ? (\n <SelectScrollButtonImpl\n {...props}\n ref={composedRefs}\n onAutoScroll={() => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }}\n />\n ) : null;\n});\n\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\n\ntype SelectScrollButtonImplElement = React.ComponentRef<typeof Primitive.div>;\ninterface SelectScrollButtonImplProps extends PrimitiveDivProps {\n onAutoScroll(): void;\n}\n\nconst SelectScrollButtonImpl = React.forwardRef<\n SelectScrollButtonImplElement,\n SelectScrollButtonImplProps\n>((props: ScopedProps<SelectScrollButtonImplProps>, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext('SelectScrollButton', __scopeSelect);\n const autoScrollTimerRef = React.useRef<number | null>(null);\n const getItems = useCollection(__scopeSelect);\n\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n\n // When the viewport becomes scrollable on either side, the relevant scroll button will mount.\n // Because it is part of the normal flow, it will push down (top button) or shrink (bottom button)\n // the viewport, potentially causing the active item to now be partially out of view.\n // We re-run the `scrollIntoView` logic to make sure it stays within the viewport.\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: 'nearest' });\n }, [getItems]);\n\n return (\n <Primitive.div\n aria-hidden\n {...scrollIndicatorProps}\n ref={forwardedRef}\n style={{ flexShrink: 0, ...scrollIndicatorProps.style }}\n onPointerDown={composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerMove={composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n })}\n onPointerLeave={composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })}\n />\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * SelectSeparator\n * -----------------------------------------------------------------------------------------------*/\n\nconst SEPARATOR_NAME = 'SelectSeparator';\n\ntype SelectSeparatorElement = React.ComponentRef<typeof Primitive.div>;\ninterface SelectSeparatorProps extends PrimitiveDivProps {}\n\nconst SelectSeparator = React.forwardRef<SelectSeparatorElement, SelectSeparatorProps>(\n (props: ScopedProps<SelectSeparatorProps>, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return <Primitive.div aria-hidden {...separatorProps} ref={forwardedRef} />;\n }\n);\n\nSelectSeparator.displayName = SEPARATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'SelectArrow';\n\ntype SelectArrowElement = React.ComponentRef<typeof PopperPrimitive.Arrow>;\ntype PopperArrowProps = React.ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>;\ninterface SelectArrowProps extends PopperArrowProps {}\n\nconst SelectArrow = React.forwardRef<SelectArrowElement, SelectArrowProps>(\n (props: ScopedProps<SelectArrowProps>, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === 'popper' ? (\n <PopperPrimitive.Arrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n ) : null;\n }\n);\n\nSelectArrow.displayName = ARROW_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectBubbleInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst BUBBLE_INPUT_NAME = 'SelectBubbleInput';\n\ntype InputProps = React.ComponentPropsWithoutRef<typeof Primitive.select>;\ninterface SwitchBubbleInputProps extends InputProps {}\n\nconst SelectBubbleInput = React.forwardRef<HTMLSelectElement, SwitchBubbleInputProps>(\n ({ __scopeSelect, value, ...props }: ScopedProps<SwitchBubbleInputProps>, forwardedRef) => {\n const ref = React.useRef<HTMLSelectElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n\n // Bubble value change to parents (e.g form change event)\n React.useEffect(() => {\n const select = ref.current;\n if (!select) return;\n\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n 'value'\n ) as PropertyDescriptor;\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event('change', { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n\n /**\n * We purposefully use a `select` here to support form autofill as much as\n * possible.\n *\n * We purposefully do not add the `value` attribute here to allow the value\n * to be set programmatically and bubble to any parent form `onChange`\n * event. Adding the `value` will cause React to consider the programmatic\n * dispatch a duplicate and it will get swallowed.\n *\n * We use visually hidden styles rather than `display: \"none\"` because\n * Safari autofill won't work otherwise.\n */\n return (\n <Primitive.select\n {...props}\n style={{ ...VISUALLY_HIDDEN_STYLES, ...props.style }}\n ref={composedRefs}\n defaultValue={value}\n />\n );\n }\n);\n\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction shouldShowPlaceholder(value?: string) {\n return value === '' || value === undefined;\n}\n\nfunction useTypeaheadSearch(onSearchChange: (search: string) => void) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef('');\n const timerRef = React.useRef(0);\n\n const handleTypeaheadSearch = React.useCallback(\n (key: string) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n\n (function updateSearch(value: string) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n // Reset `searchRef` 1 second after it was last updated\n if (value !== '') timerRef.current = window.setTimeout(() => updateSearch(''), 1000);\n })(search);\n },\n [handleSearchChange]\n );\n\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = '';\n window.clearTimeout(timerRef.current);\n }, []);\n\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n\n return [searchRef, handleTypeaheadSearch, resetTypeahead] as const;\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in a list of items,\n * the search and the current item, and returns the next item (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through items starting with that character)\n *\n * We also reorder the items by wrapping the array around the current item.\n * This is so we always look forward from the current item, and picking the first\n * item will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current item from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current item still matches.\n */\nfunction findNextItem<T extends { textValue: string }>(\n items: T[],\n search: string,\n currentItem?: T\n) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0]! : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find((item) =>\n item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : undefined;\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>((_, index) => array[(startIndex + index) % array.length]!);\n}\n\nconst Root = Select;\nconst Trigger = SelectTrigger;\nconst Value = SelectValue;\nconst Icon = SelectIcon;\nconst Portal = SelectPortal;\nconst Content = SelectContent;\nconst Viewport = SelectViewport;\nconst Group = SelectGroup;\nconst Label = SelectLabel;\nconst Item = SelectItem;\nconst ItemText = SelectItemText;\nconst ItemIndicator = SelectItemIndicator;\nconst ScrollUpButton = SelectScrollUpButton;\nconst ScrollDownButton = SelectScrollDownButton;\nconst Separator = SelectSeparator;\nconst Arrow = SelectArrow;\n\nexport {\n createSelectScope,\n //\n Select,\n SelectTrigger,\n SelectValue,\n SelectIcon,\n SelectPortal,\n SelectContent,\n SelectViewport,\n SelectGroup,\n SelectLabel,\n SelectItem,\n SelectItemText,\n SelectItemIndicator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n SelectSeparator,\n SelectArrow,\n //\n Root,\n Trigger,\n Value,\n Icon,\n Portal,\n Content,\n Viewport,\n Group,\n Label,\n Item,\n ItemText,\n ItemIndicator,\n ScrollUpButton,\n ScrollDownButton,\n Separator,\n Arrow,\n};\nexport type {\n SelectProps,\n SelectTriggerProps,\n SelectValueProps,\n SelectIconProps,\n SelectPortalProps,\n SelectContentProps,\n SelectViewportProps,\n SelectGroupProps,\n SelectLabelProps,\n SelectItemProps,\n SelectItemTextProps,\n SelectItemIndicatorProps,\n SelectScrollUpButtonProps,\n SelectScrollDownButtonProps,\n SelectSeparatorProps,\n SelectArrowProps,\n};\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm18 15-6-6-6 6', key: '153udz' }]];\n\n/**\n * @component @name ChevronUp\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTggMTUtNi02LTYgNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevron-up\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronUp = createLucideIcon('chevron-up', __iconNode);\n\nexport default ChevronUp;\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Switch\n * -----------------------------------------------------------------------------------------------*/\n\nconst SWITCH_NAME = 'Switch';\n\ntype ScopedProps<P> = P & { __scopeSwitch?: Scope };\nconst [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\n\ntype SwitchContextValue = { checked: boolean; disabled?: boolean };\nconst [SwitchProvider, useSwitchContext] = createSwitchContext<SwitchContextValue>(SWITCH_NAME);\n\ntype SwitchElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface SwitchProps extends PrimitiveButtonProps {\n checked?: boolean;\n defaultChecked?: boolean;\n required?: boolean;\n onCheckedChange?(checked: boolean): void;\n}\n\nconst Switch = React.forwardRef<SwitchElement, SwitchProps>(\n (props: ScopedProps<SwitchProps>, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = 'on',\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState<HTMLButtonElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n // We set this to true by default so that events bubble to forms without JS (SSR)\n const isFormControl = button ? form || !!button.closest('form') : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME,\n });\n\n return (\n <SwitchProvider scope={__scopeSwitch} checked={checked} disabled={disabled}>\n <Primitive.button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-required={required}\n data-state={getState(checked)}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n value={value}\n {...switchProps}\n ref={composedRefs}\n onClick={composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if switch is in a form, stop propagation from the button so that we only propagate\n // one click event (from the input). We propagate changes from an input so that native\n // form validation works and form events reflect switch updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n {isFormControl && (\n <SwitchBubbleInput\n control={button}\n bubbles={!hasConsumerStoppedPropagationRef.current}\n name={name}\n value={value}\n checked={checked}\n required={required}\n disabled={disabled}\n form={form}\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n style={{ transform: 'translateX(-100%)' }}\n />\n )}\n </SwitchProvider>\n );\n }\n);\n\nSwitch.displayName = SWITCH_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SwitchThumb\n * -----------------------------------------------------------------------------------------------*/\n\nconst THUMB_NAME = 'SwitchThumb';\n\ntype SwitchThumbElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface SwitchThumbProps extends PrimitiveSpanProps {}\n\nconst SwitchThumb = React.forwardRef<SwitchThumbElement, SwitchThumbProps>(\n (props: ScopedProps<SwitchThumbProps>, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return (\n <Primitive.span\n data-state={getState(context.checked)}\n data-disabled={context.disabled ? '' : undefined}\n {...thumbProps}\n ref={forwardedRef}\n />\n );\n }\n);\n\nSwitchThumb.displayName = THUMB_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * SwitchBubbleInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst BUBBLE_INPUT_NAME = 'SwitchBubbleInput';\n\ntype InputProps = React.ComponentPropsWithoutRef<typeof Primitive.input>;\ninterface SwitchBubbleInputProps extends Omit<InputProps, 'checked'> {\n checked: boolean;\n control: HTMLElement | null;\n bubbles: boolean;\n}\n\nconst SwitchBubbleInput = React.forwardRef<HTMLInputElement, SwitchBubbleInputProps>(\n (\n {\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }: ScopedProps<SwitchBubbleInputProps>,\n forwardedRef\n ) => {\n const ref = React.useRef<HTMLInputElement>(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n 'checked'\n ) as PropertyDescriptor;\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n\n return (\n <input\n type=\"checkbox\"\n aria-hidden\n defaultChecked={checked}\n {...props}\n tabIndex={-1}\n ref={composedRefs}\n style={{\n ...props.style,\n ...controlSize,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0,\n margin: 0,\n }}\n />\n );\n }\n);\n\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(checked: boolean) {\n return checked ? 'checked' : 'unchecked';\n}\n\nconst Root = Switch;\nconst Thumb = SwitchThumb;\n\nexport {\n createSwitchScope,\n //\n Switch,\n SwitchThumb,\n //\n Root,\n Thumb,\n};\nexport type { SwitchProps, SwitchThumbProps };\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n )\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return (\n <thead\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n )\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n )\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TableCaption({\n className,\n ...props\n}: React.ComponentProps<\"caption\">) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n}\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { usePrevious } from '@radix-ui/react-use-previous';\nimport { useSize } from '@radix-ui/react-use-size';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\n\nimport type { Scope } from '@radix-ui/react-context';\n\nconst CHECKBOX_NAME = 'Checkbox';\n\ntype ScopedProps<P> = P & { __scopeCheckbox?: Scope };\nconst [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\n\ntype CheckedState = boolean | 'indeterminate';\n\ntype CheckboxContextValue<State extends CheckedState | boolean = CheckedState> = {\n checked: State | boolean;\n setChecked: React.Dispatch<React.SetStateAction<State | boolean>>;\n disabled: boolean | undefined;\n control: HTMLButtonElement | null;\n setControl: React.Dispatch<React.SetStateAction<HTMLButtonElement | null>>;\n name: string | undefined;\n form: string | undefined;\n value: string | number | readonly string[];\n hasConsumerStoppedPropagationRef: React.RefObject<boolean>;\n required: boolean | undefined;\n defaultChecked: boolean | undefined;\n isFormControl: boolean;\n bubbleInput: HTMLInputElement | null;\n setBubbleInput: React.Dispatch<React.SetStateAction<HTMLInputElement | null>>;\n};\n\nconst [CheckboxProviderImpl, useCheckboxContext] =\n createCheckboxContext<CheckboxContextValue>(CHECKBOX_NAME);\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CheckboxProviderProps<State extends CheckedState = CheckedState> {\n checked?: State | boolean;\n defaultChecked?: State | boolean;\n required?: boolean;\n onCheckedChange?(checked: State | boolean): void;\n name?: string;\n form?: string;\n disabled?: boolean;\n value?: string | number | readonly string[];\n children?: React.ReactNode;\n}\n\nfunction CheckboxProvider<State extends CheckedState = CheckedState>(\n props: ScopedProps<CheckboxProviderProps<State>>\n) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = 'on',\n // @ts-expect-error\n internal_do_not_use_render,\n } = props;\n\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME,\n });\n const [control, setControl] = React.useState<HTMLButtonElement | null>(null);\n const [bubbleInput, setBubbleInput] = React.useState<HTMLInputElement | null>(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control\n ? !!form || !!control.closest('form')\n : // We set this to true by default so that events bubble to forms without JS (SSR)\n true;\n\n const context: CheckboxContextValue<State> = {\n checked: checked,\n disabled: disabled,\n setChecked: setChecked,\n control: control,\n setControl: setControl,\n name: name,\n form: form,\n value: value,\n hasConsumerStoppedPropagationRef: hasConsumerStoppedPropagationRef,\n required: required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl: isFormControl,\n bubbleInput,\n setBubbleInput,\n };\n\n return (\n <CheckboxProviderImpl\n scope={__scopeCheckbox}\n {...(context as unknown as CheckboxContextValue<CheckedState>)}\n >\n {isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children}\n </CheckboxProviderImpl>\n );\n}\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'CheckboxTrigger';\n\ninterface CheckboxTriggerProps\n extends Omit<\n React.ComponentPropsWithoutRef<typeof Primitive.button>,\n keyof CheckboxProviderProps\n > {\n children?: React.ReactNode;\n}\n\nconst CheckboxTrigger = React.forwardRef<HTMLButtonElement, CheckboxTriggerProps>(\n (\n { __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }: ScopedProps<CheckboxTriggerProps>,\n forwardedRef\n ) => {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput,\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener('reset', reset);\n return () => form.removeEventListener('reset', reset);\n }\n }, [control, setChecked]);\n\n return (\n <Primitive.button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={isIndeterminate(checked) ? 'mixed' : checked}\n aria-required={required}\n data-state={getState(checked)}\n data-disabled={disabled ? '' : undefined}\n disabled={disabled}\n value={value}\n {...checkboxProps}\n ref={composedRefs}\n onKeyDown={composeEventHandlers(onKeyDown, (event) => {\n // According to WAI ARIA, Checkboxes don't activate on enter keypress\n if (event.key === 'Enter') event.preventDefault();\n })}\n onClick={composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => (isIndeterminate(prevChecked) ? true : !prevChecked));\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n // if checkbox has a bubble input and is a form control, stop\n // propagation from the button so that we only propagate one click\n // event (from the input). We propagate changes from an input so\n // that native form validation works and form events reflect\n // checkbox updates.\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })}\n />\n );\n }\n);\n\nCheckboxTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Checkbox\n * -----------------------------------------------------------------------------------------------*/\n\ntype CheckboxElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface CheckboxProps extends Omit<PrimitiveButtonProps, 'checked' | 'defaultChecked'> {\n checked?: CheckedState;\n defaultChecked?: CheckedState;\n required?: boolean;\n onCheckedChange?(checked: CheckedState): void;\n}\n\nconst Checkbox = React.forwardRef<CheckboxElement, CheckboxProps>(\n (props: ScopedProps<CheckboxProps>, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n\n return (\n <CheckboxProvider\n __scopeCheckbox={__scopeCheckbox}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n required={required}\n onCheckedChange={onCheckedChange}\n name={name}\n form={form}\n value={value}\n // @ts-expect-error\n internal_do_not_use_render={({ isFormControl }: CheckboxContextValue) => (\n <>\n <CheckboxTrigger\n {...checkboxProps}\n ref={forwardedRef}\n // @ts-expect-error\n __scopeCheckbox={__scopeCheckbox}\n />\n {isFormControl && (\n <CheckboxBubbleInput\n // @ts-expect-error\n __scopeCheckbox={__scopeCheckbox}\n />\n )}\n </>\n )}\n />\n );\n }\n);\n\nCheckbox.displayName = CHECKBOX_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxIndicator\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDICATOR_NAME = 'CheckboxIndicator';\n\ntype CheckboxIndicatorElement = React.ComponentRef<typeof Primitive.span>;\ntype PrimitiveSpanProps = React.ComponentPropsWithoutRef<typeof Primitive.span>;\ninterface CheckboxIndicatorProps extends PrimitiveSpanProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst CheckboxIndicator = React.forwardRef<CheckboxIndicatorElement, CheckboxIndicatorProps>(\n (props: ScopedProps<CheckboxIndicatorProps>, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return (\n <Presence\n present={forceMount || isIndeterminate(context.checked) || context.checked === true}\n >\n <Primitive.span\n data-state={getState(context.checked)}\n data-disabled={context.disabled ? '' : undefined}\n {...indicatorProps}\n ref={forwardedRef}\n style={{ pointerEvents: 'none', ...props.style }}\n />\n </Presence>\n );\n }\n);\n\nCheckboxIndicator.displayName = INDICATOR_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxBubbleInput\n * -----------------------------------------------------------------------------------------------*/\n\nconst BUBBLE_INPUT_NAME = 'CheckboxBubbleInput';\n\ntype InputProps = React.ComponentPropsWithoutRef<typeof Primitive.input>;\ninterface CheckboxBubbleInputProps extends Omit<InputProps, 'checked'> {}\n\nconst CheckboxBubbleInput = React.forwardRef<HTMLInputElement, CheckboxBubbleInputProps>(\n ({ __scopeCheckbox, ...props }: ScopedProps<CheckboxBubbleInputProps>, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput,\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n\n // Bubble checked change to parents (e.g form change event)\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n 'checked'\n ) as PropertyDescriptor;\n const setChecked = descriptor.set;\n\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event('click', { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return (\n <Primitive.input\n type=\"checkbox\"\n aria-hidden\n defaultChecked={defaultChecked ?? defaultCheckedRef.current}\n required={required}\n disabled={disabled}\n name={name}\n value={value}\n form={form}\n {...props}\n tabIndex={-1}\n ref={composedRefs}\n style={{\n ...props.style,\n ...controlSize,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: 'translateX(-100%)',\n }}\n />\n );\n }\n);\n\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\n\n/* ---------------------------------------------------------------------------------------------- */\n\nfunction isFunction(value: unknown): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n\nfunction isIndeterminate(checked?: CheckedState): checked is 'indeterminate' {\n return checked === 'indeterminate';\n}\n\nfunction getState(checked: CheckedState) {\n return isIndeterminate(checked) ? 'indeterminate' : checked ? 'checked' : 'unchecked';\n}\n\nexport {\n createCheckboxScope,\n //\n Checkbox,\n CheckboxProvider,\n CheckboxTrigger,\n CheckboxIndicator,\n CheckboxBubbleInput,\n //\n Checkbox as Root,\n CheckboxProvider as Provider,\n CheckboxTrigger as Trigger,\n CheckboxIndicator as Indicator,\n CheckboxBubbleInput as BubbleInput,\n};\nexport type {\n CheckboxProps,\n CheckboxProviderProps,\n CheckboxTriggerProps,\n CheckboxIndicatorProps,\n CheckboxBubbleInputProps,\n CheckedState,\n};\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-gray-300 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-gray-900 data-[state=checked]:text-white dark:border-gray-800 dark:ring-offset-gray-950 dark:focus-visible:ring-gray-300 dark:data-[state=checked]:bg-gray-50 dark:data-[state=checked]:text-gray-900\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nexport { _arrayLikeToArray as arrayLikeToArray, _arrayWithHoles as arrayWithHoles, _defineProperty as defineProperty, _iterableToArrayLimit as iterableToArrayLimit, _nonIterableRest as nonIterableRest, _objectSpread2 as objectSpread2, _objectWithoutProperties as objectWithoutProperties, _objectWithoutPropertiesLoose as objectWithoutPropertiesLoose, _slicedToArray as slicedToArray, _unsupportedIterableToArray as unsupportedIterableToArray };\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction compose() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (x) {\n return fns.reduceRight(function (y, f) {\n return f(y);\n }, x);\n };\n}\n\nfunction curry(fn) {\n return function curried() {\n var _this = this;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return args.length >= fn.length ? fn.apply(this, args) : function () {\n for (var _len3 = arguments.length, nextArgs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n nextArgs[_key3] = arguments[_key3];\n }\n\n return curried.apply(_this, [].concat(args, nextArgs));\n };\n };\n}\n\nfunction isObject(value) {\n return {}.toString.call(value).includes('Object');\n}\n\nfunction isEmpty(obj) {\n return !Object.keys(obj).length;\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nfunction hasOwnProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nfunction validateChanges(initial, changes) {\n if (!isObject(changes)) errorHandler('changeType');\n if (Object.keys(changes).some(function (field) {\n return !hasOwnProperty(initial, field);\n })) errorHandler('changeField');\n return changes;\n}\n\nfunction validateSelector(selector) {\n if (!isFunction(selector)) errorHandler('selectorType');\n}\n\nfunction validateHandler(handler) {\n if (!(isFunction(handler) || isObject(handler))) errorHandler('handlerType');\n if (isObject(handler) && Object.values(handler).some(function (_handler) {\n return !isFunction(_handler);\n })) errorHandler('handlersType');\n}\n\nfunction validateInitial(initial) {\n if (!initial) errorHandler('initialIsRequired');\n if (!isObject(initial)) errorHandler('initialType');\n if (isEmpty(initial)) errorHandler('initialContent');\n}\n\nfunction throwError(errorMessages, type) {\n throw new Error(errorMessages[type] || errorMessages[\"default\"]);\n}\n\nvar errorMessages = {\n initialIsRequired: 'initial state is required',\n initialType: 'initial state should be an object',\n initialContent: 'initial state shouldn\\'t be an empty object',\n handlerType: 'handler should be an object or a function',\n handlersType: 'all handlers should be a functions',\n selectorType: 'selector should be a function',\n changeType: 'provided value of changes should be an object',\n changeField: 'it seams you want to change a field in the state which is not specified in the \"initial\" state',\n \"default\": 'an unknown error accured in `state-local` package'\n};\nvar errorHandler = curry(throwError)(errorMessages);\nvar validators = {\n changes: validateChanges,\n selector: validateSelector,\n handler: validateHandler,\n initial: validateInitial\n};\n\nfunction create(initial) {\n var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n validators.initial(initial);\n validators.handler(handler);\n var state = {\n current: initial\n };\n var didUpdate = curry(didStateUpdate)(state, handler);\n var update = curry(updateState)(state);\n var validate = curry(validators.changes)(initial);\n var getChanges = curry(extractChanges)(state);\n\n function getState() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function (state) {\n return state;\n };\n validators.selector(selector);\n return selector(state.current);\n }\n\n function setState(causedChanges) {\n compose(didUpdate, update, validate, getChanges)(causedChanges);\n }\n\n return [getState, setState];\n}\n\nfunction extractChanges(state, causedChanges) {\n return isFunction(causedChanges) ? causedChanges(state.current) : causedChanges;\n}\n\nfunction updateState(state, changes) {\n state.current = _objectSpread2(_objectSpread2({}, state.current), changes);\n return changes;\n}\n\nfunction didStateUpdate(state, handler, changes) {\n isFunction(handler) ? handler(state.current) : Object.keys(changes).forEach(function (field) {\n var _handler$field;\n\n return (_handler$field = handler[field]) === null || _handler$field === void 0 ? void 0 : _handler$field.call(handler, state.current[field]);\n });\n return changes;\n}\n\nvar index = {\n create: create\n};\n\nexport default index;\n","var config = {\n paths: {\n vs: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.52.2/min/vs'\n }\n};\n\nexport default config;\n","function curry(fn) {\n return function curried() {\n var _this = this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args.length >= fn.length ? fn.apply(this, args) : function () {\n for (var _len2 = arguments.length, nextArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n nextArgs[_key2] = arguments[_key2];\n }\n\n return curried.apply(_this, [].concat(args, nextArgs));\n };\n };\n}\n\nexport default curry;\n","function isObject(value) {\n return {}.toString.call(value).includes('Object');\n}\n\nexport default isObject;\n","import curry from '../utils/curry.js';\nimport isObject from '../utils/isObject.js';\n\n/**\n * validates the configuration object and informs about deprecation\n * @param {Object} config - the configuration object \n * @return {Object} config - the validated configuration object\n */\n\nfunction validateConfig(config) {\n if (!config) errorHandler('configIsRequired');\n if (!isObject(config)) errorHandler('configType');\n\n if (config.urls) {\n informAboutDeprecation();\n return {\n paths: {\n vs: config.urls.monacoBase\n }\n };\n }\n\n return config;\n}\n/**\n * logs deprecation message\n */\n\n\nfunction informAboutDeprecation() {\n console.warn(errorMessages.deprecation);\n}\n\nfunction throwError(errorMessages, type) {\n throw new Error(errorMessages[type] || errorMessages[\"default\"]);\n}\n\nvar errorMessages = {\n configIsRequired: 'the configuration object is required',\n configType: 'the configuration object should be an object',\n \"default\": 'an unknown error accured in `@monaco-editor/loader` package',\n deprecation: \"Deprecation warning!\\n You are using deprecated way of configuration.\\n\\n Instead of using\\n monaco.config({ urls: { monacoBase: '...' } })\\n use\\n monaco.config({ paths: { vs: '...' } })\\n\\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\\n \"\n};\nvar errorHandler = curry(throwError)(errorMessages);\nvar validators = {\n config: validateConfig\n};\n\nexport default validators;\nexport { errorHandler, errorMessages };\n","var compose = function compose() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (x) {\n return fns.reduceRight(function (y, f) {\n return f(y);\n }, x);\n };\n};\n\nexport default compose;\n","import { objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';\n\nfunction merge(target, source) {\n Object.keys(source).forEach(function (key) {\n if (source[key] instanceof Object) {\n if (target[key]) {\n Object.assign(source[key], merge(target[key], source[key]));\n }\n }\n });\n return _objectSpread2(_objectSpread2({}, target), source);\n}\n\nexport default merge;\n","// The source (has been changed) is https://github.com/facebook/react/issues/5465#issuecomment-157888325\nvar CANCELATION_MESSAGE = {\n type: 'cancelation',\n msg: 'operation is manually canceled'\n};\n\nfunction makeCancelable(promise) {\n var hasCanceled_ = false;\n var wrappedPromise = new Promise(function (resolve, reject) {\n promise.then(function (val) {\n return hasCanceled_ ? reject(CANCELATION_MESSAGE) : resolve(val);\n });\n promise[\"catch\"](reject);\n });\n return wrappedPromise.cancel = function () {\n return hasCanceled_ = true;\n }, wrappedPromise;\n}\n\nexport default makeCancelable;\nexport { CANCELATION_MESSAGE };\n","import { slicedToArray as _slicedToArray, objectWithoutProperties as _objectWithoutProperties } from '../_virtual/_rollupPluginBabelHelpers.js';\nimport state from 'state-local';\nimport config$1 from '../config/index.js';\nimport validators from '../validators/index.js';\nimport compose from '../utils/compose.js';\nimport merge from '../utils/deepMerge.js';\nimport makeCancelable from '../utils/makeCancelable.js';\n\n/** the local state of the module */\n\nvar _state$create = state.create({\n config: config$1,\n isInitialized: false,\n resolve: null,\n reject: null,\n monaco: null\n}),\n _state$create2 = _slicedToArray(_state$create, 2),\n getState = _state$create2[0],\n setState = _state$create2[1];\n/**\n * set the loader configuration\n * @param {Object} config - the configuration object\n */\n\n\nfunction config(globalConfig) {\n var _validators$config = validators.config(globalConfig),\n monaco = _validators$config.monaco,\n config = _objectWithoutProperties(_validators$config, [\"monaco\"]);\n\n setState(function (state) {\n return {\n config: merge(state.config, config),\n monaco: monaco\n };\n });\n}\n/**\n * handles the initialization of the monaco-editor\n * @return {Promise} - returns an instance of monaco (with a cancelable promise)\n */\n\n\nfunction init() {\n var state = getState(function (_ref) {\n var monaco = _ref.monaco,\n isInitialized = _ref.isInitialized,\n resolve = _ref.resolve;\n return {\n monaco: monaco,\n isInitialized: isInitialized,\n resolve: resolve\n };\n });\n\n if (!state.isInitialized) {\n setState({\n isInitialized: true\n });\n\n if (state.monaco) {\n state.resolve(state.monaco);\n return makeCancelable(wrapperPromise);\n }\n\n if (window.monaco && window.monaco.editor) {\n storeMonacoInstance(window.monaco);\n state.resolve(window.monaco);\n return makeCancelable(wrapperPromise);\n }\n\n compose(injectScripts, getMonacoLoaderScript)(configureLoader);\n }\n\n return makeCancelable(wrapperPromise);\n}\n/**\n * injects provided scripts into the document.body\n * @param {Object} script - an HTML script element\n * @return {Object} - the injected HTML script element\n */\n\n\nfunction injectScripts(script) {\n return document.body.appendChild(script);\n}\n/**\n * creates an HTML script element with/without provided src\n * @param {string} [src] - the source path of the script\n * @return {Object} - the created HTML script element\n */\n\n\nfunction createScript(src) {\n var script = document.createElement('script');\n return src && (script.src = src), script;\n}\n/**\n * creates an HTML script element with the monaco loader src\n * @return {Object} - the created HTML script element\n */\n\n\nfunction getMonacoLoaderScript(configureLoader) {\n var state = getState(function (_ref2) {\n var config = _ref2.config,\n reject = _ref2.reject;\n return {\n config: config,\n reject: reject\n };\n });\n var loaderScript = createScript(\"\".concat(state.config.paths.vs, \"/loader.js\"));\n\n loaderScript.onload = function () {\n return configureLoader();\n };\n\n loaderScript.onerror = state.reject;\n return loaderScript;\n}\n/**\n * configures the monaco loader\n */\n\n\nfunction configureLoader() {\n var state = getState(function (_ref3) {\n var config = _ref3.config,\n resolve = _ref3.resolve,\n reject = _ref3.reject;\n return {\n config: config,\n resolve: resolve,\n reject: reject\n };\n });\n var require = window.require;\n\n require.config(state.config);\n\n require(['vs/editor/editor.main'], function (monaco) {\n storeMonacoInstance(monaco);\n state.resolve(monaco);\n }, function (error) {\n state.reject(error);\n });\n}\n/**\n * store monaco instance in local state\n */\n\n\nfunction storeMonacoInstance(monaco) {\n if (!getState().monaco) {\n setState({\n monaco: monaco\n });\n }\n}\n/**\n * internal helper function\n * extracts stored monaco instance\n * @return {Object|null} - the monaco instance\n */\n\n\nfunction __getMonacoInstance() {\n return getState(function (_ref4) {\n var monaco = _ref4.monaco;\n return monaco;\n });\n}\n\nvar wrapperPromise = new Promise(function (resolve, reject) {\n return setState({\n resolve: resolve,\n reject: reject\n });\n});\nvar loader = {\n config: config,\n init: init,\n __getMonacoInstance: __getMonacoInstance\n};\n\nexport default loader;\n","import loader from './loader/index.js';\nexport { default } from './loader/index.js';\n","import loader from '@monaco-editor/loader';\nexport { loader };\n\nimport DiffEditor from './DiffEditor';\nexport * from './DiffEditor/types';\nexport { DiffEditor };\n\nimport useMonaco from './hooks/useMonaco';\nexport { useMonaco };\n\nimport Editor from './Editor';\nexport * from './Editor/types';\nexport { Editor };\nexport default Editor;\n\n// Monaco\nimport type * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\nexport type Monaco = typeof monaco;\n\n// Default themes\nexport type Theme = 'vs-dark' | 'light';\n","import { memo } from 'react';\n\nimport DiffEditor from './DiffEditor';\n\nexport * from './types';\n\nexport default memo(DiffEditor);\n","'use client';\n\nimport React, { useState, useRef, useCallback, useEffect } from 'react';\nimport loader from '@monaco-editor/loader';\n\nimport MonacoContainer from '../MonacoContainer';\nimport useMount from '../hooks/useMount';\nimport useUpdate from '../hooks/useUpdate';\nimport { noop, getOrCreateModel } from '../utils';\nimport { type DiffEditorProps, type MonacoDiffEditor } from './types';\nimport { type Monaco } from '..';\n\nfunction DiffEditor({\n original,\n modified,\n language,\n originalLanguage,\n modifiedLanguage,\n originalModelPath,\n modifiedModelPath,\n keepCurrentOriginalModel = false,\n keepCurrentModifiedModel = false,\n theme = 'light',\n loading = 'Loading...',\n options = {},\n height = '100%',\n width = '100%',\n className,\n wrapperProps = {},\n beforeMount = noop,\n onMount = noop,\n}: DiffEditorProps) {\n const [isEditorReady, setIsEditorReady] = useState(false);\n const [isMonacoMounting, setIsMonacoMounting] = useState(true);\n const editorRef = useRef<MonacoDiffEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const onMountRef = useRef(onMount);\n const beforeMountRef = useRef(beforeMount);\n const preventCreation = useRef(false);\n\n useMount(() => {\n const cancelable = loader.init();\n\n cancelable\n .then((monaco) => (monacoRef.current = monaco) && setIsMonacoMounting(false))\n .catch(\n (error) =>\n error?.type !== 'cancelation' && console.error('Monaco initialization: error:', error),\n );\n\n return () => (editorRef.current ? disposeEditor() : cancelable.cancel());\n });\n\n useUpdate(\n () => {\n if (editorRef.current && monacoRef.current) {\n const originalEditor = editorRef.current.getOriginalEditor();\n const model = getOrCreateModel(\n monacoRef.current,\n original || '',\n originalLanguage || language || 'text',\n originalModelPath || '',\n );\n\n if (model !== originalEditor.getModel()) {\n originalEditor.setModel(model);\n }\n }\n },\n [originalModelPath],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n if (editorRef.current && monacoRef.current) {\n const modifiedEditor = editorRef.current.getModifiedEditor();\n const model = getOrCreateModel(\n monacoRef.current,\n modified || '',\n modifiedLanguage || language || 'text',\n modifiedModelPath || '',\n );\n\n if (model !== modifiedEditor.getModel()) {\n modifiedEditor.setModel(model);\n }\n }\n },\n [modifiedModelPath],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n const modifiedEditor = editorRef.current!.getModifiedEditor();\n if (modifiedEditor.getOption(monacoRef.current!.editor.EditorOption.readOnly)) {\n modifiedEditor.setValue(modified || '');\n } else {\n if (modified !== modifiedEditor.getValue()) {\n modifiedEditor.executeEdits('', [\n {\n range: modifiedEditor.getModel()!.getFullModelRange(),\n text: modified || '',\n forceMoveMarkers: true,\n },\n ]);\n\n modifiedEditor.pushUndoStop();\n }\n }\n },\n [modified],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n editorRef.current?.getModel()?.original.setValue(original || '');\n },\n [original],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n const { original, modified } = editorRef.current!.getModel()!;\n\n monacoRef.current!.editor.setModelLanguage(original, originalLanguage || language || 'text');\n monacoRef.current!.editor.setModelLanguage(modified, modifiedLanguage || language || 'text');\n },\n [language, originalLanguage, modifiedLanguage],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n monacoRef.current?.editor.setTheme(theme);\n },\n [theme],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n editorRef.current?.updateOptions(options);\n },\n [options],\n isEditorReady,\n );\n\n const setModels = useCallback(() => {\n if (!monacoRef.current) return;\n beforeMountRef.current(monacoRef.current);\n const originalModel = getOrCreateModel(\n monacoRef.current,\n original || '',\n originalLanguage || language || 'text',\n originalModelPath || '',\n );\n\n const modifiedModel = getOrCreateModel(\n monacoRef.current,\n modified || '',\n modifiedLanguage || language || 'text',\n modifiedModelPath || '',\n );\n\n editorRef.current?.setModel({\n original: originalModel,\n modified: modifiedModel,\n });\n }, [\n language,\n modified,\n modifiedLanguage,\n original,\n originalLanguage,\n originalModelPath,\n modifiedModelPath,\n ]);\n\n const createEditor = useCallback(() => {\n if (!preventCreation.current && containerRef.current) {\n editorRef.current = monacoRef.current!.editor.createDiffEditor(containerRef.current, {\n automaticLayout: true,\n ...options,\n });\n\n setModels();\n\n monacoRef.current?.editor.setTheme(theme);\n\n setIsEditorReady(true);\n preventCreation.current = true;\n }\n }, [options, theme, setModels]);\n\n useEffect(() => {\n if (isEditorReady) {\n onMountRef.current(editorRef.current!, monacoRef.current!);\n }\n }, [isEditorReady]);\n\n useEffect(() => {\n !isMonacoMounting && !isEditorReady && createEditor();\n }, [isMonacoMounting, isEditorReady, createEditor]);\n\n function disposeEditor() {\n const models = editorRef.current?.getModel();\n\n if (!keepCurrentOriginalModel) {\n models?.original?.dispose();\n }\n\n if (!keepCurrentModifiedModel) {\n models?.modified?.dispose();\n }\n\n editorRef.current?.dispose();\n }\n\n return (\n <MonacoContainer\n width={width}\n height={height}\n isEditorReady={isEditorReady}\n loading={loading}\n _ref={containerRef}\n className={className}\n wrapperProps={wrapperProps}\n />\n );\n}\n\nexport default DiffEditor;\n","import { memo } from 'react';\n\nimport MonacoContainer from './MonacoContainer';\n\nexport default memo(MonacoContainer);\n","import React from 'react';\n\nimport styles from './styles';\nimport Loading from '../Loading';\nimport { type ContainerProps } from './types';\n\n// ** forwardref render functions do not support proptypes or defaultprops **\n// one of the reasons why we use a separate prop for passing ref instead of using forwardref\n\nfunction MonacoContainer({\n width,\n height,\n isEditorReady,\n loading,\n _ref,\n className,\n wrapperProps,\n}: ContainerProps) {\n return (\n <section style={{ ...styles.wrapper, width, height }} {...wrapperProps}>\n {!isEditorReady && <Loading>{loading}</Loading>}\n <div\n ref={_ref}\n style={{ ...styles.fullWidth, ...(!isEditorReady && styles.hide) }}\n className={className}\n />\n </section>\n );\n}\n\nexport default MonacoContainer;\n","import { type CSSProperties } from 'react';\n\nconst styles: Record<string, CSSProperties> = {\n wrapper: {\n display: 'flex',\n position: 'relative',\n textAlign: 'initial',\n },\n fullWidth: {\n width: '100%',\n },\n hide: {\n display: 'none',\n },\n};\n\nexport default styles;\n","import React, { type PropsWithChildren } from 'react';\n\nimport styles from './styles';\n\nfunction Loading({ children }: PropsWithChildren) {\n return <div style={styles.container}>{children}</div>;\n}\n\nexport default Loading;\n","import { type CSSProperties } from 'react';\n\nconst styles: Record<string, CSSProperties> = {\n container: {\n display: 'flex',\n height: '100%',\n width: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n },\n};\n\nexport default styles;\n","import Loading from './Loading';\n\nexport default Loading;\n","import { useEffect, type EffectCallback } from 'react';\n\nfunction useMount(effect: EffectCallback) {\n useEffect(effect, []);\n}\n\nexport default useMount;\n","import { useEffect, useRef, type DependencyList, type EffectCallback } from 'react';\n\nfunction useUpdate(effect: EffectCallback, deps: DependencyList, applyChanges = true) {\n const isInitialMount = useRef(true);\n\n useEffect(\n isInitialMount.current || !applyChanges\n ? () => {\n isInitialMount.current = false;\n }\n : effect,\n deps,\n );\n}\n\nexport default useUpdate;\n","import { type Monaco } from '..';\n\n/**\n * noop is a helper function that does nothing\n * @returns undefined\n */\nfunction noop() {\n /** no-op */\n}\n\n/**\n * getOrCreateModel is a helper function that will return a model if it exists\n * or create a new model if it does not exist.\n * This is useful for when you want to create a model for a file that may or may not exist yet.\n * @param monaco The monaco instance\n * @param value The value of the model\n * @param language The language of the model\n * @param path The path of the model\n * @returns The model that was found or created\n */\nfunction getOrCreateModel(monaco: Monaco, value: string, language: string, path: string) {\n return getModel(monaco, path) || createModel(monaco, value, language, path);\n}\n\n/**\n * getModel is a helper function that will return a model if it exists\n * or return undefined if it does not exist.\n * @param monaco The monaco instance\n * @param path The path of the model\n * @returns The model that was found or undefined\n */\nfunction getModel(monaco: Monaco, path: string) {\n return monaco.editor.getModel(createModelUri(monaco, path));\n}\n\n/**\n * createModel is a helper function that will create a new model\n * @param monaco The monaco instance\n * @param value The value of the model\n * @param language The language of the model\n * @param path The path of the model\n * @returns The model that was created\n */\nfunction createModel(monaco: Monaco, value: string, language?: string, path?: string) {\n return monaco.editor.createModel(\n value,\n language,\n path ? createModelUri(monaco, path) : undefined,\n );\n}\n\n/**\n * createModelUri is a helper function that will create a new model uri\n * @param monaco The monaco instance\n * @param path The path of the model\n * @returns The model uri that was created\n */\nfunction createModelUri(monaco: Monaco, path: string) {\n return monaco.Uri.parse(path);\n}\n\nexport { noop, getOrCreateModel };\n","import { useState } from 'react';\nimport loader from '@monaco-editor/loader';\n\nimport useMount from '../useMount';\n\nfunction useMonaco() {\n const [monaco, setMonaco] = useState(loader.__getMonacoInstance());\n\n useMount(() => {\n let cancelable: ReturnType<typeof loader.init>;\n\n if (!monaco) {\n cancelable = loader.init();\n\n cancelable.then((monaco) => {\n setMonaco(monaco);\n });\n }\n\n return () => cancelable?.cancel();\n });\n\n return monaco;\n}\n\nexport default useMonaco;\n","import { memo } from 'react';\n\nimport Editor from './Editor';\n\nexport * from './types';\n\nexport default memo(Editor);\n","'use client';\n\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport loader from '@monaco-editor/loader';\nimport useMount from '../hooks/useMount';\nimport useUpdate from '../hooks/useUpdate';\nimport usePrevious from '../hooks/usePrevious';\nimport { type IDisposable, type editor } from 'monaco-editor';\nimport { noop, getOrCreateModel } from '../utils';\nimport { type EditorProps } from './types';\nimport { type Monaco } from '..';\nimport MonacoContainer from '../MonacoContainer';\n\nconst viewStates = new Map();\n\nfunction Editor({\n defaultValue,\n defaultLanguage,\n defaultPath,\n value,\n language,\n path,\n /* === */\n theme = 'light',\n line,\n loading = 'Loading...',\n options = {},\n overrideServices = {},\n saveViewState = true,\n keepCurrentModel = false,\n /* === */\n width = '100%',\n height = '100%',\n className,\n wrapperProps = {},\n /* === */\n beforeMount = noop,\n onMount = noop,\n onChange,\n onValidate = noop,\n}: EditorProps) {\n const [isEditorReady, setIsEditorReady] = useState(false);\n const [isMonacoMounting, setIsMonacoMounting] = useState(true);\n const monacoRef = useRef<Monaco | null>(null);\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const onMountRef = useRef(onMount);\n const beforeMountRef = useRef(beforeMount);\n const subscriptionRef = useRef<IDisposable>();\n const valueRef = useRef(value);\n const previousPath = usePrevious(path);\n const preventCreation = useRef(false);\n const preventTriggerChangeEvent = useRef<boolean>(false);\n\n useMount(() => {\n const cancelable = loader.init();\n\n cancelable\n .then((monaco) => (monacoRef.current = monaco) && setIsMonacoMounting(false))\n .catch(\n (error) =>\n error?.type !== 'cancelation' && console.error('Monaco initialization: error:', error),\n );\n\n return () => (editorRef.current ? disposeEditor() : cancelable.cancel());\n });\n\n useUpdate(\n () => {\n const model = getOrCreateModel(\n monacoRef.current!,\n defaultValue || value || '',\n defaultLanguage || language || '',\n path || defaultPath || '',\n );\n\n if (model !== editorRef.current?.getModel()) {\n if (saveViewState) viewStates.set(previousPath, editorRef.current?.saveViewState());\n editorRef.current?.setModel(model);\n if (saveViewState) editorRef.current?.restoreViewState(viewStates.get(path));\n }\n },\n [path],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n editorRef.current?.updateOptions(options);\n },\n [options],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n if (!editorRef.current || value === undefined) return;\n if (editorRef.current.getOption(monacoRef.current!.editor.EditorOption.readOnly)) {\n editorRef.current.setValue(value);\n } else if (value !== editorRef.current.getValue()) {\n preventTriggerChangeEvent.current = true;\n editorRef.current.executeEdits('', [\n {\n range: editorRef.current.getModel()!.getFullModelRange(),\n text: value,\n forceMoveMarkers: true,\n },\n ]);\n\n editorRef.current.pushUndoStop();\n preventTriggerChangeEvent.current = false;\n }\n },\n [value],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n const model = editorRef.current?.getModel();\n if (model && language) monacoRef.current?.editor.setModelLanguage(model, language);\n },\n [language],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n // reason for undefined check: https://github.com/suren-atoyan/monaco-react/pull/188\n if (line !== undefined) {\n editorRef.current?.revealLine(line);\n }\n },\n [line],\n isEditorReady,\n );\n\n useUpdate(\n () => {\n monacoRef.current?.editor.setTheme(theme);\n },\n [theme],\n isEditorReady,\n );\n\n const createEditor = useCallback(() => {\n if (!containerRef.current || !monacoRef.current) return;\n if (!preventCreation.current) {\n beforeMountRef.current(monacoRef.current);\n const autoCreatedModelPath = path || defaultPath;\n\n const defaultModel = getOrCreateModel(\n monacoRef.current,\n value || defaultValue || '',\n defaultLanguage || language || '',\n autoCreatedModelPath || '',\n );\n\n editorRef.current = monacoRef.current?.editor.create(\n containerRef.current,\n {\n model: defaultModel,\n automaticLayout: true,\n ...options,\n },\n overrideServices,\n );\n\n saveViewState && editorRef.current.restoreViewState(viewStates.get(autoCreatedModelPath));\n\n monacoRef.current.editor.setTheme(theme);\n\n if (line !== undefined) {\n editorRef.current.revealLine(line);\n }\n\n setIsEditorReady(true);\n preventCreation.current = true;\n }\n }, [\n defaultValue,\n defaultLanguage,\n defaultPath,\n value,\n language,\n path,\n options,\n overrideServices,\n saveViewState,\n theme,\n line,\n ]);\n\n useEffect(() => {\n if (isEditorReady) {\n onMountRef.current(editorRef.current!, monacoRef.current!);\n }\n }, [isEditorReady]);\n\n useEffect(() => {\n !isMonacoMounting && !isEditorReady && createEditor();\n }, [isMonacoMounting, isEditorReady, createEditor]);\n\n // subscription\n // to avoid unnecessary updates (attach - dispose listener) in subscription\n valueRef.current = value;\n\n // onChange\n useEffect(() => {\n if (isEditorReady && onChange) {\n subscriptionRef.current?.dispose();\n subscriptionRef.current = editorRef.current?.onDidChangeModelContent((event) => {\n if (!preventTriggerChangeEvent.current) {\n onChange(editorRef.current!.getValue(), event);\n }\n });\n }\n }, [isEditorReady, onChange]);\n\n // onValidate\n useEffect(() => {\n if (isEditorReady) {\n const changeMarkersListener = monacoRef.current!.editor.onDidChangeMarkers((uris) => {\n const editorUri = editorRef.current!.getModel()?.uri;\n\n if (editorUri) {\n const currentEditorHasMarkerChanges = uris.find((uri) => uri.path === editorUri.path);\n if (currentEditorHasMarkerChanges) {\n const markers = monacoRef.current!.editor.getModelMarkers({\n resource: editorUri,\n });\n onValidate?.(markers);\n }\n }\n });\n\n return () => {\n changeMarkersListener?.dispose();\n };\n }\n return () => {\n // eslint happy\n };\n }, [isEditorReady, onValidate]);\n\n function disposeEditor() {\n subscriptionRef.current?.dispose();\n\n if (keepCurrentModel) {\n saveViewState && viewStates.set(path, editorRef.current!.saveViewState());\n } else {\n editorRef.current!.getModel()?.dispose();\n }\n\n editorRef.current!.dispose();\n }\n\n return (\n <MonacoContainer\n width={width}\n height={height}\n isEditorReady={isEditorReady}\n loading={loading}\n _ref={containerRef}\n className={className}\n wrapperProps={wrapperProps}\n />\n );\n}\n\nexport default Editor;\n","import { useEffect, useRef } from 'react';\n\nfunction usePrevious<T>(value: T) {\n const ref = useRef<T>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n}\n\nexport default usePrevious;\n","\"use client\";\n\nimport { useState, useEffect, useRef } from 'react';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\n\ninterface ProjectEnvInfo {\n projectName: string;\n envName: string;\n host: string;\n repo: string;\n currentProxy: string;\n proxyEnv: {\n [key: string]: string;\n };\n subApps: string[];\n}\n\ninterface MicroAppProxyTableProps {\n className?: string;\n currentProjectName: string;\n currentEnvName: string;\n}\n\ninterface SSEMessage {\n type: string;\n envName?: string;\n timestamp: number;\n message?: string;\n changes?: {\n before: string[];\n after: string[];\n added: string[];\n removed: string[];\n };\n}\n\nexport default function MicroAppProxyTable({ \n className, \n currentProjectName, \n currentEnvName \n}: MicroAppProxyTableProps) {\n const [allProjectsEnvs, setAllProjectsEnvs] = useState<ProjectEnvInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [selectedItems, setSelectedItems] = useState<Set<string>>(new Set());\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n const [saving, setSaving] = useState(false);\n const [saveMessage, setSaveMessage] = useState<string>('');\n \n // SSE连接状态\n const [sseConnected, setSseConnected] = useState(false);\n const [sseError, setSseError] = useState<string | null>(null);\n const eventSourceRef = useRef<EventSource | null>(null);\n\n // 从服务器配置初始化选择状态\n useEffect(() => {\n if (allProjectsEnvs.length > 0) {\n // 找到当前环境的subApps配置\n const currentEnv = allProjectsEnvs.find(\n env => env.projectName === currentProjectName && env.envName === currentEnvName\n );\n \n if (currentEnv && currentEnv.subApps.length > 0) {\n // 将subApps中的环境名称转换为完整的项目环境ID\n const selectedIds = new Set<string>();\n currentEnv.subApps.forEach(subAppEnv => {\n // 查找所有项目中匹配该环境名的项目环境\n allProjectsEnvs.forEach(env => {\n if (env.envName === subAppEnv) {\n selectedIds.add(getItemId(env));\n }\n });\n });\n setSelectedItems(selectedIds);\n }\n }\n }, [allProjectsEnvs, currentProjectName, currentEnvName]);\n\n // 获取所有项目环境信息\n const fetchAllProjectsEnvs = async () => {\n setLoading(true);\n setError(null);\n try {\n const response = await fetch('/api/all-projects-envs');\n const result = await response.json();\n\n if (result.success) {\n setAllProjectsEnvs(result.data);\n } else {\n setError(result.error || '获取项目环境信息失败');\n }\n } catch (error) {\n console.error('获取项目环境信息失败:', error);\n setError('获取项目环境信息失败: 网络错误');\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n fetchAllProjectsEnvs();\n setupSSEConnection();\n \n // 清理函数\n return () => {\n cleanupSSEConnection();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentEnvName]); // 依赖于currentEnvName,环境变化时重新连接\n\n // 建立SSE连接\n const setupSSEConnection = () => {\n if (eventSourceRef.current) {\n cleanupSSEConnection();\n }\n\n const clientId = `microapp-table-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const url = `/api/microapp-proxy-change-stream?env=${encodeURIComponent(currentEnvName)}&clientId=${encodeURIComponent(clientId)}`;\n \n console.log(`[SSE] 建立连接到: ${url}`);\n setSseError(null);\n \n try {\n const eventSource = new EventSource(url);\n eventSourceRef.current = eventSource;\n\n eventSource.onopen = () => {\n console.log(`[SSE] 连接已建立,环境: ${currentEnvName}`);\n setSseConnected(true);\n setSseError(null);\n };\n\n eventSource.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n handleSSEMessage(data);\n } catch (error) {\n console.error('[SSE] 解析消息失败:', error);\n }\n };\n\n eventSource.onerror = () => {\n console.error(`[SSE] 连接错误,环境: ${currentEnvName}`);\n setSseConnected(false);\n setSseError('实时推送连接断开');\n \n // 自动重连机制(延迟3秒)\n setTimeout(() => {\n if (!eventSourceRef.current || eventSourceRef.current.readyState === EventSource.CLOSED) {\n console.log('[SSE] 尝试重新连接...');\n setupSSEConnection();\n }\n }, 3000);\n };\n\n } catch (error) {\n console.error('[SSE] 建立连接失败:', error);\n setSseError('无法建立实时推送连接');\n }\n };\n\n // 清理SSE连接\n const cleanupSSEConnection = () => {\n if (eventSourceRef.current) {\n console.log('[SSE] 关闭连接');\n eventSourceRef.current.close();\n eventSourceRef.current = null;\n setSseConnected(false);\n }\n };\n\n // 处理SSE消息\n const handleSSEMessage = (data: SSEMessage) => {\n console.log('[SSE] 收到消息:', data);\n \n switch (data.type) {\n case 'connection-established':\n console.log(`[SSE] 连接确认: ${data.message}`);\n setSseConnected(true);\n setSseError(null);\n break;\n \n case 'microapp-proxy-config-change':\n console.log(`[SSE] 配置变化通知: 环境=${data.envName}`);\n console.log(`[SSE] 变化详情:`, data.changes);\n \n // 显示变化提示\n if (data.changes) {\n const { added, removed } = data.changes;\n let changeText = '';\n if (added.length > 0) {\n changeText += `新增: ${added.join(', ')}`;\n }\n if (removed.length > 0) {\n if (changeText) changeText += '; ';\n changeText += `移除: ${removed.join(', ')}`;\n }\n setSaveMessage(`配置已更新 (${changeText})`);\n } else {\n setSaveMessage('配置已更新');\n }\n \n // 刷新数据显示最新配置\n fetchAllProjectsEnvs();\n \n // 3秒后清除提示\n setTimeout(() => setSaveMessage(''), 3000);\n break;\n \n case 'heartbeat':\n // 心跳消息,更新连接状态\n setSseConnected(true);\n setSseError(null);\n break;\n \n default:\n console.log('[SSE] 未知消息类型:', data.type);\n }\n };\n\n // 生成唯一的项目环境ID\n const getItemId = (item: ProjectEnvInfo) => `${item.projectName}-${item.envName}`;\n\n // 根据搜索关键词过滤数据\n const filteredData = searchKeyword.trim() \n ? allProjectsEnvs.filter(item => \n item.projectName.toLowerCase().includes(searchKeyword.toLowerCase()) ||\n item.envName.toLowerCase().includes(searchKeyword.toLowerCase()) ||\n item.host.toLowerCase().includes(searchKeyword.toLowerCase())\n )\n : allProjectsEnvs;\n\n // 处理单项选择\n const handleItemSelection = (itemId: string, checked: boolean) => {\n const newSelection = new Set(selectedItems);\n if (checked) {\n newSelection.add(itemId);\n } else {\n newSelection.delete(itemId);\n }\n setSelectedItems(newSelection);\n };\n\n // 处理全选/取消全选\n const handleSelectAll = (checked: boolean) => {\n if (checked) {\n const allIds = filteredData.map(item => getItemId(item));\n setSelectedItems(new Set(allIds));\n } else {\n setSelectedItems(new Set());\n }\n };\n\n // 清空搜索关键词\n const handleClearSearch = () => {\n setSearchKeyword('');\n };\n\n // 清空选择\n const handleClearSelection = () => {\n setSelectedItems(new Set());\n };\n\n // 保存MicroApp代理配置\n const handleSaveConfig = async () => {\n setSaving(true);\n setSaveMessage('');\n \n try {\n // 从选中的项目环境中提取环境名称\n const selectedEnvNames = Array.from(selectedItems).map(itemId => {\n const matchedEnv = allProjectsEnvs.find(env => getItemId(env) === itemId);\n return matchedEnv ? matchedEnv.envName : '';\n }).filter(envName => envName !== '');\n \n // 去重,因为可能多个项目有相同的环境名\n const uniqueEnvNames = [...new Set(selectedEnvNames)];\n \n const response = await fetch('/api/microapp-proxy-config', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName: currentProjectName,\n envName: currentEnvName,\n selectedItems: uniqueEnvNames,\n }),\n });\n\n const result = await response.json();\n\n if (result.success) {\n setSaveMessage(result.message || '保存成功');\n // 刷新数据以同步最新状态\n await fetchAllProjectsEnvs();\n } else {\n setSaveMessage(`保存失败: ${result.error}`);\n }\n } catch (error) {\n console.error('保存MicroApp代理配置失败:', error);\n setSaveMessage('保存失败: 网络错误');\n } finally {\n setSaving(false);\n // 清除保存消息\n setTimeout(() => {\n setSaveMessage('');\n }, 5000);\n }\n };\n\n const selectedCount = selectedItems.size;\n const allItemsSelected = filteredData.length > 0 && filteredData.every(item => selectedItems.has(getItemId(item)));\n const someItemsSelected = filteredData.some(item => selectedItems.has(getItemId(item)));\n\n if (loading) {\n return (\n <div className={`p-6 bg-gray-50 rounded-lg ${className}`}>\n <h4 className=\"text-md font-medium mb-4\">MicroApp代理配置</h4>\n <div className=\"text-center py-8\">\n <p className=\"text-gray-500\">加载中...</p>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className={`p-6 bg-gray-50 rounded-lg ${className}`}>\n <h4 className=\"text-md font-medium mb-4\">MicroApp代理配置</h4>\n <div className=\"text-center py-8\">\n <p className=\"text-red-500\">{error}</p>\n <Button \n variant=\"outline\" \n size=\"sm\" \n onClick={fetchAllProjectsEnvs}\n className=\"mt-2\"\n >\n 重试\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`p-6 bg-gray-50 rounded-lg ${className}`}>\n <div className=\"flex items-center justify-between mb-4\">\n <div>\n <h4 className=\"text-md font-medium\">MicroApp代理配置</h4>\n <p className=\"text-xs text-gray-500 mt-1\">\n 为 {currentProjectName} - {currentEnvName} 环境配置微应用代理\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n {/* SSE连接状态指示器 */}\n <div className=\"flex items-center gap-1\">\n <div className={`w-2 h-2 rounded-full ${\n sseConnected ? 'bg-green-500' : 'bg-red-500'\n }`} title={sseConnected ? '实时推送已连接' : '实时推送断开'}></div>\n <span className=\"text-xs text-gray-500\">\n {sseConnected ? '实时' : '离线'}\n </span>\n </div>\n \n {(saveMessage || sseError) && (\n <span className={`text-sm max-w-xs ${\n (saveMessage && saveMessage.includes('失败')) || sseError ? 'text-red-600' : \n saveMessage && saveMessage.includes('但有') ? 'text-yellow-600' : \n 'text-green-600'\n }`} title={saveMessage || sseError || ''}>\n {saveMessage || sseError}\n </span>\n )}\n <Button \n variant=\"outline\" \n size=\"sm\" \n onClick={fetchAllProjectsEnvs}\n disabled={saving}\n >\n 刷新\n </Button>\n <Button \n variant=\"default\" \n size=\"sm\" \n onClick={handleSaveConfig}\n disabled={saving}\n >\n {saving ? '保存中...' : '保存配置'}\n </Button>\n </div>\n </div>\n\n {/* 搜索和选择统计 */}\n <div className=\"space-y-3 mb-4\">\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1 max-w-md\">\n <Input\n placeholder=\"搜索项目名称、环境名称或Host...\"\n value={searchKeyword}\n onChange={(e) => setSearchKeyword(e.target.value)}\n className=\"pr-8\"\n />\n {searchKeyword && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearSearch}\n className=\"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100\"\n >\n ×\n </Button>\n )}\n </div>\n </div>\n \n <div className=\"flex items-center justify-between text-sm text-gray-600\">\n <div className=\"flex items-center gap-4\">\n <span>\n 显示 {filteredData.length} 个环境配置\n {searchKeyword && ` (搜索: \"${searchKeyword}\")`}\n </span>\n {selectedCount > 0 && (\n <span className=\"text-blue-600 font-medium\">\n 已选择 {selectedCount} 项\n </span>\n )}\n </div>\n {selectedCount > 0 && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleClearSelection}\n >\n 清空选择\n </Button>\n )}\n </div>\n </div>\n\n {/* 表格 */}\n {filteredData.length > 0 ? (\n <div className=\"border rounded-md\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-12\">\n <input\n type=\"checkbox\"\n checked={allItemsSelected}\n onChange={(e) => handleSelectAll(e.target.checked)}\n ref={(ref: HTMLInputElement | null) => {\n if (ref) {\n ref.indeterminate = someItemsSelected && !allItemsSelected;\n }\n }}\n className=\"rounded border-gray-300\"\n />\n </TableHead>\n <TableHead>环境名称</TableHead>\n <TableHead>项目名称</TableHead>\n <TableHead>Host地址</TableHead>\n <TableHead>当前代理</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {filteredData.map((item) => {\n const itemId = getItemId(item);\n const isSelected = selectedItems.has(itemId);\n \n return (\n <TableRow key={itemId}>\n <TableCell>\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => handleItemSelection(itemId, e.target.checked)}\n className=\"rounded border-gray-300\"\n />\n </TableCell>\n <TableCell>\n <span className=\"px-2 py-1 rounded text-xs font-medium bg-blue-100 text-blue-800\">\n {item.envName}\n </span>\n </TableCell>\n <TableCell className=\"font-medium\">\n {item.projectName}\n </TableCell>\n <TableCell className=\"font-mono text-sm\">\n {item.host}\n </TableCell>\n <TableCell className=\"text-sm text-gray-600\">\n {item.currentProxy}\n {item.proxyEnv[item.currentProxy] && (\n <div className=\"text-xs text-gray-500\">\n {item.proxyEnv[item.currentProxy]}\n </div>\n )}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n ) : (\n <div className=\"text-center py-8\">\n <p className=\"text-gray-500\">\n {searchKeyword ? '没有找到匹配的环境配置' : '暂无环境配置'}\n </p>\n </div>\n )}\n\n {/* 选择状态提示 */}\n {selectedCount > 0 && (\n <div className=\"mt-4 p-3 bg-blue-50 rounded-md\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-blue-700\">\n 已选择 {selectedCount} 个环境配置将作为微应用代理\n </span>\n <span className=\"text-xs text-blue-600\">\n 点击上方&ldquo;保存配置&rdquo;按钮保存设置\n </span>\n </div>\n </div>\n )}\n </div>\n );\n} ","require('client-only');\nvar React = require('react');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar React__default = /*#__PURE__*/_interopDefaultLegacy(React);\n\n/*\nBased on Glamor's sheet\nhttps://github.com/threepointone/glamor/blob/667b480d31b3721a905021b26e1290ce92ca2879/src/sheet.js\n*/ function _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\nvar isProd = typeof process !== \"undefined\" && process.env && process.env.NODE_ENV === \"production\";\nvar isString = function(o) {\n return Object.prototype.toString.call(o) === \"[object String]\";\n};\nvar StyleSheet = /*#__PURE__*/ function() {\n function StyleSheet(param) {\n var ref = param === void 0 ? {} : param, _name = ref.name, name = _name === void 0 ? \"stylesheet\" : _name, _optimizeForSpeed = ref.optimizeForSpeed, optimizeForSpeed = _optimizeForSpeed === void 0 ? isProd : _optimizeForSpeed;\n invariant$1(isString(name), \"`name` must be a string\");\n this._name = name;\n this._deletedRulePlaceholder = \"#\" + name + \"-deleted-rule____{}\";\n invariant$1(typeof optimizeForSpeed === \"boolean\", \"`optimizeForSpeed` must be a boolean\");\n this._optimizeForSpeed = optimizeForSpeed;\n this._serverSheet = undefined;\n this._tags = [];\n this._injected = false;\n this._rulesCount = 0;\n var node = typeof window !== \"undefined\" && document.querySelector('meta[property=\"csp-nonce\"]');\n this._nonce = node ? node.getAttribute(\"content\") : null;\n }\n var _proto = StyleSheet.prototype;\n _proto.setOptimizeForSpeed = function setOptimizeForSpeed(bool) {\n invariant$1(typeof bool === \"boolean\", \"`setOptimizeForSpeed` accepts a boolean\");\n invariant$1(this._rulesCount === 0, \"optimizeForSpeed cannot be when rules have already been inserted\");\n this.flush();\n this._optimizeForSpeed = bool;\n this.inject();\n };\n _proto.isOptimizeForSpeed = function isOptimizeForSpeed() {\n return this._optimizeForSpeed;\n };\n _proto.inject = function inject() {\n var _this = this;\n invariant$1(!this._injected, \"sheet already injected\");\n this._injected = true;\n if (typeof window !== \"undefined\" && this._optimizeForSpeed) {\n this._tags[0] = this.makeStyleTag(this._name);\n this._optimizeForSpeed = \"insertRule\" in this.getSheet();\n if (!this._optimizeForSpeed) {\n if (!isProd) {\n console.warn(\"StyleSheet: optimizeForSpeed mode not supported falling back to standard mode.\");\n }\n this.flush();\n this._injected = true;\n }\n return;\n }\n this._serverSheet = {\n cssRules: [],\n insertRule: function(rule, index) {\n if (typeof index === \"number\") {\n _this._serverSheet.cssRules[index] = {\n cssText: rule\n };\n } else {\n _this._serverSheet.cssRules.push({\n cssText: rule\n });\n }\n return index;\n },\n deleteRule: function(index) {\n _this._serverSheet.cssRules[index] = null;\n }\n };\n };\n _proto.getSheetForTag = function getSheetForTag(tag) {\n if (tag.sheet) {\n return tag.sheet;\n }\n // this weirdness brought to you by firefox\n for(var i = 0; i < document.styleSheets.length; i++){\n if (document.styleSheets[i].ownerNode === tag) {\n return document.styleSheets[i];\n }\n }\n };\n _proto.getSheet = function getSheet() {\n return this.getSheetForTag(this._tags[this._tags.length - 1]);\n };\n _proto.insertRule = function insertRule(rule, index) {\n invariant$1(isString(rule), \"`insertRule` accepts only strings\");\n if (typeof window === \"undefined\") {\n if (typeof index !== \"number\") {\n index = this._serverSheet.cssRules.length;\n }\n this._serverSheet.insertRule(rule, index);\n return this._rulesCount++;\n }\n if (this._optimizeForSpeed) {\n var sheet = this.getSheet();\n if (typeof index !== \"number\") {\n index = sheet.cssRules.length;\n }\n // this weirdness for perf, and chrome's weird bug\n // https://stackoverflow.com/questions/20007992/chrome-suddenly-stopped-accepting-insertrule\n try {\n sheet.insertRule(rule, index);\n } catch (error) {\n if (!isProd) {\n console.warn(\"StyleSheet: illegal rule: \\n\\n\" + rule + \"\\n\\nSee https://stackoverflow.com/q/20007992 for more info\");\n }\n return -1;\n }\n } else {\n var insertionPoint = this._tags[index];\n this._tags.push(this.makeStyleTag(this._name, rule, insertionPoint));\n }\n return this._rulesCount++;\n };\n _proto.replaceRule = function replaceRule(index, rule) {\n if (this._optimizeForSpeed || typeof window === \"undefined\") {\n var sheet = typeof window !== \"undefined\" ? this.getSheet() : this._serverSheet;\n if (!rule.trim()) {\n rule = this._deletedRulePlaceholder;\n }\n if (!sheet.cssRules[index]) {\n // @TBD Should we throw an error?\n return index;\n }\n sheet.deleteRule(index);\n try {\n sheet.insertRule(rule, index);\n } catch (error) {\n if (!isProd) {\n console.warn(\"StyleSheet: illegal rule: \\n\\n\" + rule + \"\\n\\nSee https://stackoverflow.com/q/20007992 for more info\");\n }\n // In order to preserve the indices we insert a deleteRulePlaceholder\n sheet.insertRule(this._deletedRulePlaceholder, index);\n }\n } else {\n var tag = this._tags[index];\n invariant$1(tag, \"old rule at index `\" + index + \"` not found\");\n tag.textContent = rule;\n }\n return index;\n };\n _proto.deleteRule = function deleteRule(index) {\n if (typeof window === \"undefined\") {\n this._serverSheet.deleteRule(index);\n return;\n }\n if (this._optimizeForSpeed) {\n this.replaceRule(index, \"\");\n } else {\n var tag = this._tags[index];\n invariant$1(tag, \"rule at index `\" + index + \"` not found\");\n tag.parentNode.removeChild(tag);\n this._tags[index] = null;\n }\n };\n _proto.flush = function flush() {\n this._injected = false;\n this._rulesCount = 0;\n if (typeof window !== \"undefined\") {\n this._tags.forEach(function(tag) {\n return tag && tag.parentNode.removeChild(tag);\n });\n this._tags = [];\n } else {\n // simpler on server\n this._serverSheet.cssRules = [];\n }\n };\n _proto.cssRules = function cssRules() {\n var _this = this;\n if (typeof window === \"undefined\") {\n return this._serverSheet.cssRules;\n }\n return this._tags.reduce(function(rules, tag) {\n if (tag) {\n rules = rules.concat(Array.prototype.map.call(_this.getSheetForTag(tag).cssRules, function(rule) {\n return rule.cssText === _this._deletedRulePlaceholder ? null : rule;\n }));\n } else {\n rules.push(null);\n }\n return rules;\n }, []);\n };\n _proto.makeStyleTag = function makeStyleTag(name, cssString, relativeToTag) {\n if (cssString) {\n invariant$1(isString(cssString), \"makeStyleTag accepts only strings as second parameter\");\n }\n var tag = document.createElement(\"style\");\n if (this._nonce) tag.setAttribute(\"nonce\", this._nonce);\n tag.type = \"text/css\";\n tag.setAttribute(\"data-\" + name, \"\");\n if (cssString) {\n tag.appendChild(document.createTextNode(cssString));\n }\n var head = document.head || document.getElementsByTagName(\"head\")[0];\n if (relativeToTag) {\n head.insertBefore(tag, relativeToTag);\n } else {\n head.appendChild(tag);\n }\n return tag;\n };\n _createClass(StyleSheet, [\n {\n key: \"length\",\n get: function get() {\n return this._rulesCount;\n }\n }\n ]);\n return StyleSheet;\n}();\nfunction invariant$1(condition, message) {\n if (!condition) {\n throw new Error(\"StyleSheet: \" + message + \".\");\n }\n}\n\nfunction hash(str) {\n var _$hash = 5381, i = str.length;\n while(i){\n _$hash = _$hash * 33 ^ str.charCodeAt(--i);\n }\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */ return _$hash >>> 0;\n}\nvar stringHash = hash;\n\nvar sanitize = function(rule) {\n return rule.replace(/\\/style/gi, \"\\\\/style\");\n};\nvar cache = {};\n/**\n * computeId\n *\n * Compute and memoize a jsx id from a basedId and optionally props.\n */ function computeId(baseId, props) {\n if (!props) {\n return \"jsx-\" + baseId;\n }\n var propsToString = String(props);\n var key = baseId + propsToString;\n if (!cache[key]) {\n cache[key] = \"jsx-\" + stringHash(baseId + \"-\" + propsToString);\n }\n return cache[key];\n}\n/**\n * computeSelector\n *\n * Compute and memoize dynamic selectors.\n */ function computeSelector(id, css) {\n var selectoPlaceholderRegexp = /__jsx-style-dynamic-selector/g;\n // Sanitize SSR-ed CSS.\n // Client side code doesn't need to be sanitized since we use\n // document.createTextNode (dev) and the CSSOM api sheet.insertRule (prod).\n if (typeof window === \"undefined\") {\n css = sanitize(css);\n }\n var idcss = id + css;\n if (!cache[idcss]) {\n cache[idcss] = css.replace(selectoPlaceholderRegexp, id);\n }\n return cache[idcss];\n}\n\nfunction mapRulesToStyle(cssRules, options) {\n if (options === void 0) options = {};\n return cssRules.map(function(args) {\n var id = args[0];\n var css = args[1];\n return /*#__PURE__*/ React__default[\"default\"].createElement(\"style\", {\n id: \"__\" + id,\n // Avoid warnings upon render with a key\n key: \"__\" + id,\n nonce: options.nonce ? options.nonce : undefined,\n dangerouslySetInnerHTML: {\n __html: css\n }\n });\n });\n}\nvar StyleSheetRegistry = /*#__PURE__*/ function() {\n function StyleSheetRegistry(param) {\n var ref = param === void 0 ? {} : param, _styleSheet = ref.styleSheet, styleSheet = _styleSheet === void 0 ? null : _styleSheet, _optimizeForSpeed = ref.optimizeForSpeed, optimizeForSpeed = _optimizeForSpeed === void 0 ? false : _optimizeForSpeed;\n this._sheet = styleSheet || new StyleSheet({\n name: \"styled-jsx\",\n optimizeForSpeed: optimizeForSpeed\n });\n this._sheet.inject();\n if (styleSheet && typeof optimizeForSpeed === \"boolean\") {\n this._sheet.setOptimizeForSpeed(optimizeForSpeed);\n this._optimizeForSpeed = this._sheet.isOptimizeForSpeed();\n }\n this._fromServer = undefined;\n this._indices = {};\n this._instancesCounts = {};\n }\n var _proto = StyleSheetRegistry.prototype;\n _proto.add = function add(props) {\n var _this = this;\n if (undefined === this._optimizeForSpeed) {\n this._optimizeForSpeed = Array.isArray(props.children);\n this._sheet.setOptimizeForSpeed(this._optimizeForSpeed);\n this._optimizeForSpeed = this._sheet.isOptimizeForSpeed();\n }\n if (typeof window !== \"undefined\" && !this._fromServer) {\n this._fromServer = this.selectFromServer();\n this._instancesCounts = Object.keys(this._fromServer).reduce(function(acc, tagName) {\n acc[tagName] = 0;\n return acc;\n }, {});\n }\n var ref = this.getIdAndRules(props), styleId = ref.styleId, rules = ref.rules;\n // Deduping: just increase the instances count.\n if (styleId in this._instancesCounts) {\n this._instancesCounts[styleId] += 1;\n return;\n }\n var indices = rules.map(function(rule) {\n return _this._sheet.insertRule(rule);\n })// Filter out invalid rules\n .filter(function(index) {\n return index !== -1;\n });\n this._indices[styleId] = indices;\n this._instancesCounts[styleId] = 1;\n };\n _proto.remove = function remove(props) {\n var _this = this;\n var styleId = this.getIdAndRules(props).styleId;\n invariant(styleId in this._instancesCounts, \"styleId: `\" + styleId + \"` not found\");\n this._instancesCounts[styleId] -= 1;\n if (this._instancesCounts[styleId] < 1) {\n var tagFromServer = this._fromServer && this._fromServer[styleId];\n if (tagFromServer) {\n tagFromServer.parentNode.removeChild(tagFromServer);\n delete this._fromServer[styleId];\n } else {\n this._indices[styleId].forEach(function(index) {\n return _this._sheet.deleteRule(index);\n });\n delete this._indices[styleId];\n }\n delete this._instancesCounts[styleId];\n }\n };\n _proto.update = function update(props, nextProps) {\n this.add(nextProps);\n this.remove(props);\n };\n _proto.flush = function flush() {\n this._sheet.flush();\n this._sheet.inject();\n this._fromServer = undefined;\n this._indices = {};\n this._instancesCounts = {};\n };\n _proto.cssRules = function cssRules() {\n var _this = this;\n var fromServer = this._fromServer ? Object.keys(this._fromServer).map(function(styleId) {\n return [\n styleId,\n _this._fromServer[styleId]\n ];\n }) : [];\n var cssRules = this._sheet.cssRules();\n return fromServer.concat(Object.keys(this._indices).map(function(styleId) {\n return [\n styleId,\n _this._indices[styleId].map(function(index) {\n return cssRules[index].cssText;\n }).join(_this._optimizeForSpeed ? \"\" : \"\\n\")\n ];\n })// filter out empty rules\n .filter(function(rule) {\n return Boolean(rule[1]);\n }));\n };\n _proto.styles = function styles(options) {\n return mapRulesToStyle(this.cssRules(), options);\n };\n _proto.getIdAndRules = function getIdAndRules(props) {\n var css = props.children, dynamic = props.dynamic, id = props.id;\n if (dynamic) {\n var styleId = computeId(id, dynamic);\n return {\n styleId: styleId,\n rules: Array.isArray(css) ? css.map(function(rule) {\n return computeSelector(styleId, rule);\n }) : [\n computeSelector(styleId, css)\n ]\n };\n }\n return {\n styleId: computeId(id),\n rules: Array.isArray(css) ? css : [\n css\n ]\n };\n };\n /**\n * selectFromServer\n *\n * Collects style tags from the document with id __jsx-XXX\n */ _proto.selectFromServer = function selectFromServer() {\n var elements = Array.prototype.slice.call(document.querySelectorAll('[id^=\"__jsx-\"]'));\n return elements.reduce(function(acc, element) {\n var id = element.id.slice(2);\n acc[id] = element;\n return acc;\n }, {});\n };\n return StyleSheetRegistry;\n}();\nfunction invariant(condition, message) {\n if (!condition) {\n throw new Error(\"StyleSheetRegistry: \" + message + \".\");\n }\n}\nvar StyleSheetContext = /*#__PURE__*/ React.createContext(null);\nStyleSheetContext.displayName = \"StyleSheetContext\";\nfunction createStyleRegistry() {\n return new StyleSheetRegistry();\n}\nfunction StyleRegistry(param) {\n var configuredRegistry = param.registry, children = param.children;\n var rootRegistry = React.useContext(StyleSheetContext);\n var ref = React.useState(function() {\n return rootRegistry || configuredRegistry || createStyleRegistry();\n }), registry = ref[0];\n return /*#__PURE__*/ React__default[\"default\"].createElement(StyleSheetContext.Provider, {\n value: registry\n }, children);\n}\nfunction useStyleRegistry() {\n return React.useContext(StyleSheetContext);\n}\n\n// Opt-into the new `useInsertionEffect` API in React 18, fallback to `useLayoutEffect`.\n// https://github.com/reactwg/react-18/discussions/110\nvar useInsertionEffect = React__default[\"default\"].useInsertionEffect || React__default[\"default\"].useLayoutEffect;\nvar defaultRegistry = typeof window !== \"undefined\" ? createStyleRegistry() : undefined;\nfunction JSXStyle(props) {\n var registry = defaultRegistry ? defaultRegistry : useStyleRegistry();\n // If `registry` does not exist, we do nothing here.\n if (!registry) {\n return null;\n }\n if (typeof window === \"undefined\") {\n registry.add(props);\n return null;\n }\n useInsertionEffect(function() {\n registry.add(props);\n return function() {\n registry.remove(props);\n };\n // props.children can be string[], will be striped since id is identical\n }, [\n props.id,\n String(props.dynamic)\n ]);\n return null;\n}\nJSXStyle.dynamic = function(info) {\n return info.map(function(tagInfo) {\n var baseId = tagInfo[0];\n var props = tagInfo[1];\n return computeId(baseId, props);\n }).join(\" \");\n};\n\nexports.StyleRegistry = StyleRegistry;\nexports.createStyleRegistry = createStyleRegistry;\nexports.style = JSXStyle;\nexports.useStyleRegistry = useStyleRegistry;\n","module.exports = require('./dist/index').style\n","\"use client\";\n\nimport { useEffect, useRef } from 'react';\n\ninterface LogViewerProps {\n logs: string[];\n}\n\nexport default function LogViewer({ logs }: LogViewerProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const shouldAutoScroll = useRef(true);\n \n // 清理ANSI转义序列和控制字符\n const cleanAnsiCodes = (text: string): string => {\n return text\n // 移除所有ANSI转义序列\n .replace(/\\x1b\\[[0-9;]*m/g, '') // 颜色代码\n .replace(/\\x1b\\[[0-9]*[A-Z]/g, '') // 光标移动\n .replace(/\\x1b\\[K/g, '') // 清除行\n .replace(/\\x1b\\[2K/g, '') // 清除整行\n .replace(/\\x1b\\[G/g, '') // 光标到行首\n .replace(/\\x1b\\[\\d+A/g, '') // 光标上移\n .replace(/\\x1b\\[\\d+B/g, '') // 光标下移\n .replace(/\\x1b\\[\\d+C/g, '') // 光标右移\n .replace(/\\x1b\\[\\d+D/g, '') // 光标左移\n .replace(/\\[2K\\[1A\\[2K\\[G/g, '') // 常见的组合\n .replace(/\\[\\d+[A-Z]/g, '') // 其他控制序列\n .replace(/\\[STDOUT\\]/g, '[OUT]')\n .replace(/\\[STDERR\\]/g, '[ERR]');\n };\n \n // 检查是否在底部\n const checkIfAtBottom = () => {\n if (!containerRef.current) return true;\n \n const { scrollTop, scrollHeight, clientHeight } = containerRef.current;\n // 如果距离底部小于100像素,认为在底部\n return scrollHeight - scrollTop - clientHeight < 100;\n };\n \n // 滚动到底部\n const scrollToBottom = () => {\n if (containerRef.current && shouldAutoScroll.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n };\n \n // 处理滚动事件\n const handleScroll = () => {\n shouldAutoScroll.current = checkIfAtBottom();\n };\n \n // 当日志更新时滚动到底部\n useEffect(() => {\n // 使用setTimeout确保DOM更新后再滚动\n setTimeout(scrollToBottom, 10);\n }, [logs]);\n \n return (\n <div \n ref={containerRef}\n className=\"h-full w-full overflow-y-auto overflow-x-hidden p-4 custom-scrollbar\" \n onScroll={handleScroll}\n style={{\n scrollBehavior: 'smooth',\n maxHeight: '100%',\n }}\n >\n <style jsx>{`\n .custom-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: rgba(255, 255, 255, 0.2) rgba(0, 0, 0, 0.1);\n }\n .custom-scrollbar::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n }\n .custom-scrollbar::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.1);\n border-radius: 5px;\n }\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.3);\n border-radius: 5px;\n }\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.4);\n }\n `}</style>\n \n <div className=\"space-y-0.5\">\n {logs.length > 0 ? (\n logs.map((log, index) => {\n const cleanLog = cleanAnsiCodes(log);\n \n // 跳过空行和只包含控制字符的行\n if (!cleanLog.trim()) return null;\n \n const isError = log.includes('[STDERR]');\n const isSystem = log.includes('[SYSTEM]');\n const timestamp = cleanLog.match(/^\\[([\\d-T:.Z]+)\\]/)?.[1];\n const content = cleanLog.replace(/^\\[[\\d-T:.Z]+\\]\\s*/, '');\n \n return (\n <div \n key={index} \n className={`font-mono text-xs leading-5 ${\n isError ? 'text-red-400' : \n isSystem ? 'text-yellow-400' : \n 'text-gray-100'\n }`}\n >\n {timestamp && (\n <span className=\"text-gray-500 mr-2\">\n [{new Date(timestamp).toLocaleTimeString('zh-CN')}]\n </span>\n )}\n <span className=\"whitespace-pre-wrap break-all\">\n {content}\n </span>\n </div>\n );\n })\n ) : (\n <div className=\"text-center text-gray-500 mt-8\">\n 等待日志输出...\n </div>\n )}\n </div>\n </div>\n );\n}","\"use client\";\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { Button } from '@/components/ui/button';\n\ninterface BranchData {\n currentBranch: string;\n lastCommit: {\n hash: string;\n message: string;\n author: string;\n date: string;\n };\n status: {\n ahead: number;\n behind: number;\n modified: number;\n staged: number;\n untracked: number;\n };\n}\n\ninterface BranchInfoProps {\n projectName: string;\n className?: string;\n compact?: boolean; // 新增紧凑模式\n}\n\nexport default function BranchInfo({ projectName, className = '', compact = false }: BranchInfoProps) {\n const [branchData, setBranchData] = useState<BranchData | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [lastUpdateTime, setLastUpdateTime] = useState<string>('');\n\n // 获取分支信息\n const fetchBranchInfo = useCallback(async () => {\n if (!projectName) return;\n \n setLoading(true);\n setError(null);\n \n try {\n const response = await fetch(`/api/current-branch?project=${encodeURIComponent(projectName)}`);\n const result = await response.json();\n \n if (result.success) {\n setBranchData(result.data);\n setLastUpdateTime(new Date().toLocaleTimeString('zh-CN', { \n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n }));\n } else {\n setError(result.error || '获取分支信息失败');\n }\n } catch (err) {\n setError('网络请求失败');\n console.error('获取分支信息失败:', err);\n } finally {\n setLoading(false);\n }\n }, [projectName]);\n\n // 组件挂载时获取数据\n useEffect(() => {\n fetchBranchInfo();\n }, [fetchBranchInfo]);\n\n // 设置定时刷新(compact模式15秒,普通模式30秒)\n useEffect(() => {\n if (!projectName) return;\n \n const interval = setInterval(() => {\n fetchBranchInfo();\n }, compact ? 15000 : 30000); // compact模式15秒,普通模式30秒\n \n return () => clearInterval(interval);\n }, [projectName, fetchBranchInfo, compact]);\n\n // 获取状态颜色\n const getStatusColor = (count: number) => {\n if (count === 0) return 'text-gray-500';\n return 'text-orange-600';\n };\n\n // 获取分支状态图标\n const getBranchStatusIcon = () => {\n if (!branchData) return null;\n \n const { ahead, behind } = branchData.status;\n \n if (ahead > 0 && behind > 0) {\n return <span className=\"text-yellow-500 text-xs\">↕</span>; // 既有领先又有落后\n } else if (ahead > 0) {\n return <span className=\"text-green-500 text-xs\">↑</span>; // 领先\n } else if (behind > 0) {\n return <span className=\"text-red-500 text-xs\">↓</span>; // 落后\n }\n \n return <span className=\"text-gray-400 text-xs\">✓</span>; // 同步\n };\n\n if (loading && !branchData) {\n if (compact) {\n return (\n <div className={`flex items-center gap-2 px-3 py-1 bg-gray-50 rounded-md ${className}`}>\n <div className=\"animate-spin w-3 h-3 border-2 border-blue-500 border-t-transparent rounded-full\"></div>\n <span className=\"text-xs text-gray-500\">加载中...</span>\n </div>\n );\n }\n \n return (\n <div className={`bg-white rounded-lg shadow-sm border p-4 ${className}`}>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-semibold text-gray-700\">Git 分支信息</h3>\n <div className=\"animate-spin w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full\"></div>\n </div>\n <div className=\"text-sm text-gray-500\">正在加载分支信息...</div>\n </div>\n );\n }\n\n if (error) {\n if (compact) {\n return (\n <div className={`flex items-center gap-2 px-3 py-1 bg-red-50 rounded-md ${className}`}>\n <span className=\"text-xs text-red-500\">分支信息错误</span>\n <Button \n variant=\"ghost\" \n size=\"sm\" \n onClick={fetchBranchInfo}\n disabled={loading}\n className=\"h-5 w-5 p-0 text-red-500 hover:bg-red-100\"\n >\n ↻\n </Button>\n </div>\n );\n }\n \n return (\n <div className={`bg-white rounded-lg shadow-sm border p-4 ${className}`}>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-semibold text-gray-700\">Git 分支信息</h3>\n <Button \n variant=\"outline\" \n size=\"sm\" \n onClick={fetchBranchInfo}\n disabled={loading}\n className=\"h-6 px-2 text-xs\"\n >\n {loading ? '刷新中...' : '重试'}\n </Button>\n </div>\n <div className=\"text-sm text-red-500 bg-red-50 p-2 rounded\">\n {error}\n </div>\n </div>\n );\n }\n\n if (!branchData) {\n if (compact) {\n return (\n <div className={`flex items-center gap-2 px-3 py-1 bg-gray-50 rounded-md ${className}`}>\n <span className=\"text-xs text-gray-500\">暂无分支信息</span>\n </div>\n );\n }\n \n return (\n <div className={`bg-white rounded-lg shadow-sm border p-4 ${className}`}>\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-semibold text-gray-700\">Git 分支信息</h3>\n </div>\n <div className=\"text-sm text-gray-500\">暂无分支信息</div>\n </div>\n );\n }\n\n // Compact模式 - 只显示分支名称和状态\n if (compact) {\n return (\n <div className={`flex items-center gap-2 px-3 py-1 bg-blue-50 border border-blue-200 rounded-md ${className}`}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-blue-600\"\n >\n <polyline points=\"6,3 6,15\"></polyline>\n <circle cx=\"18\" cy=\"6\" r=\"3\"></circle>\n <circle cx=\"6\" cy=\"18\" r=\"3\"></circle>\n <path d=\"m18,9a9,9 0 0,1-9,9\"></path>\n </svg>\n <span className=\"text-sm font-medium text-blue-800\">\n {branchData.currentBranch}\n </span>\n {getBranchStatusIcon()}\n <Button \n variant=\"ghost\" \n size=\"sm\" \n onClick={fetchBranchInfo}\n disabled={loading}\n className=\"h-5 w-5 p-0 text-blue-600 hover:bg-blue-100\"\n title=\"刷新分支信息\"\n >\n {loading ? (\n <div className=\"animate-spin w-3 h-3 border-2 border-blue-600 border-t-transparent rounded-full\"></div>\n ) : (\n '↻'\n )}\n </Button>\n </div>\n );\n }\n\n return (\n <div className={`bg-white rounded-lg shadow-sm border p-4 ${className}`}>\n {/* 标题栏 */}\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-semibold text-gray-700\">Git 分支信息</h3>\n <div className=\"flex items-center gap-2\">\n {lastUpdateTime && (\n <span className=\"text-xs text-gray-400\">\n {lastUpdateTime}\n </span>\n )}\n <Button \n variant=\"outline\" \n size=\"sm\" \n onClick={fetchBranchInfo}\n disabled={loading}\n className=\"h-6 px-2 text-xs\"\n >\n {loading ? '刷新中...' : '刷新'}\n </Button>\n </div>\n </div>\n\n {/* 当前分支 */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <span className=\"text-xs text-gray-500\">分支:</span>\n <span className=\"text-sm font-medium text-blue-600 bg-blue-50 px-2 py-1 rounded\">\n {branchData.currentBranch}\n </span>\n {getBranchStatusIcon()}\n </div>\n </div>\n\n {/* 最后提交信息 */}\n <div className=\"bg-gray-50 p-3 rounded text-xs space-y-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-gray-500\">提交:</span>\n <code className=\"bg-gray-200 px-1 rounded font-mono text-xs\">\n {branchData.lastCommit.hash}\n </code>\n </div>\n <div className=\"text-gray-700 font-medium line-clamp-2\">\n {branchData.lastCommit.message}\n </div>\n <div className=\"flex items-center justify-between text-gray-500\">\n <span>{branchData.lastCommit.author}</span>\n <span>{branchData.lastCommit.date}</span>\n </div>\n </div>\n\n {/* 仓库状态 */}\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-gray-500\">领先:</span>\n <span className={getStatusColor(branchData.status.ahead)}>\n {branchData.status.ahead}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-gray-500\">落后:</span>\n <span className={getStatusColor(branchData.status.behind)}>\n {branchData.status.behind}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-gray-500\">已修改:</span>\n <span className={getStatusColor(branchData.status.modified)}>\n {branchData.status.modified}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-gray-500\">已暂存:</span>\n <span className={getStatusColor(branchData.status.staged)}>\n {branchData.status.staged}\n </span>\n </div>\n <div className=\"flex items-center justify-between col-span-2\">\n <span className=\"text-gray-500\">未跟踪:</span>\n <span className={getStatusColor(branchData.status.untracked)}>\n {branchData.status.untracked}\n </span>\n </div>\n </div>\n\n {/* 同步状态提示 */}\n {(branchData.status.ahead > 0 || branchData.status.behind > 0) && (\n <div className=\"text-xs p-2 rounded bg-yellow-50 border border-yellow-200\">\n {branchData.status.ahead > 0 && branchData.status.behind > 0 && (\n <span className=\"text-yellow-700\">\n 分支与远程不同步,有 {branchData.status.ahead} 个本地提交,{branchData.status.behind} 个远程提交\n </span>\n )}\n {branchData.status.ahead > 0 && branchData.status.behind === 0 && (\n <span className=\"text-green-700\">\n 本地领先远程 {branchData.status.ahead} 个提交\n </span>\n )}\n {branchData.status.ahead === 0 && branchData.status.behind > 0 && (\n <span className=\"text-red-700\">\n 本地落后远程 {branchData.status.behind} 个提交\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, Suspense, useCallback, useRef } from 'react';\nimport { useSearchParams, useRouter } from 'next/navigation';\nimport { Button } from '@/components/ui/button';\nimport { EditorSplitButton } from '@/components/EditorSplitButton';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs';\nimport { \n Select, \n SelectContent, \n SelectItem, \n SelectTrigger, \n SelectValue \n} from '@/components/ui/select';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { Switch } from '@/components/ui/switch';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport Editor from '@monaco-editor/react';\nimport MicroAppProxyTable from '@/components/MicroAppProxyTable';\nimport LogViewer from '@/components/LogViewer';\nimport BranchInfo from '@/components/BranchInfo';\nimport type { EditorType } from '@/lib/editor-operations';\n\ninterface ProxyEnv {\n [key: string]: string;\n}\n\ninterface EnvConfig {\n currentProxy: string;\n proxyEnv: ProxyEnv;\n host?: string;\n startCommand?: string;\n}\n\ninterface ProjectConfigData {\n projectName: string;\n repo: string;\n mockingIntercept?: boolean;\n mockOpen?: boolean;\n envs: {\n [envName: string]: EnvConfig;\n };\n}\n\ninterface ConfigState {\n [envName: string]: {\n selectedProxy: string;\n selectedOption: string; // 跟踪当前选择的选项(key或'custom')\n saving?: boolean;\n saveMessage?: string;\n };\n}\n\ninterface ProjectConfigState {\n mockingIntercept: boolean;\n mockOpen: boolean;\n saving?: boolean;\n saveMessage?: string;\n}\n\ninterface MockFile {\n siteName: string;\n fileName: string;\n filePath: string;\n}\n\ninterface MockMethod {\n method: string;\n setting?: {\n currentSite?: string;\n open?: string[];\n [key: string]: unknown;\n };\n files: MockFile[];\n}\n\ninterface MockApi {\n apiName: string;\n methods: MockMethod[];\n}\n\ninterface MockData {\n projectName: string;\n mockFiles: MockApi[];\n}\n\n// 项目状态枚举\nenum ProjectStatus {\n PENDING = 'pending',\n EXISTING = 'existing',\n CLONING = 'cloning',\n SUCCESS = 'success',\n FAILED = 'failed',\n RETRYING = 'retrying',\n}\n\n// 可用项目接口\ninterface ProjectItem {\n name: string;\n status: ProjectStatus;\n message: string;\n}\n\n// 新建Mock表单数据接口\ninterface CreateMockFormData {\n apiPath: string;\n method: string;\n siteName: string;\n mockOpen: boolean;\n}\n\n// 新增场景上下文接口\ninterface SceneContext {\n apiName: string;\n method: string;\n apiPath: string;\n}\n\n// 配置内容组件 - 包含所有使用 useSearchParams 的逻辑\nfunction ConfigurationContent() {\n const searchParams = useSearchParams();\n const router = useRouter();\n const projectName = searchParams.get('project');\n \n const [projectConfig, setProjectConfig] = useState<ProjectConfigData | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [configState, setConfigState] = useState<ConfigState>({});\n const [projectConfigState, setProjectConfigState] = useState<ProjectConfigState>({\n mockingIntercept: false,\n mockOpen: false,\n });\n const [openingProject, setOpeningProject] = useState(false);\n const [mockData, setMockData] = useState<MockData | null>(null);\n const [mockLoading, setMockLoading] = useState(false);\n const [currentPage, setCurrentPage] = useState(1);\n const [itemsPerPage] = useState(10);\n const [currentTab, setCurrentTab] = useState<string>('');\n const [editingFile, setEditingFile] = useState<{\n projectName: string;\n apiName: string;\n method: string;\n siteName: string;\n content: string;\n } | null>(null);\n const [editDialogOpen, setEditDialogOpen] = useState(false);\n const [editLoading, setEditLoading] = useState(false);\n const [saveLoading, setSaveLoading] = useState(false);\n const [editorLoading, setEditorLoading] = useState(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [editorInstance, setEditorInstance] = useState<any>(null);\n \n // 项目列表相关状态\n const [availableProjects, setAvailableProjects] = useState<ProjectItem[]>([]);\n const [projectsLoading, setProjectsLoading] = useState(false);\n const [runningProjects, setRunningProjects] = useState<Record<string, boolean>>({});\n \n // 新建Mock相关状态\n const [isCreateMode, setIsCreateMode] = useState(false);\n const [isAddSceneMode, setIsAddSceneMode] = useState(false); // 新增场景模式\n const [createFormData, setCreateFormData] = useState<CreateMockFormData>({\n apiPath: '',\n method: 'GET',\n siteName: '默认场景',\n mockOpen: true,\n });\n const [currentSceneContext, setCurrentSceneContext] = useState<SceneContext | null>(null);\n const [isCreating, setIsCreating] = useState(false);\n\n // 删除确认对话框状态\n const [deleteConfirmDialog, setDeleteConfirmDialog] = useState<{\n open: boolean;\n apiName: string;\n method: string;\n siteName: string;\n }>({\n open: false,\n apiName: '',\n method: '',\n siteName: '',\n });\n\n // 删除接口确认对话框状态\n const [deleteApiDialog, setDeleteApiDialog] = useState<{\n open: boolean;\n apiName: string;\n apiPath: string;\n }>({\n open: false,\n apiName: '',\n apiPath: '',\n });\n\n // 通知状态\n const [notification, setNotification] = useState<{\n open: boolean;\n type: 'success' | 'error';\n message: string;\n }>({\n open: false,\n type: 'success',\n message: '',\n });\n\n // 创建工作区对话框状态\n const [createWorkspaceDialog, setCreateWorkspaceDialog] = useState(false);\n const [selectedWorkspaceProjects, setSelectedWorkspaceProjects] = useState<string[]>([]);\n const [creatingWorkspace, setCreatingWorkspace] = useState(false);\n \n // Mock接口搜索相关状态\n const [searchKeyword, setSearchKeyword] = useState<string>('');\n \n // 用于跟踪上一个项目名,检测项目切换\n const prevProjectNameRef = useRef<string | null>(null);\n \n // 进程状态相关\n const [processStatuses, setProcessStatuses] = useState<{[key: string]: {\n running: boolean;\n pid?: number;\n startTime?: string;\n port?: string;\n loading?: boolean;\n }}>({});\n \n // 日志相关状态\n const [showLogsDialog, setShowLogsDialog] = useState(false);\n const [currentLogsEnv, setCurrentLogsEnv] = useState<string>('');\n const [processLogs, setProcessLogs] = useState<string[]>([]);\n\n // 格式化代码函数\n const formatCode = useCallback(async () => {\n if (editorInstance) {\n await autoFormatCode(editorInstance);\n }\n }, [editorInstance]);\n\n // 键盘快捷键处理\n const handleKeyDown = useCallback(async (event: KeyboardEvent) => {\n // 只在编辑对话框打开时处理快捷键\n if (!editDialogOpen) return;\n \n // 检查是否按下了 Cmd+S (Mac) 或 Ctrl+S (Windows/Linux)\n if ((event.metaKey || event.ctrlKey) && event.key === 's') {\n event.preventDefault(); // 阻止浏览器默认的保存行为\n await formatCode(); // 触发格式化\n }\n }, [editDialogOpen, formatCode]);\n\n // 添加键盘事件监听器\n useEffect(() => {\n if (editDialogOpen) {\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }\n }, [editDialogOpen, editorInstance, handleKeyDown]);\n\n // 自动格式化代码\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const autoFormatCode = async (editor: any) => {\n try {\n // 先等待编辑器完全加载\n await new Promise(resolve => setTimeout(resolve, 200));\n \n // 获取当前内容并进行基本格式化\n const model = editor.getModel();\n if (model) {\n // 执行格式化操作\n await editor.getAction('editor.action.formatDocument')?.run();\n \n // 如果格式化后还是单行,手动添加换行\n const content = model.getValue();\n if (content && !content.includes('\\n') && content.length > 50) {\n // 简单的JavaScript格式化:在大括号和分号后添加换行\n const formatted = content\n .replace(/\\{\\s*/g, '{\\n ')\n .replace(/\\}\\s*/g, '\\n}')\n .replace(/;\\s*/g, ';\\n ')\n .replace(/,\\s*/g, ',\\n ')\n .replace(/\\n\\s*\\n/g, '\\n')\n .trim();\n \n if (formatted !== content) {\n model.setValue(formatted);\n // 再次执行格式化\n setTimeout(() => {\n editor.getAction('editor.action.formatDocument')?.run();\n }, 100);\n }\n }\n }\n } catch (error) {\n console.log('自动格式化失败:', error);\n }\n };\n\n const handleBackToInitialization = () => {\n router.push('/initialization');\n };\n\n // 获取可用项目列表\n const fetchAvailableProjects = async () => {\n setProjectsLoading(true);\n try {\n const response = await fetch('/api/check-workspace');\n const data = await response.json();\n\n if (data.success && data.projects) {\n const projects: ProjectItem[] = data.projects.map((project: { name: string; status: string; message: string }) => ({\n name: project.name,\n status: project.status as ProjectStatus,\n message: project.message,\n }));\n setAvailableProjects(projects);\n } else {\n console.error('获取项目列表失败:', data.error);\n setAvailableProjects([]);\n }\n } catch (error) {\n console.error('获取项目列表失败:', error);\n setAvailableProjects([]);\n } finally {\n setProjectsLoading(false);\n }\n };\n\n const fetchRunningProjects = useCallback(async () => {\n try {\n const response = await fetch('/api/process/status');\n const result = await response.json();\n\n if (result.success && Array.isArray(result.data)) {\n const projectRunningMap: Record<string, boolean> = {};\n result.data.forEach((item: { projectName: string; running?: boolean; portInUse?: boolean }) => {\n const isRunning = Boolean(item.running || item.portInUse);\n if (isRunning) {\n projectRunningMap[item.projectName] = true;\n }\n });\n setRunningProjects(projectRunningMap);\n } else {\n setRunningProjects({});\n }\n } catch (error) {\n console.error('获取运行中项目失败:', error);\n setRunningProjects({});\n }\n }, []);\n\n // 处理项目切换\n const handleProjectSwitch = (selectedProjectName: string) => {\n if (selectedProjectName === projectName) return; // 如果选择的是当前项目则不切换\n \n // 重置搜索和分页状态\n setSearchKeyword('');\n setCurrentPage(1);\n setMockData(null);\n \n // 保持当前的tab参数\n const currentTab = searchParams.get('tab');\n const newUrl = `/configuration?project=${encodeURIComponent(selectedProjectName)}${\n currentTab ? `&tab=${currentTab}` : ''\n }`;\n \n router.push(newUrl);\n };\n\n // 在编辑器中打开项目(使用 editor schema 协议)\n const handleOpenProject = async (editor: EditorType = 'cursor') => {\n if (!projectName) return;\n \n setOpeningProject(true);\n \n try {\n const response = await fetch('/api/open-project', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ projectName, editor }),\n });\n\n const result = await response.json();\n\n if (result.success && result.editorUrl) {\n // 使用编辑器 schema 协议打开项目\n // 创建临时链接并点击,触发系统调用对应的编辑器应用程序\n const link = document.createElement('a');\n link.href = result.editorUrl;\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('打开项目失败:', result.error);\n showNotification('error', `打开项目失败: ${result.error}`);\n }\n } catch (error) {\n console.error('打开项目失败:', error);\n showNotification('error', '打开项目失败: 网络错误');\n } finally {\n setOpeningProject(false);\n }\n };\n\n // 处理创建工作区\n const handleCreateWorkspace = async (editor: EditorType = 'cursor') => {\n if (selectedWorkspaceProjects.length === 0) {\n showNotification('error', '请至少选择一个项目');\n return;\n }\n\n setCreatingWorkspace(true);\n\n try {\n const response = await fetch('/api/workspace/create', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ projects: selectedWorkspaceProjects, editor }),\n });\n\n const result = await response.json();\n\n if (result.success) {\n showNotification('success', result.message || '工作区已创建');\n setCreateWorkspaceDialog(false);\n setSelectedWorkspaceProjects([]);\n } else {\n showNotification('error', `创建工作区失败: ${result.error}`);\n }\n } catch (error) {\n console.error('创建工作区失败:', error);\n showNotification('error', '创建工作区失败: 网络错误');\n } finally {\n setCreatingWorkspace(false);\n }\n };\n\n // 切换项目选择\n const toggleProjectSelection = (projectName: string) => {\n setSelectedWorkspaceProjects(prev => \n prev.includes(projectName)\n ? prev.filter(p => p !== projectName)\n : [...prev, projectName]\n );\n };\n\n // 获取项目配置\n useEffect(() => {\n if (!projectName) {\n setError('项目名称缺失');\n setLoading(false);\n return;\n }\n\n const fetchProjectConfig = async () => {\n try {\n const response = await fetch(`/api/project-config?project=${encodeURIComponent(projectName)}`);\n const result = await response.json();\n\n if (result.success) {\n setProjectConfig(result.data);\n \n // 初始化环境配置状态\n const initialState: ConfigState = {};\n Object.keys(result.data.envs).forEach(envName => {\n const envConfig = result.data.envs[envName];\n \n // selectedProxy 始终存储当前代理的URL值\n let currentProxyUrl = '';\n if (envConfig.proxyEnv[envConfig.currentProxy]) {\n // currentProxy 是 key 格式,获取对应的 URL\n currentProxyUrl = envConfig.proxyEnv[envConfig.currentProxy];\n } else {\n // currentProxy 可能是 URL 格式,直接使用\n currentProxyUrl = envConfig.currentProxy;\n }\n \n // 确定当前选择的选项\n let currentSelectedOption = '';\n if (envConfig.proxyEnv[envConfig.currentProxy]) {\n // currentProxy 是预设选项的key\n currentSelectedOption = envConfig.currentProxy;\n } else {\n // currentProxy 是自定义URL,选项为custom\n currentSelectedOption = 'custom';\n }\n \n initialState[envName] = {\n selectedProxy: currentProxyUrl || '', // selectedProxy 存储实际的代理URL\n selectedOption: currentSelectedOption, // 存储当前选择的选项\n };\n });\n setConfigState(initialState);\n \n // 初始化项目级配置状态\n setProjectConfigState({\n mockingIntercept: result.data.mockingIntercept || false,\n mockOpen: result.data.mockOpen || false,\n });\n } else {\n setError(result.error);\n }\n } catch (err) {\n setError('获取项目配置失败');\n console.error('获取项目配置失败:', err);\n } finally {\n setLoading(false);\n }\n };\n\n fetchProjectConfig();\n }, [projectName]);\n\n // 获取Mock数据\n const fetchMockData = useCallback(async () => {\n if (!projectName) return;\n \n setMockLoading(true);\n try {\n const response = await fetch(`/api/mock-file?project=${encodeURIComponent(projectName)}`);\n const result = await response.json();\n\n if (result.success) {\n setMockData(result.data);\n } else {\n console.error('获取Mock数据失败:', result.error);\n }\n } catch (error) {\n console.error('获取Mock数据失败:', error);\n } finally {\n setMockLoading(false);\n }\n }, [projectName]);\n\n // 当项目配置加载完成后,设置正确的tab并获取相应数据\n useEffect(() => {\n if (projectConfig && projectName) {\n // 检测项目是否切换\n const isProjectChanged = prevProjectNameRef.current !== null && prevProjectNameRef.current !== projectName;\n \n // 如果项目切换了,重置搜索和分页状态\n if (isProjectChanged) {\n setSearchKeyword('');\n setCurrentPage(1);\n setMockData(null);\n }\n \n // 更新上一个项目名的引用\n prevProjectNameRef.current = projectName;\n \n const envNames = Object.keys(projectConfig.envs);\n // 检查URL参数是否指定了tab\n const urlParams = new URLSearchParams(window.location.search);\n const urlTab = urlParams.get('tab');\n \n let validTab = '';\n \n // 优先检查当前tab是否仍然有效\n if (currentTab && (currentTab === 'mock' || envNames.includes(currentTab))) {\n // 当前tab仍然有效,保持不变\n validTab = currentTab;\n } else if (urlTab) {\n // 当前tab无效,检查URL参数是否有效\n if (urlTab === 'mock' || envNames.includes(urlTab)) {\n validTab = urlTab;\n } else {\n // URL中的tab在新项目中无效,选择默认tab\n validTab = envNames.length > 0 ? envNames[0] : 'mock';\n }\n } else {\n // 没有URL参数,选择默认tab\n validTab = envNames.length > 0 ? envNames[0] : 'mock';\n // validTab = 'mock';\n }\n \n // 项目切换时或tab变化时更新\n if (validTab !== currentTab) {\n setCurrentTab(validTab);\n \n if (validTab === 'mock') {\n fetchMockData();\n }\n } else if (isProjectChanged && currentTab === 'mock') {\n // 项目切换但tab没变(仍是mock),也需要重新获取数据\n fetchMockData();\n }\n }\n }, [projectConfig, projectName, currentTab, fetchMockData]); // 添加缺失的依赖\n\n // 获取可用项目列表\n useEffect(() => {\n fetchAvailableProjects();\n }, []);\n\n useEffect(() => {\n fetchRunningProjects();\n }, [fetchRunningProjects]);\n\n // 获取所有环境的进程状态\n const fetchAllProcessStatuses = useCallback(async () => {\n if (!projectName || !projectConfig) return;\n \n const statuses: typeof processStatuses = {};\n \n for (const envName of Object.keys(projectConfig.envs)) {\n const key = `${envName}`;\n statuses[key] = { loading: true, running: false };\n }\n \n setProcessStatuses(statuses);\n \n // 并发获取所有环境的状态\n const promises = Object.keys(projectConfig.envs).map(async (envName) => {\n try {\n const response = await fetch(\n `/api/process/status?projectName=${encodeURIComponent(projectName)}&envName=${encodeURIComponent(envName)}`\n );\n const result = await response.json();\n \n if (result.success && result.data) {\n return { envName, status: result.data };\n }\n } catch (error) {\n console.error(`获取环境 ${envName} 状态失败:`, error);\n }\n return { envName, status: { running: false } };\n });\n \n const results = await Promise.all(promises);\n \n const newStatuses: typeof processStatuses = {};\n results.forEach(({ envName, status }) => {\n newStatuses[envName] = {\n running: status.running || false,\n pid: status.pid,\n startTime: status.startTime,\n port: status.port,\n loading: false\n };\n });\n \n setProcessStatuses(newStatuses);\n }, [projectName, projectConfig]);\n\n // 启动进程\n const handleStartProcess = async (envName: string) => {\n if (!projectName || !projectConfig) return;\n \n const envConfig = projectConfig.envs[envName];\n if (!envConfig.startCommand) {\n showNotification('error', '该环境未配置启动命令');\n return;\n }\n \n setProcessStatuses(prev => ({\n ...prev,\n [envName]: { ...prev[envName], loading: true }\n }));\n \n try {\n const response = await fetch('/api/process/start', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName,\n envName,\n startCommand: envConfig.startCommand,\n }),\n });\n \n const result = await response.json();\n \n if (result.success) {\n setProcessStatuses(prev => ({\n ...prev,\n [envName]: {\n running: true,\n pid: result.data.pid,\n startTime: result.data.startTime,\n port: result.data.port,\n loading: false\n }\n }));\n setRunningProjects(prev => ({\n ...prev,\n [projectName]: true,\n }));\n } else {\n throw new Error(result.error || '启动失败');\n }\n } catch (error) {\n console.error('启动进程失败:', error);\n showNotification('error', `启动失败: ${error instanceof Error ? error.message : '未知错误'}`);\n setProcessStatuses(prev => ({\n ...prev,\n [envName]: { ...prev[envName], loading: false }\n }));\n }\n };\n\n // 停止进程\n const handleStopProcess = async (envName: string) => {\n if (!projectName) return;\n \n setProcessStatuses(prev => ({\n ...prev,\n [envName]: { ...prev[envName], loading: true }\n }));\n \n try {\n const response = await fetch(\n `/api/process/start?projectName=${encodeURIComponent(projectName)}&envName=${encodeURIComponent(envName)}`,\n { method: 'DELETE' }\n );\n \n const result = await response.json();\n \n if (result.success) {\n setProcessStatuses(prev => ({\n ...prev,\n [envName]: { running: false, loading: false }\n }));\n fetchRunningProjects();\n } else {\n throw new Error(result.error || '停止失败');\n }\n } catch (error) {\n console.error('停止进程失败:', error);\n showNotification('error', `停止失败: ${error instanceof Error ? error.message : '未知错误'}`);\n setProcessStatuses(prev => ({\n ...prev,\n [envName]: { ...prev[envName], loading: false }\n }));\n }\n };\n\n // 日志流控制\n const [logEventSource, setLogEventSource] = useState<EventSource | null>(null);\n \n // 开始实时日志流\n const startLogStream = (envName: string) => {\n if (!projectName) return;\n \n // 关闭之前的连接\n if (logEventSource) {\n logEventSource.close();\n }\n \n // 清空现有日志\n setProcessLogs([]);\n \n // 创建新的 EventSource\n const source = new EventSource(\n `/api/process/logs/stream?projectName=${encodeURIComponent(projectName)}&envName=${encodeURIComponent(envName)}`\n );\n \n source.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n \n if (data.type === 'log') {\n setProcessLogs(prev => {\n const newLogs = [...prev, data.content];\n // 限制显示的日志行数\n if (newLogs.length > 1000) {\n return newLogs.slice(-1000);\n }\n return newLogs;\n });\n } else if (data.type === 'init') {\n setProcessLogs([data.message]);\n } else if (data.type === 'end') {\n setProcessLogs(prev => [...prev, `[系统] ${data.message}`]);\n }\n } catch (error) {\n console.error('解析日志数据失败:', error);\n }\n };\n \n source.onerror = (error) => {\n console.error('日志流错误:', error);\n source.close();\n setLogEventSource(null);\n };\n \n setLogEventSource(source);\n };\n \n // 停止日志流\n const stopLogStream = () => {\n if (logEventSource) {\n logEventSource.close();\n setLogEventSource(null);\n }\n };\n \n // 显示日志对话框\n const handleShowLogs = (envName: string) => {\n setCurrentLogsEnv(envName);\n setShowLogsDialog(true);\n startLogStream(envName);\n };\n \n // 关闭日志对话框\n const handleCloseLogsDialog = () => {\n setShowLogsDialog(false);\n setProcessLogs([]);\n setCurrentLogsEnv('');\n stopLogStream();\n };\n \n // 刷新日志\n const handleRefreshLogs = () => {\n if (currentLogsEnv) {\n stopLogStream();\n startLogStream(currentLogsEnv);\n }\n };\n\n // 监听项目配置变化,获取进程状态\n useEffect(() => {\n if (projectConfig && projectName) {\n fetchAllProcessStatuses();\n \n // 定期检查进程状态\n const interval = setInterval(() => {\n fetchAllProcessStatuses();\n }, 5000); // 每5秒检查一次\n \n return () => clearInterval(interval);\n }\n }, [projectConfig, projectName, fetchAllProcessStatuses]);\n\n // 处理代理环境选择变化\n const handleProxyChange = (envName: string, proxyKey: string) => {\n if (!projectConfig) return;\n \n const envConfig = projectConfig.envs[envName];\n let proxyUrl = '';\n \n if (proxyKey === 'custom') {\n // 选择custom时,如果当前已经是custom选项,保持当前值;否则使用custom的预设值或空值\n if (configState[envName]?.selectedOption === 'custom') {\n proxyUrl = configState[envName]?.selectedProxy || '';\n } else {\n proxyUrl = envConfig.proxyEnv.custom || '';\n }\n } else {\n // 选择预设选项时,从proxyEnv获取对应的URL\n proxyUrl = envConfig.proxyEnv[proxyKey] || '';\n }\n \n setConfigState(prev => ({\n ...prev,\n [envName]: {\n ...prev[envName],\n selectedProxy: proxyUrl,\n selectedOption: proxyKey, // 更新选择的选项\n saveMessage: '', // 清除之前的保存消息\n },\n }));\n };\n\n // 处理自定义代理输入变化\n const handleCustomProxyChange = (envName: string, customUrl: string) => {\n setConfigState(prev => ({\n ...prev,\n [envName]: {\n ...prev[envName],\n selectedProxy: customUrl,\n saveMessage: '', // 清除之前的保存消息\n },\n }));\n };\n\n // 处理Mock拦截开关变化\n const handleMockingInterceptChange = async (checked: boolean) => {\n setProjectConfigState(prev => ({\n ...prev,\n mockingIntercept: checked,\n saving: true,\n saveMessage: '',\n }));\n\n try {\n const response = await fetch('/api/project-config', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName,\n projectConfig: {\n mockingIntercept: checked,\n mockOpen: projectConfigState.mockOpen,\n },\n }),\n });\n\n const result = await response.json();\n\n if (result.success) {\n // 更新项目配置\n setProjectConfig(prev => {\n if (!prev) return prev;\n return {\n ...prev,\n mockingIntercept: checked,\n };\n });\n\n setProjectConfigState(prev => ({\n ...prev,\n saving: false,\n saveMessage: 'Mock拦截配置已保存',\n }));\n\n // 清除保存消息\n setTimeout(() => {\n setProjectConfigState(prev => ({\n ...prev,\n saveMessage: '',\n }));\n }, 2000);\n } else {\n throw new Error(result.error || '保存失败');\n }\n } catch (error) {\n console.error('保存Mock拦截配置失败:', error);\n setProjectConfigState(prev => ({\n ...prev,\n mockingIntercept: !checked, // 回滚状态\n saving: false,\n saveMessage: `保存失败: ${error instanceof Error ? error.message : '未知错误'}`,\n }));\n\n // 清除错误消息\n setTimeout(() => {\n setProjectConfigState(prev => ({\n ...prev,\n saveMessage: '',\n }));\n }, 3000);\n }\n };\n\n // 处理Mock开启开关变化\n const handleMockOpenChange = async (checked: boolean) => {\n setProjectConfigState(prev => ({\n ...prev,\n mockOpen: checked,\n saving: true,\n saveMessage: '',\n }));\n\n try {\n const response = await fetch('/api/project-config', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName,\n projectConfig: {\n mockingIntercept: projectConfigState.mockingIntercept,\n mockOpen: checked,\n },\n }),\n });\n\n const result = await response.json();\n\n if (result.success) {\n // 更新项目配置\n setProjectConfig(prev => {\n if (!prev) return prev;\n return {\n ...prev,\n mockOpen: checked,\n };\n });\n\n setProjectConfigState(prev => ({\n ...prev,\n saving: false,\n saveMessage: 'Mock开启配置已保存',\n }));\n\n // 清除保存消息\n setTimeout(() => {\n setProjectConfigState(prev => ({\n ...prev,\n saveMessage: '',\n }));\n }, 2000);\n } else {\n throw new Error(result.error || '保存失败');\n }\n } catch (error) {\n console.error('保存Mock开启配置失败:', error);\n setProjectConfigState(prev => ({\n ...prev,\n mockOpen: !checked, // 回滚状态\n saving: false,\n saveMessage: `保存失败: ${error instanceof Error ? error.message : '未知错误'}`,\n }));\n\n // 清除错误消息\n setTimeout(() => {\n setProjectConfigState(prev => ({\n ...prev,\n saveMessage: '',\n }));\n }, 3000);\n }\n };\n\n // 保存配置\n const handleSaveConfig = async (envName: string) => {\n if (!projectConfig || !projectName) return;\n\n const selectedProxyUrl = configState[envName]?.selectedProxy?.trim();\n if (!selectedProxyUrl) {\n setConfigState(prev => ({\n ...prev,\n [envName]: {\n ...prev[envName],\n saveMessage: '请先选择或填写代理地址',\n },\n }));\n return;\n }\n\n // 判断当前选择的是预设选项还是自定义选项\n const selectedOption = configState[envName]?.selectedOption;\n const isCustomProxy = selectedOption === 'custom';\n \n // 设置保存状态\n setConfigState(prev => ({\n ...prev,\n [envName]: {\n ...prev[envName],\n saving: true,\n saveMessage: '',\n },\n }));\n\n try {\n const requestBody: {\n projectName: string;\n envName: string;\n newProxy: string;\n customProxyUrl?: string;\n } = {\n projectName,\n envName,\n newProxy: isCustomProxy ? 'custom' : (selectedOption || ''),\n };\n\n if (isCustomProxy) {\n requestBody.customProxyUrl = selectedProxyUrl;\n }\n\n const response = await fetch('/api/project-config', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody),\n });\n\n const result = await response.json();\n\n if (result.success) {\n // 更新项目配置中的 currentProxy\n setProjectConfig(prev => {\n if (!prev) return prev;\n const updatedEnvs = { ...prev.envs };\n updatedEnvs[envName] = {\n ...updatedEnvs[envName],\n currentProxy: result.data.currentProxy, // 这个值现在是 key 格式\n };\n\n // 如果是 custom 选项,同时更新 proxyEnv.custom 的值\n if (result.data.currentProxy === 'custom') {\n updatedEnvs[envName].proxyEnv = {\n ...updatedEnvs[envName].proxyEnv,\n custom: selectedProxyUrl,\n };\n }\n\n return {\n ...prev,\n envs: updatedEnvs,\n };\n });\n\n setConfigState(prev => ({\n ...prev,\n [envName]: {\n ...prev[envName],\n saving: false,\n saveMessage: '保存成功',\n },\n }));\n } else {\n setConfigState(prev => ({\n ...prev,\n [envName]: {\n ...prev[envName],\n saving: false,\n saveMessage: `保存失败: ${result.error}`,\n },\n }));\n }\n } catch (error) {\n console.error('保存配置失败:', error);\n setConfigState(prev => ({\n ...prev,\n [envName]: {\n ...prev[envName],\n saving: false,\n saveMessage: '保存失败: 网络错误',\n },\n }));\n }\n };\n\n const cleanUpMock=async()=>{\n // 加入alert确定后才执行\n const confirm = window.confirm('确定要一键关闭所有Mock吗?');\n if (!confirm) return;\n \n try {\n const response = await fetch('/api/cleanup-mock', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName: projectName,\n }),\n });\n const result = await response.json();\n if (result.success) {\n await fetchMockData();\n }\n } catch (error) {\n console.error('清空Mock配置失败:', error);\n }\n }\n\n const openAllMock=async()=>{\n // 加入alert确定后才执行\n const confirm = window.confirm('确定要一键开启所有Mock吗?');\n if (!confirm) return;\n \n try {\n const response = await fetch('/api/open-all-mock', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName: projectName,\n }),\n });\n const result = await response.json();\n if (result.success) {\n await fetchMockData();\n }\n } catch (error) {\n console.error('清空Mock配置失败:', error);\n }\n }\n\n // 处理场景切换\n const handleSiteChange = async (apiName: string, method: string, newSite: string) => {\n if (!projectName) return;\n \n try {\n const response = await fetch('/api/mock-setting', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName,\n apiName,\n method,\n currentSite: newSite,\n }),\n });\n\n const result = await response.json();\n\n if (result.success) {\n // 更新本地数据\n setMockData(prev => {\n if (!prev) return prev;\n \n return {\n ...prev,\n mockFiles: prev.mockFiles.map(api => {\n if (api.apiName === apiName) {\n return {\n ...api,\n methods: api.methods.map(methodData => {\n if (methodData.method === method) {\n return {\n ...methodData,\n setting: {\n ...methodData.setting,\n currentSite: newSite,\n },\n };\n }\n return methodData;\n }),\n };\n }\n return api;\n }),\n };\n });\n } else {\n console.error('更新场景失败:', result.error);\n showNotification('error', `更新场景失败: ${result.error}`);\n }\n } catch (error) {\n console.error('更新场景失败:', error);\n showNotification('error', '更新场景失败: 网络错误');\n }\n };\n\n // 处理编辑文件\n const handleEditFile = async (apiName: string, method: string, siteName: string) => {\n if (!projectName) return;\n \n setEditLoading(true);\n setEditorLoading(true);\n try {\n const response = await fetch(\n `/api/mock-file-content?project=${encodeURIComponent(projectName)}&apiName=${encodeURIComponent(apiName)}&method=${encodeURIComponent(method)}&siteName=${encodeURIComponent(siteName)}`\n );\n const result = await response.json();\n\n if (result.success) {\n setEditingFile({\n projectName,\n apiName,\n method,\n siteName,\n content: result.data.content,\n });\n setEditDialogOpen(true);\n } else {\n console.error('获取文件内容失败:', result.error);\n showNotification('error', `获取文件内容失败: ${result.error}`);\n }\n } catch (error) {\n console.error('获取文件内容失败:', error);\n showNotification('error', '获取文件内容失败: 网络错误');\n } finally {\n setEditLoading(false);\n }\n };\n\n // 处理保存文件\n const handleSaveFile = async () => {\n if (!editingFile) return;\n \n setSaveLoading(true);\n try {\n const response = await fetch('/api/mock-file-content', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(editingFile),\n });\n\n const result = await response.json();\n\n if (result.success) {\n setEditDialogOpen(false);\n setEditingFile(null);\n // 可以选择显示成功消息或刷新数据\n } else {\n console.error('保存文件失败:', result.error);\n showNotification('error', `保存文件失败: ${result.error}`);\n }\n } catch (error) {\n console.error('保存文件失败:', error);\n showNotification('error', '保存文件失败: 网络错误');\n } finally {\n setSaveLoading(false);\n }\n };\n\n // 处理取消编辑\n const handleCancelEdit = () => {\n setEditDialogOpen(false);\n setEditingFile(null);\n setEditorLoading(true);\n };\n\n // 处理Mock开启状态切换\n // 处理新建Mock表单数据变化\n const handleCreateFormChange = (field: keyof CreateMockFormData, value: string | boolean) => {\n // 只在新建模式下场景名称固定为\"默认场景\",新增场景模式下允许修改\n if (field === 'siteName' && isCreateMode) return;\n \n setCreateFormData(prev => ({\n ...prev,\n [field]: value\n }));\n };\n\n // 生成默认Mock内容模板(支持MockJS语法)\n const generateMockTemplate = (method: string, apiPath: string) => {\n const methodUpper = method.toUpperCase();\n const apiName = apiPath.replace(/\\//g, '_').replace(/^_/, '');\n \n switch (methodUpper) {\n case 'GET':\n return `const Mock = require('mockjs');\n\nmodule.exports = Mock.mock({\n \"code\": 200,\n \"message\": \"获取${apiName}成功\",\n \"data\": {\n \"id|1-100\": 1,\n \"name\": \"@cname\",\n \"email\": \"@email\",\n \"phone\": /^1[3-9]\\\\d{9}$/,\n \"status|1\": [\"active\", \"inactive\", \"pending\"],\n \"createTime\": \"@datetime('yyyy-MM-dd HH:mm:ss')\",\n \"updateTime\": \"@now('yyyy-MM-dd HH:mm:ss')\",\n \"avatar\": \"@image('200x200', '@color', '@cname')\",\n \"address\": \"@county(true)\"\n }\n});`;\n case 'POST':\n return `const Mock = require('mockjs');\n\nmodule.exports = Mock.mock({\n \"code\": 200,\n \"message\": \"创建${apiName}成功\",\n \"data\": {\n \"id|1-100\": 1,\n \"result\": \"success\",\n \"createTime\": \"@now('yyyy-MM-dd HH:mm:ss')\"\n }\n});`;\n case 'PUT':\n return `const Mock = require('mockjs');\n\nmodule.exports = Mock.mock({\n \"code\": 200,\n \"message\": \"更新${apiName}成功\",\n \"data\": {\n \"id|1-100\": 1,\n \"result\": \"success\",\n \"updateTime\": \"@now('yyyy-MM-dd HH:mm:ss')\"\n }\n});`;\n case 'DELETE':\n return `const Mock = require('mockjs');\n\nmodule.exports = Mock.mock({\n \"code\": 200,\n \"message\": \"删除${apiName}成功\",\n \"data\": {\n \"result\": \"success\",\n \"deleteTime\": \"@now('yyyy-MM-dd HH:mm:ss')\"\n }\n});`;\n default:\n return `const Mock = require('mockjs');\n\nmodule.exports = Mock.mock({\n \"code\": 200,\n \"message\": \"操作成功\",\n \"data\": {\n \"id|1-100\": 1,\n \"timestamp\": \"@now('yyyy-MM-dd HH:mm:ss')\"\n }\n});`;\n }\n };\n\n // 检查接口场景是否已存在\n const checkMockExists = (apiPath: string, method: string, siteName: string) => {\n if (!mockData) return false;\n \n const apiName = apiPath.replace(/\\//g, '_').replace(/^_/, '');\n \n // 在mockData中查找是否存在相同的API、方法和场景组合\n const existingApi = mockData.mockFiles.find(api => api.apiName === apiName);\n if (!existingApi) return false;\n \n const existingMethod = existingApi.methods.find(m => m.method.toLowerCase() === method.toLowerCase());\n if (!existingMethod) return false;\n \n const existingSite = existingMethod.files.find(file => file.siteName === siteName);\n return !!existingSite;\n };\n\n // 创建新的Mock文件\n const handleCreateMock = async () => {\n if (!createFormData.apiPath.trim()) {\n showNotification('error', '请输入接口地址');\n return;\n }\n\n // 检查是否已存在相同的接口场景\n if (checkMockExists(createFormData.apiPath, createFormData.method, createFormData.siteName)) {\n showNotification('error', `接口 ${createFormData.apiPath} [${createFormData.method.toUpperCase()}] 的场景 \"${createFormData.siteName}\" 已存在,不能重复创建`);\n return;\n }\n\n setIsCreating(true);\n try {\n // 将接口路径转换为API名称\n const apiName = createFormData.apiPath.replace(/\\//g, '_').replace(/^_/, '');\n \n // 生成默认Mock内容\n const defaultContent =editingFile?.content?? generateMockTemplate(createFormData.method, createFormData.apiPath);\n \n const response = await fetch('/api/mock-file', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName: projectName,\n apiName: apiName,\n method: createFormData.method.toLowerCase(),\n siteName: createFormData.siteName,\n content: defaultContent,\n }),\n });\n\n const result = await response.json();\n \n if (result.success) {\n // 创建成功后,如果需要开启Mock,则调用开启接口\n if (createFormData.mockOpen) {\n await handleMockOpenToggle(apiName, createFormData.method.toLowerCase(), createFormData.siteName, true);\n }\n \n // 重置表单数据\n setCreateFormData({\n apiPath: '',\n method: 'GET',\n siteName: '默认场景',\n mockOpen: true,\n });\n \n // 关闭弹框\n setIsCreateMode(false);\n \n // 刷新Mock列表\n await fetchMockData();\n \n showNotification('success', 'Mock文件创建成功');\n } else {\n throw new Error(result.error || '创建失败');\n }\n } catch (error) {\n console.error('创建Mock文件失败:', error);\n showNotification('error', `创建Mock文件失败: ${error instanceof Error ? error.message : '未知错误'}`);\n } finally {\n setIsCreating(false);\n }\n };\n\n // 新增mock场景\n const handleAddMockScene = () => {\n // 打开弹窗 填充默认值\n setIsCreateMode(true)\n const defaultMockContent=generateMockTemplate(createFormData.method, createFormData.apiPath);\n setEditingFile({\n projectName: projectName || '',\n apiName: createFormData.apiPath,\n method: createFormData.method.toLowerCase(),\n siteName: '',\n content: defaultMockContent || '',\n } );\n }\n\n // 处理新增场景按钮点击\n const handleAddScene = (apiName: string, method: string, apiPath: string) => {\n console.log('新增场景点击:', { apiName, method, apiPath }); // 调试信息\n setCurrentSceneContext({ apiName, method, apiPath });\n // 使用当前行的数据填充表单,但场景名称重置为空\n const formData = {\n apiPath: apiPath,\n method: method.toUpperCase(),\n siteName: '',\n mockOpen: true,\n };\n console.log('设置表单数据:', formData); // 调试信息\n setCreateFormData(formData);\n setIsAddSceneMode(true);\n const defaultMockContent=generateMockTemplate(formData.method, formData.apiPath);\n setEditingFile({\n projectName: projectName || '',\n apiName: apiName,\n method: method.toLowerCase(),\n siteName: '',\n content: defaultMockContent || '',\n } );\n };\n\n // 检查场景名称是否已存在(针对当前API和方法)\n const checkSceneExists = (apiName: string, method: string, siteName: string) => {\n if (!mockData) return false;\n \n const existingApi = mockData.mockFiles.find(api => api.apiName === apiName);\n if (!existingApi) return false;\n \n const existingMethod = existingApi.methods.find(m => m.method.toLowerCase() === method.toLowerCase());\n if (!existingMethod) return false;\n \n const existingSite = existingMethod.files.find(file => file.siteName === siteName);\n return !!existingSite;\n };\n\n // 新增场景提交\n const handleAddSceneSubmit = async () => {\n if (!currentSceneContext || !createFormData.siteName.trim()) {\n showNotification('error', '请输入场景名称');\n return;\n }\n\n // 检查是否已存在相同的场景名称\n if (checkSceneExists(currentSceneContext.apiName, currentSceneContext.method, createFormData.siteName)) {\n showNotification('error', `接口 ${currentSceneContext.apiPath} [${currentSceneContext.method.toUpperCase()}] 的场景 \"${createFormData.siteName}\" 已存在`);\n return;\n }\n\n setIsCreating(true);\n try {\n // 生成默认Mock内容\n const defaultContent =editingFile?.content?? generateMockTemplate(currentSceneContext.method, currentSceneContext.apiPath);\n console.log('defaultContent', defaultContent,editingFile);\n\n const response = await fetch('/api/mock-file', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName: projectName,\n apiName: currentSceneContext.apiName,\n method: currentSceneContext.method.toLowerCase(),\n siteName: createFormData.siteName,\n content: defaultContent,\n }),\n });\n\n const result = await response.json();\n \n if (result.success) {\n // 创建成功后,如果需要开启Mock,则调用开启接口\n if (createFormData.mockOpen) {\n await handleMockOpenToggle(currentSceneContext.apiName, currentSceneContext.method, createFormData.siteName, true);\n }\n \n // 重置表单数据和状态\n setCreateFormData({\n apiPath: '',\n method: 'GET',\n siteName: '默认场景',\n mockOpen: true,\n });\n \n // 自动切换到新创建的场景\n if (projectConfig) {\n try {\n const switchResponse = await fetch('/api/mock-setting', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName: projectConfig.projectName,\n apiName: currentSceneContext.apiName,\n method: currentSceneContext.method,\n currentSite: createFormData.siteName,\n }),\n });\n\n const switchResult = await switchResponse.json();\n if (!switchResult.success) {\n console.warn('切换到新场景失败:', switchResult.error);\n }\n } catch (error) {\n console.warn('切换到新场景失败:', error);\n }\n }\n\n // 自动开启新创建的场景\n try {\n await handleMockOpenToggle(currentSceneContext.apiName, currentSceneContext.method, createFormData.siteName, true);\n } catch (error) {\n console.warn('自动开启新场景失败:', error);\n }\n\n // 关闭弹框\n setIsAddSceneMode(false);\n setCurrentSceneContext(null);\n \n // 刷新Mock列表\n await fetchMockData();\n \n showNotification('success', '场景创建成功');\n } else {\n throw new Error(result.error || '创建失败');\n }\n } catch (error) {\n console.error('创建场景失败:', error);\n showNotification('error', `创建场景失败: ${error instanceof Error ? error.message : '未知错误'}`);\n } finally {\n setIsCreating(false);\n }\n };\n\n const handleMockOpenToggle = async (apiName: string, method: string, siteName: string, isOpen: boolean) => {\n if (!projectConfig) return;\n \n try {\n const response = await fetch('/api/mock-open-status', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n projectName: projectConfig.projectName,\n apiName,\n method,\n siteName,\n isOpen,\n }),\n });\n\n const result = await response.json();\n if (result.success) {\n // 重新获取Mock数据以更新状态\n await fetchMockData();\n } else {\n console.error('更新Mock开启状态失败:', result.error);\n }\n } catch (error) {\n console.error('更新Mock开启状态失败:', error);\n }\n };\n\n // 显示通知\n const showNotification = (type: 'success' | 'error', message: string) => {\n setNotification({ open: true, type, message });\n setTimeout(() => {\n setNotification({ open: false, type: 'success', message: '' });\n }, 3000);\n };\n\n // 处理删除场景 - 显示确认对话框\n const handleDeleteScenario = (apiName: string, method: string, siteName: string) => {\n setDeleteConfirmDialog({\n open: true,\n apiName,\n method,\n siteName,\n });\n };\n\n // 确认删除场景\n const confirmDeleteScenario = async () => {\n if (!projectConfig) return;\n \n const { apiName, method, siteName } = deleteConfirmDialog;\n \n try {\n const response = await fetch(`/api/mock-file?project=${encodeURIComponent(projectConfig.projectName)}&apiName=${encodeURIComponent(apiName)}&method=${encodeURIComponent(method)}&siteName=${encodeURIComponent(siteName)}`, {\n method: 'DELETE',\n });\n\n const result = await response.json();\n if (result.success) {\n // 保存当前滚动位置\n const scrollPosition = window.scrollY;\n \n // 重新获取Mock数据以更新状态\n await fetchMockData();\n \n // 恢复滚动位置\n window.scrollTo(0, scrollPosition);\n \n showNotification('success', '场景删除成功');\n } else {\n console.error('删除场景失败:', result.error);\n showNotification('error', `删除场景失败: ${result.error}`);\n }\n } catch (error) {\n console.error('删除场景失败:', error);\n showNotification('error', '删除场景失败: 网络错误');\n } finally {\n // 关闭确认对话框\n setDeleteConfirmDialog({\n open: false,\n apiName: '',\n method: '',\n siteName: '',\n });\n }\n };\n\n // 处理删除接口 - 显示确认对话框\n const handleDeleteApi = (apiName: string, apiPath: string) => {\n setDeleteApiDialog({\n open: true,\n apiName,\n apiPath,\n });\n };\n\n // 确认删除接口\n const confirmDeleteApi = async () => {\n if (!projectConfig) return;\n \n const { apiName } = deleteApiDialog;\n \n try {\n const response = await fetch(`/api/delete-mock-api?project=${encodeURIComponent(projectConfig.projectName)}&apiName=${encodeURIComponent(apiName)}`, {\n method: 'DELETE',\n });\n\n const result = await response.json();\n if (result.success) {\n // 保存当前滚动位置\n const scrollPosition = window.scrollY;\n \n // 重新获取Mock数据以更新状态\n await fetchMockData();\n \n // 恢复滚动位置\n window.scrollTo(0, scrollPosition);\n \n showNotification('success', '接口删除成功');\n } else {\n console.error('删除接口失败:', result.error);\n showNotification('error', `删除接口失败: ${result.error}`);\n }\n } catch (error) {\n console.error('删除接口失败:', error);\n showNotification('error', '删除接口失败: 网络错误');\n } finally {\n // 关闭确认对话框\n setDeleteApiDialog({\n open: false,\n apiName: '',\n apiPath: '',\n });\n }\n };\n\n // 处理搜索关键词变化\n const handleSearchChange = (value: string) => {\n setSearchKeyword(value);\n // 搜索时重置分页到第一页\n setCurrentPage(1);\n };\n\n // 清空搜索关键词\n const handleClearSearch = () => {\n setSearchKeyword('');\n // 清空搜索时重置分页到第一页\n setCurrentPage(1);\n };\n\n if (loading) {\n return (\n <main className=\"container mx-auto p-4 sm:p-6 md:p-8\">\n <div className=\"text-center py-8\">\n <p>加载中...</p>\n </div>\n </main>\n );\n }\n\n if (error || !projectConfig) {\n return (\n <main className=\"container mx-auto p-4 sm:p-6 md:p-8\">\n <div className=\"flex justify-between items-center mb-6\">\n <h1 className=\"text-2xl font-bold\">项目配置</h1>\n <div className=\"flex gap-2\">\n {projectName && (\n <EditorSplitButton\n onOpen={handleOpenProject}\n loading={openingProject}\n loadingText=\"打开中...\"\n variant=\"default\"\n />\n )}\n <Button\n variant=\"outline\"\n onClick={handleBackToInitialization}\n >\n 返回初始化页面\n </Button>\n </div>\n </div>\n <div className=\"text-center text-red-500 py-8\">\n <p>{error || '未找到项目配置'}</p>\n </div>\n </main>\n );\n }\n\n const envNames = Object.keys(projectConfig.envs);\n\n return (\n <main className=\"container mx-auto p-4 sm:p-6 md:p-8\">\n <div className=\"flex justify-between items-center mb-6\">\n <div className=\"flex items-center gap-4\">\n <h1 className=\"text-2xl font-bold\">\n {projectConfig.projectName} - 项目配置\n </h1>\n {/* 项目切换选择器 */}\n <div className=\"flex items-center gap-2\">\n <Label className=\"text-sm font-medium text-gray-600\">切换项目:</Label>\n <Select\n value={projectName || ''}\n onValueChange={handleProjectSwitch}\n disabled={projectsLoading}\n >\n <SelectTrigger className=\"w-40\">\n <SelectValue placeholder={projectsLoading ? \"加载中...\" : \"选择项目\"} />\n </SelectTrigger>\n <SelectContent>\n {availableProjects.map((project) => (\n <SelectItem key={project.name} value={project.name}>\n <div className=\"flex items-center gap-2\">\n <span\n className={`h-2 w-2 rounded-full ${\n project.status === ProjectStatus.EXISTING\n ? 'bg-green-500'\n : project.status === ProjectStatus.FAILED\n ? 'bg-red-500'\n : 'bg-yellow-500'\n } ${runningProjects[project.name] ? 'animate-pulse' : ''}`}\n />\n <span>{project.name}</span>\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n {/* 分支信息 - 移动到这里 */}\n <div className=\"ml-4\">\n <BranchInfo projectName={projectName || ''} compact={true} />\n </div>\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => setCreateWorkspaceDialog(true)}\n >\n 创建工作区\n </Button>\n <EditorSplitButton\n onOpen={handleOpenProject}\n loading={openingProject}\n loadingText=\"打开中...\"\n variant=\"default\"\n />\n <Button\n variant=\"outline\"\n onClick={handleBackToInitialization}\n >\n 返回初始化页面\n </Button>\n </div>\n </div>\n\n {envNames.length > 0 ? (\n <Tabs \n value={currentTab || envNames[0]} \n onValueChange={(value) => {\n setCurrentTab(value);\n if (value === 'mock') {\n fetchMockData();\n }\n }}\n className=\"w-full\"\n >\n <TabsList className=\"grid w-full\" style={{ gridTemplateColumns: `repeat(${envNames.length + 1}, 1fr)` }}>\n {envNames.map((envName) => (\n <TabsTrigger key={envName} value={envName} className=\"capitalize relative\">\n <span className=\"flex items-center gap-2\">\n {envName}\n {processStatuses[envName]?.running && (\n <span className=\"w-2 h-2 bg-green-500 rounded-full animate-pulse\" title=\"运行中\" />\n )}\n </span>\n </TabsTrigger>\n ))}\n <TabsTrigger value=\"mock\" className=\"capitalize\">\n Mock配置\n </TabsTrigger>\n </TabsList>\n\n {envNames.map((envName) => {\n const envConfig = projectConfig.envs[envName];\n const proxyOptions = Object.entries(envConfig.proxyEnv);\n const currentSelectedUrl = configState[envName]?.selectedProxy || '';\n \n // 获取当前选择的选项\n const currentEditSelection = configState[envName]?.selectedOption || '';\n\n // 获取已保存的配置信息(用于显示当前生效的配置)\n const savedCurrentProxy = envConfig.currentProxy;\n const savedProxyUrl = envConfig.proxyEnv[savedCurrentProxy] || savedCurrentProxy;\n const savedSelection = envConfig.proxyEnv[savedCurrentProxy] ? savedCurrentProxy : 'custom';\n\n return (\n <TabsContent key={envName} value={envName} className=\"space-y-6\">\n {/* 启动/停止控制区域 */}\n <div className=\"p-6 bg-gray-50 rounded-lg\">\n <div className=\"flex items-center justify-between mb-4\">\n <h3 className=\"text-lg font-semibold\">开发服务器控制</h3>\n <div className=\"flex items-center gap-4\">\n {processStatuses[envName]?.running ? (\n <>\n <span className=\"flex items-center gap-2 text-sm text-green-600\">\n <span className=\"w-2 h-2 bg-green-500 rounded-full animate-pulse\" />\n 运行中 (PID: {processStatuses[envName]?.pid})\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleShowLogs(envName)}\n >\n 查看日志\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => handleStopProcess(envName)}\n disabled={processStatuses[envName]?.loading}\n >\n {processStatuses[envName]?.loading ? '处理中...' : '停止'}\n </Button>\n </>\n ) : (\n <>\n <span className=\"flex items-center gap-2 text-sm text-gray-500\">\n <span className=\"w-2 h-2 bg-gray-400 rounded-full\" />\n 未运行\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleShowLogs(envName)}\n >\n 查看日志\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={() => handleStartProcess(envName)}\n disabled={processStatuses[envName]?.loading || !envConfig.startCommand}\n >\n {processStatuses[envName]?.loading ? '处理中...' : '启动'}\n </Button>\n </>\n )}\n </div>\n </div>\n \n {envConfig.startCommand ? (\n <div className=\"text-sm text-gray-600\">\n <span className=\"font-medium\">启动命令:</span> <code className=\"px-2 py-1 bg-gray-200 rounded\">{envConfig.startCommand}</code>\n </div>\n ) : (\n <div className=\"text-sm text-yellow-600\">\n ⚠️ 该环境未配置启动命令\n </div>\n )}\n \n {envConfig.host && (\n <div className=\"text-sm text-gray-600 mt-2\">\n <span className=\"font-medium\">访问地址:</span>\n {processStatuses[envName]?.running ? (\n <a\n href={envConfig.host}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"ml-2 text-blue-600 hover:underline\"\n >\n {envConfig.host}\n </a>\n ) : (\n <span className=\"ml-2\">{envConfig.host}</span>\n )}\n </div>\n )}\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* 左侧:环境配置 */}\n <div className=\"p-6 bg-gray-50 rounded-lg\">\n <h3 className=\"text-lg font-semibold mb-4\">{envName} 环境配置</h3>\n \n <div className=\"space-y-4\">\n <div>\n <Label className=\"block text-sm font-medium mb-2\">\n 接口代理环境切换\n </Label>\n <Select\n value={currentEditSelection}\n onValueChange={(value) => handleProxyChange(envName, value)}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"选择代理环境\" />\n </SelectTrigger>\n <SelectContent>\n {proxyOptions.map(([key, value]) => (\n <SelectItem key={key} value={key}>\n {key}({value})\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {savedProxyUrl && (\n <div className=\"p-3 bg-blue-50 rounded-md\">\n <p className=\"text-sm text-blue-700\">\n 当前项目接口已代理至:{savedSelection} 环境\n </p>\n <p className=\"text-sm text-blue-600\">\n 代理地址为:{savedProxyUrl}\n </p>\n </div>\n )}\n\n {currentEditSelection === 'custom' && (\n <div className=\"space-y-2\">\n <Label className=\"block text-sm font-medium\">\n 自定义代理地址\n </Label>\n <Input\n type=\"url\"\n placeholder=\"请输入自定义代理地址 (如: http://localhost:52741)\"\n value={currentSelectedUrl}\n onChange={(e) => handleCustomProxyChange(envName, e.target.value)}\n className=\"w-full\"\n />\n <p className=\"text-xs text-gray-500\">\n 请输入完整的代理地址,包括协议 (http:// 或 https://)\n </p>\n </div>\n )}\n\n <div className=\"flex items-center justify-between\">\n <Button \n onClick={() => handleSaveConfig(envName)}\n disabled={configState[envName]?.saving}\n className=\"w-full sm:w-auto\"\n >\n {configState[envName]?.saving ? '保存中...' : '保存配置'}\n </Button>\n \n {configState[envName]?.saveMessage && (\n <span className={`text-sm ml-3 ${\n configState[envName]?.saveMessage === '保存成功' \n ? 'text-green-600' \n : 'text-red-600'\n }`}>\n {configState[envName]?.saveMessage}\n </span>\n )}\n </div>\n </div>\n </div>\n\n {/* 右侧:MicroApp代理配置 */}\n <MicroAppProxyTable \n currentProjectName={projectConfig.projectName}\n currentEnvName={envName}\n />\n </div>\n </TabsContent>\n );\n })}\n \n {/* Mock配置Tab */}\n <TabsContent value=\"mock\" className=\"space-y-6\">\n <div className=\"p-6 bg-gray-50 rounded-lg\">\n <h3 className=\"text-lg font-semibold mb-4\">Mock配置</h3>\n \n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-1\">\n <Label className=\"text-sm font-medium\">Mock拦截</Label>\n <p className=\"text-xs text-gray-500\">启用或禁用Mock拦截功能</p>\n </div>\n <Switch\n checked={projectConfigState.mockingIntercept}\n onCheckedChange={handleMockingInterceptChange}\n />\n </div>\n \n <div className=\"flex items-center justify-between\">\n <div className=\"space-y-1\">\n <Label className=\"text-sm font-medium\">Mock开启</Label>\n <p className=\"text-xs text-gray-500\">启用或禁用Mock功能</p>\n </div>\n <Switch\n checked={projectConfigState.mockOpen}\n onCheckedChange={handleMockOpenChange}\n />\n </div>\n </div>\n \n {/* 保存状态消息 */}\n {projectConfigState.saveMessage && (\n <div className=\"mb-6\">\n <span className={`text-sm ${\n projectConfigState.saveMessage.includes('已保存') \n ? 'text-green-600' \n : 'text-red-600'\n }`}>\n {projectConfigState.saveMessage}\n </span>\n </div>\n )}\n\n {/* Mock接口列表 */}\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-md font-medium\">Mock接口列表</h4>\n <div className=\"flex items-center gap-2\">\n <Button \n onClick={handleAddMockScene}\n variant=\"default\"\n size=\"sm\"\n >\n 新建\n </Button>\n <Button \n onClick={fetchMockData}\n disabled={mockLoading}\n variant=\"outline\"\n size=\"sm\"\n >\n {mockLoading ? '加载中...' : '刷新'}\n </Button>\n <Button \n onClick={cleanUpMock}\n variant=\"outline\"\n size=\"sm\"\n >\n 一键关闭\n </Button>\n <Button \n onClick={openAllMock}\n variant=\"outline\"\n size=\"sm\"\n >\n 一键开启\n </Button>\n </div>\n </div>\n\n {/* 搜索输入框 */}\n <div className=\"flex items-center gap-2\">\n <div className=\"relative flex-1 max-w-md\">\n <Input\n placeholder=\"搜索接口地址...\"\n value={searchKeyword}\n onChange={(e) => handleSearchChange(e.target.value)}\n className=\"pr-8\"\n />\n {searchKeyword && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClearSearch}\n className=\"absolute right-1 top-1/2 transform -translate-y-1/2 h-6 w-6 p-0 hover:bg-gray-100\"\n >\n ×\n </Button>\n )}\n </div>\n {searchKeyword && (\n <span className=\"text-sm text-gray-500\">\n 搜索关键词: &quot;{searchKeyword}&quot;\n </span>\n )}\n </div>\n\n {mockLoading ? (\n <div className=\"text-center py-8\">\n <p className=\"text-gray-500\">加载Mock数据中...</p>\n </div>\n ) : mockData && mockData.mockFiles.length > 0 ? (\n (() => {\n // 扁平化数据用于表格展示\n const flatData: Array<{\n apiPath: string;\n method: string;\n currentSite: string;\n availableSites: string[];\n apiName: string;\n isOpen: boolean;\n openSites: string[];\n }> = [];\n\n mockData.mockFiles.forEach(api => {\n api.methods.forEach(methodData => {\n const apiPath = api.apiName.replace(/_/g, '/');\n const availableSites = methodData.files.map(file => file.siteName);\n const currentSite = methodData.setting?.currentSite || (availableSites[0] || '');\n const openSites = methodData.setting?.open || [];\n const isOpen = openSites.includes(currentSite);\n \n flatData.push({\n apiPath,\n method: methodData.method.toUpperCase(),\n currentSite,\n availableSites,\n apiName: api.apiName,\n isOpen,\n openSites,\n });\n });\n });\n\n // 根据搜索关键词过滤数据\n const filteredData = searchKeyword.trim() \n ? flatData.filter(item => \n item.apiPath.toLowerCase().includes(searchKeyword.toLowerCase())\n )\n : flatData;\n\n // 分页计算\n const totalItems = filteredData.length;\n const totalPages = Math.ceil(totalItems / itemsPerPage);\n const startIndex = (currentPage - 1) * itemsPerPage;\n const endIndex = startIndex + itemsPerPage;\n const currentData = filteredData.slice(startIndex, endIndex);\n\n return (\n <div className=\"space-y-4\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>接口地址</TableHead>\n <TableHead>请求方法</TableHead>\n <TableHead>当前场景</TableHead>\n <TableHead>开启mock</TableHead>\n <TableHead>操作</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {currentData.map((row, index) => (\n <TableRow key={`${row.apiName}-${row.method}-${index}`}>\n <TableCell className=\"font-medium\">\n {row.apiPath}\n </TableCell>\n <TableCell>\n <span className={`px-2 py-1 rounded text-xs font-medium ${\n row.method === 'GET' ? 'bg-green-100 text-green-800' :\n row.method === 'POST' ? 'bg-blue-100 text-blue-800' :\n row.method === 'PUT' ? 'bg-yellow-100 text-yellow-800' :\n row.method === 'DELETE' ? 'bg-red-100 text-red-800' :\n 'bg-gray-100 text-gray-800'\n }`}>\n {row.method}\n </span>\n </TableCell>\n <TableCell>\n <div className=\"flex items-center gap-2\">\n <Select\n value={row.currentSite}\n onValueChange={(newSite) => handleSiteChange(row.apiName, row.method.toLowerCase(), newSite)}\n >\n <SelectTrigger className=\"w-32\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {row.availableSites.map(site => (\n <SelectItem key={site} value={site}>\n {site}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {row.availableSites.length > 1 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleDeleteScenario(row.apiName, row.method.toLowerCase(), row.currentSite)}\n className=\"h-8 w-8 p-0 text-red-500 hover:text-red-700 hover:bg-red-50\"\n title=\"删除当前场景\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 6h18\"></path>\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"></path>\n <path d=\"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2\"></path>\n </svg>\n </Button>\n )}\n </div>\n </TableCell>\n <TableCell>\n <Switch\n checked={row.isOpen}\n onCheckedChange={(checked) => handleMockOpenToggle(row.apiName, row.method.toLowerCase(), row.currentSite, checked)}\n />\n </TableCell>\n <TableCell>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleEditFile(row.apiName, row.method.toLowerCase(), row.currentSite)}\n disabled={editLoading}\n >\n {editLoading ? '加载中...' : '编辑'}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleAddScene(row.apiName, row.method.toLowerCase(), row.apiPath)}\n disabled={isCreating}\n >\n 新增场景\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleDeleteApi(row.apiName, row.apiPath)}\n className=\"text-red-500 hover:text-red-700 hover:border-red-300\"\n >\n 删除接口\n </Button>\n </div>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n {/* 分页控件 */}\n {totalPages > 1 && (\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm text-gray-500\">\n 显示 {startIndex + 1}-{Math.min(endIndex, totalItems)} 条,共 {totalItems} 条\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage(prev => Math.max(1, prev - 1))}\n disabled={currentPage === 1}\n >\n 上一页\n </Button>\n <span className=\"text-sm\">\n {currentPage} / {totalPages}\n </span>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setCurrentPage(prev => Math.min(totalPages, prev + 1))}\n disabled={currentPage === totalPages}\n >\n 下一页\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n })()\n ) : (\n <div className=\"text-center py-8\">\n <p className=\"text-gray-500\">暂无Mock接口数据</p>\n <p className=\"text-xs text-gray-400 mt-1\">请先创建Mock文件</p>\n </div>\n )}\n </div>\n </div>\n </TabsContent>\n </Tabs>\n ) : (\n <div className=\"text-center text-gray-500 py-8\">\n <p>该项目没有配置环境信息</p>\n </div>\n )}\n\n {/* 编辑/新建Mock文件/新增场景对话框 */}\n <Dialog open={editDialogOpen || isCreateMode || isAddSceneMode} onOpenChange={(open) => {\n if (!open) {\n setEditDialogOpen(false);\n setIsCreateMode(false);\n setIsAddSceneMode(false);\n setCurrentSceneContext(null);\n }\n }}>\n <DialogContent className=\"w-screen h-screen max-w-none max-h-none m-0 rounded-none overflow-hidden flex flex-col\">\n <DialogHeader className=\"flex-shrink-0 border-b pb-4\">\n <DialogTitle>\n {isCreateMode ? '新建Mock文件' : \n isAddSceneMode ? '新增场景' : \n '编辑Mock文件'}\n </DialogTitle>\n <DialogDescription>\n {isCreateMode ? (\n '创建一个新的Mock接口文件'\n ) : isAddSceneMode && currentSceneContext ? (\n <>\n 为接口 {currentSceneContext.apiPath} [{currentSceneContext.method.toUpperCase()}] 新增场景\n </>\n ) : editingFile ? (\n <>\n 编辑 {editingFile.apiName.replace(/_/g, '/')} - {editingFile.method.toUpperCase()} - {editingFile.siteName}.cjs\n </>\n ) : null}\n </DialogDescription>\n </DialogHeader>\n \n {/* 新建模式/新增场景的表单区域 */}\n {(isCreateMode || isAddSceneMode) && (\n <div className=\"flex-shrink-0 border-b pb-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"apiPath\" className=\"text-sm font-medium\">接口地址</Label>\n {isAddSceneMode ? (\n <div className=\"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600\">\n {createFormData.apiPath}\n </div>\n ) : (\n <Input\n id=\"apiPath\"\n placeholder=\"/api/user/info\"\n value={createFormData.apiPath}\n onChange={(e) => handleCreateFormChange('apiPath', e.target.value)}\n />\n )}\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"method\" className=\"text-sm font-medium\">请求方法</Label>\n {isAddSceneMode ? (\n <div className=\"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600\">\n {createFormData.method}\n </div>\n ) : (\n <Select\n value={createFormData.method}\n onValueChange={(value) => handleCreateFormChange('method', value)}\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"GET\">GET</SelectItem>\n <SelectItem value=\"POST\">POST</SelectItem>\n <SelectItem value=\"PUT\">PUT</SelectItem>\n <SelectItem value=\"DELETE\">DELETE</SelectItem>\n <SelectItem value=\"PATCH\">PATCH</SelectItem>\n </SelectContent>\n </Select>\n )}\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"siteName\" className=\"text-sm font-medium\">场景名称</Label>\n {isCreateMode ? (\n <div className=\"px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm text-gray-600\">\n 默认场景\n </div>\n ) : (\n <Input\n id=\"siteName\"\n placeholder=\"请输入场景名称\"\n value={createFormData.siteName}\n onChange={(e) => handleCreateFormChange('siteName', e.target.value)}\n />\n )}\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"mockOpen\" className=\"text-sm font-medium\">开启Mock</Label>\n <div className=\"flex items-center space-x-2\">\n <Switch\n id=\"mockOpen\"\n checked={createFormData.mockOpen}\n onCheckedChange={(checked) => handleCreateFormChange('mockOpen', checked)}\n />\n <span className=\"text-sm text-gray-600\">\n {createFormData.mockOpen ? '开启' : '关闭'}\n </span>\n </div>\n </div>\n </div>\n \n {/* 重复性检查提示 */}\n {isCreateMode && createFormData.apiPath.trim() && createFormData.siteName.trim() && \n checkMockExists(createFormData.apiPath, createFormData.method, createFormData.siteName) && (\n <div className=\"mt-4 p-3 bg-red-50 border border-red-200 rounded-md\">\n <div className=\"flex items-center\">\n <span className=\"text-red-600 text-sm\">\n ⚠️ 接口 {createFormData.apiPath} [{createFormData.method.toUpperCase()}] 的场景 &quot;{createFormData.siteName}&quot; 已存在\n </span>\n </div>\n </div>\n )}\n \n {/* 新增场景模式的重复性检查提示 */}\n {isAddSceneMode && currentSceneContext && createFormData.siteName.trim() && \n checkSceneExists(currentSceneContext.apiName, currentSceneContext.method, createFormData.siteName) && (\n <div className=\"mt-4 p-3 bg-red-50 border border-red-200 rounded-md\">\n <div className=\"flex items-center\">\n <span className=\"text-red-600 text-sm\">\n ⚠️ 场景 &quot;{createFormData.siteName}&quot; 已存在\n </span>\n </div>\n </div>\n )}\n </div>\n )}\n \n <div className=\"flex-1 flex flex-col space-y-4 py-4\">\n <div className=\"flex-1 flex flex-col\">\n <Label className=\"text-sm font-medium mb-2\">文件内容</Label>\n <div className=\"flex-1 border rounded-md overflow-hidden relative\">\n {editorLoading && (\n <div className=\"absolute inset-0 bg-gray-50 flex items-center justify-center z-10\">\n <p className=\"text-gray-500\">编辑器加载中...</p>\n </div>\n )}\n <Editor\n key={isCreateMode ? 'create' : isAddSceneMode ? 'addscene' : 'edit'} // 添加key确保重新挂载\n height=\"100%\"\n defaultLanguage=\"javascript\"\n value={editingFile?.content || ''}\n onChange={(value) => {\n setEditingFile(prev => prev ? { ...prev, content: value || '' } : null);\n }}\n onMount={async (editor) => {\n console.log('编辑器挂载,模式:', { isCreateMode, isAddSceneMode, createFormData }); // 调试信息\n setEditorInstance(editor);\n setEditorLoading(false);\n // 自动格式化代码\n setTimeout(() => autoFormatCode(editor), 500);\n }}\n loading={<div className=\"flex items-center justify-center h-full\"><p className=\"text-gray-500\">编辑器加载中...</p></div>}\n options={{\n minimap: { enabled: false },\n fontSize: 14,\n lineNumbers: 'on',\n roundedSelection: false,\n scrollBeyondLastLine: false,\n automaticLayout: true,\n tabSize: 2,\n insertSpaces: true,\n wordWrap: 'on',\n theme: 'vs-dark',\n bracketPairColorization: { enabled: true },\n quickSuggestions: {\n other: true,\n comments: true,\n strings: true,\n },\n formatOnPaste: true,\n formatOnType: true,\n readOnly: false, // 编辑器始终可编辑\n }}\n />\n </div>\n </div>\n </div>\n\n <DialogFooter className=\"flex justify-between flex-shrink-0 border-t pt-4\">\n <Button \n variant=\"secondary\" \n onClick={formatCode}\n disabled={!editorInstance || editorLoading}\n >\n 格式化代码\n </Button>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" onClick={() => {\n if (isCreateMode) {\n setIsCreateMode(false);\n setCreateFormData({\n apiPath: '',\n method: 'GET',\n siteName: '默认场景',\n mockOpen: true,\n });\n } else if (isAddSceneMode) {\n setIsAddSceneMode(false);\n setCurrentSceneContext(null);\n setCreateFormData({\n apiPath: '',\n method: 'GET',\n siteName: '默认场景',\n mockOpen: true,\n });\n } else {\n handleCancelEdit();\n }\n }}>\n 取消\n </Button>\n {isCreateMode ? (\n <Button onClick={handleCreateMock} disabled={\n isCreating || \n !createFormData.apiPath.trim() || \n !createFormData.siteName.trim() ||\n checkMockExists(createFormData.apiPath, createFormData.method, createFormData.siteName)\n }>\n {isCreating ? '创建中...' : '创建'}\n </Button>\n ) : isAddSceneMode ? (\n <Button onClick={handleAddSceneSubmit} disabled={\n isCreating || \n !createFormData.siteName.trim() ||\n (currentSceneContext ? checkSceneExists(currentSceneContext.apiName, currentSceneContext.method, createFormData.siteName) : false)\n }>\n {isCreating ? '创建中...' : '创建'}\n </Button>\n ) : (\n <Button onClick={handleSaveFile} disabled={saveLoading}>\n {saveLoading ? '保存中...' : '保存'}\n </Button>\n )}\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* 日志查看对话框 */}\n <Dialog open={showLogsDialog} onOpenChange={(open) => {\n if (!open) {\n handleCloseLogsDialog();\n }\n }}>\n <DialogContent className=\"max-w-5xl h-[85vh] max-h-[85vh] flex flex-col p-0\">\n <DialogHeader className=\"px-6 pt-6 pb-4\">\n <DialogTitle className=\"flex items-center justify-between\">\n <span>进程日志 - {projectName} - {currentLogsEnv}</span>\n <span className=\"flex items-center gap-2 text-sm font-normal\">\n {logEventSource && (\n <span className=\"flex items-center gap-1 text-green-600\">\n <span className=\"w-2 h-2 bg-green-500 rounded-full animate-pulse\" />\n 实时连接\n </span>\n )}\n </span>\n </DialogTitle>\n <DialogDescription>\n 实时显示进程输出日志\n </DialogDescription>\n </DialogHeader>\n \n <div className=\"flex-1 min-h-0 bg-gray-900 mx-6 rounded-md overflow-hidden\">\n <LogViewer logs={processLogs} />\n </div>\n \n <DialogFooter className=\"flex items-center justify-between px-6 pb-6 pt-4\">\n <div className=\"text-sm text-gray-500\">\n 共 {processLogs.length} 条日志\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={handleRefreshLogs}\n disabled={!!logEventSource}\n >\n 重新连接\n </Button>\n <Button variant=\"default\" onClick={handleCloseLogsDialog}>\n 关闭\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* 删除场景确认对话框 */}\n <Dialog open={deleteConfirmDialog.open} onOpenChange={(open) => {\n if (!open) {\n setDeleteConfirmDialog({\n open: false,\n apiName: '',\n method: '',\n siteName: '',\n });\n }\n }}>\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2 text-red-600\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 6h18\"></path>\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"></path>\n <path d=\"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2\"></path>\n </svg>\n 确认删除场景\n </DialogTitle>\n <DialogDescription>\n 确定要删除场景 <span className=\"font-medium text-gray-900\">&quot;{deleteConfirmDialog.siteName}&quot;</span> 吗?\n <br />\n <span className=\"text-red-500 text-sm mt-2 block\">此操作不可撤销</span>\n </DialogDescription>\n </DialogHeader>\n \n <DialogFooter className=\"flex gap-2 justify-end\">\n <Button\n variant=\"outline\"\n onClick={() => setDeleteConfirmDialog({\n open: false,\n apiName: '',\n method: '',\n siteName: '',\n })}\n >\n 取消\n </Button>\n <Button\n variant=\"destructive\"\n onClick={confirmDeleteScenario}\n >\n 删除\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n\n {/* 删除接口确认对话框 */}\n <Dialog open={deleteApiDialog.open} onOpenChange={(open) => {\n if (!open) {\n setDeleteApiDialog({\n open: false,\n apiName: '',\n apiPath: '',\n });\n }\n }}>\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2 text-red-600\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 6h18\"></path>\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"></path>\n <path d=\"M8 6V4c0-1 1-2 2-2h4c0 1 1 2 2 2v2\"></path>\n </svg>\n 确认删除接口\n </DialogTitle>\n <DialogDescription>\n 确定要删除整个接口 <span className=\"font-medium text-gray-900\">&quot;{deleteApiDialog.apiPath}&quot;</span> 吗?\n <br />\n <span className=\"text-red-500 text-sm mt-2 block font-medium\">⚠️ 这将删除该接口的所有场景和相关文件,此操作不可撤销</span>\n </DialogDescription>\n </DialogHeader>\n \n <DialogFooter className=\"flex gap-2 justify-end\">\n <Button\n variant=\"outline\"\n onClick={() => setDeleteApiDialog({\n open: false,\n apiName: '',\n apiPath: '',\n })}\n >\n 取消\n </Button>\n <Button\n variant=\"destructive\"\n onClick={confirmDeleteApi}\n >\n 删除整个接口\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n {/* 创建工作区对话框 */}\n <Dialog open={createWorkspaceDialog} onOpenChange={setCreateWorkspaceDialog}>\n <DialogContent className=\"max-w-md\">\n <DialogHeader>\n <DialogTitle>创建工作区</DialogTitle>\n <DialogDescription>\n 选择要包含在工作区中的项目\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"py-4 max-h-96 overflow-y-auto\">\n <div className=\"space-y-3\">\n {availableProjects\n .filter(project => project.status === 'existing')\n .map((project) => (\n <div\n key={project.name}\n className=\"flex items-center space-x-3 p-3 rounded-lg border border-gray-200 hover:bg-gray-50 transition-colors\"\n >\n <Checkbox\n id={`workspace-${project.name}`}\n checked={selectedWorkspaceProjects.includes(project.name)}\n onCheckedChange={() => toggleProjectSelection(project.name)}\n />\n <label\n htmlFor={`workspace-${project.name}`}\n className=\"flex-1 cursor-pointer text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {project.name}\n </label>\n </div>\n ))}\n </div>\n\n {availableProjects.filter(project => project.status === 'existing').length === 0 && (\n <div className=\"text-center py-8 text-gray-500\">\n 没有可用的项目\n </div>\n )}\n </div>\n\n <DialogFooter className=\"flex gap-2 justify-end\">\n <Button\n variant=\"outline\"\n onClick={() => {\n setCreateWorkspaceDialog(false);\n setSelectedWorkspaceProjects([]);\n }}\n >\n 取消\n </Button>\n <EditorSplitButton\n onOpen={handleCreateWorkspace}\n loading={creatingWorkspace}\n loadingText=\"创建中...\"\n disabled={selectedWorkspaceProjects.length === 0}\n actionType=\"create\"\n variant=\"default\"\n />\n </DialogFooter>\n </DialogContent>\n </Dialog>\n {/* 通知组件 */}\n {notification.open && (\n <div className=\"fixed top-4 right-4 z-50 animate-in slide-in-from-top-2 duration-300\">\n <div className={`flex items-center gap-3 px-4 py-3 rounded-lg shadow-lg border max-w-sm ${\n notification.type === 'success' \n ? 'bg-green-50 border-green-200 text-green-800' \n : 'bg-red-50 border-red-200 text-red-800'\n }`}>\n <div className=\"flex-shrink-0\">\n {notification.type === 'success' ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-green-600\"\n >\n <path d=\"M20 6L9 17l-5-5\"></path>\n </svg>\n ) : (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-red-600\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>\n </svg>\n )}\n </div>\n <p className=\"text-sm font-medium\">{notification.message}</p>\n <button\n onClick={() => setNotification({ open: false, type: 'success', message: '' })}\n className=\"flex-shrink-0 ml-auto\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"opacity-60 hover:opacity-100\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n </div>\n )}\n \n </main>\n );\n}\n\n// 主配置页面组件 - 包含 Suspense 边界\nexport default function ConfigurationPage() {\n return (\n <Suspense fallback={\n <div className=\"min-h-screen bg-gray-50 flex items-center justify-center\">\n <div className=\"text-center space-y-4\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto\"></div>\n <p className=\"text-gray-600\">正在加载配置页面...</p>\n </div>\n </div>\n }>\n <ConfigurationContent />\n </Suspense>\n );\n} \n"],"names":["Root","PopperArrow","handleScroll","canScrollUp","canScrollDown","Content","Arrow","loader","memo","React","useState","useRef","useCallback","useEffect","styles","styles_default","Loading","children","Loading_default","MonacoContainer","width","height","isEditorReady","loading","_ref","className","wrapperProps","MonacoContainer_default","useMount","effect","useMount_default","useUpdate","deps","applyChanges","isInitialMount","useUpdate_default","noop","getOrCreateModel","monaco","value","language","path","getModel","createModel","createModelUri","DiffEditor","original","modified","originalLanguage","modifiedLanguage","originalModelPath","modifiedModelPath","keepCurrentOriginalModel","keepCurrentModifiedModel","theme","options","beforeMount","onMount","setIsEditorReady","isMonacoMounting","setIsMonacoMounting","editorRef","monacoRef","containerRef","onMountRef","beforeMountRef","preventCreation","cancelable","error","disposeEditor","originalEditor","model","modifiedEditor","setModels","originalModel","modifiedModel","createEditor","models","DiffEditor_default","useMonaco","setMonaco","useMonaco_default","usePrevious","ref","usePrevious_default","viewStates","Editor","defaultValue","defaultLanguage","defaultPath","line","overrideServices","saveViewState","keepCurrentModel","onChange","onValidate","subscriptionRef","valueRef","previousPath","preventTriggerChangeEvent","autoCreatedModelPath","defaultModel","event","changeMarkersListener","uris","editorUri","uri","markers","Editor_default","src_default"],"mappings":"6KAAA,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KACZ,EAAqC,EAAA,CAAA,AAA5B,CAA4B,AADd,OAEvB,EAAiC,EAAA,CAAxB,AAAwB,CAAA,OACjC,EAAgC,EAAA,CAAvB,AAAuB,CAAA,CAFK,MAGrC,EAAmC,CAFF,CAEE,CAA1B,AAA0B,CAAA,OACnC,EAAsB,AAFU,EAEV,CAAA,AAAb,CAAa,OACtB,EAA0B,EAAA,CAAjB,AADa,AADa,AAET,CAAA,OAC1B,EAA+B,EAAA,CAAtB,AAAsB,CAAA,GADL,IAE1B,EAAqC,EAAA,CAA5B,AAA4B,CAAA,OACrC,CAF+B,CAEF,EAAA,CAApB,AAAoB,CAAA,OAgEnB,EAAA,EAAA,CAAA,CAAA,CAjE2B,KACR,CAIvB,EAAc,gCACd,EAAgB,CAAE,SAAS,EAAO,YAAY,CAAK,EAMnD,EAAa,mBAGb,CAAC,EAAY,EAAe,EAAqB,CAAA,CAAA,EAAA,EAAI,aAAJ,GAAI,EAGzD,GAGI,CAAC,EAA+B,EAA2B,CAAA,CAHrD,AAGqD,EAAA,EAAI,kBAAA,CAAJ,CAC/D,EACA,CAAC,EAAqB,EA+BlB,CAAC,EAAqB,EAAqB,CAC/C,EAAkD,GAK9C,EAAA,CAAA,EAAA,CArCkB,CAqCO,AAL+B,MADb,IAMlB,EAC7B,CAAC,EAA2C,IAExC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAW,CAF6C,OAE7C,CAAX,CAAoB,MAAO,EAAM,WAAlC,YAAkC,CAChC,SAAA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAW,EAAZ,EAAY,CAAX,CAAgB,MAAO,EAAM,eAA9B,QAA8B,CAC5B,SAAA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAsB,CAAvB,EAA0B,CAAA,CAAO,IAAK,CAAA,CAAc,CAAA,CACtD,CAAA,CACF,GAKN,EAAiB,QAPP,GAOO,CAAc,EAgB/B,IAAM,EAAA,CAAA,EAAA,EAA6B,UAAA,EAGjC,CAAC,EAA+C,KAChD,GAAM,CACJ,QAF+D,iBAE/D,aACA,CAAA,MACA,GAAO,CAAA,KACP,CAAA,CACA,iBAAkB,CAAA,yBAClB,CAAA,0BACA,CAAA,cACA,CAAA,2BACA,GAA4B,CAAA,CAC5B,GAAG,EACL,CAAI,EACE,EAAA,CAAA,EAAA,EAAY,MAAA,EAAoC,IAAI,EACpD,EAAA,CAAA,EAAe,EAAA,eAAA,EAAgB,EAAc,GAAG,AAChD,EAAA,CAAA,EAAA,EAAY,YAAA,EAAa,GAAG,AAC5B,CAAC,EAAkB,EAAmB,CAAA,CAAA,EAAA,EAAI,WAAJ,SAAI,EAAqB,CACnE,KAAM,EACN,YAAa,GAA2B,KACxC,SAAU,EACV,OAAQ,CACV,CAAC,EACK,CAAC,EAAkB,EAAmB,CAAA,CAAA,EAAA,EAAU,QAAA,GAAV,AAAmB,GACzD,EAD8D,AAC9D,CAAA,EAAA,EAAmB,cAAA,CAD6B,CACd,GAClC,EAAW,EAAc,GACzB,EAF8C,AAE9C,CAAA,EAAA,EAAwB,MAAA,GAAO,GAC/B,CAFgD,AAE/C,CADmC,CACd,EAAsB,CAAA,CAAU,EAAA,EAAA,QAAA,EAAS,CAAC,EAUtE,CAVkD,MAWhD,IATI,SASJ,AATI,EAAU,KACd,CADoB,GACd,EAAO,EAAI,OAAA,CACjB,GAAI,EAEF,IAFQ,GACR,EAAK,gBAAA,CAAiB,EAAa,GAC5B,IAAM,EAAK,OADiC,YACjC,CAAoB,EAAa,EAEvD,EAAG,CAAC,EAAiB,EAGnB,CAAA,EAAA,EAAA,EALqE,CAKrE,EAAC,EAAA,AAHiB,CAIhB,MAAO,cACP,EACA,IAAK,EAHP,KAIE,mBACA,EACA,YAAA,CAAA,EAAA,EAAmB,WAAA,EACjB,AAAC,GAAc,EAAoB,GACnC,CAAC,EAAmB,EAEtB,CAH8C,cAG9C,AAFsB,CAEtB,EAAA,EAAsB,WAAA,EAAY,IAAM,GAAoB,GAAO,CAAC,AAAJ,CAAK,EACrE,mBAA0B,CAAA,EAAA,EAAA,WAAA,EACxB,IAAM,EAAwB,AAAD,GAAe,EAAY,CAAC,EACzD,CAAC,CAAA,EAEH,sBAAA,CAAA,EAAA,EAA6B,WAAA,EAC3B,IAAM,EAAuB,AAAC,GAAc,EAAY,CAAC,EACzD,CAAC,CAAA,EAGH,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CACC,SAAU,GAA4C,EADxD,EACgC,EAA4B,CAAA,EAAK,EAC/D,mBAAkB,EACjB,GAAG,CAAA,CACJ,IAAK,EACL,MAAO,CAAE,QAAS,OAAQ,GAAG,EAAM,KAAA,AAAM,EACzC,YAAA,CAAA,EAAA,EAAa,oBAAA,EAAqB,EAAM,WAAA,CAAa,KACnD,CADyD,CACzC,OAAA,EAAU,CAC5B,CAAC,EACD,QAAA,CAAA,EAAS,EAAA,oBAAA,EAAqB,EAAM,OAAA,CAAU,AAAD,IAK3C,IAAM,EAAkB,AAL8B,CAK7B,EAAgB,OAAA,CAEzC,GAAI,EAAM,MAAA,GAAW,EAAM,aAAA,EAAiB,GAAmB,CAAC,EAAkB,CAChF,IAAM,EAAkB,IAAI,YAAY,EAAa,GAGrD,GAFA,EAAM,KAD4D,QAC5D,CAAc,aAAA,CAAc,GAE9B,CAAC,EAAgB,SAF4B,OAE5B,CAAkB,CACrC,IAAM,EAAQ,IAAW,KAAF,CAAE,CAAO,AAAC,GAAS,EAAK,SAAS,EAOxD,EAJuB,AAGA,CALJ,EAAM,IAAA,CAAK,AAAC,CAMpB,EAN6B,EAAK,MAAM,EAC/B,EAAM,IAAA,CAAM,AAAD,GAAU,EAAK,EAAA,GAAO,MACD,EAAK,CAAE,EAAF,IAAE,CADU,AAEnE,SAEoC,GAAA,CAAI,AAAC,GAAS,EAAK,GAAA,CAAI,OAAQ,EAC1C,EAC7B,CACF,CAEA,EAAgB,OAAA,EAAU,CAC5B,CAAC,EACD,MAN0D,CAM1D,CAAA,EAAA,EAAQ,oBAAA,EAAqB,EAAM,MAAA,CAAQ,IAAM,GAAoB,GAAM,EAC7E,AAD4E,CAAC,CAInF,CAAC,EAMK,EAAY,uBAaZ,EAAA,CAAA,EAAA,EAA6B,UAAA,EACjC,CAAC,EAA0C,KACzC,GAAM,CACJ,QAFwD,iBAExD,WACA,GAAY,CAAA,CACZ,SAAS,EAAA,CACT,WAAA,UACA,CAAA,CACA,GAAG,EACL,CAAI,EACE,EAAA,CAAA,EAAA,EAAS,KAAA,CAAM,GACf,EAAK,GAAa,EAClB,EAAU,EAAsB,EAAW,GAC3C,EAAmB,EAAQ,gBADuC,AACvC,GAAqB,EAChD,EAAW,EAAc,GAEzB,oBAFgD,AAE9C,CAAA,uBAAoB,CAAA,kBAAuB,CAAA,CAAiB,CAAI,EASxE,OACE,EARI,EAAA,SAQJ,AARI,EAAU,KACd,CADoB,EAChB,EAEF,OADA,EADa,EAEN,IAAM,GAEjB,EAAG,CAAC,EAAW,EAAoB,CAHZ,CAGkC,EAGvD,CAAA,EAAA,EAAA,GAAA,AALqC,EAKpC,EAAW,KAH0C,GAG1C,CAAX,CACC,MAAO,KACP,QAFF,IAGE,SACA,EAEA,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,IAAA,CAAV,CACC,SAAU,EAAmB,EAAI,AADnC,CACmC,EACjC,mBAAkB,EAAQ,WAAA,CACzB,GAAG,CAAA,CACJ,IAAK,EACL,YAAA,CAAA,EAAA,EAAa,oBAAA,EAAqB,EAAM,WAAA,CAAa,AAAC,IAG/C,EAEA,EAAQ,EALiD,IAG9C,KAEH,CAAY,EAAE,CAFX,EAAM,cAAA,CAAe,CAGvC,CAAC,EACD,QAAA,CAAS,EAAA,EAAA,oBAAA,EAAqB,EAAM,OAAA,CAAS,IAAM,EAAQ,WAAA,CAAY,EAAE,CAAC,CAC1E,UAAA,CAAA,EAAA,EAAW,oBAAA,EAAqB,EAAM,SAAA,CAAY,AAAD,IAC/C,GAAkB,GADwC,KACtD,EAAM,GAAA,EAAiB,EAAM,QAAA,CAAU,YACzC,EAAQ,cAAA,CAAe,EAIzB,GAAI,EAAM,MAAA,GAAW,EAAM,aAAA,CAAe,OAE1C,IAAM,EAqDlB,AArDgC,SAqDvB,AAAe,CAAA,CAA4B,CAAA,CAA2B,CAAA,EAAiB,MAC9F,IAAM,GARsB,EAQK,CARL,AAQhB,CAA2B,CARE,EAQF,CARE,AACzC,AAAI,AAAQ,EAD8C,IACvC,CAAA,CAOyB,EAPlB,CAOqB,CANhC,cAAR,EAAsB,aAAuB,eAAR,EAAuB,YAAc,GAOjF,KAAoB,aAAhB,GAA8B,CAAC,YAAa,YAAY,CAAA,CAAE,QAAA,CAAS,EAAG,EAAG,CAAA,EACzD,KADgE,KAAA,KAChF,GAAgC,CAAC,UAAW,WAAW,CAAA,CAAE,QAAA,CAAS,EAAG,EAAG,AAC5E,CAD4E,MACrE,CAD4E,AAC5E,CAAwB,EACjC,AADoC,CAAA,CAzDW,AAwDsC,EAxD/B,EAAQ,WAAA,CAAa,EAAQ,GAAG,EAE1E,GAAI,AAAgB,KAAA,MAAW,CAC7B,GAAI,EAAM,OAAA,EAAW,EAAM,OAAA,EAAW,EAAM,MAAA,EAAU,EAAM,QAAA,CAAU,OACtE,EAAM,cAAA,CAAe,EAErB,IAAI,EAAiB,AADP,IAAW,KAAF,CAAE,CAAQ,AAAD,GAAU,EAAK,SAAS,EAC7B,GAAA,CAAI,AAAC,GAAS,EAAK,GAAA,CAAI,OAAQ,EAE1D,GAAoB,OAAQ,EAAxB,EAAwB,EAAe,OAAA,CAAQ,OAAA,GAC1B,SAAhB,GAA0C,SAAhB,EAAwB,CACrC,OAAQ,EAAxB,GAAwB,EAAe,OAAA,CAAQ,EACnD,IAAM,EAAe,EAAe,OAAA,CAAQ,EAAM,aAAa,EAC/D,EAAiB,EAAQ,IAAA,CACrB,AA6DpB,SAAS,AAAa,CAAA,CAAY,CAAA,EAAoB,AACpD,OAAO,EAAM,GAAA,CAAO,CAAC,EAAG,IAAU,CAAA,CAAA,CAAO,EAAa,CAAA,CAAA,CAAS,EAAM,MAAM,CAAE,CAC/E,EA/D8B,EAAgB,EAAe,CAAC,EAC1C,EAAe,KAAA,CAAM,EAAe,CAAC,CAC3C,CAMA,WAAW,IAAM,EAAW,GAC9B,CACF,CAAC,EAEA,OAJ6C,CAAC,CAI9C,AAAoB,mBAAb,EACJ,EAAS,kBAAE,EAAkB,WAAgC,MAApB,CAAyB,CAAC,EACnE,CAAA,EACN,EAGN,GAGF,EAAqB,WAAA,CAAc,EAKnC,IAAM,EAAuD,CAC3D,UAAW,OAAQ,QAAS,OAC5B,WAAY,OAAQ,UAAW,OAC/B,OAAQ,QAAS,KAAM,QACvB,SAAU,OAAQ,IAAK,MACzB,EAgBA,SAAS,EAAW,CAAA,CAA2B,GAAgB,CAAA,EAAO,AACpE,IAAM,EAA6B,SAAS,aAAA,CAC5C,IAAA,IAAW,KAAa,EAEtB,GAAI,IAAc,EAFgB,EAGlC,EAAU,KAAA,CAAM,eAD8B,AAC5B,CAAc,CAAC,EAC7B,SAAS,aAAA,GAAkB,GAFe,MAIlD,CAUA,IAAM,EAAO,EACP,EAAO,OAbkD,CAAA,sLC5U/D,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KACZ,EAAqC,EAAA,CAA5B,AAA4B,CAAA,AADd,OAEvB,EAAmC,EAAA,CAA1B,AAA0B,CAAA,OACnC,EAAS,CAAmC,CAAA,CAAnC,AAAmC,CAAA,CAFP,IAGrC,EAAyB,EAAA,CAAA,AAAhB,CAAgB,CAFU,MAGnC,EAA0B,EAAA,CAAjB,AAAiB,CAAA,EADD,KAGzB,EAA6B,EAAA,CAApB,AAAoB,CAAA,GAFH,IAG1B,EAAqC,EAAA,CAA5B,AAA4B,CAAA,MADR,CAE7B,EAAsB,EAAA,CAAA,AAAb,CAAa,OAoFd,EAAA,EAAA,CAAA,AApFc,CAoFd,CArF6B,MAS/B,EAAY,OAGZ,CAAC,EAAmB,EAAe,CAAA,CAAA,EAAA,EAAI,OAAJ,WAAI,EAAmB,EAAW,GACzE,2BAAA,CACD,EACK,EAAA,CAAA,EAAA,EAA2B,2BAAA,CAA4B,GAWvD,CAAC,EAAc,EAAc,CAAI,EAAoC,GA6BrE,EAAA,CAAA,EAAA,CA7B6B,AAAiD,CA6BjE,UAAA,EACjB,CAAC,EAA+B,KAC9B,GAAM,SADyC,IAE7C,CAAA,CACA,MAAO,CAAA,eACP,CAAA,cACA,CAAA,aACA,EAAc,YAAA,KACd,CAAA,gBACA,EAAiB,WAAA,CACjB,GAAG,EACL,CAAI,EACE,EAAA,CAAA,EAAA,EAAY,YAAA,EAAa,GAAG,AAC5B,CAAC,EAAO,EAAQ,CAAA,CAAA,EAAA,EAAA,AAAI,oBAAA,EAAqB,CAC7C,KAAM,EACN,SAAU,EACV,YAAa,GAAgB,GAC7B,OAAQ,CACV,CAAC,EAED,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,CADF,KACS,EACP,OAAA,CAAA,EAAA,EAAQ,KAAA,CAAM,EAFhB,OAGE,EACA,cAAe,cACf,EACA,IAAK,iBACL,EAEA,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CACC,IAAK,EACL,QAFF,WAEoB,EACjB,GAAG,CAAA,CACJ,IAAK,CAAA,EACP,EAGN,GAGF,EAAK,WAAA,CAAc,EAMnB,IAAM,EAAgB,WAOhB,EAAA,CAAA,EAAA,EAAiB,UAAA,EACrB,CAAC,EAAmC,KAClC,GAAM,SAD6C,IAC3C,CAAA,MAAa,GAAO,CAAA,CAAM,GAAG,EAAU,CAAI,EAC7C,EAAU,EAAe,CADgB,CACD,GACxC,EAAwB,EAAyB,GACvD,CAFyD,KAGvD,CAAA,CAFgE,CAEhE,EAAA,GAAA,EAAkB,EAAA,EAAlB,EAAkB,CAAjB,CACC,SAAO,EACN,GAAG,CAAA,CACJ,OAHF,KAGe,EAAQ,WAAA,CACrB,IAAK,EAAQ,GAAA,MACb,EAEA,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CACC,KAAK,SADP,CAEE,mBAAkB,EAAQ,WAAA,CACzB,GAAG,CAAA,CACJ,IAAK,CAAA,EACP,EAGN,GAGF,EAAS,WAAA,CAAc,EAMvB,IAAM,EAAe,cAQf,EAAA,CAAA,EAAA,EAAoB,UAAA,EACxB,CAAC,EAAsC,KACrC,GAAM,SADgD,IAC9C,CAAA,OAAa,CAAA,UAAO,GAAW,CAAA,CAAO,GAAG,EAAa,CAAI,EAC5D,EAAU,EAAe,EAAc,EADiB,CAExD,EAAwB,EAAyB,GACjD,CAFkD,CAEtC,EAAc,EAAQ,EAD0B,IAC1B,CAAQ,GAC1C,EAD+C,AACnC,EAAc,EAAQ,MAAA,CAAQ,GAC1C,EAD+C,AAClC,IAAU,EAAQ,KAAA,CACrC,MACE,CAAA,EAAA,EAAA,GAAA,EAAA,EAAkB,EAAlB,EAAkB,CAAjB,CACC,SAAO,EACN,GAAG,CAAA,CACJ,OAHF,GAGa,CAAC,CAHI,CAIhB,OAAQ,EAER,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,MAAA,CAAV,CACC,KAAK,MADP,GAEE,KAAK,MACL,gBAAe,EACf,gBAAe,EACf,aAAY,EAAa,SAAW,WACpC,gBAAe,EAAW,GAAK,KAAA,WAC/B,EACA,GAAI,EACH,GAAG,CAAA,CACJ,IAAK,EACL,YAAA,CAAa,EAAA,EAAA,oBAAA,EAAqB,EAAM,WAAA,CAAa,AAAC,IAGhD,AAAC,GAA6B,GAH4B,CAG7C,EAAM,MAAA,GAAkC,IAAlB,EAAM,CAAmB,MAAnB,CAI3C,EAAM,cAAA,CAAe,EAHrB,EAAQ,aAAA,CAAc,EAK1B,CAAC,EACD,AAN+B,UAM/B,CAAA,EAAA,EAAW,oBAAA,EAAqB,EAAM,SAAA,CAAW,AAAC,IAC5C,CAAC,IAAK,CADgD,MACzC,CAAA,CAAE,QAAA,CAAS,EAAM,GAAG,EAAG,CAAA,EAAQ,aAAA,CAAc,EAChE,CAAC,EADoE,AAErE,QAAA,CAAA,EAAA,EAAS,oBAAA,EAAqB,EAAM,OAAA,CAAS,KAG3C,CAHiD,GAG3C,EAAmD,WAA3B,EAAQ,cAAA,AAClC,CAAC,GAAe,IAAY,GAC9B,EAAQ,EADS,WACT,CAAc,EAE1B,CAAC,CAAA,AAHwD,CAC1B,CAGjC,EAGN,GAGF,EAAY,WAAA,CAAc,EAM1B,IAAM,EAAe,cAaf,EAAA,CAAA,EAAA,EAAoB,UAAA,EACxB,CAAC,EAAsC,KACrC,GAAM,CAAE,QAD8C,KAC9C,OAAa,CAAA,YAAO,CAAA,UAAY,CAAA,CAAU,GAAG,EAAa,CAAI,EAChE,EAAU,EAAe,EAAc,EADqB,CAE5D,EAAY,EAAc,EAAQ,EADgB,IAChB,CAAQ,GAC1C,EAD+C,AACnC,EAAc,EAAQ,MAAA,CAAQ,GAC1C,EAD+C,AAClC,IAAU,EAAQ,KAAA,CAC/B,EAAA,CAAA,EAAA,EAAqC,MAAA,EAAO,GAOlD,OACE,AAR0D,IAEtD,SAAA,AAMJ,AANI,EAAU,KACd,CADoB,GACd,EAAM,sBAAsB,IAAO,EAA6B,OAAA,EAAU,GAChF,EADsF,IAC/E,IAAM,qBAAqB,EACpC,CADuC,CACpC,CAAC,CAAC,EAGH,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,QAAA,CAAA,CAAS,QAAS,GAAc,EAC9B,MADH,GACG,CAAC,GADH,MACK,CAAA,CAAQ,GACV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAD,QAAC,CAAU,GAAA,CAAV,CACC,aAAY,CADd,CAC2B,SAAW,WACpC,mBAAkB,EAAQ,WAAA,CAC1B,KAAK,WACL,kBAAiB,EACjB,OAAQ,CAAC,EACT,GAAI,EACJ,SAAU,EACT,GAAG,CAAA,CACJ,IAAK,EACL,MAAO,CACL,GAAG,EAAM,KAAA,CACT,kBAAmB,EAA6B,OAAA,CAAU,KAAO,KAAA,CACnE,EAEC,SAAA,GAAW,CAAA,EACd,CAEJ,CAEJ,GAOF,SAAS,EAAc,CAAA,CAAgB,CAAA,EAAe,AACpD,MAAO,CAAA,EAAG,EAAM,IAAA,KAAA,EAAY,EAAK,CAAA,AACnC,CAEA,CAHmC,QAG1B,EAAc,CAAA,CAAgB,CAAA,EAAe,AACpD,MAAO,CAAA,EAAG,EAAM,IAAA,KAAA,EAAY,EAAK,CAAA,AACnC,CAVA,CASmC,CATvB,WAAA,CAAc,EAY1B,IAAMA,EAAO,EACP,EAAO,EACP,EAAU,EACV,EAAU,uICvRhB,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAK,WACZ,CAAS,CACT,GAAG,EAC6C,EAChD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAkB,CAAA,CACjB,YAAU,OACV,UAAW,CAFZ,AAEY,EAAA,EAAA,EAAA,AAAC,EAAE,sBAAuB,GACpC,GAAG,CAAK,EAGf,CAEA,AANiB,SAMR,EAAS,WAChB,CAAS,CACT,GAAG,EAC6C,EAChD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAkB,CAAA,CACjB,YAAU,YACV,MAFD,IAEY,GAAA,EAAA,EAAA,AAAC,EACV,gCADS,sEAET,GAED,GAAG,CAAK,EAGf,CAEA,SAAS,EAAY,WACnB,CAAS,CACT,GAAG,EACgD,EACnD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAqB,CAAA,CACpB,YAAU,eACV,AAFD,UAEY,GAAA,EAAA,EAAA,AAAC,EACV,gCADS,koBAET,GAED,GAAG,CAAK,EAGf,CAEA,SAAS,EAAY,CACnB,WAAS,CACT,GAAG,EACgD,EACnD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAqB,CAAA,CACpB,YAAU,eADX,AAEC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EAAE,sBAAuB,GACpC,GAAG,CAAK,EAGf,CAJiB,gDC3DjB,SAAS,EAAM,CAAA,CAAe,CAAC,EAAK,EAAG,CAAA,CAA6B,AAClE,OAAO,KAAK,GAAA,CAAI,EAAK,KAAK,GAAA,CAAI,EAAK,GACrC,EAD0C,CAAC,8PCD3C,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KACZ,EAAA,EAAA,CAAA,CADuB,AACvB,oBAWA,EAAgC,EAAA,CAAA,CAAA,EAApB,KACZ,EAAgC,EAAA,CAAvB,AAAuB,CAAA,OAChC,EAFgC,AAEG,EAAA,CAA1B,AAA0B,CAAA,OACnC,EAA0B,AAFM,EAEN,CAAjB,AAAiB,CAAA,OAC1B,EAA+B,EAAA,CAAtB,AAAsB,AAFI,CAEJ,GADL,IAE1B,EAAgC,EAAA,CAAvB,AAAuB,CAAA,OAChC,CAF+B,CAEP,EAAA,CAAf,AAAe,CAAA,OAkCpB,EAAA,AAnC4B,EAmC5B,CAAA,CAAA,CAlCoB,MAMlB,EAAe,CAAC,MAAO,QAAS,SAAU,MAAM,CAAA,CAChD,EAAgB,CAAC,QAAS,SAAU,KAAK,CAAA,CASzC,EAAc,SAGd,CAAC,EAAqB,EAAiB,CAAA,CAAA,EAAA,EAAI,SAAJ,SAAI,EAAmB,GAM9D,CAAC,EAAgB,EAAgB,CAAI,EANoC,AAMI,GAK7E,EAAgC,AAAC,IACrC,EANqC,AAAuD,CAMtF,GADmE,YACjE,CAAA,CAAe,UAAA,CAAS,CAAI,EAC9B,CAAC,EAAQ,EAAS,CAAA,CAAA,EAAA,EAAU,CAAV,OAAU,EAA4B,IAAI,EAClE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAe,CAAhB,AAFgC,KAET,SAAe,EAAgB,WAAtD,IAAsE,WACnE,CAAA,CACH,CAEJ,EAEA,EAAO,WAAA,CAAc,EAMrB,IAAM,EAAc,eAQd,EAAA,CAAA,EAAA,EAAqB,UAAA,EACzB,CAAC,EAAuC,KACtC,GAAM,SADiD,MAC/C,CAAA,YAAe,CAAA,CAAY,GAAG,EAAY,CAAI,EAChD,EAAU,EAAiB,EAAa,CADI,EAE5C,EAAA,CAAA,EAAA,EAAY,GADyC,GACzC,EAA4B,IAAI,EAC5C,EAAA,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAc,GASnD,AATsD,MAEhD,CAAA,EAAA,EAAA,SAAA,EAAU,KAId,CAJoB,CAIZ,cAAA,CAAe,GAAY,SAAW,EAAI,OAAO,CAC3D,CAAC,EAEM,EAAa,KAAO,CAAA,CAAA,CAAA,EAAA,GAAA,EAAC,EAAA,GAAD,MAAC,CAAU,GAAA,CAAV,CAAe,GAAG,CAAA,CAAa,IAAK,CAAA,CAAc,CAChF,EAD6B,CAI/B,EAAa,WAAA,CAAc,EAM3B,IAAM,EAAe,gBAUf,CAAC,EAAuB,EAAiB,CAC7C,EAA+C,GAoB3C,EAAA,CAAA,EAAA,EAAsB,EApBiC,AADd,QAqBnB,EAC1B,CAAC,EAAwC,KACvC,GAAM,SADkD,MAEtD,CAAA,MACA,EAAO,QAAA,YACP,EAAa,CAAA,OACb,EAAQ,QAAA,aACR,EAAc,CAAA,cACd,EAAe,CAAA,iBACf,GAAkB,CAAA,mBAClB,EAAoB,CAAC,CAAA,CACrB,iBAAkB,EAAuB,CAAA,QACzC,EAAS,SAAA,CACT,oBAAmB,CAAA,wBACnB,EAAyB,WAAA,UACzB,CAAA,CACA,GAAG,EACL,CAAI,EAEE,EAAU,EAAiB,EAAc,GAEzC,CAAC,EAAS,EAAU,CAAU,CAAA,EAAA,CAFwB,CAExB,EAAV,MAAU,EAAgC,IAAI,EAClE,EAAA,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAc,AAAC,GAAS,EAAW,IAAI,AAEtE,CAFuE,AAEtE,EAAO,EAAQ,CAAU,CAAA,EAAA,EAAV,AAAU,QAAA,EAAiC,IAAI,EAC/D,EAAA,CAAA,EAAA,EAAY,OAAA,EAAQ,GACpB,EADyB,AACZ,GAAW,OAAS,EACjC,EAAc,GAAW,QAAU,EAInC,EAC4B,UAAhC,OAAO,EACH,EACA,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,KAAM,EAAG,GAAG,CAAqB,AAArB,EAE3C,EAAW,MAAM,OAAA,CAAQ,GAAqB,EAAoB,CAAC,EAAiB,CACpF,EAAwB,EAAS,IADS,EACT,CAAS,EAE1C,CAHoF,CAG5D,CAC5B,QAAS,EACT,SAAU,EAAS,MAAA,CAAO,GAE1B,MAFmC,MAEtB,CACf,EAEM,MAAE,CAAA,gBAAM,CAAA,WAAgB,CAAA,cAAW,CAAA,CAAc,gBAAA,CAAe,CAAI,CAAA,EAAA,EAAA,WAAA,EAAY,CAEpF,SAAU,QACV,UApBwB,CAoBb,EApB+B,AAAV,IAAR,SAA6B,IAAM,EAAQ,EAAA,CAAA,CAqBnE,qBAAsB,CAAA,GAAI,IAClB,CAAA,EAAA,EAD2B,AACjB,UAAA,CAAW,IAAG,EAAM,CAClC,eAA2C,WAA3B,CAClB,CAAC,EAGH,SAAU,CACR,UAAW,EAAQ,MAAA,AACrB,EACA,WAAY,MACV,MAAA,EAAO,CAAE,SAAU,EAAa,EAAa,cAAe,CAAY,CAAC,EACzE,GAAA,CAAA,EAAA,EACE,KAAA,EAAM,CACJ,UAAU,EACV,WAAW,EACX,QAAoB,YAAX,EAAW,CAAA,EAAA,EAAY,UAAA,CAAW,GAAI,KAAA,EAC/C,GAAG,CAAA,AACL,CAAC,EACH,GAAA,CAAA,EAAmB,EAAA,IAAA,EAAK,CAAE,GAAG,CAAA,AAAsB,CAAC,OACpD,IAAA,EAAK,CACH,GAAG,CAAA,CACH,MAAO,CAAC,CAAE,UAAA,OAAU,CAAA,gBAAO,CAAA,iBAAgB,CAAA,CAAgB,IACzD,CAD+D,EACzD,CAAE,MAAO,CAAA,CAAa,OAAQ,CAAA,CAAa,CAAI,EAAM,SAAA,CACrD,EAAe,EAAS,QAAA,CAAS,KAAA,CACvC,EAAa,WAAA,CAAY,iCAAkC,CAAA,EAAG,EAAc,EAAA,CAAI,EAChF,EAAa,KAD+D,MAC/D,CAAY,kCAAmC,CAAA,EAAG,EAAe,EAAA,CAAI,EAClF,EAAa,MADiE,KACjE,CAAY,8BAA+B,CAAA,EAAG,EAAW,EAAA,CAAI,EAC1E,EAAa,EADyD,SACzD,CAAY,+BAAgC,CAAA,EAAG,EAAY,EAAA,CAAI,CAC9E,CACF,CAAC,EACD,EAH4E,CAG5E,CAAA,EAAA,EAAS,KAAA,EAAgB,CAAE,QAAS,EAAO,QAAS,CAAa,CAAC,EAClE,EAAgB,YAAE,cAAY,CAAY,CAAC,EAC3C,GAAA,CAAA,EAAA,EAAoB,IAAA,EAAK,CAAE,SAAU,kBAAmB,GAAG,CAAA,AAAsB,CAAC,EACpF,AACF,CAAC,EAEK,CAAC,EAAY,EAAW,CAAI,EAA6B,GAEzD,EAAA,CAAA,AAFwB,EAET,CAFmD,CAEnD,cAAA,EAAe,GACpC,CAAA,EAAA,EAD4C,AAC5C,eAAA,EAAgB,KACV,CADgB,EAElB,KAEJ,EAAG,CAAC,EAAc,CAHE,AADpB,CAI+B,EAE/B,CAJmB,GAIb,EAAS,EAAe,AAFA,KAEA,EAAO,EAC/B,EAAS,EAAe,KAAA,EAAO,EAC/B,GAAoB,EAAe,KAAA,EAAO,eAAiB,EAE3D,CAAC,GAAe,GAAgB,CAAU,AAAV,GAAU,EAAA,OAAV,CAAU,CAAiB,GAKjE,MAJA,CAKE,EALF,EAAA,SAKE,MALF,EAAgB,KACV,CADgB,EACP,GAAiB,EAAjB,KAAwB,CADvC,eACuC,CAAiB,GAAS,IAAF,EAAQ,CACvE,EAAG,CAAC,EAAQ,EAGV,CAAA,EAHS,AAGT,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EAAK,WAAA,CACV,MAFF,8BAEoC,GAClC,MAAO,CACL,GAAG,CAAA,CACH,UAAW,EAAe,EAAe,SAAA,CAAY,sBACrD,SAAU,cACV,OAAQ,GACP,iCAAwC,CAAA,AAAG,CAC1C,EAAe,eAAA,EAAiB,EAChC,EAAe,eAAA,EAAiB,EAClC,CAAE,IAAA,CAAK,GAAG,EAKV,GAAI,EAAe,IAAA,EAAM,iBAAmB,CAC1C,WAAY,SACZ,cAAe,MACjB,CAAA,AACF,EAIA,IAAK,EAAM,GAAA,CAEX,SAAA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,CADF,KACS,aACP,EACA,OAHF,OAGiB,SACf,SACA,EACA,gBAAiB,GAEjB,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CACC,YAAW,EACX,AAFF,aAEc,EACX,GAAG,CAAA,CACJ,IAAK,EACL,MAAO,CACL,GAAG,EAAa,KAAA,CAGhB,UAAW,AAAC,EAAwB,KAAA,EAAT,MAC7B,CAAA,EACF,EACF,EAGN,GAGF,EAAc,WAAA,CAAc,EAM5B,IAAM,EAAa,cAEb,EAAoC,CACxC,IAAK,SACL,MAAO,OACP,OAAQ,MACR,KAAM,OACR,EAMM,EAAA,CAAA,EAAA,EAAoB,UAAA,EAAiD,SACzE,AADkFC,CAClF,CACA,CAAA,EACA,AACA,GAAM,eAAE,CAAA,CAAe,GAAG,EAAW,CAAI,EACnC,EAAiB,EAAkB,EADJ,AACgB,GAC/C,EAAW,CAAA,CAAc,EAAe,IADoB,MACV,CAAA,CAExD,MAIE,CAJF,AAIE,EAAA,EAAA,GAAA,EAAC,OAAA,CACC,IAAK,EAAe,aAAA,CACpB,GAFF,GAES,CACL,SAAU,WACV,KAAM,EAAe,MAAA,CACrB,CATN,GASW,EAAe,MAAA,CACpB,CAAC,EAAQ,CAAG,EACZ,GADS,aACQ,CACf,IAAK,GACL,MAAO,MACP,OAAQ,WACR,KAAM,QACR,CAAA,CAAE,EAAe,UAAU,CAAA,CAC3B,UAAW,CACT,IAAK,mBACL,MAAO,iDACP,OAAQ,CAAA,cAAA,CAAA,CACR,KAAM,gDACR,CAAA,CAAE,EAAe,UAAU,CAAA,CAC3B,WAAY,EAAe,eAAA,CAAkB,SAAW,KAAA,CAC1D,EAEA,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAgB,EAAhB,EAAgB,CAAf,CACE,GAAG,CAAA,CACJ,IAAK,EACL,MAAO,CACL,GAAG,EAAW,AAJlB,KAIkB,CAEd,QAAS,OACX,CAAA,EACF,EAGN,CAAC,EAMD,SAAS,EAAa,CAAA,EAA6B,AACjD,OAAO,AAAU,QACnB,CANA,EAAY,WAAA,CAAc,EAQ1B,IAAM,EAAkB,AAAC,IAAsE,CAC7F,KADuB,AACjB,0BACN,EACA,GAAG,CAAA,EAAM,AACP,GAAM,WAAE,CAAA,OAAW,CAAA,gBAAO,CAAA,CAAe,CAAI,EAEvC,EAAoB,EAAe,KAAA,EAAO,eAAiB,EAE3D,EAAa,EAAgB,EAAI,EAAQ,UAAA,CACzC,EAAc,EAAgB,EAAI,EAAQ,WAAA,CAE1C,CAAC,EAAY,EAAW,CAAI,EAA6B,GACzD,EAAe,CAAE,AADO,GAA0C,GAC1C,KAAM,OAAQ,MAAO,IAAK,MAAO,CAAA,CAAE,EAAW,CAEtE,EAAA,CAAgB,EAAe,GAFuC,EAEvC,EAAO,IAAK,CAAA,CAAK,EAAa,EAC7D,EAAA,CAAgB,EAAe,KAAA,EAAO,IAAK,CAAA,CAAK,EAAc,EAEhE,EAAI,GACJ,EAAI,GAeR,MAbmB,UAAU,CAAzB,GACF,EAAI,EAAgB,EAAe,CAAA,EAAG,EAAY,EAAA,CAAA,CAClD,EAAI,CAAA,EAAG,CAAC,AAD0C,EAC/B,EAAA,CAAA,EACV,AAAe,IADL,GACY,IAC/B,EAAI,EAAgB,EAAe,CAAA,EAAG,EAAY,EAAA,CAAA,CAClD,EAAI,CAAA,EAAG,CAD2C,CACrC,QAAA,CAAS,MAAA,CAAS,EAAW,EAAA,CAAA,EAClB,IADkB,KACT,CAAxB,GACT,EAAI,CAAA,EAAG,CAAC,EAAW,EAAA,CAAA,CACnB,EAAI,EAAgB,CADD,CACgB,CAAA,EAAG,EAAY,EAAA,CAAA,EAC1B,KAD0B,GAClB,CAAvB,IACT,EAAI,CAAA,EAAG,EAAM,QAAA,CAAS,KAAA,CAAQ,EAAW,EAAA,CAAA,CACzC,EAxBoB,AAwBhB,EAAgB,CADqB,CACN,CAAA,EAAG,EAAY,EAAA,CAAA,EAE7C,CAAE,IAF2C,CAErC,GAAE,IAAG,CAAE,CAAE,CAC1B,CACF,CAAA,EAEA,SAAS,EAA6B,CAAA,EAAsB,AAC1D,GAAM,CAAC,EAAM,EAAQ,QAAQ,CAAA,CAAI,EAAU,KAAA,CAAM,GAAG,EACpD,MAAO,CAAC,EAAc,EAAc,AACtC,CAEA,EAHsC,EAGhCD,EAAO,EACP,EAAS,EACT,EAAU,EACV,EAAQ,0ECnZd,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KAEZ,MAFuB,GAEd,EAAe,CAAA,EAAU,AAChC,IAAM,EAAA,CAAA,EAAA,EAAY,MAAA,EAAO,OAAE,EAAO,SAAU,CAAM,CAAC,EAKnD,MAAA,CAAA,EAAA,EAAa,OAAA,EAAQ,KACf,CADqB,CACjB,OAAA,CAAQ,KAAA,GAAU,IACxB,EAAI,CAD2B,MAC3B,CAAQ,QAAA,CAAW,EAAI,OAAA,CAAQ,KAAA,CACnC,EAAI,OAAA,CAAQ,KAAA,CAAQ,GAEf,EAAI,OAAA,CAAQ,QAAA,EAClB,CAAC,EAAM,CACZ,EADW,mHCdX,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KACZ,EAA0B,EAAA,CAAjB,AAAiB,CAAA,AADH,OA8BjB,EAAA,EAAA,CAAA,CAAA,GA7BoB,IAMpB,EAAyB,OAAO,MAAA,CAAO,CAE3C,SAAU,WACV,OAAQ,EACR,MAAO,EACP,OAAQ,EACR,QAAS,EACT,OAAQ,CAAA,EACR,SAAU,SACV,KAAM,mBACN,WAAY,SACZ,SAAU,QACZ,CAAC,EAQK,EAAA,CAAA,EAAA,EAAuB,UAAA,EAC3B,CAAC,EAAO,IAEJ,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,CAFoB,QAEpB,CAAU,IAAA,CAAV,CACE,GAAG,CAAA,CACJ,IAAK,EACL,EAHF,IAGS,CAAE,GAAG,CAAA,CAAwB,GAAG,EAAM,KAAA,AAAM,CAAA,IAM3D,EAAe,WAAA,CAlBF,EAkBgB,eAI7B,IAAM,EAAO,spBC3Cb,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KACZ,EAA0B,EAAA,CAAA,CADH,AACG,EAAd,KACZ,EAAsB,EAAA,CAAb,AAAa,CAAA,GADI,IAE1B,EAAqC,EAAA,CAAA,AADf,AACb,CAA4B,OACrC,EAAiC,EAAA,CAAxB,AAAwB,CAAA,OACjC,EAAgC,EAAA,CAAA,AAAvB,CAAuB,CAFK,MAGrC,EAAmC,CAFF,CAEE,CAA1B,AAA0B,CAAA,OACnC,EAFgC,AAEH,EAAA,CAAA,AAApB,CAAoB,OAC7B,EAAiC,EAAA,CAFE,AAE1B,AAAwB,CAAA,MADJ,CAE7B,EAA+B,EAAA,CAAA,AAAtB,CAAsB,OAC/B,EAA2B,CAFM,CAEN,CAAA,AAAlB,CAAkB,OAC3B,CAF+B,CAET,EAAA,CAAb,AAAa,CAAA,IADK,GAE3B,EAAiC,EAAA,CADX,AACW,CAAA,EAArB,KAEZ,EAA0C,EAAA,CAAA,AAAjC,CAAiC,OAC1C,EAA0B,AADP,CAFc,CAGP,CAAA,AAAjB,CAAiB,OAC1B,EAA2B,EAAA,CAAA,AAAlB,CAAkB,GADD,GADgB,CAG1C,EAA+B,EAAA,CAAtB,AAAsB,CAAA,IADJ,GAE3B,EAAqC,EAAA,CAA5B,AAA4B,CAAA,OACrC,CAF+B,CAEC,EAAA,CAAvB,AAAuB,CAAA,OAChC,EAA4B,EAAA,CAAnB,AAAmB,CAAA,CAFS,MAGrC,EAFgC,AAEO,EAAA,CAA9B,AAA8B,CAAA,KADX,EAE5B,EAA2B,EAAA,CAAlB,AAAkB,CAAA,OAC3B,EAA6B,EAAA,CAAA,AAApB,CAAoB,GAFU,CACZ,GAkLjB,EAAA,EAAA,CA0LsC,AA1LtC,CAAA,MAjLmB,CAMvB,EA2KI,AA3KQ,CAAC,IA6LT,AA7Lc,QAAS,IA2KvB,MA3KkC,WAAW,CAAA,CACjD,EAAiB,CAAC,IAAK,OAAO,CAAA,CAM9B,EAAc,SAGd,CAAC,EAAY,EAAe,EAAqB,CAAA,CAAA,EAAA,EAAI,aAAJ,GAAI,EAGzD,GAGI,CAAC,EAAqB,EAAiB,CAAA,CAAA,CAHhC,CAGgC,EAAI,SAAJ,SAAI,EAAmB,EAAa,CAC/E,IACA,iBAAA,CACD,EACK,EAAA,CAAiB,EAAA,EAAA,iBAAA,CAAkB,GAoBnC,CAAC,EAAgB,EAAgB,CAAI,EAAwC,GAQ7E,CAAC,EAA6B,EAA6B,CAC/D,EAAqD,AATuC,AAAvD,GA6DjC,EAAiC,AAAD,IACpC,EArDgE,CAqD1D,CACJ,EAFuE,SArDV,IAuD7D,UACA,CAAA,CACA,KAAM,CAAA,aACN,CAAA,cACA,CAAA,CACA,MAAO,CAAA,CACP,cAAA,eACA,CAAA,KACA,CAAA,MACA,CAAA,cACA,CAAA,UACA,CAAA,UACA,CAAA,MACA,CAAA,CACF,CAAI,EACE,EAAc,EAAe,GAC7B,CAAC,EAAS,EAAU,CAAA,CAAA,EAAA,CADsB,CACZ,EAAV,MAAU,EAAsC,IAAI,EACxE,CAAC,EAAW,EAAY,CAAA,CAAA,EAAU,EAAA,IAAV,IAAU,EAAoC,IAAI,EAC1E,CAAC,EAAsB,EAAuB,CAAA,CAAA,EAAA,EAAU,QAAA,GAAS,GACjE,CAD8C,CAAwB,AACtE,CAAA,EAAA,EAAY,YAAA,EAAa,GAAG,AAC5B,CAAC,EAAM,EAAO,CAAA,CAAA,EAAI,CAAJ,CAAI,oBAAA,EAAqB,CAC3C,KAAM,EACN,YAAa,IAAe,EAC5B,SAAU,EACV,OAAQ,CACV,CAAC,EACK,CAAC,EAAO,EAAQ,CAAA,CAAA,EAAA,EAAA,AAAI,oBAAA,EAAqB,CAC7C,KAAM,EACN,YAAa,EACb,SAAU,EACV,OAAQ,CACV,CAAC,EACK,EAAA,CAAA,EAAA,EAAiC,MAAA,EAAwC,IAAI,EAG7E,GAAgB,GAAU,GAAQ,CAAC,CAAC,EAAQ,OAAA,CAAQ,MAAM,EAC1D,CAAC,CAD6D,CAC3C,EAAmB,CAAA,CAAA,EAAA,EAAU,QAAA,EAAS,CAAnB,GAAuB,IAAkB,CAAC,AAOhF,EAAkB,EAPuC,IAOjC,IAAA,CAAK,GAChC,GAAA,CAAI,AAAC,GAAW,EAAO,IADyB,CACzB,CAAM,KAAK,EAClC,IAAA,CAAK,GAAG,EAEX,MACE,CAAA,EAAA,EAAA,GAAA,EAAA,EAAiB,EAAjB,EAAiB,CAAhB,CAAsB,GAAG,CAAA,CACxB,SAAA,CAAA,EAAA,EAAA,IADF,AACE,EAAC,EAAA,CAAD,SACE,EACA,MAAO,UAFT,AAGE,EACA,gBAAiB,YACjB,EACA,kBAAmB,uBACnB,EACA,6BAA8B,EAC9B,UAAW,CAAA,EAAA,EAAA,KAAA,CAAM,SACjB,EACA,cAAe,OACf,EACA,aAAc,EACd,IAAK,2BACL,WACA,EAEA,SAAA,CAAA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAW,QAAA,CAAX,CAAoB,MAAO,EAC1B,SAAA,CAAA,CADF,CACE,EAAA,GAAA,EAAC,EAAA,CACC,CADF,KACS,EAAM,aAAA,CACb,MAFF,YAEE,CAAA,EAAA,EAAyB,WAAA,EAAY,AAAC,IACpC,EAAoB,AAAC,GAAS,EADiB,EACb,IAAI,GAAM,CAAF,EAAE,CAAI,GAClD,EAAG,CADqD,AACpD,CADqD,AACpD,EACL,qBAAA,CAAA,EAAA,EAA4B,WAAA,EAAY,AAAC,IACvC,EAAoB,AAAC,IACnB,CAFgD,GAE1C,CADsB,CACT,IAAI,IAAI,GAE3B,CAF+B,MAC/B,EAAW,MAAA,CAAO,GACX,CACT,CAAC,CAFyB,AAG5B,EAAG,CAAC,CAAC,WAEJ,CAAA,EACH,CACF,EAEC,EACC,CAAA,EAAA,EAAA,IAAA,EAAC,GAAD,AAAC,CAEC,YAFF,GAEa,WACX,AAHF,EAIE,SAAU,CAAA,OACV,eACA,EACA,QAEA,SAAW,AAAD,GAAW,EAAS,EAAM,MAAA,CAAO,KAAK,WAChD,OACA,EAEC,SAAA,CAAU,KAAA,IAAV,AAAsB,EAAA,CAAA,EAAA,EAAA,GAAA,EAAC,CAAD,QAAC,CAAO,MAAM,EAAA,CAAG,EAAK,KAC5C,KADsB,CAChB,IAAA,CAAK,GAAgB,EAbvB,GAeL,KAAA,EACN,CAHkC,AAIpC,CAEJ,EAEA,EAAO,WAAA,CAAc,EAMrB,IAAM,EAAe,gBAMf,EAAA,CAAA,EAAA,EAAsB,UAAA,EAC1B,CAAC,EAAwC,KACvC,GAAM,SADkD,MAChD,CAAA,CAAe,WAAW,EAAA,CAAO,GAAG,EAAa,CAAI,EACvD,EAAc,EAAe,GAC7B,CAFmD,CAEzC,EAAiB,EAAc,GACzC,CAF0C,CAE7B,EAAQ,MADiC,EACjC,EAAY,EACjC,EAAA,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAc,EAAQ,eAAe,EACpE,EAAW,EAAc,GACzB,EAAuB,CAAA,EAAA,EAAA,GADe,GACf,EAA0C,OAAO,EAExE,CAAC,EAAW,EAAuB,EAAc,CAAI,GAAmB,AAAC,IAC7E,IAAM,AAD+C,EAChC,CADmE,GACxD,KAAF,CAAE,CAAO,AAAC,GAAS,CAAC,EAAK,QAAQ,EACzD,EAAc,EAAa,IAAA,CAAK,AAAC,GAAS,EAAK,KAAA,GAAU,EAAQ,KAAK,EACtE,EAAW,GAAa,EAAc,EAAQ,EACnC,MAAA,GAD8C,AACnC,CAAxB,GACF,EAAQ,aAAA,CAAc,EAAS,KAAK,CAExC,CAAC,EAEK,EAAc,AAAD,IACZ,IACH,EAAQ,MADO,CAD0D,KAEjE,EAAa,GAErB,CAFyB,IAKvB,IACF,EAAQ,IAJO,IAGC,gBACR,CAAyB,OAAA,CAAU,CACzC,EAAG,KAAK,KAAA,CAAM,EAAa,KAAK,EAChC,EAAG,KAAK,KAAA,CAAM,EAAa,KAAK,CAClC,EAEJ,EAEA,MACE,CAAA,EAAA,EAAA,GAAA,EAAA,EAAiB,EAAjB,IAAiB,CAAhB,CAAuB,SAAO,EAAE,GAAG,CAAA,CAClC,KADF,IACE,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,MAAA,CAAV,CACC,KAAK,MADP,GAEE,KAAK,WACL,gBAAe,EAAQ,SAAA,CACvB,gBAAe,EAAQ,IAAA,CACvB,gBAAe,EAAQ,QAAA,CACvB,oBAAkB,OAClB,IAAK,EAAQ,GAAA,CACb,aAAY,EAAQ,IAAA,CAAO,OAAS,SACpC,SAAU,EACV,gBAAe,EAAa,GAAK,KAAA,EACjC,mBAAkB,GAAsB,EAAQ,KAAK,EAAI,GAAK,KAAA,EAC7D,GAAG,CAAA,CACJ,IAAK,EAEL,QAAA,CAAA,EAAA,EAAS,oBAAA,EAAqB,EAAa,OAAA,CAAS,AAAC,IAMnD,EAAM,IANuD,SAMvD,CAAc,KAAA,CAAM,EAGK,SAAS,CAApC,EAAe,OAAA,EACjB,EAAW,EAEf,CAAC,EAFmB,AAGpB,cAAA,CAAA,EAAA,EAAe,oBAAA,EAAqB,EAAa,aAAA,CAAgB,AAAD,IAC9D,EAAe,IAD0D,GAC1D,CAAU,EAAM,WAAA,CAI/B,IAAM,EAAS,EAAM,MAAA,AACjB,GAAO,iBAAA,CAAkB,EAAM,SAAS,GAAG,AAC7C,EAAO,qBAAA,CAAsB,EAAM,SAAS,EAMzB,IAAjB,EAAM,MAAA,EAAgB,CAAkB,MAAZ,OAAA,EAA2C,SAAS,CAA/B,EAAM,WAAA,GACzD,EAAW,GAEX,EAFgB,AAEV,cAAA,CAAe,EAEzB,CAAC,EACD,UAAA,CAAW,EAAA,EAAA,oBAAA,EAAqB,EAAa,SAAA,CAAW,AAAC,IACvD,IAAM,EAD2D,AACrB,KAAtB,EAAU,OAAA,AACV,AAClB,CAAC,EADuB,OAAA,EAAW,EAAM,MAAA,EAAU,EAAM,OAAA,EAClB,EAAG,EAAxB,EAAM,GAAA,CAAI,MAAA,EAAc,EAAsB,EAAM,GAAG,IACzE,GAA+B,MAAd,EAAM,GAAQ,AAAR,EAAa,CAAA,AACpC,EAAU,QAAA,CAAS,EAAM,GAAG,GAAG,CACjC,IACA,EAAM,KADK,SACL,CAAe,EAEzB,CAAC,CAAA,EACH,CACF,CAEJ,GAGF,EAAc,WAAA,CAAc,EAM5B,IAAM,EAAa,cAQb,EAAA,CAAA,EAAA,EAAoB,UAAA,EACxB,CAAC,EAAsC,KAErC,GAAM,SAFgD,MAE9C,CAAA,WAAe,CAAA,OAAW,CAAA,UAAO,CAAA,aAAU,EAAc,EAAA,CAAI,GAAG,EAAW,CAAI,EACjF,EAAU,EAAiB,EAAY,AADsC,GAE7E,UADoD,oBAClD,CAAA,CAA6B,CAAI,EACnC,EAA2B,KAAA,IAAb,EACd,EAAA,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAc,EAAQ,iBAAiB,EAM5E,MAJA,CAKE,EALF,EAAA,SAKE,MALF,EAAgB,KACd,CADoB,CACS,EAC/B,EAAG,CAAC,EAA8B,EAAY,EADJ,AAIxC,CAAA,AALF,EAKE,EAAA,EAH2C,CAG3C,EAAA,EAAC,SAAA,CAAU,IAAA,CAAV,CACE,GAAG,CAAA,CACJ,IAAK,EAGL,EALF,IAKS,CAAE,cAAe,MAAO,EAE9B,SAAA,GAAsB,EAAQ,KAAK,EAAI,CAAA,CAAA,CAAA,EAAA,GAAA,EAAA,EAAA,GAAA,KAAA,CAAA,CAAG,SAAA,CAAA,CAAY,EAAM,CAAA,EAGnE,GAGF,AANgD,EAMpC,KANoC,MAMpC,CAAc,EAW1B,IAAM,EAAA,CAAA,EAAA,EAAmB,UAAA,EACvB,CAAC,EAAqC,KACpC,GAAM,SAD+C,MAC7C,CAAA,UAAe,CAAA,CAAU,GAAG,EAAU,CAAI,EAClD,KAD8C,CAE5C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,EAAD,OAAC,CAAU,IAAA,CAAV,CAAe,aAAhB,CAA2B,GAAE,GAAG,CAAA,CAAW,IAAK,EAC7C,SAAA,GAAY,GAAA,CACf,CAEJ,GAGF,EAAW,WAAA,CAhBO,EAgBO,WAiBzB,IAAM,EAA4C,AAAC,GAC1C,CAAA,EAAA,EAAA,EADoF,CACpF,EAAA,EAAC,MAAA,CAAA,CAAgB,SAAO,EAAE,GAAG,CAAA,CAAO,EAG7C,EAAa,CAHJ,UAGI,CAfO,EAeO,aAM3B,IAAM,EAAe,gBAKf,EAAA,CAAA,EAAA,EAAsB,UAAA,EAC1B,CAAC,EAAwC,KACvC,IAAM,EAAU,EAAiB,EAAc,EADS,AACH,aAAa,EAC5D,CAAC,EAAU,EAAW,CAAA,CAAA,EAAA,EAAU,GAAV,KAAU,CAA2B,SAOjE,CAJA,CAAA,EAAA,AAII,EAJJ,eAAA,EAAgB,KACd,CADoB,CACR,IAAI,QADlB,SAEA,AADmC,CAAC,CACjC,CAAC,CAAC,EAEA,EAAQ,IAAA,EAAM,AAcZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAmB,GAAG,CAAA,CAAO,IAAK,CAAA,CAAc,EAbzC,AACN,EAAA,CAAA,EAAA,EACM,QAWR,IAXQ,EACP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAsB,AAAvB,MAA8B,EAAM,aAAA,CAClC,MADF,GACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAW,EAAZ,EAAY,CAAX,CAAgB,MAAO,EAAM,aAAA,CAC5B,CADF,QACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAD,EAAC,CAAK,SAAA,EAAM,QAAA,CAAS,CAAA,CACvB,CAAA,CACF,AAFI,GAGJ,EAEF,IAIR,GAGF,EAAc,WAAA,CAAc,EA2B5B,GAAM,CAAC,EAAuB,EAAuB,CACnD,EAA+C,GAgC3C,EAAA,CAAA,EAAA,EAAO,EAhCgD,MADR,EAiCxC,EAAW,4BAA4B,EAE9C,EAAA,CAAA,EAAA,EAA0B,UAAA,EAC9B,CAAC,EAA4C,KAC3C,GAAM,SADsD,MAE1D,CAAA,UACA,EAAW,cAAA,kBACX,CAAA,iBACA,CAAA,CACA,sBAAA,EAAA,EAAA,EAGA,CAAA,YACA,CAAA,OACA,CAAA,aACA,CAAA,cACA,CAAA,mBACA,CAAA,kBACA,CAAA,QACA,CAAA,kBACA,CAAA,iBACA,CAAA,CAEA,CAFA,EAAA,AAEG,EACL,CAAI,EACE,EAAU,EAAiB,EAAc,GACzC,CAAC,EAAS,EAAU,CAAA,CAAA,EAAA,CADkC,CACxB,EAAV,MAAU,EAA0C,IAAI,EAC5E,CAAC,EAAU,EAAW,CAAA,CAAA,EAAU,EAAA,GAAV,KAAU,EAAuC,IAAI,EAC3E,EAAA,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAc,AAAC,GAAS,EAAW,IAAI,AACtE,CADuE,AACtE,EAAc,EAAe,CAAA,CAAA,EAAA,EAAU,OAAV,CAAU,EAAmC,IAAI,EAC/E,CAAC,EAAkB,EAAmB,CAAA,CAAA,EAAA,EAAU,QAAA,EACpD,CAD0C,KAGtC,EAAW,EAAc,GACzB,CAAC,EAAc,EAAe,CAAA,CAAA,EAAA,CADQ,CACE,OAAV,CAAU,EAAS,IACjD,CADsD,CACtD,CAAA,EAAA,EAA+B,MAAA,GAAO,KAAK,GAG3C,SAAA,EAAU,KACd,CADoB,EAChB,AAJ+B,EAItB,MAAA,CAAA,EAAA,EAAO,UAAA,EAAW,EACjC,EAAG,CAAC,EADoC,AAC5B,EAIZ,CAAA,EAJW,AAIX,EAAA,UALsB,IAKtB,CAAe,GAEf,IAAM,EAAA,CAAmB,EAAA,EAAA,OAFzB,IAEyB,EACvB,AAAC,IACC,GAAM,CAAC,EAAW,GAAG,EADoB,AACX,CAAI,IAAW,EAAf,CAAe,CAAI,AAAC,CAAP,EAAgB,EAAK,GAAA,CAAI,OAAO,EACrE,CAAC,EAAQ,CAAI,EAAU,GAAd,EAAc,CAAM,CAAA,CAAE,EAE/B,EAA6B,SAAS,aAAA,CAC5C,IAAA,IAAW,KAAa,EAEtB,GAAI,IAAc,EAFgB,EAGlC,GAAW,eAAe,CAAE,IADkB,EACX,SAAU,CAAC,EAE1C,IAAc,GAAa,IAAU,EAAS,GAAT,MAAS,EAAY,EAC1D,IAAc,GAAY,IAAU,EAAS,GAAT,MAAS,CAAY,EAAS,YAAA,EACtE,GAAW,MAAM,EACb,SAAS,aAAA,GAAkB,GANe,MAQlD,EACA,CAAC,EAAU,EAAQ,EAGf,EAAA,CAAA,CAHe,CAGf,EAA0B,EANiC,CAAA,QAMjC,EAC9B,IAAM,EAAW,CAAC,EAAc,EAAQ,EACxC,CAAC,EADsC,AAC1B,EAAc,EAAO,GAK9B,EAAA,AAL8B,EAK9B,SAAA,EAAU,KACV,CADgB,EAElB,GAEJ,EAAG,CAAC,EAAc,EAAkB,CAHhB,CAOpB,GAAM,GANgB,OAEa,IAI3B,CAAA,0BAAc,CAAA,CAAyB,CAAI,GAC7C,EAAA,EAAA,SAAA,EAAU,KACd,CADoB,EAChB,EAAS,CACX,IAAI,EAAmB,CAAE,EAAG,EAAG,EAAG,CAAE,EAE9B,EAAoB,AAAC,IACzB,EAAmB,CACjB,EAAG,CAF4C,IAEvC,GAAA,CAAI,KAAK,KAAA,CAAM,EAAM,KAAK,GAAK,CAAL,CAA8B,OAAA,EAAS,GAAK,CAAA,CAAE,EAChF,EAAG,KAAK,GAAA,CAAI,KAAK,KAAA,CAAM,EAAM,KAAK,GAAK,CAAL,CAA8B,OAAA,EAAS,IAAK,CAAA,CAAE,AAClF,CACF,EACM,EAAmB,AAAD,IAElB,EAAiB,CAAA,EAAK,CAFqB,GAEf,EAAiB,CAAA,EAAK,GACpD,CADwD,CAClD,cAAA,CAAe,EAGjB,AAAC,EAAQ,QAAA,CAAS,EAAM,MAAqB,GAAG,AAClD,GAAa,GAGjB,EAHsB,OAGb,mBAAA,CAAoB,cAAe,GAC5C,EAAyB,OAAA,CAAU,IACrC,AAF+D,EAS/D,OALyC,MAAM,CAA3C,EAAyB,OAAA,GAC3B,SAAS,gBAAA,CAAiB,cAAe,GACzC,SAAS,KADiD,WACjD,CAAiB,YAAa,EAAiB,CAAE,SAAS,EAAM,MAAM,CAAK,CAAC,GAGhF,KACL,CADW,QACF,mBAAA,CAAoB,cAAe,GAC5C,SAAS,KADoD,cACpD,CAAoB,YAAa,EAAiB,CAAE,SAAS,CAAK,CAAC,CAC9E,CACF,CACF,EAAG,CAAC,EAAS,EAAc,EAAyB,OAE9C,SAAA,EAAU,IAFmC,CAGjD,CADoB,GACd,EAAQ,IAAM,GAAa,GAGjC,EAHsC,KACtC,OAAO,gBAAA,CAAiB,OAAQ,GAChC,EADqC,KAC9B,gBAAA,CAAiB,SAAU,GAC3B,EADgC,GAErC,CADW,MACJ,mBAAA,CAAoB,OAAQ,GACnC,EADwC,KACjC,mBAAA,CAAoB,SAAU,EACvC,CACF,EAF8C,AAE3C,CAAC,EAAa,EAEjB,GAAM,CAAC,EAAW,EAFF,AAEuB,CAAI,GAAmB,AAAC,IAC7D,IAAM,EAAe,CADmD,GACxC,CADK,IACP,CAAE,CAAO,AAAC,GAAS,CAAC,EAAK,QAAQ,EACzD,EAAc,EAAa,IAAA,CAAK,AAAC,GAAS,EAAK,GAAA,CAAI,OAAA,GAAY,SAAS,aAAa,EACrF,EAAW,GAAa,EAAc,EAAQ,GAChD,GAKF,KAN6D,EACjD,IAKD,IAAO,EAAS,GAAA,CAAI,OAAA,CAAwB,KAAA,CAAM,CAAC,CAElE,CAAC,EAEK,EAAA,CAAwB,EAAA,EAAA,WAAA,EAC5B,CAAC,EAAgC,EAAe,KAC9C,IAAM,EAAmB,CAAC,CAD0C,CACnB,OAAA,EAAW,CAAC,EAEzD,CADqC,KAAA,IAAlB,EAAQ,KAAA,EAAuB,EAAQ,KAAA,GAAU,GAClD,CAAA,GAAkB,CACtC,EAAgB,GACZ,CADgB,GACE,EAAuB,OAAA,EAAU,CAAA,CAAjC,CAE1B,EACA,CAAC,EAAQ,KAAK,CAAA,EAEV,GAAA,CAAA,EAAA,EAAwB,WAAA,EAAY,IAAM,GAAS,MAAM,EAAG,CAAC,EAAQ,EACrE,GADoE,AACpE,CAAA,EAAA,EAA4B,WAAA,EAChC,CAAC,EAAoC,EAAe,KAClD,IAAM,EAAmB,CAAC,CAD8C,CACvB,OAAA,EAAW,CAAC,GACpB,AACrC,KADqC,IAAlB,EAAQ,KAAA,EAAuB,EAAQ,KAAA,GAAU,GAClD,CAAA,GAAkB,AACtC,EAAoB,EAExB,EAF4B,AAG5B,CAAC,EAAQ,KAAK,CAAA,EAGV,GAA8B,WAAb,EAAwB,GAAuB,EAGhE,GACJ,KAAmB,GACf,MACE,aACA,QACA,cACA,eACA,oBACA,mBACA,SACA,mBACA,kBACA,CACF,EACA,CAAC,EAEP,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,CADF,KACS,UACP,WACA,CAHF,CAIE,iBAAkB,EAClB,+BACA,EACA,YAAa,uBACb,qBACA,mBACA,EACA,WACA,yBACA,EAEA,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,UAAC,CAAA,CAAa,GAAI,EAAM,UAAxB,MAAsC,EACpC,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,QAAC,CAAA,CACC,SAAO,EAGP,MAJF,EAIW,EAAQ,IAAA,CACjB,iBAAkB,AAAC,IAEjB,EAAM,IAFqB,UAErB,CAAe,CACvB,EACA,mBAAA,CAAA,EAAA,EAAoB,oBAAA,EAAqB,EAAkB,AAAC,IAC1D,EAAQ,IAD4D,EAAlD,CACV,EAAS,MAAM,CAAE,eAAe,CAAK,CAAC,EAC9C,EAAM,cAAA,CAAe,CACvB,CAAC,EAED,SAAA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,EAAD,cAAC,CAAA,CACC,SAAO,EACP,AAFF,6BAE6B,kBAC3B,EACA,uBAGA,eAAgB,AAAC,GAAU,EAAM,cAAA,CAAe,EAChD,UAAW,IAAM,EAAQ,YAAA,EAAa,GAEtC,EAF2C,OAE3C,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACC,AADF,KACO,UACL,GAAI,EAAQ,OAFd,EAEc,CACZ,aAAY,EAAQ,IAAA,CAAO,OAAS,SACpC,IAAK,EAAQ,GAAA,CACb,cAAe,AAAC,GAAU,EAAM,cAAA,CAAe,EAC9C,GAAG,CAAA,CACH,GAAG,EAAA,CACJ,SAAU,IAAM,GAAgB,GAChC,CADoC,GAC/B,EACL,MAAO,CAEL,QAAS,OACT,cAAe,SAEf,QAAS,OACT,GAAG,EAAa,KAAA,AAClB,EACA,UAAA,CAAA,EAAA,EAAW,oBAAA,EAAqB,EAAa,SAAA,CAAW,AAAC,IACvD,IAAM,EAD2D,AAC3C,EAAM,OAAA,EAAW,EAAM,MAAA,EAAU,EAAM,OAAA,CAO7D,GAJkB,MAAO,EAArB,EAAM,GAAA,EAAe,EAAM,cAAA,CAAe,EAE1C,AAAC,GAAsC,EAAG,EAAxB,EAAM,GAAA,CAAI,MAAA,EAAc,EAAsB,EAAM,GAAG,EAEzE,CAAC,UAAW,YAAa,OAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,EAAM,GAAG,EAAG,CAE/D,IAAI,EADU,AACO,IADI,KAAF,CAAE,CAAO,AAAC,GAAS,CAAC,EAAK,QAAQ,EAC7B,GAAA,CAAI,AAAC,GAAS,EAAK,GAAA,CAAI,OAAQ,EAK1D,GAHI,CAAC,UAAW,KAAK,CAAA,CAAE,QAAA,CAAS,EAAM,GAAG,GAAG,CAC1C,EAAiB,EAAe,KAAA,CAAM,EAAE,OAAA,EAAQ,EAE9C,CAAC,UAAW,WAAW,CAAA,CAAE,QAAA,CAAS,EAAM,GAAG,EAAG,CAChD,IAAM,EAAiB,EAAM,MAAA,CACvB,EAAe,EAAe,OAAA,CAAQ,GAC5C,EAAiB,EAAe,KAAA,CAAM,CADoB,CACL,CAAC,CACxD,CAMA,WAAW,IAAM,EAAW,IAE5B,EAAM,QAFoC,CAAC,KAErC,CAAe,CACvB,CACF,CAAC,CAAA,EACH,EACF,EACF,CACF,CAAA,EAGN,EAGF,GAAkB,WAAA,CAvTQ,EAuTM,kBAWhC,IAAM,EAAA,CAAA,EAAA,EAAkC,UAAA,EAGtC,CAAC,EAAoD,KACrD,GAAM,SADgE,MAC9D,CAAA,UAAe,CAAA,CAAU,GAAG,EAAY,CAAI,EAC9C,EAAU,EAAiB,EAAc,CADC,EAE1C,EAAiB,EAAwB,EAAc,GACvD,CAFsD,AAErD,EAAgB,EAAiB,CAAU,CAAA,EAAA,CADwB,CACxB,QAAA,CAAV,CAA0C,IAAI,EAChF,CAAC,EAAS,EAAU,CAAA,CAAA,EAAA,EAAU,EAAV,MAAU,EAAkD,IAAI,EACpF,EAAA,CAAe,EAAA,EAAA,eAAA,EAAgB,EAAc,AAAC,GAAS,EAAW,IAAI,AACtE,CADuE,CAC5D,EAAc,GACzB,EAAA,CAAA,EAAA,EAAgC,GADM,GACN,EAAO,IACvC,CAD4C,CAC5C,CAAA,EAAA,EAA4B,MAAA,GAAO,GAEnC,CAFuC,IADP,KAG9B,CAAA,cAAU,CAAA,kBAAc,CAAA,mBAAkB,CAAA,CAAkB,CAAI,EAClE,EAAA,CAAA,EAAA,EAAiB,WAAA,EAAY,KACjC,CADuC,EAErC,EAAQ,OAAA,EACR,EAAQ,SAAA,EACR,GACA,GACA,GACA,GACA,EACA,CACA,IAAM,EAAc,EAAQ,OAAA,CAAQ,qBAAA,CAAsB,EAKpD,EAAc,EAAQ,qBAAA,CAAsB,EAC5C,EAAgB,EAAQ,SAAA,CAAU,qBAAA,CAAsB,EACxD,EAAe,EAAiB,qBAAA,CAAsB,EAE5D,GAAoB,QAAhB,EAAQ,GAAA,CAAe,CACzB,IAAM,EAAiB,EAAa,IAAA,CAAO,EAAY,IAAA,CACjD,EAAO,EAAc,IAAA,CAAO,EAC5B,EAAY,EAAY,IAAA,CAAO,EAC/B,EAAkB,EAAY,KAAA,CAAQ,EACtC,EAAe,KAAK,GAAA,CAAI,EAAiB,EAAY,KAAK,EAC1D,EAAY,OAAO,UAAA,GAAa,CAChC,EAAc,CAAA,EAAA,EAAA,KAAA,EAAM,EAAM,IAO9B,KAAK,GAAA,CAAI,GAAgB,EAAY,GACtC,EAED,EAAe,KAHoC,AAGpC,CAAM,QAAA,CAAW,EAAkB,KAClD,EAAe,KAAA,CAAM,IAAA,CAAO,EAAc,IAC5C,KAAO,CACL,IAAM,EAAiB,EAAY,KAAA,CAAQ,EAAa,KAAA,CAClD,EAAQ,OAAO,UAAA,CAAa,EAAc,KAAA,CAAQ,EAClD,EAAa,OAAO,UAAA,CAAa,EAAY,KAAA,CAAQ,EACrD,EAAkB,EAAY,KAAA,CAAQ,EACtC,EAAe,KAAK,GAAA,CAAI,EAAiB,EAAY,KAAK,EAC1D,EAAW,OAAO,UAAA,GAAa,CAC/B,EAAe,CAAA,EAAA,EAAA,KAAA,EAAM,EAAO,IAEhC,KAAK,GAAA,CAAI,GAAgB,EAAW,GACrC,CAED,GAAe,KAHmC,AAGnC,CAAM,QAAA,CAAW,EAAkB,KAClD,EAAe,KAAA,CAAM,KAAA,CAAQ,EAAe,IAC9C,CAKA,IAAM,EAAQ,IACR,EAAkB,GADD,IACQ,WAAA,CAAc,GACvC,EAAc,EAAS,UADiC,EACjC,CAEvB,EAAgB,OAAO,gBAAA,CAAiB,GACxC,EAAwB,EADuB,OACd,EAAc,cAAA,CAAgB,EAAE,EACjE,EAAoB,SAAS,EAAc,UAAA,CAAY,EAAE,EACzD,EAA2B,SAAS,EAAc,iBAAA,CAAmB,EAAE,EAEvE,EAAoB,EAAwB,EAAoB,EADzC,SAAS,EAAc,CACgC,YADhC,CAAe,EAAE,EACsC,EACrG,EAAmB,KAAK,GAAA,CAAgC,EAA5B,EAAa,YAAA,CAAkB,GAE3D,EAAiB,OAAO,KAFoD,WAEpD,CAAiB,GACzC,EAAqB,GAD4B,MACnB,EAAe,UAAA,CAAY,EAAE,EAC3D,EAAwB,SAAS,EAAe,aAAA,CAAe,EAAE,EAEjE,EAAyB,EAAY,GAAA,CAAM,EAAY,MAAA,CAAS,IAAI,CAGpE,EAAyB,EAAa,YAAA,CAAe,EAErD,EAAyB,EAAwB,GAD9B,EAAa,SAAA,CAAY,CAAA,EAMlD,EAL2E,CAGvC,CAEhC,EAF0D,EAE7B,CAC/B,IAAM,EACJ,EAAM,MAAA,CAAS,GAAK,IAAiB,CAAA,CAAM,EAAM,MAAA,CAAS,CAAC,CAAA,CAAG,GAAA,CAAI,OAAA,AACpE,GAAe,KAAA,CAAM,MAAA,CAAS,MAG9B,IAAM,EAAmC,KAAK,GAAA,CAC5C,AAhB8B,EAAkB,EAiBhD,GAEG,EAAa,GAAwB,CAAA,EALxC,EAME,AANM,YAGR,AAHQ,CAAe,EAAS,SAAA,CAAY,EAAS,YAAA,EAOnD,GAGJ,EAAe,KAAA,CAAM,MAAA,CADN,AACe,EADU,EACD,IACzC,KAAO,CACL,IAAM,EAAc,EAAM,MAAA,CAAS,GAAK,CATtC,GASuD,CAAA,CAAM,CAAC,CAAA,CAAG,GAAA,CAAI,OAAA,AACvE,GAAe,KAAA,CAAM,GAAA,CAAM,MAC3B,IAAM,EAAgC,KAAK,GAAA,CACzC,EACA,EACE,EAAS,SAAA,CAER,EAFQ,CAEM,GAAqB,CAAA,CACpC,GAGJ,EAAe,KAAA,CAAM,MAAA,CADN,AACe,GAhCE,EAAoB,CAAA,EAgCb,KACvC,EAAS,SAAA,CAAY,EAAyB,EAAyB,EAAS,CAFjC,QAEiC,AAClF,CAEA,EAAe,KAAA,CAAM,IAVN,EAUM,CAAS,GAAG,MACjC,EAAe,KAAA,CAAM,AAD0B,CAAA,IAAA,CAAA,GAC1B,CAAY,EAAmB,KACpD,EAAe,KAAA,CAAM,SAAA,CAAY,EAAkB,KAGnD,MAIA,KAJW,iBAIW,IAAO,EAAwB,OAAA,EAAU,EACjE,CACF,CAFwE,CAErE,CACD,EACA,EAAQ,OAAA,CACR,EAAQ,SAAA,CACR,EACA,EACA,EACA,EACA,EACA,EAAQ,GAAA,CACR,EACD,EAED,CAAA,EAAA,EAAA,eAAA,EAAgB,IAAM,IAAY,CAAC,EAAS,EAAb,AAG/B,GAAM,CAAC,AAHoC,EAGrB,AAHtB,EAGsC,CAAA,CAAA,EAAA,EAAU,QAAV,AAAU,CAAiB,GACjE,CAAA,EAAA,EAAA,eAAA,EAAgB,KACV,CADgB,EACP,EAAiB,GAAjB,IAAwB,EADvC,cACuC,CAAiB,GAAS,IAAF,EAAQ,CACvE,EAAG,CAAC,EAAQ,EAMZ,GANW,CAML,EAAA,CAAA,EAAA,EAAiC,WAAA,EACrC,AAAC,IACK,IAAwC,CADE,GAClC,EAAoB,AAAkB,OAAlB,GAC9B,IACA,KADS,CAET,EAAoB,OAAA,EAAU,EAElC,CAHwB,CAIxB,CAAC,EAAU,EAAiB,EAG9B,MACE,CAAA,EAAA,EAAA,EAJ4B,CAI5B,EAAC,GAAA,CAAD,AACE,MAAO,iBACP,IAFF,sBAGE,EACA,qBAAsB,EAEtB,SAAA,CAAA,EAAA,EAAA,GAAA,EAAC,IAAD,EAAC,CACC,IAAK,EACL,MAAO,CACL,QAAS,GAHb,IAII,cAAe,SACf,SAAU,QACV,OAAQ,CACV,EAEA,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CACE,GAAG,CAAA,CACJ,IAAK,EACL,GAHF,GAGS,CAGL,UAAW,aAEX,UAAW,OACX,GAAG,EAAY,KAAA,AACjB,CAAA,EACF,EACF,EAGN,CAAC,EAED,EAA0B,WAAA,CAvNS,EAuNK,0BAYxC,IAAM,GAAA,CAAA,EAAA,EAA6B,UAAA,EAGjC,CAAC,EAA+C,KAChD,GAAM,SAD2D,MAE/D,CAAA,OACA,EAAQ,OAAA,kBACR,EA/jBmB,EA+jBA,CACnB,GAAG,EACL,CAAI,EACE,EAAc,EAAe,EAHd,CAKrB,MACE,CAAA,EAAA,CAH8C,CAG9C,GAAA,EAAiB,EAAA,EAAjB,KAAiB,CAAhB,CACE,GAAG,CAAA,CACH,GAAG,CAAA,CACJ,IAAK,MAHP,EAIE,mBACA,EACA,MAAO,CAEL,UAAW,aACX,GAAG,EAAY,KAAA,CAGb,0CAA2C,uCAC3C,yCAA0C,sCAC1C,0CAA2C,uCAC3C,+BAAgC,mCAChC,gCAAiC,mCAErC,CAAA,EAGN,CAAC,EAED,GAAqB,WAAA,CA1CQ,EA0CM,qBAYnC,GAAM,CAAC,GAAwB,GAAwB,CACrD,EAAgD,EAAc,CAAC,CAAC,EAE5D,GAAgB,SAHiC,QAWjD,GAAA,CAAA,EAAA,EAAuB,UAAA,EAC3B,CAAC,EAAyC,KACxC,GAAM,SADmD,MACjD,CAAA,OAAe,CAAA,CAAO,GAAG,EAAc,CAAI,EAC7C,EAAiB,EAAwB,GAAe,EADf,CAEzC,EAAkB,GAAyB,GAAe,EADW,CAErE,EAAA,CAAA,EAAA,EAAe,GADwD,YACxD,EAAgB,EAAc,EAAe,gBAAgB,EAC5E,EAAA,CAAA,EAAA,EAAyB,MAAA,EAAO,CAAC,EACvC,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,CAAA,CAEE,SAAA,CAAA,CAAA,EAAA,EAAA,GAAA,AAFF,EAEG,MAFH,EAEG,CACC,sBADF,EAC2B,CACvB,OAAQ,CAAA,yKAAA,CAAA,AACV,QACA,CAAA,GAEF,CAAA,EAAA,EAAA,GAAA,EAAC,EAAW,IAAA,CAAX,CAAgB,MAAO,EACtB,SAAA,CAAA,EAAA,EAAA,CADF,EACE,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CACC,cADF,eAC6B,GAC3B,KAAK,eACJ,GAAG,CAAA,CACJ,IAAK,EACL,MAAO,CAIL,SAAU,WACV,KAAM,EAKN,SAAU,cACV,GAAG,EAAc,KAAA,AACnB,EACA,SAAA,CAAA,EAAA,EAAU,oBAAA,EAAqB,EAAc,QAAA,CAAU,AAAC,IACtD,IAAM,EAD0D,AAC/C,EAAM,aAAA,CACjB,gBAAE,CAAA,CAAgB,yBAAA,CAAwB,CAAI,EACpD,GAAI,GAAyB,SAAW,EAAgB,CACtD,IAAM,EAAa,KAAK,GAAA,CAAI,EAAiB,OAAA,CAAU,EAAS,SAAS,EACzE,GAAI,EAAa,EAAG,CAClB,IAAM,EAAkB,OAAO,WAAA,CAAc,GAGvC,EAAa,KAAK,GAAA,CAFH,AAEO,GAHkC,QAC9B,EAAe,CAEL,IAFK,CAAM,IAEF,KAFW,EAC5C,WAAW,EAAe,KAAA,CAAM,MAAM,GAGxD,GAAI,EAAa,EAAiB,CAChC,IAAM,EAAa,EAAa,EAC1B,EAAoB,KAAK,GAAA,CAAI,EAAiB,GAC9C,EAAa,EAAa,EAEhC,CAH8D,CAG/C,KAAA,CAAM,MAAA,CAAS,EAAoB,KACd,OAAO,CAAvC,EAAe,KAAA,CAAM,MAAA,GACvB,EAAS,SAAA,CAAY,EAAa,EAAI,EAAa,EAEnD,EAAe,KAAA,CAAM,cAAA,CAAiB,WAE1C,CACF,CACF,CACA,EAAiB,OAAA,CAAU,EAAS,SAAA,AACtC,CAAC,CAAA,EACH,CACF,EAAA,CACF,CAEJ,GAGF,GAAe,WAAA,CAAc,GAM7B,IAAM,GAAa,cAIb,CAAC,GAA4B,GAAqB,CACtD,EAA6C,IAKzC,GAAA,CAAA,EALmD,AAKnD,EAAoB,GAN8B,OAM9B,EACxB,CAAC,EAAsC,KACrC,GAAM,CAAE,QAD8C,OAC9C,CAAe,GAAG,EAAW,CAAI,EACnC,EAAA,CAAA,EAAA,CAD+B,CACrB,KAAA,CAAM,GACtB,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAD,AAA4B,MAAO,EAAe,GAAI,EACpD,SAAA,CAAA,EAAA,EAAA,AADF,GACE,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CAAc,KAAK,QAAQ,CAA5B,iBAA6C,EAAU,GAAG,CAAA,CAAY,IAAK,CAAA,CAAc,CAAA,CAC3F,CAEJ,GAGF,GAAY,WAAA,CAAc,GAM1B,IAAM,GAAa,cAKb,GAAoB,CAAA,EAAA,EAAA,UAAA,EACxB,CAAC,EAAsC,KACrC,GAAM,SADgD,MAC9C,CAAA,CAAe,GAAG,EAAW,CAAI,EACnC,EAAe,GAAsB,CADN,EACkB,GACvD,MAAO,CAAA,EAAA,CAD6D,CAC7D,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CAAc,GAAI,EAAa,EAAA,CAAK,GAAG,CAAA,CAAY,CAApD,GAAyD,CAAA,CAAc,CAChF,GAGF,GAAY,WAAA,CAAc,GAM1B,IAAM,GAAY,aAUZ,CAAC,GAA2B,GAAoB,CACpD,EAA4C,IASxC,GAAA,CAAA,CATiD,CASjD,EAAmB,EAV6B,QAU7B,EACvB,CAAC,EAAqC,KACpC,GAAM,SAD+C,MAEnD,CAAA,OACA,CAAA,UACA,EAAW,EAAA,CACX,UAAW,CAAA,CACX,GAAG,EACL,CAAI,EACE,EAAU,EAAiB,GAAW,GACtC,EAAiB,EAAwB,GAAW,GADD,AAEnD,EAAa,EAAQ,KAAA,CAD4C,EAClC,EAC/B,CAAC,EAAW,EAAY,CAAA,CAAA,EAAA,EAAU,IAAV,IAAU,EAAS,GAAiB,EAAE,EAC9D,CAAC,EAAW,EAAY,CAAA,CAAA,EAAA,EAAU,IAAV,IADU,AACA,GAAS,GAC3C,EAAA,AADgD,CAChD,EAAA,EAAe,eAAA,EAAgB,EAAc,AAAC,GAClD,EAAe,eAAA,GAAkB,EAAM,EAAO,IAE1C,EAAA,CAAA,CAFkD,CAElD,EAAS,KAAA,CAAM,GACf,EAAuB,CAAA,EAAA,EAAA,MAAA,EAA0C,OAAO,EAExE,EAAe,KACd,CADoB,GAEvB,EAAQ,IADK,SACL,CAAc,GACtB,EAD2B,AACnB,YAAA,EAAa,GAEzB,EAEA,AAJ8B,GAI1B,AAAU,IAAI,GAChB,MAAU,AAAJ,MACJ,yLAIJ,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CAAD,AACE,MAAO,EACP,QACA,WAHF,OAIE,aACA,EACA,iBAAA,CAAA,EAAA,EAAwB,WAAA,EAAY,AAAC,IACnC,EAAc,AAAD,GAAmB,AADY,GACZ,CAAkB,GAAM,aAAe,EAAA,CAAA,CAAI,IAAA,CAAK,CAAC,CACnF,EAAG,CAAC,CAAC,EAEL,SAAA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAW,EAAZ,MAAY,CAAX,CACC,MAAO,QACP,KAFF,MAGE,YACA,EAEA,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,GAAA,CAAV,CACC,KAAK,SADP,AAEE,kBAAiB,EACjB,mBAAkB,EAAY,GAAK,KAAA,EAEnC,gBAAe,GAAc,EAC7B,aAAY,EAAa,UAAY,YACrC,gBAAe,GAAY,KAAA,EAC3B,gBAAe,EAAW,GAAK,KAAA,EAC/B,SAAU,EAAW,KAAA,EAAY,CAAA,EAChC,GAAG,CAAA,CACJ,IAAK,EACL,QAAA,CAAA,EAAA,EAAS,oBAAA,EAAqB,EAAU,OAAA,CAAS,IAAM,GAAa,IAAI,AACxE,CADyE,MACzE,CAAA,EAAA,EAAQ,oBAAA,EAAqB,EAAU,MAAA,CAAQ,IAAM,GAAa,IAClE,CADuE,CAAC,MACxE,CAAA,EAAA,EAAS,oBAAA,EAAqB,EAAU,OAAA,CAAS,KAEhB,CAFsB,OAEb,EAApC,EAAe,OAAA,EAAqB,GAC1C,CAAC,EACD,OAFuD,KAEvD,CAAA,EAAA,EAAa,oBAAA,EAAqB,EAAU,WAAA,CAAa,KAGxB,CAH8B,OAGrB,EAApC,EAAe,OAAA,EAAqB,GAC1C,CAAC,EACD,OAFuD,OAEvD,CAAA,EAAA,EAAe,oBAAA,EAAqB,EAAU,aAAA,CAAe,AAAC,IAC5D,EAAe,IADuD,GACvD,CAAU,EAAM,WAAA,AACjC,CAAC,EACD,cAAA,CAAA,EAAA,EAAe,oBAAA,EAAqB,EAAU,aAAA,CAAe,AAAC,IAE5D,EAAe,IAFuD,GAEvD,CAAU,EAAM,WAAA,CAC3B,EACF,EAAe,MADH,KACG,GAAc,EACO,SAAS,CAApC,EAAe,OAAA,EAGxB,EAAM,aAAA,CAAc,KAAA,CAAM,CAAE,eAAe,CAAK,CAAC,CAErD,CAAC,EACD,eAAA,CAAA,EAAA,EAAgB,oBAAA,EAAqB,EAAU,cAAA,CAAgB,AAAC,IAC1D,EAAM,IAD8D,SAC9D,GAAkB,SAAS,aAAA,EAAe,AAClD,EAAe,WAAA,GAAc,CAEjC,CAAC,EACD,UAAA,CAAA,EAAA,EAAW,oBAAA,EAAqB,EAAU,SAAA,CAAW,AAAC,KAC9B,AAClB,EADiC,GADyB,MACzB,EAAW,UAAY,IACzB,MAAd,EAAM,GAAA,AAAQ,EAAK,CAAA,CACpC,EAAe,QAAA,CAAS,EAAM,GAAG,EAAG,CAAA,IAEtB,IAAK,EAAnB,EAAM,CAF2C,EAE3C,EAAa,EAAM,cAAA,CAAe,EAC9C,CAAC,CAAA,EACH,EACF,EAGN,GAGF,GAAW,WAAA,CAAc,GAMzB,IAAM,GAAiB,iBAKjB,GAAA,CAAA,EAAA,EAAuB,UAAA,EAC3B,CAAC,EAAyC,KAExC,GAAM,CAAE,QAFiD,OAEjD,CAAe,WAAA,OAAW,CAAA,CAAO,GAAG,EAAc,CAAI,EACxD,EAAU,EAAiB,GAAgB,EADS,CAEpD,EAAiB,EAAwB,GAAgB,GADD,AAExD,EAAc,GAAqB,GAAgB,EADmB,CAEtE,EAAuB,EAA8B,GAAgB,GADL,AAEhE,CAAC,EAAc,EAAe,CAAA,CAAA,EAAA,CADoD,CAC1C,OAAV,CAAU,EAAuC,IAAI,EACnF,EAAe,CAAA,EAAA,EAAA,eAAA,EACnB,EACA,AAAC,GAAS,EAAgB,GAC1B,CAD8B,CAClB,gBAAA,CACZ,AAAC,GAAS,EAAe,mBAAA,GAAsB,EAAM,EAAY,KAAA,CAAO,EAAY,QAAQ,GAGxF,EAAc,GAAc,YAC5B,EAAA,CAAA,EAAqB,EAAA,OAAA,EACzB,IACE,CAAA,EAAA,EAAA,GAAA,EAAC,GAAD,MAAC,CAA+B,MAAO,EAAY,KAAA,CAAO,OAA1D,EAAoE,EAAY,QAAA,CAC7E,SAAA,CAAA,EADU,EAAY,KAEzB,EAEF,CAAC,EAAY,QAAA,CAAU,EAAY,KAAA,CAAO,EAAW,EAGjD,OAHiD,YAG/C,CAAA,sBAAmB,CAAA,CAAqB,CAAI,EAMpD,MALA,CAAA,AAME,EANF,EAAA,SAME,MANF,EAAgB,KACd,CADoB,CACF,GACX,IAAM,EAAqB,GAFpC,AACgC,CAE7B,CAAC,EAAmB,EAAsB,EAAa,CADV,CAI9C,CAAA,EAAA,EAAA,GAHuD,CAGvD,EAAA,EAAA,QAAA,CAAA,CACE,SAAA,CAAA,CAAA,EAAA,EAAA,GADF,AACE,EAAA,EAAC,IADH,KACG,CAAU,IAAA,CAAV,CAAe,GAAI,EAAY,MAAA,CAAS,CAAzC,EAA4C,CAAA,CAAe,IAAK,CAAA,CAAc,EAG7E,EAAY,UAAA,EAAc,EAAQ,SAAA,EAAa,CAAC,EAAQ,oBAAA,CAAA,CAAA,EAAA,EAC5C,YAAA,EAAa,EAAc,QAAA,CAAU,EAAQ,SAAS,EAC/D,KAAA,CACN,CAEJ,GAGF,GAAe,WAAA,CAAc,GAM7B,IAAM,GAAsB,sBAKtB,GAA4B,CAAA,EAAA,EAAA,UAAA,EAChC,CAAC,EAA8C,KAC7C,GAAM,SADwD,MACtD,CAAA,CAAe,GAAG,EAAmB,CAAI,EAEjD,OADoB,AACb,GADkC,GAAqB,CADjB,EAE1B,UADwD,AACxD,CACjB,EAAA,CAAA,EAAA,GAAA,EAAA,EAAC,GAAD,MAAC,CAAU,IAAA,CAAV,CAAe,aAAhB,EAA2B,EAAE,GAAG,CAAA,CAAoB,IAAK,CAAA,CAAc,EACrE,IACN,EAGF,IAAoB,WAAA,CAAc,GAMlC,IAAM,GAAwB,uBAKxB,GAAA,CAA6B,EAAA,EAAA,UAAA,EAGjC,CAAC,EAA+C,KAChD,IAAM,EAAiB,EAAwB,GAAuB,CADL,CACW,aAAa,EACnF,EAAkB,GAAyB,GAAuB,EAAM,aAAa,EACrF,CAAC,EAAa,EAAc,CAAU,CAAA,EAAA,EAAA,MAAV,EAAU,GAAS,GAC/C,EAAA,AADoD,CACpD,EAAA,EAAe,eAAA,EAAgB,EAAc,EAAgB,oBAAoB,EAevF,MAbA,CAAA,EAAA,EAAA,eAAA,EAAgB,KACd,CADoB,EAChB,EAAe,QAAA,CADrB,CACiC,EAAe,YAAA,CAAc,CAE1D,IAASE,EAAT,WAAwB,AAEtB,EADoB,EAAS,SAAA,CAAY,CAC1BC,CACjB,EAJM,EAAW,EAAe,KAGJ,GAHI,CAOhC,OAFAD,IACA,EAAS,QADI,QACJ,CAAiB,SAAUA,GAC7B,IAAM,EAAS,IAD0B,eAC1B,CAAoB,SAAUA,EACtD,CACF,EAAG,CAAC,EAAe,KAFiD,GAEjD,CAAU,EAAe,YAAY,CAAC,EAElD,EACL,CAAA,EAAA,EAAA,GAAA,EAAC,EAAD,CAAC,CACE,GAAG,CAAA,CACJ,IAAK,EAFP,AAGE,aAAc,GAHhB,EAII,CADkB,EACZ,CAAE,UAAA,CAAU,cAAA,CAAa,CAAI,EAC/B,GAAY,IACd,EAAS,QADmB,CACnB,CAAY,EAAS,SAAA,CAAY,EAAa,YAAA,CAE3D,CAAA,GAEA,IACN,CAAC,EAED,GAAqB,WAAA,CAAc,GAMnC,IAAM,GAA0B,yBAK1B,GAAA,CAAA,EAAA,EAA+B,UAAA,EAGnC,CAAC,EAAiD,KAClD,IAAM,EAAiB,EAAwB,GAAyB,CADL,CACW,aAAa,EACrF,EAAkB,GAAyB,GAAyB,EAAM,aAAa,EACvF,CAAC,EAAe,EAAgB,CAAA,CAAA,EAAA,EAAU,QAAV,AAAU,GAAS,GACnD,EADwD,AACxD,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAc,EAAgB,oBAAoB,EAkBvF,MAhBA,CAAA,EAAA,EAAA,eAAA,EAAgB,KACd,CADoB,EAChB,EAAe,QAAA,CADrB,CACiC,EAAe,YAAA,CAAc,CAE1D,IAASA,EAAT,WAAwB,AACtB,IAAM,EAAY,EAAS,YAAA,CAAe,EAAS,YAAA,CAInD,EADsB,KAAK,IAAA,CAAK,EAAS,GACxBE,MADiC,EAAI,EAExD,EAPM,EAAW,AAMe,EANA,QAAA,CAUhC,OAFAF,IACA,EAAS,QADI,QACJ,CAAiB,SAAUA,GAC7B,IAAM,EAAS,IAD0B,eAC1B,CAAoB,SAAUA,EACtD,CACF,EAAG,CAAC,EAAe,KAFiD,GAEjD,CAAU,EAAe,YAAY,CAAC,EAElD,EACL,CAAA,EAAA,EAAA,GAAA,EAAC,GAAA,CACE,AADH,GACM,CAAA,CACJ,IAAK,EACL,EAHF,WAGgB,GAHhB,EAII,CADkB,EACZ,UAAE,CAAA,cAAU,CAAA,CAAa,CAAI,CAC/B,IAAY,IACd,EAAS,QADmB,CACnB,CAAY,EAAS,SAAA,CAAY,EAAa,YAAA,CAE3D,CAAA,GAEA,IACN,CAAC,EAED,GAAuB,WAAA,CAAc,GAOrC,IAAM,GAAA,CAAA,EAAA,EAA+B,UAAA,EAGnC,CAAC,EAAiD,KAClD,GAAM,SAD6D,MAC3D,CAAA,cAAe,CAAA,CAAc,GAAG,EAAqB,CAAI,EAC3D,EAAiB,EAAwB,YADc,SACQ,GAC/D,EAAA,CAAA,EAAA,EAA2B,GADiD,GACjD,EAAsB,IAAI,EACrD,EAAW,EAAc,GAEzB,EAAA,CAAA,EAAA,EAA6B,GAFS,QAET,EAAY,KACV,CADgB,KACV,CAArC,EAAmB,OAAA,GACrB,OAAO,aAAA,CAAc,EAAmB,OAAO,EAC/C,EAAmB,OAAA,CAAU,KAEjC,EAAG,CAAC,CAAC,EAeL,OACE,IAdI,SAAA,AAcJ,AAdI,EAAU,IACP,EADa,EACP,IACZ,CAAC,EAAqB,EAMzB,CAAA,EAAA,EAAA,OAPoC,IACZ,IAMxB,EAAgB,KACd,CADoB,GACd,EAAa,IAAW,IAAA,AADhC,CAC8B,AAAO,AAAC,GAAS,EAAK,GAAA,CAAI,OAAA,GAAY,SAAS,aAAa,EACxF,GAAY,IAAI,SAAS,eAAe,CAAE,MAAO,SAAU,CAAC,CAC9D,EAAG,CAAC,EAAS,EAGX,CAAA,EAAA,CAHU,CAGV,GAAA,EAAA,EAAC,SAAA,CAAU,GAAA,CAAV,CACC,cADF,CACa,EACV,GAAG,CAAA,CACJ,IAAK,EACL,MAAO,CAAE,WAAY,EAAG,GAAG,EAAqB,KAAA,AAAM,EACtD,cAAA,CAAA,EAAA,EAAe,oBAAA,EAAqB,EAAqB,aAAA,CAAe,KACnC,CADyC,KACnC,CAArC,EAAmB,OAAA,GACrB,EAAmB,OAAA,CAAU,OAAO,WAAA,CAAY,EAAc,GAAE,CAEpE,CAAC,EACD,cAAA,CAAA,EAAA,EAAe,oBAAA,EAAqB,EAAqB,YAA1C,CAA0C,CAAe,KACtE,CAD4E,CAC7D,WAAA,GAAc,EACM,MAAM,CAArC,EAAmB,OAAA,GACrB,EAAmB,OAAA,CAAU,OAAO,WAAA,CAAY,EAAc,GAAE,CAEpE,CAAC,EACD,eAAA,CAAA,EAAA,EAAgB,oBAAA,EAAqB,EAAqB,cAAA,CAAgB,KACxE,CAD8E,EAEhF,CAAC,CAAA,EAGP,CAAC,EAWK,GAAA,CAAA,EAAA,EAAwB,GAfD,OAeC,EAC5B,CAAC,EAA0C,KACzC,GAAM,SADoD,MAClD,CAAA,CAAe,GAAG,EAAe,CAAI,EAC7C,MAAO,CAAA,EAAA,CADkC,CAClC,GAAA,EAAC,EAAA,EAAD,OAAC,CAAU,GAAA,CAAV,CAAc,cAAf,CAA0B,EAAE,GAAG,CAAA,CAAgB,IAAK,CAAA,CAAc,CAC3E,GAGF,GAAgB,WAAA,CAZO,EAYO,gBAM9B,IAAM,GAAa,cAMb,GAAA,CAAA,EAAA,EAAoB,UAAA,EACxB,CAAC,EAAsC,KACrC,GAAM,SADgD,MAC9C,CAAA,CAAe,GAAG,EAAW,CAAI,EACnC,EAAc,EAAe,EADE,CAE/B,EAAU,EAAiB,GAAY,GADG,AAE1C,EAAiB,EAAwB,GAAY,GADD,AAE1D,OAAO,EAAQ,CADyD,GACzD,EAAoC,WAA5B,AACrB,EADoC,QAAA,CACpC,CAAA,CAAA,CAAA,EAAA,GAAA,EAAA,EAAiB,KAAA,CAAhB,CAAuB,GAAG,CAAA,CAAc,GAAG,CAAA,CAAY,IAAK,CAAA,CAAc,EACzE,IADF,AAEJ,GAGF,GAAY,WAAA,CAAc,GAW1B,IAAM,GAAA,CAAA,EAAA,EAA0B,UAAA,EAC9B,CAAC,eAAE,CAAA,CAAe,OAAA,CAAO,GAAG,EAAM,CAAwC,GAAxC,EAChC,IAAM,EAAY,CAAA,EAAA,EAAA,CADuE,KACvE,EAA0B,IAAI,EAC1C,EAAA,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAc,GAC7C,AADgD,EAChD,CAAA,EAAA,EAAY,WAAA,EAAY,GAgC9B,EAhCmC,KAiCjC,IA9BI,SAAA,AA8BJ,EA9Bc,KACd,CADoB,GACd,EAAS,EAAI,OAAA,CACnB,GAAI,CAAC,EAAQ,KAAA,EAOb,IAAM,EAAW,AAJE,OAAO,wBAAA,CACxB,AAFkB,OAAO,iBAAA,CAAkB,SAAA,CAG3C,SAE0B,GAAA,CAC5B,GAAI,IAAc,GAAS,EAAU,CACnC,IAAM,EAAQ,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,EACnD,EAAS,IAAA,CAAK,EAAQ,GACtB,EAD2B,AACpB,aAAA,CAAc,EACvB,CACF,EAF8B,AAE3B,CAAC,EAAW,EAAM,EAenB,CAfkB,AAelB,EAAA,EAAA,GAAA,EAAC,EAAA,SAAA,CAAU,MAAA,CAAV,CACE,GAAG,CAAA,CACJ,MAAO,AAFT,CAEW,GAAA,EAAG,sBAAA,CAAwB,GAAG,EAAM,KAAA,AAAM,EACnD,IAAK,EACL,aAAc,CAAA,EAGpB,GAOF,SAAS,GAAsB,CAAA,EAAgB,AAC7C,MAAiB,KAAV,GAA0B,KAAA,IAAV,CACzB,CAEA,SAAS,GAAmB,CAAA,EAA0C,AACpE,IAAM,EAAA,CAAA,EAAA,EAAqB,cAAA,EAAe,GACpC,EAAkB,CAAA,EAAA,EAAA,IADgC,EAChC,EAAO,EAAE,EAC3B,EAAA,CAAA,EAAA,EAAiB,MAAA,EAAO,CAAC,EAEzB,EAAA,CAAA,EAAA,EAA8B,WAAA,EAClC,AAAC,IACC,IADe,AACT,EAAS,EAAU,OAAA,CAAU,EACnC,EAAmB,GAEnB,AAAC,GAFwB,MAEf,EAAa,CAAA,EAAe,AACpC,EAAU,OAAA,CAAU,EACpB,OAAO,YAAA,CAAa,EAAS,OAAO,EAEtB,GAAI,EAAd,IAAc,EAAS,OAAA,CAAU,OAAO,UAAA,CAAW,IAAM,EAAa,EAAE,EAAG,IAAI,CACrF,CAAA,CAAG,EACL,EACA,CAAC,CAFU,CAEQ,EAGf,EAAA,CAAA,EAAA,EAAuB,OAHR,IAGQ,EAAY,KACvC,CAD6C,CACnC,OAAA,CAAU,GACpB,OAAO,YAAA,CAAa,EAAS,OAAO,CACtC,EAAG,CAAC,CAAC,EAML,WAJM,SAAA,EAAU,IACP,EADa,EACP,OAAO,YAAA,CAAa,EAAS,OAAO,EAChD,CAAC,CAAC,EAEE,CAAC,EAAW,EAAuB,EAAc,AAC1D,CAmBA,SAAS,EApBiD,CAqBxD,CAAA,CACA,CAAA,CACA,CAAA,EACA,IAiBoB,IAfpB,CAeoB,GAfd,EADa,AACM,EADC,MAAA,CAAS,GAAK,MAAM,IAAA,CAAK,GAAQ,GAAF,EAAE,CAAM,AAAC,GAAS,IAAS,CAAA,CAAO,CAAC,CAAC,EACvD,CAAA,CAAO,CAAC,CAAA,CAAK,EAC7C,EAAmB,EAAc,EAAM,OAAA,CAAQ,GAAe,CAAA,EAChE,KAAyB,AADmC,EAchC,EAbI,KAAK,CAAtB,EAAsB,AAaT,CAba,CAaO,CAbW,CAAC,CAAC,CAc1D,EAAM,GAAA,CAAO,CAAC,EAAG,IAAU,CAAA,CAAA,CAAO,EAAa,CAAA,CAAA,CAAS,EAAM,MAAM,CAAE,EAZzE,CADmD,IAA5B,EAAiB,MAAA,GACpB,EAAe,CAAf,CAA4B,MAAA,CAAO,AAAC,GAAM,IAAM,EAAW,EACnF,IAAM,EAAW,EAAa,IAAA,CAAK,AAAC,GAClC,EAAK,SAAA,CAAU,WAAA,CAAY,EAAE,UAAA,CAAW,EAAiB,WAAA,CAAY,CAAC,GAExE,OAAO,IAAa,EAAc,EAAW,KAAA,CAC/C,CAxEA,GAAkB,WAAA,CApDQ,EAoDM,kBAkFhC,IAAMF,GAAO,EACP,GAAU,EACV,GAAQ,EACR,GAAO,EACP,GAAS,EACTK,GAAU,EACV,GAAW,GACX,GAAQ,GACR,GAAQ,GACR,GAAO,GACP,GAAW,GACX,GAAgB,GAChB,GAAiB,GACjB,GAAmB,GACnB,GAAY,GACZC,GAAQ,0GCrvDD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAuB,CAAvB,AAAwB,CAAxB,AAAyB,CAAzB,CAAA,CAAA,CAAA,CAAA,CAAiC,AAAjC,CAAiC,AAAjC,CAAiC,AAAE,AAAnC,EAAsC,gBAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAC,CAAA,CAa/E,EAAY,CAAA,EAAA,EAAA,CAAA,CAAA,AAAZ,CAAY,CAAA,CAAA,CAAA,CAAA,AAAiB,CAAjB,CAAiB,CAAjB,AAAiB,CAAA,AAAjB,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,6WCb3D,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAO,CACd,GAAG,EAC+C,EAClD,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAoB,CAAA,CAAC,YAAU,SAAU,GAAG,CAAK,EAC3D,CAEA,EAHU,OAGD,EAAY,CACnB,GAAG,EACgD,EACnD,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAqB,CAAA,CAAC,YAAU,eAAgB,EAAhD,CAAmD,CAAK,EAClE,CAEA,SAAS,EAAY,CACnB,GAAG,EACgD,EACnD,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAqB,CAAA,CAAC,YAAU,eAAgB,EAAhD,CAAmD,CAAK,EAClE,CAEA,SAAS,EAAc,WACrB,CAAS,MACT,EAAO,SAAS,CAChB,UAAQ,CACR,GAAG,EAGJ,EACC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAuB,CAAA,CACtB,YAAU,eADX,EAEC,YAAW,EACX,UAAW,GAAA,EAAA,EAAA,AAAC,EACV,gCADS,+wBAET,GAED,GAAG,CAAK,WAER,EACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAoB,CAAA,CAAC,OAAO,CAAA,CAAA,WAC3B,CAAA,EAAA,EAAA,GAAA,EADD,AACE,EAAA,eAAe,CAAA,CAAC,UAAU,SAA1B,iBAIT,CAEA,SAAS,EAAc,CACrB,WAAS,UACT,CAAQ,CACR,WAAW,QAAQ,CACnB,GAAG,EACkD,EACrD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAsB,CAAA,UACrB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MADF,CACyB,CAAA,CACtB,YAAU,eADX,EAEC,UAAW,GAAA,EAAA,EAAA,AAAC,EACV,gCADS,ghBAET,AAAa,cACX,kIACF,GAEF,SAAU,EACT,GAAG,CAAK,WAET,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAwB,CAAA,CACvB,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EACV,MACa,CAHhB,UAGG,GACE,YAHO,oGAMV,IAEH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,OAIT,CAEA,SAAS,EAAY,WACnB,CAAS,CACT,GAAG,EACgD,EACnD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAqB,CAAA,CACpB,YAAU,eACV,EAFD,QAEY,CAAA,EAAA,EAAA,EAAA,AAAC,EAAE,gCAAH,YAAgD,GAC1D,GAAG,CAAK,EAGf,CAEA,SAAS,EAAW,WAClB,CAAS,UACT,CAAQ,CACR,GAAG,EAC+C,EAClD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAoB,CAAA,CACnB,YAAU,cACV,IAFD,MAEY,CAAA,EAAA,EAAA,EAAC,AAAD,EACT,gCADS,4YAET,GAED,GAAG,CAAK,WAET,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,sEACd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAA6B,CAAA,UAC5B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,AADF,SACW,CAAA,CAAC,UAAU,eAApB,AAGL,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAwB,CAAA,UAAE,MAGjC,CAEA,SAAS,CALF,CAKkB,WACvB,CAAS,CACT,GAAG,EACoD,EACvD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAyB,CAAA,CACxB,YAAU,aADX,MAEC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EAAE,gCAAH,gBAAoD,GAC9D,GAAG,CAAK,EAGf,CAEA,SAAS,EAAqB,WAC5B,CAAS,CACT,GAAG,EACyD,EAC5D,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAA8B,CAAA,CAC7B,YAAU,QADX,kBAEC,UAAW,CAAA,EAAA,EAAA,EAAC,AAAD,EACT,gCADS,uBAET,GAED,GAAG,CAAK,UAET,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,CAGP,CAEA,SAAS,EAAuB,CAC9B,WAAS,CACT,GAAG,EAC2D,EAC9D,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,gBAAgC,CAAA,CAC/B,YAAU,MADX,sBAEC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EACV,gCADS,uBAET,GAED,GAAG,CAAK,UAET,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,eAAe,CAAA,CAAC,UAAU,SAA1B,GAGP,sIC3KA,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KACZ,EAAqC,EAAA,CAA5B,AAA4B,CADd,AACc,OACrC,EAAgC,EAAA,CAAA,AAAvB,CAAuB,OAChC,EAAmC,EAAA,CAA1B,AAA0B,CAAA,CAFE,MAGrC,EAAqC,AAFL,EAEK,CAA5B,AAA4B,CAAA,OACrC,EAA4B,EAAA,CAFO,AAE1B,AAAmB,CAAA,OAC5B,EAAwB,EAAA,CAAA,AAAf,CAAe,CAFa,IACT,EAE5B,EAA0B,EAAA,CAAjB,AAAiB,CAAA,CADF,MAqDlB,EAAA,EAAA,CACE,AADF,CAAA,GApDoB,CAoDpB,GA5CA,EAAc,SAGd,CAAC,EAAqB,EAAiB,CAAA,CAAA,EAAA,EAAI,SAAJ,SAAI,EAAmB,GAG9D,CAAC,EAAgB,EAAgB,CAAI,EAHoC,AAGI,GAW7E,EAAA,CAAA,EAAA,EAAe,CAXkB,AAAuD,SAWzE,EACnB,CAAC,EAAiC,KAChC,GAAM,SAD2C,MAE/C,CAAA,MACA,CAAA,CACA,QAAS,CAAA,gBACT,CAAA,UACA,CAAA,UACA,CAAA,CACA,QAAQ,IAAA,CACR,iBAAA,MACA,CAAA,CACA,GAAG,EACL,CAAI,EACE,CAAC,EAAQ,EAAS,CAAU,CAAA,EAAA,EAAA,CAAV,OAAU,EAAmC,IAAI,EACnE,EAAA,CAAA,EAAA,EAAe,eAAA,EAAgB,EAAe,AAAD,GAAU,EAAU,IAAI,AACrE,CADsE,CACtE,CAAA,EAAA,EAAyC,MAAA,GAAO,GAEhD,EAFqD,CAErC,GAAS,GAAQ,CAAC,CAAC,EAAO,OAAA,CAAQ,MAAM,EACxD,CAAC,CAD2D,CAClD,EAAU,CAAA,CAAA,EAAA,EAAI,EAAJ,kBAAI,EAAqB,CACjD,KAAM,EACN,YAAa,IAAkB,EAC/B,SAAU,EACV,OAAQ,CACV,CAAC,EAED,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAD,AAAgB,MAAO,UAAe,WAAtC,AAAwD,EACtD,SAAA,CAAA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAA,CAAU,MAAA,CAAV,CACC,KAAK,MADP,GAEE,KAAK,SACL,eAAc,EACd,gBAAe,EACf,aAAY,EAAS,GACrB,IAD4B,YACb,EAAW,GAAK,KAAA,WAC/B,QACA,EACC,GAAG,CAAA,CACJ,IAAK,EACL,QAAA,CAAA,EAAA,EAAS,oBAAA,EAAqB,EAAM,OAAA,CAAS,AAAC,IAC5C,EAAW,AAAC,GAAgB,CAD0B,AACzB,GACzB,IACF,EAAiC,EAFK,KAEL,CAAU,CAD1B,CACgC,oBAAA,CAAqB,EAIlE,AAAC,EAAiC,OAAA,CAAS,CAAA,EAAM,eAAA,CAAgB,EAEzE,CAAC,CAAA,GAEF,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,CADF,OACW,EACT,IAFF,IAEW,CAAC,EAAiC,OAF7C,AAE6C,CAC3C,aACA,UACA,WACA,WACA,OACA,EAIA,MAAO,CAAE,UAAW,mBAAoB,CAAA,GAC1C,CAEJ,CAEJ,GAGF,EAAO,WAAA,CAAc,EAMrB,IAAM,EAAa,cAMb,EAAA,CAAA,EAAA,EAAoB,UAAA,EACxB,CAAC,EAAsC,KACrC,GAAM,SADgD,MAC9C,CAAA,CAAe,GAAG,EAAW,CAAI,EACnC,EAAU,EAAiB,EADI,AACQ,GAC7C,MACE,CAAA,EAAA,CAFwD,CAExD,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,IAAA,CAAV,CACC,aAAY,AADd,EACuB,EAAQ,OAAO,EACpC,gBAAe,EAAQ,QAAA,CAAW,GAAK,KAAA,EACtC,GAAG,CAAA,CACJ,IAAK,CAAA,EAGX,GAGF,EAAY,WAAA,CAAc,EAe1B,IAAM,EAAA,CAAA,EAA0B,EAAA,UAAA,EAC9B,CACE,eACE,CAAA,SACA,CAAA,SACA,CAAA,SACA,EAAU,EAAA,CACV,GAAG,EACL,CACA,KAEA,IAAM,EAAA,CAAA,EAAA,EAAY,CADf,KACe,EAAyB,IAAI,EACzC,EAAe,CAAA,EAAA,EAAA,eAAA,EAAgB,EAAK,GACpC,EAAA,CAAA,EAAA,EAAc,EADkC,SAClC,EAAY,GAC1B,EAAA,CAAc,CADmB,CACnB,EAAA,OAAA,EAAQ,GAoB5B,IApBmC,GAqBjC,IAlBI,SAAA,AAkBJ,EAlBc,KACd,CADoB,GACd,EAAQ,EAAI,OAAA,CAClB,GAAI,CAAC,EAAO,IAAA,GAOZ,IAAM,EAAa,AAJA,OAAO,wBAAA,CACxB,AAFiB,OAAO,gBAAA,CAAiB,SAAA,CAGzC,WAE4B,GAAA,CAC9B,GAAI,IAAgB,GAAW,EAAY,CACzC,IAAM,EAAQ,IAAI,MAAM,QAAS,SAAE,CAAQ,CAAC,EAC5C,EAAW,IAAA,CAAK,EAAO,GACvB,EAAM,EADwB,WACxB,CAAc,EACtB,CACF,EAF6B,AAE1B,CAAC,EAAa,EAAS,EAAQ,EAGhC,CAAA,EAAA,AAH+B,EAG/B,GAAA,EAAC,QAAA,CACC,KAAK,WACL,MAFF,SAEa,EACX,eAAgB,EACf,GAAG,CAAA,CACJ,SAAU,CAAA,EACV,IAAK,EACL,MAAO,CACL,GAAG,EAAM,KAAA,CACT,GAAG,CAAA,CACH,SAAU,WACV,cAAe,OACf,QAAS,EACT,OAAQ,CACV,CAAA,EAGN,GAOF,SAAS,EAAS,CAAA,EAAkB,AAClC,OAAO,EAAU,UAAY,WAC/B,CANA,EAAkB,WAAA,CAhEQ,EAgEM,kBAQhC,IAAM,EAAO,EACP,EAAQ,sFC9Md,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAO,WACd,CAAS,CACT,GAAG,EAC+C,EAClD,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAoB,CAAA,CACnB,YAAU,SACV,SAFD,CAEY,CAAA,EAAA,EAAA,EAAA,AAAC,EACV,gCADS,4UAET,GAED,GAAG,CAAK,UAET,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAqB,CAAA,CACpB,YAAU,eACV,EAFD,QAEY,CAAA,EAAA,EAAA,EAAA,AAAC,EACV,gCADS,+OAMnB,2MCxBA,EAAA,EAAA,CAAA,CAAA,OAEA,SAAS,EAAM,WAAE,CAAS,CAAE,GAAG,EAAsC,EACnE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,YAAU,kBACV,UAAU,2CAEV,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,YAAU,QACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EAAE,gCAAH,AAAoC,GAC9C,GAAG,CAAK,IAIjB,CAEA,SAAS,EAAY,CAAE,WAAS,CAAE,GAAG,EAAsC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,YAAU,eACV,UAAW,GAAA,EAAA,EAAC,AAAD,EAAG,kBAAmB,GAChC,GAAG,CAAK,EAGf,CAEA,IANiB,KAMR,EAAU,WAAE,CAAS,CAAE,GAAG,EAAsC,EACvE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,YAAU,aACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EAAE,6BAA8B,GAAjC,AACV,GAAG,CAAK,EAGf,CAEA,SAAS,EAAY,WAAE,CAAS,CAAE,GAAG,EAAsC,EACzE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,YAAU,eACV,UAAW,GAAA,EAAA,EAAA,AAAC,EACV,gCADS,0BAET,GAED,GAAG,CAAK,EAGf,CAEA,SAAS,EAAS,WAAE,CAAS,CAAE,GAAG,EAAmC,EACnE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CACC,YAAU,YACV,UAAW,CAAA,EAAA,EAAA,EAAC,AAAD,EACT,gCADS,8CAET,GAED,GAAG,CAAK,EAGf,CAEA,SAAS,EAAU,WAAE,CAAS,CAAE,GAAG,EAAmC,EACpE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CACC,YAAU,aACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EACV,gCADS,qHAET,GAED,GAAG,CAAK,EAGf,CAEA,SAAS,EAAU,WAAE,CAAS,CAAE,GAAG,EAAmC,EACpE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CACC,YAAU,aACV,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EACV,gCADS,yEAET,GAED,GAAG,CAAK,EAGf,CAEA,SAAS,EAAa,WACpB,CAAS,CACT,GAAG,EAC6B,EAChC,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,UAAA,CACC,YAAU,gBACV,UAAW,GAAA,EAAA,EAAA,AAAC,EAAE,gCAAH,KAAyC,GACnD,GAAG,CAAK,EAGf,gUCxGA,IAAA,EAAuB,EAAA,CAAA,CAAA,EAAX,KACZ,EAAgC,EAAA,CAAvB,AAAuB,CADT,AACS,OAChC,EAAmC,EAAA,CAA1B,AAA0B,CAAA,OACnC,EAAqC,AAFL,EAEK,CAA5B,AAA4B,CAAA,OACrC,EAAqC,EAAA,CAA5B,AAF0B,AAEE,CAAA,OACrC,EAA4B,EAAA,CAAA,AAAnB,CAAmB,CAFS,MAGrC,EAAwB,EAAA,CAAf,AAAe,CAAA,CAFa,IACT,EAE5B,EAAyB,EAAA,CAAA,AAAhB,CAAgB,CADD,KAExB,EAA0B,EAAA,CAAjB,AAAiB,CAAA,GADD,IAkGrB,EAAA,EAAA,CAgIM,AAhIN,CAAA,GAjGsB,IAIpB,EAAgB,AA6FlB,KAgIM,MA1NJ,CAAC,EAAuB,EAAmB,CAAA,AA0F7C,AA1F6C,CAAA,EAAA,EAAI,WAAJ,OAAI,EAAmB,GAqBlE,CAAC,EAAsB,EAAkB,CAC7C,EAA4C,EAtBuC,CAwCrF,SAAS,CAnBsC,AACY,CAmBzD,CAAA,EACA,AACA,GAAM,iBACJ,CAAA,CACA,QAAS,CAAA,UACT,CAAA,gBACA,CAAA,UACA,CAAA,MACA,CAAA,MACA,CAAA,iBACA,CAAA,CACA,UAAA,OACA,EAAQ,IAAA,EAAA,mBAAA,OAER,CAAA,CACF,CAAI,EAEE,CAAC,EAAS,EAAU,CAAA,CAAA,EAAA,EAAI,EAAJ,kBAAI,EAAqB,CACjD,KAAM,EACN,YAAa,IAAkB,EAC/B,SAAU,EACV,OAAQ,CACV,CAAC,EACK,CAAC,EAAS,EAAU,CAAA,CAAA,EAAA,EAAU,EAAV,MAAU,EAAmC,IAAI,EACrE,CAAC,EAAa,EAAc,CAAA,CAAU,EAAA,EAAA,MAAV,EAAU,EAAkC,IAAI,EAC5E,EAAA,CAAA,EAAA,EAAyC,MAAA,GAAO,GAChD,EADqD,CACrC,GAClB,CAAC,CAAC,GAAQ,CAAC,CAAC,EAAQ,OAAA,CAAQ,MAAM,EAIhC,EAJgC,AAIO,SAC3C,WACA,aACA,EACA,qBACA,OACA,OACA,QACA,GAZoC,gCAapC,WACA,EACA,gBAAgB,EAAgB,IAA0B,UAAZ,IAAI,EAClD,cACA,iBACA,CACF,EAEA,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,CADF,KACS,EACN,GAAI,CAAA,CAEJ,SAAA,AA8QE,AAAiB,MAlRtB,CAkRY,YA9QE,EAA8B,EAA2B,GAAW,CAAA,EAGtF,CAHkF,AASlF,IAAM,EAAe,SATuB,SAmBtC,EAAA,CAAA,EAAA,EAAwB,UAAA,EAC5B,CACE,iBAAE,CAAA,KAFwB,MAEP,CAAA,SAAW,CAAA,CAAS,GAAG,EAAc,CACxD,KAEA,GAAM,GAHkD,MAErD,AAED,CAAA,OACA,CAAA,UACA,CAAA,SACA,CAAA,UACA,CAAA,YACA,CAAA,YACA,CAAA,CACA,kCAAA,CACA,eAAA,aACA,CAAA,CACF,CAAI,EAAmB,EAAc,GAC/B,EAAA,CAAA,EAAA,EAAe,KAD+B,UAC/B,EAAgB,EAAc,GAE7C,EAA+B,CAAA,EAAA,EAAA,AAFwB,MAExB,EAAO,GAU5C,IAVmD,GAWjD,IAVI,SAUJ,AAVI,EAAU,KACd,CADoB,GACd,EAAO,GAAS,KACtB,GAAI,EAAM,CACR,IAAM,EAAQ,IAAM,EAAW,EAAuB,OAAO,EAE7D,OADA,EAAK,gBAAA,CAAiB,QAAS,GACxB,EAD6B,EACvB,EAAK,mBAAA,CAAoB,QAAS,EACjD,CACF,EAAG,AAFqD,CAEpD,EAAS,EAAW,EAGtB,CAAA,EAAA,EAAA,CAHqB,EAGrB,EAAA,EAAC,SAAA,CAAU,MAAA,CAAV,CACC,KAAK,MADP,GAEE,KAAK,WACL,eAAc,EAAgB,GAAW,IAAJ,IAAc,EACnD,gBAAe,EACf,aAAY,EAAS,GACrB,IAD4B,YACb,EAAW,GAAK,KAAA,WAC/B,QACA,EACC,GAAG,CAAA,CACJ,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,oBAAA,EAAqB,EAAW,AAAC,IAExB,MAFkC,EAEzB,EAAvB,EAAM,GAAA,EAAiB,EAAM,cAAA,CAAe,CAClD,CAAC,EACD,QAAA,CAAA,EAAA,EAAS,oBAAA,EAAqB,EAAU,AAAD,IACrC,EAAW,AAAC,IADoC,CACnB,EAAgB,IAAsB,CAAC,GAChE,GAAe,AADqC,IAEtD,AAF0D,CAAoB,CAE7C,OAAA,CAAU,CADX,CACiB,oBAAA,CAAqB,EAMlE,AAAC,EAAiC,OAAA,CAAS,CAAA,EAAM,eAAA,CAAgB,EAEzE,CAAC,CAAA,EAGP,GAGF,EAAgB,WAAA,CAAc,EAe9B,IAAM,EAAA,CAAA,EAAA,EAAiB,UAAA,EACrB,CAAC,EAAmC,KAClC,GAAM,SAD6C,QAEjD,CAAA,MACA,CAAA,CACA,SAAA,gBACA,CAAA,CACA,UAAA,UACA,CAAA,OACA,CAAA,iBACA,CAAA,MACA,CAAA,CACA,GAAG,EACL,CAAI,EAEJ,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,CADF,yBAEE,EAFF,eAGE,WACA,WACA,kBACA,OACA,OACA,QACA,EAEA,2BAA4B,CAAC,CAAE,eAAA,CAAc,GAC3C,GAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,CACE,SAAA,CAAA,CAAA,EAAA,EAAA,GAAA,AADF,EACG,EAAA,CACE,GAAG,AAFR,CAEQ,CACJ,IAAK,kBAEL,CAJF,AAIE,GAED,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,EAAD,aAAA,EAEE,CAAA,GACF,CAEJ,CAAA,EAIR,GAGF,CAZc,CAYL,WAAA,CAAc,EAMvB,IAAM,EAAiB,oBAYjB,EAAA,AAA0B,GAAA,EAAA,UAAA,EAC9B,CAAC,EAA4C,KAC3C,GAAM,SADsD,QACpD,CAAA,YAAiB,CAAA,CAAY,GAAG,EAAe,CAAI,EACrD,EAAU,EAAmB,EAAgB,GACnD,CAFuD,KAGrD,CAAA,EAAA,EAAA,CAFgE,EAEhE,EAAA,EAAC,EAAD,MAAC,CAAA,CACC,QAAS,GAAc,EAAgB,EAAQ,IADjD,GACwD,IAAyB,IAApB,EAAQ,OAAA,CAEnE,SAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,IAAA,CAAV,CACC,aADF,AACc,EAAS,EAAQ,OAAO,EACpC,gBAAe,EAAQ,QAAA,CAAW,GAAK,KAAA,EACtC,GAAG,CAAA,CACJ,IAAK,EACL,MAAO,CAAE,cAAe,OAAQ,GAAG,EAAM,KAAA,AAAM,CAAA,EACjD,EAGN,GAGF,EAAkB,WAAA,CAAc,EAMhC,IAAM,EAAoB,sBAKpB,EAAA,CAAA,EAAA,EAA4B,UAAA,EAChC,CAAC,CAAE,iBAAA,CAAiB,GAAG,EAAM,CAA0C,GAA1C,EAC3B,GAAM,SADgF,AAEpF,CAAA,kCACA,CAAA,CACA,SAAA,CACA,gBAAA,UACA,CAAA,UACA,CAAA,MACA,CAAA,OACA,CAAA,MACA,CAAA,aACA,CAAA,CACA,gBAAA,CACF,CAAI,EAAmB,EAAmB,GAEpC,EAAA,CAAe,EAAA,EAAA,KAFoC,UAEpC,EAAgB,EAAc,GAC7C,EAAA,CAAA,EAAA,EAAc,IAD6C,OAC7C,EAAY,GAC1B,EAAc,CAAA,CADmB,CACnB,EAAA,OAAA,EAAQ,OAAO,CAG7B,SAAA,EAAU,KAEd,CAFoB,EAEhB,CAAC,EAAO,IAAA,GAOZ,IAAM,EAJa,AAIA,OAJO,wBAAA,CADP,AAEjB,OAFwB,gBAAA,CAAiB,SAAA,CAGzC,WAE4B,GAAA,CAExB,EAAU,CAAC,EAAiC,OAAA,CAClD,GAAI,IAAgB,GAAW,EAAY,CACzC,IAAM,EAAQ,IAAI,MAAM,QAAS,SAAE,CAAQ,CAAC,CAC5C,GAAM,aAAA,CAAgB,EAAgB,GACtC,EAAW,EADkC,EAClC,CAAK,GAAO,EAAgB,IAAmB,GAAZ,AAC9C,AAfY,EAeN,EAD4C,AAAe,WAC3D,CAAc,EACtB,CACF,EAF6B,AAE1B,CAAC,EAAa,EAAa,EAAS,EAAiC,EAExE,IAAM,EAAA,CAAA,EAAA,EAA0B,MAAA,GAAO,EAAgB,IAAmB,EAFH,CAET,AAC9D,IADkE,AAAe,EAE/E,CAAA,EAAA,EAAA,GAAA,EAAA,EAAC,EAAD,OAAC,CAAU,KAAA,CAAV,CACC,KAAK,OADP,IAEE,eAAW,EACX,eAAgB,GAAkB,EAAkB,OAAA,CACpD,oBACA,EACA,aACA,OACA,EACC,GAAG,CAAA,CACJ,SAAU,CAAA,EACV,IAAK,EACL,MAAO,CACL,GAAG,EAAM,KAAA,CACT,GAAG,CAAA,CACH,SAAU,WACV,cAAe,OACf,QAAS,EACT,OAAQ,EAIR,UAAW,mBACb,CAAA,EAGN,GAWF,SAAS,EAAgB,CAAA,EAAoD,AAC3E,MAAmB,kBAAZ,CACT,CAEA,SAAS,EAAS,CAAA,EAAuB,AACvC,OAAO,EAAgB,GAAW,IAAJ,YAAsB,EAAU,UAAY,WAC5E,CAdA,EAAoB,WAAA,CAAc,oLCtXlC,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,IAAM,EAAW,CAAA,EAAA,EAAA,UAAA,AAAe,EAG9B,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAHX,AAIf,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAsB,CAAA,CACrB,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EACV,KAHH,2BAEY,kaAET,GAED,GAAG,CAAK,UAET,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAA2B,CAAA,CAC1B,UAAW,CAAA,EAAA,EAAA,EAAA,AAAC,EAAE,MADf,0BACY,0BAEX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,iBAIvB,EAAS,AAJF,WAIa,CAAG,EAAA,IAAsB,CAAC,WAAW,oBAAlC,6BCzBvB,SAAS,EAAgB,CAAG,CAAE,CAAG,CAAE,CAAK,EAYtC,OAXI,KAAO,EACT,GADc,IACP,cAAc,CAAC,EAAK,EAAK,CAC9B,MAAO,EACP,YAAY,EACZ,cAAc,EACd,UAAU,CACZ,GAEA,CAAG,CAAC,EAAI,CAAG,EAGN,CACT,CAEA,SAAS,EAAQ,CAAM,CAAE,CAAc,EACrC,IAAI,EAAO,OAAO,IAAI,CAAC,GAEvB,GAAI,OAAO,qBAAqB,CAAE,CAChC,IAAI,EAAU,OAAO,qBAAqB,CAAC,GACvC,IAAgB,EAAU,EAAQ,MAAM,CAAC,SAAU,CAAG,EACxD,OAAO,OAAO,wBAAwB,CAAC,EAAQ,GAAK,UAAU,AAChE,EAAA,EACA,EAAK,IAAI,CAAC,KAAK,CAAC,EAAM,EACxB,CAEA,OAAO,CACT,CAEA,SAAS,EAAe,CAAM,EAC5B,IAAK,IAAI,EAAI,EAAG,EAAI,UAAU,MAAM,CAAE,IAAK,CACzC,IAAI,EAAyB,MAAhB,SAAS,CAAC,EAAE,CAAW,SAAS,CAAC,EAAE,CAAG,CAAC,EAEhD,EAAI,EACN,CADS,CACD,OAAO,IAAS,GAAM,OAAO,CAAC,SAAU,CAAG,EACjD,EAAgB,EAAQ,EAAK,CAAM,CAAC,EAAI,CAC1C,GACS,OAAO,yBAAyB,CACzC,CAD2C,MACpC,gBAAgB,CAAC,EAAQ,OAAO,yBAAyB,CAAC,IAEjE,EAAQ,OAAO,IAAS,OAAO,CAAC,SAAU,CAAG,EAC3C,OAAO,cAAc,CAAC,EAAQ,EAAK,OAAO,wBAAwB,CAAC,EAAQ,GAC7E,EAEJ,CAEA,OAAO,CACT,CAEA,SAAS,EAA8B,CAAM,CAAE,CAAQ,EACrD,GAAc,AAAV,QAAgB,MAAO,CAAC,EAC5B,IAEI,EAAK,EAFL,EAAS,CAAC,EACV,EAAa,OAAO,IAAI,CAAC,GAG7B,IAAK,EAAI,EAAG,EAAI,EAAW,MAAM,CAAE,IAAK,AACtC,EAAM,CAAU,CAAC,EAAE,CACf,EAAS,OAAO,CAAC,IAAQ,GAAG,CAChC,CAAM,CAAC,EAAI,CAAG,CAAM,CAAC,EAAA,AAAI,EAG3B,OAAO,CACT,CAEA,SAAS,EAAyB,CAAM,CAAE,CAAQ,EAChD,GAAc,MAAV,EAAgB,MAAO,CAAC,EAE5B,IAEI,EAAK,EAFL,EAAS,EAA8B,EAAQ,GAInD,GAAI,OAAO,qBAAqB,CAAE,CAChC,IAAI,EAAmB,OAAO,qBAAqB,CAAC,GAEpD,IAAK,EAAI,EAAG,EAAI,EAAiB,MAAM,CAAE,IAAK,AAC5C,EAAM,CAAgB,CAAC,EAAE,GACrB,EAAS,OAAO,CAAC,KAAQ,GAAG,AAC3B,OAAO,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAQ,IACxD,EAD8D,AACxD,CAAC,EAAI,CAAG,CAAM,CAAC,EAAA,AAAI,CAE7B,CAEA,OAAO,CACT,CAEA,SAAS,EAAe,CAAG,CAAE,CAAC,EAC5B,OAAO,EAAgB,IAAQ,EAAsB,EAAK,IAAM,EAA4B,EAAK,IAAM,GACzG,CAEA,SAAS,EAAgB,CAAG,EAC1B,GAAI,MAAM,OAAO,CAAC,GAAM,OAAO,CACjC,CAEA,SAAS,EAAsB,CAAG,CAAE,CAAC,EACnC,GAAsB,aAAlB,EAAiC,CAAC,IAA3B,QAA4B,OAAO,QAAQ,IAAI,OAAO,IAAI,AACrE,GADwE,CACpE,EAAO,EAAE,CACT,GAAK,EACL,EAAK,GACL,OAAK,EAET,GAAI,CACF,IAAK,IAAiC,EAA7B,EAAK,CAAG,CAAC,OAAO,QAAQ,CAAC,GAAQ,CAAC,CAAC,EAAK,CAAC,EAAK,EAAG,IAAI,EAAA,CAAE,CAAE,IAAA,AAAI,IACpE,EAAK,IAAI,CAAC,EAAG,KAAK,GAEd,GAAK,EAAK,MAAM,GAAK,GAAG,AAH2C,EAAK,IAKhF,CAAE,AALoF,MAK7E,EAAK,CACZ,GAAK,EACL,EAAK,CACP,QAAU,CACR,GAAI,CACE,AAAC,GAAsB,MAAhB,EAAE,AAAC,MAAS,EAAU,EAAG,AAAD,MAAU,EAC/C,QAAU,CACR,GAAI,EAAI,MAAM,CAChB,CACF,CAEA,OAAO,EACT,CAEA,SAAS,EAA4B,CAAC,CAAE,CAAM,EAC5C,GAAK,CAAD,EAAI,AACR,GAAI,AAAa,iBAAN,EAAgB,OAAO,EAAkB,EAAG,GACvD,IAAI,EAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAG,CAAC,GAEpD,GADU,WAAN,GAAkB,EAAE,WAAW,EAAE,GAAI,EAAE,WAAW,CAAC,IAAA,AAAI,EACvD,AAAM,WAAe,QAAN,EAAa,OAAO,MAAM,IAAI,CAAC,GAClD,GAAU,cAAN,GAAqB,2CAA2C,IAAI,CAAC,GAAI,OAAO,EAAkB,EAAG,GAC3G,CAEA,SAAS,EAAkB,CAAG,CAAE,CAAG,GAC7B,AAAO,SAAQ,EAAM,EAAI,MAAA,AAAM,GAAE,GAAM,EAAI,MAAA,AAAM,EAErD,IAAK,IAAI,EAAI,EAAG,EAAO,AAAI,MAAM,GAAM,EAAI,EAAK,IAAK,CAAI,CAAC,EAAE,CAAG,CAAG,CAAC,EAAE,CAErE,OAAO,CACT,CAEA,SAAS,IACP,MAAM,AAAI,UAAU,4IACtB,oTC5HA,SAAS,EAAQ,CAAM,CAAE,CAAc,EACrC,IAAI,EAAO,OAAO,IAAI,CAAC,GAEvB,GAAI,OAAO,qBAAqB,CAAE,CAChC,IAAI,EAAU,OAAO,qBAAqB,CAAC,GACvC,IAAgB,EAAU,EAAQ,MAAM,CAAC,SAAU,CAAG,EACxD,OAAO,OAAO,wBAAwB,CAAC,EAAQ,GAAK,UAAU,AAChE,EAAA,EACA,EAAK,IAAI,CAAC,KAAK,CAAC,EAAM,EACxB,CAEA,OAAO,CACT,CAEA,SAAS,EAAe,CAAM,EAC5B,IAAK,IAAI,EAAI,EAAG,EAAI,UAAU,MAAM,CAAE,IAAK,CACzC,IAAI,EAAS,AAAgB,eAAP,CAAC,EAAE,CAAW,SAAS,CAAC,EAAE,CAAG,CAAC,EAEhD,EAAI,EACN,CADS,CACD,OAAO,IAAS,GAAM,OAAO,CAAC,SAAU,CAAG,QAlCtB,EAmCE,CAAM,CAAC,CAnCJ,CAmCQ,CAlC1C,AAkC0B,OAlCnB,AACT,KADc,EACP,cAAc,CAAC,IAAU,CAAL,AACzB,MAAO,EACP,YAAY,EACZ,cAAc,EACd,UAAU,CACZ,GAEA,AA0BoB,CA1BjB,CAAC,EAAI,CAAG,CA2BT,GACS,OAAO,yBAAyB,CACzC,CAD2C,MACpC,gBAAgB,CAAC,EAAQ,OAAO,yBAAyB,CAAC,IAEjE,EAAQ,OAAO,IAAS,OAAO,CAAC,SAAU,CAAG,EAC3C,OAAO,cAAc,CAAC,EAAQ,EAAK,OAAO,wBAAwB,CAAC,EAAQ,GAC7E,EAEJ,CAEA,OAAO,CACT,CAcA,SAAS,EAAM,CAAE,EACf,OAAO,SAAS,IAGd,IAAK,IAFD,EAAQ,IAAI,CAEP,EAAQ,UAAU,MAAM,CAAE,EAAO,AAAI,MAAM,GAAQ,EAAQ,EAAG,EAAQ,EAAO,IACpF,CAAI,CAAC,EADwF,AAClF,CAAG,SAAS,CAAC,EAAM,CAGhC,OAAO,EAAK,MAAM,EAAI,EAAG,MAAM,CAAG,EAAG,KAAK,CAAC,IAAI,CAAE,GAAQ,WACvD,IAAK,IAAI,EAAQ,UAAU,MAAM,CAAE,EAAW,AAAI,MAAM,GAAQ,EAAQ,EAAG,EAAQ,EAAO,IACxF,CAAQ,CAAC,EAAM,AADkF,CAC/E,SAAS,CAAC,EAAM,CAGpC,OAAO,EAAQ,KAAK,CAAC,EAAO,EAAE,CAAC,MAAM,CAAC,EAAM,GAC9C,CACF,CACF,CAEA,SAAS,EAAS,CAAK,EACrB,MAAO,CAAA,CAAC,CAAA,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAO,QAAQ,CAAC,SAC1C,CAMA,SAAS,EAAW,CAAK,EACvB,MAAwB,YAAjB,OAAO,CAChB,sBA8CA,IAAI,EAAe,EAfnB,IAeyB,KAfL,AAAX,CAAwB,CAAE,CAAI,EACrC,EAcmC,IAd7B,AAAI,MAAM,CAAa,CAAC,EAAK,EAAI,EAAc,OAAU,CACjE,GADsD,AAGlC,CAClB,kBAAmB,4BACnB,YAAa,oCACb,eAAgB,6CAChB,YAAa,4CACb,aAAc,qCACd,aAAc,gCACd,WAAY,gDACZ,YAAa,iGACb,QAAW,mDACb,GAEI,EAAa,CACf,QA1CF,CA0CW,QA1Cc,AAAhB,CAAuB,CAAE,CAAO,EAKvC,OAJI,AAAC,EAAS,IAAU,EAAa,cACjC,OAAO,IAAI,CAAC,GAAS,IAAI,CAAC,SAAU,CAAK,EAC3C,OAAO,AANF,CAMG,MANI,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,AAMnB,EAAS,EAClC,IAAI,AAPgD,EAOnC,eACV,CACT,EAqCE,SAnCF,CAmCY,QAnCc,AAAjB,CAAyB,EAC3B,AAAD,EAAY,IAAW,EAAa,eAC1C,EAkCE,QAhCF,CAgCW,QAhCF,AAAgB,CAAO,EACxB,AAAF,CAAC,CAAY,IAAY,EAAS,IAAW,EAAa,EAAhB,aAC1C,EAAS,IAAY,OAAO,MAAM,CAAC,GAAS,IAAI,CAAC,SAAU,CAAQ,EACrE,MAAO,CAAC,EAAW,EACrB,IAAI,EAAa,eACnB,EA4BE,QA1BF,CA0BW,QA1Bc,AAAhB,CAAuB,EAC1B,AAAC,GAAS,EAAa,qBACvB,AAAC,EAAS,IAAU,EAAa,eAhC7B,AAiCJ,OAjCW,IAAI,CAAC,AAiCR,GAjCa,MAAM,EAiCT,EAAa,iBACrC,CAuBA,EA6BA,SAAS,EAAe,CAAK,CAAE,CAAa,EAC1C,OAAO,EAAW,GAAiB,EAAc,EAAM,OAAO,EAAI,CACpE,CAEA,SAAS,EAAY,CAAK,CAAE,CAAO,EAEjC,OADA,EAAM,OAAO,CAAG,EAAe,EAAe,CAAC,EAAG,EAAM,OAAO,EAAG,GAC3D,CACT,CAEA,SAAS,EAAe,CAAK,CAAE,CAAO,CAAE,CAAO,EAM7C,OALA,EAAW,GAAW,EAAQ,EAAM,OAAO,EAAI,OAAO,IAAI,CAAC,GAAS,OAAO,CAAC,SAAU,CAAK,EACzF,IAAI,EAEJ,OAAO,OAAC,EAAiB,CAAO,CAAC,EAAA,AAAM,EAA0C,IAApC,CAAyC,EAAI,EAAe,GAApD,CAAwD,CAAC,EAAS,EAAM,OAAO,CAAC,EAAM,CAC7I,EAD0E,CAEnE,CACT,GAHiF,IAKrE,CACV,OA9CF,CA8CU,QA9CM,AAAP,CAAc,EACrB,IAAI,EAAU,KAgDD,KAhDW,MAAM,CAAG,QAAsB,IAAjB,SAAS,CAAC,EAAE,CAAiB,SAAS,CAAC,EAAE,CAAG,CAAC,EACnF,EAAW,OAAO,CAAC,GACnB,EAAW,OAAO,CAAC,GACnB,IAAI,EAAQ,CACV,QAAS,CACX,EACI,EAAY,EAAM,GAAgB,EAAO,GACzC,EAAS,EAAM,GAAa,GAC5B,EAAW,EAAM,EAAW,OAAO,EAAE,GACrC,EAAa,EAAM,GAAgB,GAcvC,MAAO,CAZP,SAAS,EACP,IAAI,EAAW,UAAU,MAAM,CAAG,QAAsB,IAAjB,SAAS,CAAC,EAAE,CAAiB,SAAS,CAAC,EAAE,CAAG,SAAU,CAAK,EAChG,OAAO,CACT,EAEA,OADA,EAAW,QAAQ,CAAC,GACb,EAAS,EAAM,OAAO,CAC/B,EAEA,SAAS,AAAS,CAAa,EAC7B,AAnHJ,SAAS,GACP,IAAK,IAAI,EAAO,UAAU,MAAM,CAAE,EAAM,AAAI,MAAM,GAAO,EAAO,EAAG,EAAO,EAAM,IAC9E,CAAG,CAAC,CADkF,CAC7E,CAAG,SAAS,CAAC,EAAK,CAG7B,OAAO,SAAU,CAAC,EAChB,OAAO,EAAI,WAAW,CAAC,SAAU,CAAC,CAAE,CAAC,EACnC,OAAO,EAAE,EACX,EAAG,EACL,CACF,GAyGY,EAAW,EAAQ,EAAU,GAAY,EACnD,EAGF,AAD6B,CAuB7B,8EC9La,CACX,MAAO,CACL,GAAI,oBAIO,sCAHb,CACF,8ECJA,SAAe,AAAN,CAAQ,EACf,OAAO,SAAS,GAiBH,CAdX,IAAK,IAFD,EAAQ,IAAI,CAEP,EAAO,UAAU,MAAM,CAAE,EAAO,AAAI,MAAM,GAAO,EAAO,EAAG,EAAO,EAAM,IAC/E,CAAI,CAAC,CADkF,CAC7E,CAAG,SAAS,CAAC,EAAK,CAG9B,OAAO,EAAK,MAAM,EAAI,EAAG,MAAM,CAAG,EAAG,KAAK,CAAC,IAAI,CAAE,GAAQ,WACvD,IAAK,IAAI,EAAQ,UAAU,MAAM,CAAE,EAAW,AAAI,MAAM,GAAQ,EAAQ,EAAG,EAAQ,EAAO,IACxF,CAAQ,CAAC,EADwF,AAClF,CAAG,SAAS,CAAC,EAAM,CAGpC,OAAO,EAAQ,KAAK,CAAC,EAAO,EAAE,CAAC,MAAM,CAAC,EAAM,GAC9C,CACF,CACF,8EChBA,SAAS,AAAS,CAAK,EACrB,MAAO,CAAA,EAAC,CAAA,CAAE,QAGG,AAHK,CAAC,IAAI,CAAC,GAAO,QAAQ,CAAC,SAC1C,+GCFA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAoCI,EAAgB,CAClB,iBAAkB,uCAClB,WAAY,+CACZ,QAAW,8DACX,YAAa,+SACf,EACI,EAAe,CAAA,EAAA,EAAA,OAAI,AAAJ,EAVnB,AAUyB,SAVhB,AAAW,CAAa,CAAE,CAAI,EACrC,MAAM,AAAI,MAAM,CASC,AATY,CAAC,EAAK,EAAI,EAAc,OAAU,CACjE,GAQqC,AATiB,SAUrC,CACf,OApCF,CAoCU,QApCD,AAAe,CAAM,QAI5B,CAHI,AAAC,GAAQ,CAsCA,CAtCa,oBACrB,AAAD,CAAC,EAAA,EAAA,OAAA,AAAO,EAAE,IAAS,EAAa,cAEhC,EAAO,IAAI,CAFV,CAEY,CAiBjB,QAAQ,IAAI,CAAC,EAAc,WAAW,EAf7B,CACL,MAAO,CACL,GAAI,EAAO,IAAI,CAAC,UAAU,AAC5B,CACF,GAGK,CACT,CAuBA,8EC9Cc,SAAS,EACrB,IAAK,IAAI,EAAO,UAAU,AAWb,MAXmB,CAAE,EAAM,AAAI,MAAM,GAAO,EAAO,EAAG,EAAO,EAAM,IAC9E,CAAG,CAAC,CADkF,CAC7E,CAAG,SAAS,CAAC,EAAK,CAG7B,OAAO,SAAU,CAAC,EAChB,OAAO,EAAI,WAAW,CAAC,SAAU,CAAC,CAAE,CAAC,EACnC,OAAO,EAAE,EACX,EAAG,EACL,CACF,wECVA,IAAA,EAAA,EAAA,CAAA,CAAA,aAEA,SAAS,EAAM,CAAM,CAAE,CAAM,EAQ3B,OAPA,OAAO,CAUM,GAVF,CAAC,GAAQ,OAAO,CAAC,SAAU,CAAG,EACnC,CAAM,CAAC,EAAI,WAAY,QAAQ,AAC7B,CAAM,CAAC,EAAI,EAAE,AACf,OAAO,MAAM,CAAC,CAAM,CAAC,EAAI,CAAE,EAAM,CAAM,CAAC,EAAI,CAAE,CAAM,CAAC,EAAI,EAG/D,GACO,CAAA,EAAA,EAAA,aAAa,AAAb,EAAe,CAAA,EAAA,EAAA,aAAA,AAAa,EAAE,CAA9B,AAA+B,EAAG,GAAS,EACpD,aADwB,qFCTxB,IAAI,EAAsB,CACxB,KAAM,cACN,IAAK,gCACP,QAEA,SAAS,AAAe,CAAO,EAC7B,IAAI,GAAe,EACf,EAAiB,IAAI,IAWZ,IAXoB,SAAU,CAAO,CAAE,CAAM,EACxD,EAAQ,IAAI,CAAC,SAAU,CAAG,EACxB,OAAO,EAAe,EAAO,GAAuB,EAAQ,EAC9D,GACA,EAAQ,KAAD,AAAS,CAAC,EACnB,GACA,OAAO,EAAe,MAAM,CAAG,WAC7B,OAAO,GAAe,CACxB,EAAG,CACL,wECjBA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAII,EAAgB,EAAA,OAAK,CAAC,MAAM,CAAC,CAC/B,OAAQ,EAAA,OAAQ,CAChB,GAFkB,YAEH,EACf,QAAS,GAFD,EAGR,OAAQ,KACR,OAAQ,IACV,GACI,EAAiB,CAAA,EAAA,EAAA,aAAA,AAAa,EAAE,EAAe,GAC/C,EAAW,CAAc,CAAC,EAAE,CAC5B,EAAW,CAAc,CAAC,EAAE,CAiEhC,EAnEqB,OAmEZ,EAAc,CAAM,EAC3B,OAAO,SAAS,IAAI,CAAC,WAAW,CAAC,EACnC,CAkBA,SAAS,EAAsB,CAAe,EAC5C,IAXoB,GAAG,CAWnB,EAAQ,EAAS,SAAU,CAAK,EAGlC,MAAO,CACL,OAHW,CAGH,CAHS,MAAM,CAIvB,CAHE,MAAS,CAGH,CAHS,MAAM,AAIzB,CACF,GACI,KAA4B,GAAG,MAAM,CAAtB,AAAuB,EAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAE,cAlB7D,EAAS,SAAS,aAAa,CAAC,UAC7B,IAAQ,EAAO,CAAR,EAAW,CAAG,CAAA,CAAG,CAAG,GAwBlC,OALA,EAAa,MAAM,CAAG,WACpB,OAAO,GACT,EAEA,EAAa,OAAO,CAAG,EAAM,MAAM,CAC5B,CACT,CAMA,SAAS,IACP,IAAI,EAAQ,EAAS,SAAU,CAAK,EAIlC,MAAO,CACL,OAJW,CAIH,CAJS,MAAM,CAKvB,CAJE,OAAU,CAIH,CAJS,OAAO,CAKzB,CAJE,MAAS,CAIH,CAJS,MAKnB,AALyB,CAM3B,GACI,EAAU,OAAO,OAAO,CAE5B,EAAQ,MAAM,CAAC,EAAM,MAAM,EAE3B,EAAQ,CAAC,wBAAwB,CAAE,SAAU,CAAM,EACjD,EAAoB,GACpB,EAAM,OAAO,CAAC,EAChB,EAAG,SAAU,CAAK,EAChB,EAAM,MAAM,CAAC,EACf,EACF,CAMA,SAAS,EAAoB,CAAM,EAC7B,AAAC,IAAW,MAAM,EAAE,AACtB,EAAS,CACP,OAAQ,CACV,EAEJ,CAeA,IAAI,EAAiB,IAAI,QAAQ,SAAU,CAAO,CAAE,CAAM,EACxD,OAAO,EAAS,CACd,QAAS,EACT,OAAQ,CACV,EACF,SACa,CACX,OA5JF,CA4JU,QA5JD,AAAO,CAAY,EAC1B,IAAI,EAAqB,EAAA,GAgKZ,IAhKsB,CAAC,MAAM,CAAC,GACvC,EAAS,EAAmB,MAAM,CAClC,EAAS,CAAA,EAAA,EAAA,AAFY,uBAEZ,AAAuB,EAAE,EAAoB,CAAC,QAA9C,CAAuD,EAEpE,EAAS,SAAU,CAAK,EACtB,MAAO,CACL,OAAQ,CAAA,EAAA,EAAA,OAAA,AAAI,EAAE,EAAM,MAAM,CAAE,GAC5B,OAAQ,CACV,CACF,EACF,EAkJE,EAtJY,GAWd,CA2IQ,QA3IC,EACP,IAAI,EAAQ,EAAS,SAAU,CAAI,EAIjC,MAAO,CACL,OAJW,CAIH,CAJQ,MAAM,CAKtB,CAJE,aAAgB,CAIH,CAJQ,aAAa,CAKpC,CAJE,OAAU,CAIH,CAJQ,OAAO,AAK1B,CACF,GAEA,GAAI,CAAC,EAAM,aAAa,CAAE,CAKxB,GAJA,EAAS,CACP,eAAe,CACjB,GAEI,EAAM,MAAM,CAEd,CAFgB,MAChB,EAAM,OAAO,CAAC,EAAM,MAAM,EACnB,CAAA,EAAA,EAAA,OAAA,AAAa,EAAE,GAGxB,GAAI,OAAO,MAAM,EAAI,MAHZ,CAGmB,MAAM,CAAC,MAAM,CAGvC,CAHyC,MACzC,EAAoB,OAAO,MAAM,EACjC,EAAM,OAAO,CAAC,OAAO,MAAM,EACpB,CAAA,EAAA,EAAA,OAAa,AAAb,EAAe,GAGxB,CAAA,EAAA,EAAA,OAAA,AAAM,EAAE,EAAe,GAAuB,EAChD,CAEA,EANW,IAMJ,CAAA,EAAA,EAAA,OAAA,AAAa,CAHlB,CAGoB,EACxB,EA4GE,oBAhBF,CAgBuB,EA7Gd,MA6FA,EACP,OAAO,EAAS,SAAU,CAAK,EAE7B,OADa,AACN,EADY,MAAM,AAE3B,EACF,CAYA,0DCzLA,EAAA,CAAA,CAAA,sMCAmB,EAAA,CAAA,CAAA,OCAnB,IAAA,ECEgB,CDFP,CCEiBK,CAAQ,CAAA,IAAlBD,CDFPF,ECEiB,AAC1B,ECHS,CDGFD,CCHc,CFAA,AGArB,CAAA,CFEkCK,GACf,AAD4B,AAArBD,ACFjBH,ECAFC,CCgBAM,AHdP,EGA8C,CAC5C,CFHmB,AEgBND,CDhBG,EEAlB,AJEOL,GAAwCI,CGCpC,AHDK,CGEZ,ECJGJ,GJEyD,GGEnD,CCJiC,AHA9C,MEKI,SAAU,WACV,UAAW,SACb,EACA,UAAW,CACT,MAAO,MACT,EACA,KAAM,CACJ,QAAS,MACX,CACF,EEFOM,EAVuC,CAC5C,CASaD,SATF,CACT,QAAS,OACT,OAAQ,OACR,MAAO,OACP,eAAgB,SAChB,WAAY,QACd,CACF,ECROI,EFEP,EEFeA,OFENF,AAAQ,CAAE,SAAAC,CAAS,CAAA,CAAsB,CAChD,OAAOR,EAAAA,OAAAA,CAAA,aAAA,CAAC,MAAA,CAAI,MAAOM,EAAO,SAAA,EAAYE,CAAS,CACjD,EHFOU,EAAAA,CAAAA,EAAAA,EAAQnB,IAAAA,EAAKmB,ACKpB,EDLmC,EMJnC,KLSSR,AAAgB,CACvB,CKVO,KLUPC,CAAAA,CACA,MKXOP,CLWPQ,CAAAA,CACA,IKZ6C,ULY7CC,CAAAA,CACA,QAAAC,CAAAA,CACA,KAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,aAAAC,CACF,CAAA,CAAmB,CACjB,OACEjB,EAAAA,OAAAA,CAAA,aAAA,CAAC,UAAA,CAAQ,MAAO,CAAE,GAAGM,EAAO,OAAA,CAAS,MAAAK,EAAO,OAAAC,CAAO,EAAI,GAAGK,CAAAA,EACvD,CAACJ,GAAAA,EAAiBb,OAAAA,CAAA,aAAA,CAACS,EAAA,KAASK,CAAQ,EAAA,EACrCd,OAAAA,CAAA,aAAA,CAAC,MAAA,CACC,IAAKe,EACL,CAFFf,KAES,CAAE,GAAGM,EAAO,SAAA,CAAW,GAAI,CAACO,GAAiBP,EAAO,IAAA,AAAM,EACjE,UAAWU,CAAAA,CACb,CACF,CAEJ,GKtBOK,EAJP,EAIeF,GCNf,IDESA,AAASC,CAAAA,CAAwB,CCFjC,ADGPhB,CAAAA,EAAAA,EAAAA,QCHOA,CDGPA,ECHkB,ADGRgB,EAAQ,CAAC,CAAC,CACtB,ECWOM,EAbP,CAFoBxB,CAeLoB,MAf6D,CAEnEA,AAAUF,CAAAA,CAAwBG,CAAAA,CAAsBC,EAAe,CAAA,CAAA,CAAM,CACpF,IAAMC,EAAAA,CAAAA,EAAAA,EAAiBvB,MAAAA,EAAO,CAAA,CAAI,OAElCE,SAAAA,EACEqB,EAAe,OAAA,EAAW,CAACD,EACvB,IAAM,CACJC,EAAe,OAAA,CAAU,CAAA,CAC3B,EACAL,EACJG,CACF,CACF,ECPA,SAASI,GAAO,CAEhB,CAYA,SAASC,EAAiBC,CAAAA,CAAgBC,CAAAA,CAAeC,CAAAA,CAAkBC,CAAAA,CAAc,OAWvDA,CAAAA,CAAc,EAYXF,CAAAA,KAtBnC,OAAOG,AAUSJ,CAAAA,CAVAA,IAAQG,CAAI,CAWrBH,EAAO,EAXmBK,IAWnB,CAAO,QAAA,CAASC,EAAeN,EAAQG,CAAI,CAAC,IAWvCH,CAAAA,CAtB0BA,IAAQC,EAsBHC,CAAAA,CAtBUA,EAsBSC,CAAAA,CAtBCA,AAsBc,CAtBV,CAuBnEH,EAAO,MAAA,CAAO,WAAA,CACnBC,EACAC,EACAC,EAAOG,EAAeN,EAAQG,CAAI,EAAI,KAAA,CACxC,EA1BF,CAmCA,SAASG,EAAeN,CAAAA,CAAgBG,CAAAA,CAAc,CACpD,OAAOH,EAAO,GAAA,CAAI,KAAA,CAAMG,CAAI,CAC9B,CVrDA,IAAOqC,EAAQtE,CAAAA,EAAAA,EAAAA,IAAAA,ECMf,ADNoBsE,EAAU,EWN9B,KVYSjC,AAAW,CAClB,CUbO,QVaPC,CAAAA,CACA,EUdOpC,OAAgB,AVcvBqC,CAAAA,CACA,MUdF,GVcEP,CAAAA,CACA,EUfKjC,OAAY,QVejByC,CAAAA,CACA,iBAAAC,CAAAA,CACA,kBAAAC,CAAAA,CACA,kBAAAC,CAAAA,CACA,yBAAAC,EAA2B,CAAA,CAAA,CAC3B,yBAAAC,EAA2B,CAAA,CAAA,CAC3B,MAAAC,EAAQ,OAAA,CACR,QAAA/B,EAAU,YAAA,CACV,QAAAgC,EAAU,CAAC,CAAA,CACX,OAAAlC,EAAS,MAAA,CACT,MAAAD,EAAQ,MAAA,CACR,UAAAK,CAAAA,CACA,aAAAC,EAAe,CAAC,CAAA,CAChB,YAAA8B,EAAcpB,CAAAA,CACd,QAAAqB,EAAUrB,CACZ,CAAA,CAAoB,CAClB,GAAM,CAACd,EAAeoC,CAAgB,CAAA,CAAIhD,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,CAAA,CAAK,EAClD,CAACiD,EAAkBC,CAAmB,CAAA,CAAIlD,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,CAAA,CAAI,EACvDmD,EAAAA,CAAAA,EAAAA,EAAAA,MAAYlD,AAAZkD,EAA4C,IAAI,EAChDC,EAAAA,CAAAA,EAAYnD,EAAAA,MAAAA,EAAsB,IAAI,EACtCoD,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAepD,EAAuB,IAAI,EAC1CqD,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAarD,EAAO8C,CAAO,EAC3BQ,EAAAA,CAAAA,EAAAA,EAAiBtD,MAAAA,EAAO6C,CAAW,EACnCU,EAAAA,CAAAA,EAAAA,EAAAA,MAAkBvD,AAAlBuD,EAAyB,CAAA,CAAK,CAEpCpC,GAAS,IAAM,AAHQnB,CAIrB,IAAMwD,EAAAA,EAAa5D,OAAAA,CAAO,IAAA,CAAK,EAE/B,OAAA4D,EACG,IAAA,CAAM7B,AAAN,GAAMA,CAAYwB,EAAU,CAHZvD,MAGY,EAAU+B,CAAAA,EAAWsB,EAAoB,CAAA,CAAK,CAAC,EAC3E,KAAA,CAAA,AACEQ,GACCA,GAAO,OAAS,eAAiB,QAAQ,KAAA,CAAM,gCAAiCA,CAAK,CACzF,EAEK,KA+JP,IAAMS,SA/JQhB,EAAU,OAAA,GAAUQ,CA+JnBR,CA/JiC,CA+JvB,OAAA,EAAS,SAAS,OAEtCT,GACHyB,GAAQ,UAAU,QAAQ,EAGvBxB,GACHwB,GAAQ,UAAU,QAAQ,EAG5BhB,EAAU,OAAA,EAAS,SAAQ,GAzKyBM,EAAW,MAAA,CAAO,EACxE,CAAC,EAEDhC,EACE,IAAM,CACJ,GAAI0B,EAAU,OAAA,EAAWC,EAAU,OAAA,CAAS,CAC1C,IAAMQ,EAAiBT,EAAU,OAAA,CAAQ,iBAAA,CAAkB,EACrDU,EAAQlC,EACZyB,EAAU,OAAA,CACVhB,GAAY,GACZE,GAAoBR,GAAY,OAChCU,GAAqB,EACvB,EAEIqB,IAAUD,EAAe,QAAA,CAAS,GACpCA,EAAe,QAAA,CAASC,CAAK,CAAA,CAGnC,EACA,CAACrB,CAAiB,CAAA,CAClB5B,CACF,EAEAa,EACE,IAAM,CACJ,GAAI0B,EAAU,OAAA,EAAWC,EAAU,OAAA,CAAS,CAC1C,IAAMU,EAAiBX,EAAU,OAAA,CAAQ,iBAAA,CAAkB,EACrDU,EAAQlC,EACZyB,EAAU,OAAA,CACVf,GAAY,GACZE,GAAoBT,GAAY,OAChCW,GAAqB,EACvB,EAEIoB,IAAUC,EAAe,QAAA,CAAS,GACpCA,EAAe,QAAA,CAASD,CAAK,CAAA,CAGnC,EACA,CAACpB,CAAiB,CAAA,CAClB7B,CACF,EAEAa,EACE,IAAM,CACJ,IAAMqC,EAAiBX,EAAU,OAAA,CAAS,iBAAA,CAAkB,EACxDW,EAAe,SAAA,CAAUV,EAAU,OAAA,CAAS,MAAA,CAAO,YAAA,CAAa,QAAQ,EAC1EU,EAAe,QAAA,CAASzB,GAAY,EAAE,EAElCA,IAAayB,EAAe,QAAA,CAAS,IACvCA,CADuC,CACxB,YAAA,CAAa,GAAI,CAC9B,CACE,MAAOA,EAAe,QAAA,CAAS,EAAG,iBAAA,CAAkB,EACpD,KAAMzB,GAAY,GAClB,iBAAkB,CAAA,CACpB,CACF,CAAC,EAEDyB,EAAe,YAAA,EAAa,CAAA,AAGlC,EACA,CAACzB,CAAQ,CAAA,CACTzB,CACF,EAEAa,EACE,IAAM,CACJ0B,EAAU,OAAA,EAAS,SAAS,GAAG,SAAS,SAASf,GAAY,EAAE,CACjE,EACA,CAACA,CAAQ,CAAA,CACTxB,CACF,EAEAa,EACE,IAAM,CACJ,GAAM,CAAE,SAAAW,CAAAA,CAAU,SAAAC,CAAS,CAAA,CAAIc,EAAU,OAAA,CAAS,QAAA,CAAS,EAE3DC,EAAU,OAAA,CAAS,MAAA,CAAO,gBAAA,CAAiBhB,EAAUE,GAAoBR,GAAY,MAAM,EAC3FsB,EAAU,OAAA,CAAS,MAAA,CAAO,gBAAA,CAAiBf,EAAUE,GAAoBT,GAAY,MAAM,CAC7F,EACA,CAACA,EAAUQ,EAAkBC,CAAgB,CAAA,CAC7C3B,CACF,EAEAa,EACE,IAAM,CACJ2B,EAAU,OAAA,EAAS,OAAO,SAASR,CAAK,CAC1C,EACA,CAACA,CAAK,CAAA,CACNhC,CACF,EAEAa,EACE,IAAM,CACJ0B,EAAU,OAAA,EAAS,cAAcN,CAAO,CAC1C,EACA,CAACA,CAAO,CAAA,CACRjC,CACF,EAEA,IAAMmD,EAAAA,CAAAA,EAAAA,EAAY7D,WAAAA,EAAY,IAAM,CAClC,GAAI,CAACkD,EAAU,OAAA,CAAS,OACxBG,EAAe,OAAA,CAAQH,EAAU,OAAO,EACxC,IAAMY,EAAgBrC,EACpByB,EAAU,OAAA,CACVhB,GAAY,GACZE,GAAoBR,GAAY,OAChCU,GAAqB,EACvB,EAEMyB,EAAgBtC,EACpByB,EAAU,OAAA,CACVf,GAAY,GACZE,GAAoBT,GAAY,OAChCW,GAAqB,EACvB,EAEAU,EAAU,OAAA,EAAS,SAAS,CAC1B,SAAUa,EACV,SAAUC,CACZ,CAAC,CACH,EAAG,CACDnC,EACAO,EACAE,EACAH,EACAE,EACAE,EACAC,CACF,CAAC,EAEKyB,EAAAA,CAAAA,EAAAA,EAAehE,WAAAA,EAAY,IAAM,CACjC,CAACsD,EAAgB,OAAA,EAAWH,EAAa,OAAA,GAC3CF,CAD2C,CACjC,OAAA,CAAUC,EAAU,OAAA,CAAS,MAAA,CAAO,gBAAA,CAAiBC,EAAa,OAAA,CAAS,CACnF,gBAAiB,CAAA,EACjB,GAAGR,CAAAA,AACL,CAAC,EAEDkB,EAAU,EAEVX,EAAU,OAAA,EAAS,OAAO,SAASR,CAAK,EAExCI,EAAiB,CAAA,CAAI,EACrBQ,EAAgB,OAAA,CAAU,EAAA,CAAA,AAE9B,EAAG,CAACX,EAASD,EAAOmB,CAAS,CAAC,aAE9B5D,SAAAA,EAAU,IAAM,CACVS,GACF0C,EAAW,OAAA,CAAQH,EAAU,OAAA,CAAUC,EAAU,OAAQ,CAE7D,EAAG,CAACxC,CAAa,CAAC,EAAA,CAAA,EAAA,EAElBT,SAAAA,EAAU,IAAM,CACd,AAAC8C,GAAqBrC,EAAD,CAAkBsD,EAAa,CACtD,EAAG,CAACjB,EAAkBrC,EAAesD,CAAY,CAAC,EAgBlD,EACEnE,OAAAA,CAAA,aAAA,CAACkB,EAAA,CACC,MAAOP,EACP,OAAQC,EACR,cAAeC,EACf,QAASC,EACT,KAAMwC,EACN,UAAWtC,EACX,aAAcC,CAAAA,CAChB,CAEJ,GUjNOuD,EApBP,GAoBeF,GCzBf,GDKSA,EACP,EADmB,ACLZ,CDMD,CAACzC,EAAQ0C,CAAS,CAAA,CAAA,CAAA,ACNjBxE,EDMiB,EAAIE,GCNT,KDMSA,EAAAA,CEJ9B,CFIuCH,MEJhCE,CFIgCF,CAAO,EEJ9B,YAAAG,GAAU,EFIoB,CAAoB,CAAC,EAEjE,OAAAoB,AENwBjB,EFMf,AEN0B,IFMpB,CACb,IAAIsD,CEP6BxD,CFSjC,CETyC,MFSpC2B,GAGH6B,CAFAA,CADG7B,CACH6B,EAAa5D,CEV0BK,MFU1BL,CEV6C,AFUtC,IAAA,EAAK,EET/B,AFWiB,IAAA,CAAM+B,AAAN,EEXV/B,CFW2B,CAC1ByE,EAAU1C,CAAM,CAClB,CEba,AFaZ,CAAA,CAGI,IAAM6B,GAAY,OAAO,CAClC,CAAC,EAEM7B,CACT,EGXO8C,CAZP,CAEA,GAUeF,GAZN,GAEAA,AAAe3C,CAAAA,CAAU,CAChC,IAAM4C,EAAMxE,CAHLE,AAGKF,EAAAA,CAHM,CAGNA,MAAAA,CAAU,EAHJA,CAKlB,MAAA,AALgC,CAKhC,EAAA,EAAAE,SAAAA,EAAU,IAAM,CACdsE,EAAI,OAAA,CAAU5C,CAChB,EAAG,CAACA,CAAK,CAAC,EAEH4C,EAAI,OACb,EDGME,EAAa,IAAI,IDPhBuB,EAAAA,CAAAA,EAAAA,EAAQpG,IAAAA,ECSf,ADToBoG,EAAM,OCSjBtB,AAAO,CACd,aAAAC,CAAAA,CACA,gBAAAC,CAAAA,CACA,YAAAC,CAAAA,CACA,MAAAlD,CAAAA,CACA,SAAAC,CAAAA,CACA,KAAAC,CAAAA,CAEA,MAAAa,EAAQ,OAAA,CACR,KAAAoC,CAAAA,CACA,QAAAnE,EAAU,YAAA,CACV,QAAAgC,EAAU,CAAC,CAAA,CACX,iBAAAoC,EAAmB,CAAC,CAAA,CACpB,cAAAC,EAAgB,CAAA,CAAA,CAChB,iBAAAC,EAAmB,CAAA,CAAA,CAEnB,MAAAzE,EAAQ,MAAA,CACR,OAAAC,EAAS,MAAA,CACT,UAAAI,CAAAA,CACA,aAAAC,EAAe,CAAC,CAAA,CAEhB,YAAA8B,EAAcpB,CAAAA,CACd,QAAAqB,EAAUrB,CAAAA,CACV,SAAA0D,CAAAA,CACA,WAAAC,EAAa3D,CACf,CAAA,CAAgB,CACd,GAAM,CAACd,EAAeoC,CAAgB,CAAA,CAAA,CAAA,EAAA,EAAIhD,QAAAA,EAAS,CAAA,CAAK,EAClD,CAACiD,EAAkBC,CAAmB,CAAA,CAAA,CAAA,EAAA,EAAIlD,QAAAA,EAAS,CAAA,CAAI,EACvDoD,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAYnD,EAAsB,IAAI,EACtCkD,EAAAA,CAAAA,EAAYlD,EAAAA,MAAAA,EAA4C,IAAI,EAC5DoD,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAepD,EAAuB,IAAI,EAC1CqD,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAarD,EAAO8C,CAAO,EAC3BQ,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAiBtD,EAAO6C,CAAW,EACnCwC,EAAkBrF,CAAAA,EAAAA,EAAAA,MAAAA,CAAoB,GACtCsF,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAWtF,EAAO4B,CAAK,EACvB2D,EAAed,EAAY3C,CAAI,EAC/ByB,EAAAA,CAAAA,EAAAA,EAAAA,MAAAA,AAAkBvD,EAAO,CAAA,CAAK,EAC9BwF,EAA4BxF,CAAAA,EAAAA,EAAAA,MAAAA,EAAgB,CAAA,CAAK,EAEvDmB,EAAS,IAAM,CACb,IAAMqC,EAAAA,EAAa5D,OAAAA,CAAO,IAAA,CAAK,EAE/B,OAAA4D,EACG,IAAA,CAAM7B,GAAAA,CAAYwB,EAAU,OAAA,EAAUxB,CAAAA,EAAWsB,EAAoB,CAAA,CAAK,CAAC,EAC3E,KAAA,CACEQ,AADF,GAEGA,GAAO,OAAS,eAAiB,QAAQ,KAAA,CAAM,gCAAiCA,CAAK,CACzF,EAEK,IAAOP,EAAU,OAAA,GAAUQ,GAAc,AAsLhD2B,EAAgB,OAAA,EAAS,QAAQ,EAE7BH,EACFD,GAAiBP,EAAW,GAAA,CAAI5C,EAAMoB,EAAU,OAAA,CAAS,aAAA,CAAc,CAAC,EAExEA,EAAU,OAAA,CAAS,QAAA,CAAS,GAAG,QAAQ,EAGzCA,EAAU,OAAA,CAAS,OAAA,EAAQ,EA9LyBM,EAAW,MAAA,CAAO,CACxE,CAAC,EAEDhC,EACE,IAAM,CACJ,IAAMoC,EAAQlC,EACZyB,EAAU,OAAA,CACVyB,GAAgBhD,GAAS,GACzBiD,GAAmBhD,GAAY,GAC/BC,GAAQgD,GAAe,EACzB,EAEIlB,IAAUV,EAAU,OAAA,EAAS,SAAS,IACpC+B,CADoC,EACrBP,EAAW,GAAA,CAAIa,EAAcrC,EAAU,OAAA,EAAS,cAAc,CAAC,EAClFA,EAAU,OAAA,EAAS,SAASU,CAAK,EAC7BqB,GAAe/B,EAAU,OAAA,EAAS,iBAAiBwB,EAAW,GAAA,CAAI5C,CAAI,EAAC,CAAA,AAE/E,EACA,CAACA,CAAI,CAAA,CACLnB,CACF,EAEAa,EACE,IAAM,CACJ0B,EAAU,OAAA,EAAS,cAAcN,CAAO,CAC1C,EACA,CAACA,CAAO,CAAA,CACRjC,CACF,EAEAa,EACE,IAAM,CACA,AAAC0B,EAAU,OAAA,EAAqB,KAAA,IAAVtB,CAAU,GAChCsB,EAAU,OAAA,CAAQ,SAAA,CAAUC,EAAU,OAAA,CAAS,MAAA,CAAO,YAAA,CAAa,QAAQ,EAC7ED,EAAU,OAAA,CAAQ,QAAA,CAAStB,CAAK,EACvBA,IAAUsB,EAAU,OAAA,CAAQ,QAAA,CAAS,IAC9CsC,CAD8C,CACpB,OAAA,CAAU,CAAA,EACpCtC,EAAU,OAAA,CAAQ,YAAA,CAAa,GAAI,CACjC,CACE,MAAOA,EAAU,OAAA,CAAQ,QAAA,CAAS,EAAG,iBAAA,CAAkB,EACvD,KAAMtB,EACN,iBAAkB,CAAA,CACpB,CACF,CAAC,EAEDsB,EAAU,OAAA,CAAQ,YAAA,CAAa,EAC/BsC,EAA0B,OAAA,CAAU,EAAA,CAAA,CAAA,AAExC,EACA,CAAC5D,CAAK,CAAA,CACNjB,CACF,EAEAa,EACE,IAAM,CACJ,IAAMoC,EAAQV,EAAU,OAAA,EAAS,SAAS,EACtCU,GAAS/B,GAAUsB,EAAU,OAAA,EAAS,OAAO,iBAAiBS,EAAO/B,CAAQ,CACnF,EACA,CAACA,CAAQ,CAAA,CACTlB,CACF,EAEAa,EACE,IAAM,CAEAuD,AAAS,KAAA,OACX7B,EAAU,OAAA,EAAS,WAAW6B,CAAI,CAEtC,EACA,CAACA,CAAI,CAAA,CACLpE,CACF,EAEAa,EACE,IAAM,CACJ2B,EAAU,OAAA,EAAS,OAAO,SAASR,CAAK,CAC1C,EACA,CAACA,CAAK,CAAA,CACNhC,CACF,EAEA,IAAMsD,EAAehE,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,IAAM,CACrC,GAAI,CAAA,CAAA,CAACmD,EAAa,OAAA,EAAW,CAACD,EAAU,OAAA,GACpC,CAACI,EAAgB,OAAA,CAAS,CAC5BD,EAAe,OAAA,CAAQH,EAAU,OAAO,EACxC,IAAMsC,EAAuB3D,GAAQgD,EAE/BY,EAAehE,EACnByB,EAAU,OAAA,CACVvB,GAASgD,GAAgB,GACzBC,GAAmBhD,GAAY,GAC/B4D,GAAwB,EAC1B,EAEAvC,EAAU,OAAA,CAAUC,EAAU,OAAA,EAAS,OAAO,OAC5CC,EAAa,OAAA,CACb,CACE,MAAOsC,EACP,gBAAiB,CAAA,EACjB,GAAG9C,CAAAA,AACL,EACAoC,CACF,EAEAC,GAAiB/B,EAAU,OAAA,CAAQ,gBAAA,CAAiBwB,EAAW,GAAA,CAAIe,CAAoB,CAAC,EAExFtC,EAAU,OAAA,CAAQ,MAAA,CAAO,QAAA,CAASR,CAAK,EAEnCoC,AAAS,KAAA,OACX7B,EAAU,OAAA,CAAQ,UAAA,CAAW6B,CAAI,EAGnChC,EAAiB,CAAA,CAAI,EACrBQ,EAAgB,OAAA,CAAU,CAAA,CAAA,CAE9B,EAAG,CACDqB,EACAC,EACAC,EACAlD,EACAC,EACAC,EACAc,EACAoC,EACAC,EACAtC,EACAoC,CACF,CAAC,sBAED7E,EAAU,IAAM,CACVS,GACF0C,EAAW,OAAA,CAAQH,EAAU,OAAA,CAAUC,EAAU,OAAQ,CAE7D,EAAG,CAACxC,CAAa,CAAC,EAAA,CAAA,EAAA,EAAA,SAAA,AAElBT,EAAU,IAAM,CACd,AAAC8C,GAAqBrC,EAAD,CAAkBsD,EAAa,CACtD,EAAG,CAACjB,EAAkBrC,EAAesD,CAAY,CAAC,EAIlDqB,EAAS,OAAA,CAAU1D,EAAAA,CAAAA,EAAAA,EAAAA,SAAAA,AAGnB1B,EAAU,IAAM,CACVS,GAAiBwE,IACnBE,CADmBF,CACH,OAAA,EAAS,QAAQ,EACjCE,EAAgB,OAAA,CAAUnC,EAAU,OAAA,EAAS,wBAAA,AAAyByC,GAAU,CACzEH,EAA0B,OAAA,EAC7BL,EAASjC,EAAU,OAAA,CAAS,QAAA,CAAS,EAAGyC,CAAK,CAEjD,EAAC,CAAA,AAEL,EAAG,CAAChF,EAAewE,CAAQ,CAAC,EAAA,CAAA,EAAA,EAAA,SAAA,AAG5BjF,EAAU,IAAM,CACd,GAAIS,EAAe,CACjB,IAAMiF,EAAwBzC,EAAU,OAAA,CAAS,MAAA,CAAO,kBAAA,CAAA,AAAoB0C,GAAS,CACnF,IAAMC,EAAY5C,EAAU,OAAA,CAAS,QAAA,CAAS,GAAG,IAEjD,GAAI4C,GACoCD,EAAK,IAAA,CAAA,AAAME,GAAQA,EAAI,IAAA,GAASD,EAAU,IAAI,EACjD,CACjC,IAAME,EAAU7C,EAAU,OAAA,CAAS,MAAA,CAAO,eAAA,CAAgB,CACxD,SAAU2C,CACZ,CAAC,EACDV,IAAaY,CAAO,CAAA,CAG1B,CAAC,EAED,MAAO,IAAM,CACXJ,GAAuB,QAAQ,CACjC,CAAA,CAEF,MAAO,IAAM,CAEb,CACF,EAAG,CAACjF,EAAeyE,CAAU,CAAC,EAc9B,EACEtF,OAAAA,CAAA,aAAA,CAACkB,EAAA,CACC,MAAOP,EACP,OAAQC,EACR,cAAeC,EACf,QAASC,EACT,KAAMwC,EACN,UAAWtC,EACX,aAAcC,CAAAA,CAChB,CAEJ,Gd/POmF,EAAQD,+KgBXf,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAQA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAiCe,SAAS,EAAmB,WACzC,CAAS,oBACT,CAAkB,gBAClB,CAAc,CACU,EACxB,GAAM,CAAC,EAAiB,EAAmB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAoB,EAAE,EACrE,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,GAAE,AADO,GAExC,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAiB,CADpB,KAExB,CAAC,EAAe,EAAiB,CAAG,GAAA,EAAA,QAAA,AAAO,CADvB,CACsC,IAAI,KAC9D,CAAC,EAAe,EAAiB,CAAG,CAAA,EAAA,EAAA,MADA,EACA,AAAO,EAAU,IACrD,CAAC,EAAQ,EAAU,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,GADO,AACL,GAC/B,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAU,CAD3B,GAItB,CAAC,EAAc,EAAgB,CAAG,GAAA,EAAA,QAAA,AAAO,GAHT,AAGW,GAC3C,CAAC,EAAU,EAAY,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAiB,CADhB,KAElC,EAAiB,GAAA,EAAA,MAAA,AAAK,EAAsB,KADlB,CAIhC,CAAA,EAAA,EAAA,SAAA,AAAQ,EAAE,KACR,CAJqB,EAIjB,EAAgB,MAAM,CAAG,EAAG,CAE9B,IAAM,CAHV,CAGuB,EAAgB,IAAI,CACrC,GAAO,EAAI,WAAW,GAAK,GAAsB,EAAI,OAAO,GAAK,GAGnE,GAAI,GAAc,EAAW,OAAO,CAAC,MAAM,CAAG,EAAG,CAE/C,IAAM,EAAc,IAAI,IACxB,EAAW,OAAO,CAAC,OAAO,CAAC,IAEzB,EAAgB,OAAO,CAAC,IAClB,EAAI,OAAO,GAAK,GAClB,EAAY,GAAG,CAAC,EAAU,AADG,GAGjC,EACF,GACA,EAAiB,EACnB,CACF,CACF,EAAG,CAAC,EAAiB,EAAoB,EAAe,EAGxD,IAAM,EAAuB,UAC3B,GAAW,GACX,EAAS,MACT,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,0BACvB,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,CAChB,CADkB,CACC,EAAO,IAAI,EAE9B,EAAS,EAAO,KAAK,EAAI,aAE7B,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,cAAe,GAC7B,EAAS,mBACX,QAAU,CACR,GAAW,EACb,CACF,EAEA,CAAA,EAAA,EAAA,SAAA,AAAQ,EAAE,KACR,IACA,IAGO,KACL,GACF,GAEC,CAAC,AATJ,EASmB,EAGnB,CAHsB,GAGhB,EAAqB,KACrB,EAAe,OAAO,EAAE,AAC1B,IAGF,IAAM,CAR4C,CAQjC,CAAC,eAAe,EAAE,KAAK,GAAG,GAAG,CAAC,EAAE,KAAK,MAAM,GAAG,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAG,GAAA,CAAI,CACpF,EAAM,CAAC,sCAAsC,EAAE,mBAAmB,GAAgB,UAAU,EAAE,mBAAmB,GAAA,CAAW,CAElI,QAAQ,GAAG,CAAC,CAAC,aAAa,EAAE,EAAA,CAAK,EACjC,EAAY,MAEZ,GAAI,CACF,IAAM,EAAc,IAAI,YAAY,GACpC,EAAe,OAAO,CAAG,EAEzB,EAAY,MAAM,CAAG,KACnB,QAAQ,GAAG,CAAC,CAAC,gBAAgB,EAAE,EAAA,CAAgB,EAC/C,GAAgB,GAChB,EAAY,KACd,EAEA,EAAY,SAAS,CAAI,AAAD,IACtB,GAAI,CACF,IAAM,EAAO,KAAK,KAAK,CAAC,EAAM,IAAI,EAClC,EAAiB,EACnB,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,gBAAiB,EACjC,CACF,EAEA,EAAY,OAAO,CAAG,KACpB,QAAQ,KAAK,CAAC,CAAC,eAAe,EAAE,EAAA,CAAgB,EAChD,GAAgB,GAChB,EAAY,YAGZ,WAAW,KACJ,EAAe,OAAO,EAAI,EAAe,OAAO,CAAC,UAAU,GAAK,YAAY,MAAM,EAAE,CACvF,QAAQ,GAAG,CAAC,mBACZ,IAEJ,EAAG,IACL,CAEF,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,gBAAiB,GAC/B,EAAY,aACd,CACF,EAGM,EAAuB,KACvB,EAAe,OAAO,EAAE,CAC1B,QAAQ,GAAG,CAAC,cACZ,EAAe,OAAO,CAAC,KAAK,GAC5B,EAAe,OAAO,CAAG,KACzB,GAAgB,GAEpB,EAGM,EAAmB,AAAC,IAGxB,OAFA,QAAQ,GAAG,CAAC,cAAe,GAEnB,EAAK,IAAI,EACf,IAAK,yBACH,QAAQ,GAAG,CAAC,CAAC,YAAY,EAAE,EAAK,OAAO,CAAA,CAAE,EACzC,GAAgB,GAChB,EAAY,MACZ,KAEK,KAAK,+BAKT,GAJA,QAAQ,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAK,OAAO,CAAA,CAAE,EAC9C,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,CAAE,EAAK,OAAO,EAGnC,EAAK,OAAO,CAAE,CAChB,GAAM,OAAE,CAAK,CAAE,SAAO,CAAE,CAAG,EAAK,OAAO,CACnC,EAAa,GACb,EAAM,MAAM,CAAG,GAAG,CACpB,GAAc,CAAC,IAAI,EAAE,EAAM,IAAI,CAAC,MAAA,CAAA,AAAO,EAErC,EAAQ,MAAM,CAAG,GAAG,CAClB,IAAY,GAAc,IAAA,EAC9B,GAAc,CAAC,IAAI,EAAE,EAAQ,IAAI,CAAC,MAAA,CAAO,EAE3C,EAAe,CAAC,OAAO,EAAE,EAAW,CAAC,CAAC,CACxC,MACE,CADK,CACU,SAIjB,IAGA,WAAW,IAAM,EAAe,IAAK,KACrC,KAEH,KAAK,YAEH,GAAgB,GAChB,EAAY,MACZ,KAEF,SACE,QAAQ,GAAG,CAAC,gBAAiB,EAAK,IAAI,CAC1C,CACF,EAGM,EAAY,AAAC,GAAyB,CAAA,EAAG,EAAK,WAAW,CAAC,CAAC,EAAE,EAAK,OAAO,CAAA,CAAE,CAG3E,EAAe,EAAc,IAAI,GACnC,EAAgB,MAAM,CAAC,GACrB,EAAK,WAAW,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAc,WAAW,KACjE,EAAK,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAc,WAAW,KAC7D,EAAK,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAc,WAAW,KAE5D,EAGE,EAAsB,CAAC,EAAgB,KAC3C,IAAM,EAAe,IAAI,IAAI,GACzB,EACF,EAAa,GAAG,CAAC,CADN,EAGX,EAAa,MAAM,CAAC,GAEtB,EAAiB,EACnB,EAGM,EAAkB,AAAC,IACnB,EAEF,EAAiB,IAAI,CAFV,GACI,AACU,EADG,GAAG,CAAC,GAAQ,EAAU,MAGlD,EAAiB,IAAI,IAEzB,EAaM,EAAmB,UACvB,GAAU,GACV,EAAe,IAEf,GAAI,CAEF,IAAM,EAAmB,MAAM,IAAI,CAAC,GAAe,GAAG,CAAC,IACrD,IAAM,EAAa,EAAgB,IAAI,CAAC,GAAO,EAAU,KAAS,GAClE,OAAO,EAAa,EAAW,OAAO,CAAG,EAC3C,GAAG,MAAM,CAAC,GAAuB,KAAZ,GAGf,EAAiB,IAAI,IAAI,IAAI,GAAkB,CAE/C,EAAW,MAAM,MAAM,6BAA8B,CACzD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CACnB,YAAa,EACb,QAAS,EACT,cAAe,CACjB,EACF,GAEM,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,EAAE,AAClB,EAAe,EAAO,OAAO,EAAI,QAEjC,MAAM,KAEN,EAAe,CAAC,MAAM,EAAE,EAAO,KAAK,CAAA,CAAE,CAE1C,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,oBAAqB,GACnC,EAAe,aACjB,QAAU,CACR,GAAU,GAEV,WAAW,KACT,EAAe,GACjB,EAAG,IACL,CACF,EAEM,EAAgB,EAAc,IAAI,CAClC,EAAmB,EAAa,MAAM,CAAG,GAAK,EAAa,KAAK,CAAC,GAAQ,EAAc,GAAG,CAAC,EAAU,KACrG,EAAoB,EAAa,IAAI,CAAC,GAAQ,EAAc,GAAG,CAAC,EAAU,YAEhF,AAAI,EAEA,CAAA,EAAA,EAAA,EAFS,EAET,EAAC,MAAA,CAAI,UAAW,CAAC,0BAA0B,EAAE,EAAA,CAAW,WACtD,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,oCAA2B,iBACzC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,4BACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yBAAgB,gBAMjC,EAEA,CAAA,EAAA,EAFO,AAEP,IAAA,EAAC,MAAA,CAAI,UAAW,CAAC,0BAA0B,EAAE,EAAA,CAAW,WACtD,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,oCAA2B,iBACzC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,6BACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,wBAAgB,IAC7B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,EACT,UAAU,gBACX,aASP,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAW,CAAC,0BAA0B,EAAE,EAAA,CAAW,WACtD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mDACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,+BAAsB,iBACpC,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,uCAA6B,KACrC,EAAmB,MAAI,EAAe,mBAG7C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCAEb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAW,CAAC,qBAAqB,EACpC,EAAe,eAAiB,aAAA,CAChC,CAAE,MAAO,EAAe,UAAY,WACtC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCACb,EAAe,KAAO,UAI1B,AAAC,IAAe,CAAA,CAAQ,EACvB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,CAAC,iBAAiB,EAChC,GAAe,EAAY,QAAQ,CAAC,OAAU,EAAW,eAC1D,GAAe,EAAY,QAAQ,CAAC,MAAQ,kBAC5C,iBAAA,CACA,CAAE,MAAO,GAAe,GAAY,YACnC,GAAe,IAGpB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,EACT,SAAU,WACX,OAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,AAHD,QAGU,EACT,SAAU,WAET,EAAS,SAAW,eAM3B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,2BACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,mCACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,qCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,YAAY,iBADb,KAEC,MAAO,EACP,SAAU,AAAC,GAAM,EAAiB,EAAE,MAAM,CAAC,KAAK,EAChD,UAAU,SAEX,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,EAHD,MAtJa,CAyJH,IAxJrB,EAAiB,GACnB,EAwJc,UAAU,6FACX,WAOP,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oEACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,WAAK,MACA,EAAa,MAAM,CAAC,SACvB,GAAiB,CAAC,OAAO,EAAE,EAAc,EAAE,CAAC,IAE9C,EAAgB,GACf,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,sCAA4B,OACrC,EAAc,WAIxB,EAAgB,GACf,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,AAHD,QA1KkB,CA6KR,IA5KnB,EAAiB,IAAI,IACvB,WA4KW,eAQN,EAAa,MAAM,CAAG,EACrB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,6BACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,KAAK,CAAA,WACJ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OADF,IACa,CAAA,UACV,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CADF,OACU,CAAA,WACU,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IADnB,KAC4B,CAAA,CAAC,UAAU,eAApB,CACf,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,KAAK,WACL,QAAS,EACT,SAAU,AAAC,GAAM,EAAgB,EAAE,MAAM,CAAC,OAAO,EACjD,IAAK,AAAC,IACA,IACF,CADO,CACH,aAAa,CAAG,GAAqB,CAAC,CAAA,CAE9C,EACA,UAAU,8BAGd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,SACX,CAAA,EAAA,EAAA,EADC,CACD,EAAC,EAAA,SAAS,CAAA,UAAC,SACX,CAAA,EAAA,EAAA,EADC,CACD,EAAC,EAAA,SAAS,CAAA,UAAC,WACX,CAAA,EAAA,EADC,AACD,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,cAGhB,CAAA,CAHM,CAGN,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UACP,EAAa,GAAG,CAAE,AAAD,IAChB,IAAM,EAAS,AAFlB,EAE4B,GACnB,EAAa,EAAc,GAAG,CAAC,GAErC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,QAAQ,CAAA,WACc,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IADvB,KACgC,CAAA,UAC5B,CAAA,EAAA,EAAA,GAAA,EAAC,MADkB,EAClB,CACC,KAAK,WACL,QAAS,EACT,SAAU,AAAC,GAAM,EAAoB,EAAQ,EAAE,MAAM,CAAC,OAAO,EAC7D,UAAU,8BAGd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UACR,CAAA,EAAA,EAAA,GAAA,EAAC,MADF,CACE,CAAK,UAAU,2EACb,EAAK,OAAO,KAGjB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,eAApB,QACE,EAAK,WAAW,GAEpB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,eAApB,cACE,EAAK,IAAI,GAEZ,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,eAApB,mBACE,EAAK,YAAY,CACjB,EAAK,QAAQ,CAAC,EAAK,YAAY,CAAC,EAC/B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,iCACZ,EAAK,QAAQ,CAAC,EAAK,YAAY,CAAC,QAxB1B,EA8BnB,UAKN,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,4BACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yBACV,EAAgB,cAAgB,aAMtC,EAAgB,GACf,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,0CACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,kCAAwB,OACjC,EAAc,oBAER,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCAAwB,4BAQjE,iHCxhBA,IAAI,EAAA,EAAA,CAAA,CAAA,OAIA,EAFwC,GAAkB,UAAb,EAE5B,KAFmC,GAAkB,GAE1C,GAAE,OAFqD,GAAQ,CAAJ,AAAM,QAEzC,CAFsD,EAqB1G,AArBwG,EAqB5E,aAAnB,OAAO,SAA2B,QAAQ,GAAG,GAAI,EAC1D,EAAW,SAAS,CAAC,EACrB,MAAO,AAAsC,2BAA/B,EAFqE,OAE5D,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1C,EACI,EAA2B,WAAd,AACb,SAAS,EADe,AACJ,CAAK,EACrB,IAAI,EAAgB,KAAK,IAAf,EAAmB,CAAC,EAAI,EAAO,EAAQ,EAAI,IAAI,CAAE,EAAO,AAAU,KAAK,MAAI,aAAe,EAAO,EAAoB,EAAI,gBAAgB,CAAE,EAAyC,KAAK,IAA3B,EAA+B,EAAS,EAChN,EAAY,EAAS,GAAO,2BAC5B,IAAI,CAAC,KAAK,CAAG,EACb,IAAI,CAAC,uBAAuB,CAAG,IAAM,EAAO,sBAC5C,EAAwC,WAA5B,OAAO,EAAgC,wCACnD,IAAI,CAAC,iBAAiB,CAAG,EACzB,IAAI,CAAC,YAAY,MAAG,EACpB,IAAI,CAAC,KAAK,CAAG,EAAE,CACf,IAAI,CAAC,SAAS,EAAG,EACjB,IAAI,CAAC,WAAW,CAAG,EACnB,IAAI,EAAyB,aAAlB,OAAO,QAA0B,SAAS,aAAa,CAAC,8BACnE,IAAI,CAAC,MAAM,CAAG,EAAO,EAAK,YAAY,CAAC,WAAa,IACxD,CACA,MAAI,EAAS,EAAW,SAAS,CA2LjC,OA1LA,EAAO,mBAAmB,CAAG,SAAS,AAAoB,CAAI,EAC1D,EAAY,AAAgB,kBAAT,EAAoB,2CACvC,EAAiC,IAArB,IAAI,CAAC,WAAW,CAAQ,oEACpC,IAAI,CAAC,KAAK,GACV,IAAI,CAAC,iBAAiB,CAAG,EACzB,IAAI,CAAC,MAAM,EACf,EACA,EAAO,kBAAkB,CAAG,SAAS,EACjC,OAAO,IAAI,CAAC,iBAAiB,AACjC,EACA,EAAO,MAAM,CAAG,SAAS,EACrB,IAAI,EAAQ,IAAI,CAGhB,GAFA,EAAY,CAAC,IAAI,CAAC,SAAS,CAAE,0BAC7B,IAAI,CAAC,SAAS,EAAG,EACK,aAAlB,OAAO,QAA0B,IAAI,CAAC,iBAAiB,CAAE,CACzD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAC5C,IAAI,CAAC,iBAAiB,CAAG,eAAgB,IAAI,CAAC,QAAQ,GACjD,IAAI,CAAC,iBAAiB,EAAE,CACrB,AAAC,GACD,KADS,GACD,IAAI,CAAC,kFAEjB,IAAI,CAAC,KAAK,GACV,IAAI,CAAC,SAAS,EAAG,GAErB,MACJ,CACA,IAAI,CAAC,YAAY,CAAG,CAChB,SAAU,EAAE,CACZ,WAAY,SAAS,CAAI,CAAE,CAAK,EAU5B,MATqB,UAAjB,AAA2B,OAApB,EACP,EAAM,YAAY,CAAC,QAAQ,CAAC,EAAM,CAAG,CACjC,QAAS,CACb,EAEA,EAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC7B,QAAS,CACb,GAEG,CACX,EACA,WAAY,SAAS,CAAK,EACtB,EAAM,YAAY,CAAC,QAAQ,CAAC,EAAM,CAAG,IACzC,CACJ,CACJ,EACA,EAAO,cAAc,CAAG,SAAS,AAAe,CAAG,EAC/C,GAAI,EAAI,KAAK,CACT,CADW,MACJ,EAAI,KAAK,CAGpB,IAAI,IAAI,EAAI,EAAG,EAAI,SAAS,WAAW,CAAC,MAAM,CAAE,IAAI,AAChD,GAAI,SAAS,WAAW,CAAC,EAAE,CAAC,SAAS,GAAK,EACtC,GAD2C,IACpC,SAAS,WAAW,CAAC,EAAE,AAG1C,EACA,EAAO,QAAQ,CAAG,SAAS,EACvB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAG,EAAE,CAChE,EACA,EAAO,UAAU,CAAG,SAAoB,AAAX,CAAe,CAAE,CAAK,EAE/C,GADA,EAAY,EAAS,GAAO,qCACN,aAAlB,AAA+B,OAAxB,OAKP,MAJqB,UAAjB,AAA2B,OAApB,IACP,EAAQ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAA,AAAM,EAE7C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAM,GAC5B,IAAI,CAAC,WAAW,GAE3B,GAAI,IAAI,CAAC,iBAAiB,CAAE,CACxB,IAAI,EAAQ,IAAI,CAAC,QAAQ,GACJ,UAAU,AAA3B,OAAO,IACP,EAAQ,EAAM,QAAQ,CAAC,MAAA,AAAM,EAIjC,GAAI,CACA,EAAM,UAAU,CAAC,EAAM,EAC3B,CAAE,MAAO,EAAO,CAIZ,OAHK,AAAD,GACA,KADS,GACD,IAAI,CAAC,iCAAmC,EAAO,8DAEpD,CAAC,CACZ,CACJ,KAAO,CACH,IAAI,EAAiB,IAAI,CAAC,KAAK,CAAC,EAAM,CACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAE,EAAM,GACxD,CACA,OAAO,IAAI,CAAC,WAAW,EAC3B,EACA,EAAO,WAAW,CAAG,SAAS,AAAY,CAAK,CAAE,CAAI,EACjD,GAAI,IAAI,CAAC,iBAAiB,EAAsB,aAAlB,OAAO,OAAwB,CACzD,IAAI,EAA0B,aAAlB,OAAO,OAAyB,IAAI,CAAC,QAAQ,GAAK,IAAI,CAAC,YAAY,CAI/E,GAHI,AAAC,EAAK,IAAI,IAAI,AACd,GAAO,IAAI,CAAC,uBAAA,AAAuB,EAEnC,CAAC,EAAM,QAAQ,CAAC,EAAM,CAEtB,CAFwB,MAEjB,EAEX,EAAM,UAAU,CAAC,GACjB,GAAI,CACA,EAAM,UAAU,CAAC,EAAM,EAC3B,CAAE,MAAO,EAAO,CACR,AAAC,GACD,KADS,GACD,IAAI,CAAC,iCAAmC,EAAO,8DAG3D,EAAM,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAE,EACnD,CACJ,KAAO,CACH,IAAI,EAAM,IAAI,CAAC,KAAK,CAAC,EAAM,CAC3B,EAAY,EAAK,sBAAwB,EAAQ,eACjD,EAAI,WAAW,CAAG,CACtB,CACA,OAAO,CACX,EACA,EAAO,UAAU,CAAG,SAAS,AAAW,CAAK,EACzC,GAAsB,aAAlB,OAAO,OAAwB,YAC/B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAGjC,GAAI,IAAI,CAAC,iBAAiB,CACtB,CADwB,GACpB,CAAC,WAAW,CAAC,EAAO,QACrB,CACH,IAAI,EAAM,IAAI,CAAC,KAAK,CAAC,EAAM,CAC3B,EAAY,EAAK,kBAAoB,EAAQ,eAC7C,EAAI,UAAU,CAAC,WAAW,CAAC,GAC3B,IAAI,CAAC,KAAK,CAAC,EAAM,CAAG,IACxB,CACJ,EACA,EAAO,KAAK,CAAG,SAAS,EACpB,IAAI,CAAC,SAAS,EAAG,EACjB,IAAI,CAAC,WAAW,CAAG,EACG,aAAlB,AAA+B,OAAxB,QACP,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAG,EAC3B,OAAO,GAAO,EAAI,UAAU,CAAC,WAAW,CAAC,EAC7C,GACA,IAAI,CAAC,KAAK,CAAG,EAAE,EAGf,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAG,EAAE,AAEvC,EACA,EAAO,QAAQ,CAAG,SAAS,EACvB,IAAI,EAAQ,IAAI,OAChB,AAAsB,aAAa,AAA/B,OAAO,OACA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAE9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAK,CAAE,CAAG,EAQxC,OAPI,EACA,EAAQ,CADH,CACS,MAAM,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAM,cAAc,CAAC,GAAK,QAAQ,CAAE,SAAS,CAAI,EAC3F,OAAO,EAAK,OAAO,GAAK,EAAM,uBAAuB,CAAG,KAAO,CACnE,IAEA,EAAM,IAAI,CAAC,MAER,CACX,EAAG,EAAE,CACT,EACA,EAAO,YAAY,CAAG,SAAS,AAAa,CAAI,CAAE,CAAS,CAAE,CAAa,EAClE,GACA,EAAY,EAAS,GAAY,CADtB,wDAGf,IAAI,EAAM,SAAS,aAAa,CAAC,SAC7B,IAAI,CAAC,MAAM,EAAE,EAAI,YAAY,CAAC,QAAS,IAAI,CAAC,MAAM,EACtD,EAAI,IAAI,CAAG,WACX,EAAI,YAAY,CAAC,QAAU,EAAM,IAC7B,GACA,EAAI,MADO,KACI,CAAC,SAAS,cAAc,CAAC,IAE5C,IAAI,EAAO,SAAS,IAAI,EAAI,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAMpE,OALI,EACA,EAAK,WADU,CACE,CAAC,EAAK,GAEvB,EAAK,WAAW,CAAC,GAEd,CACX,EA1M+B,EA2MN,CACrB,CACI,IAAK,EA7M4B,EAAE,KA8MnC,IAAK,EA9MyC,OA8MhC,EACV,OAAO,IAAI,CAAC,WAAW,AAC3B,CACJ,EACH,CAjNe,AAVjB,SAAS,AAAkB,CAAM,CAAE,CAAK,EACvC,IAAI,IAAI,EAAI,EAAG,EAAI,EAAM,MAAM,CAAE,IAAI,CACjC,IAAI,EAAa,CAAK,CAAC,EAAE,CACzB,EAAW,UAAU,CAAG,EAAW,UAAU,GAAI,EACjD,EAAW,YAAY,EAAG,EACtB,UAAW,IAAY,EAAW,QAAQ,EAAG,CAAA,EACjD,OAAO,cAAc,CAAC,EAAQ,EAAW,GAAG,CAAE,EAClD,CACJ,EA4MiB,AA1MqB,EAAY,SAAS,CAAE,GAkNlD,CACX,IACA,SAAS,EAAY,CAAS,CAAE,CAAO,EACnC,GAAI,CAAC,EACD,MAAM,AAAI,GADE,GACI,eAAiB,EAAU,IAEnD,CAWA,IAAI,EATJ,SAAS,AAAK,CAAG,CASA,CAPb,IADA,IAAI,EAAS,KAAM,EAAI,EAAI,MAAM,CAC3B,EAAE,CACJ,EAAkB,GAAT,EAAc,EAAI,UAAU,CAAC,EAAE,GAIiB,OAAO,IAAW,CACnF,EAMI,EAAQ,CAAC,EAKT,SAAS,EAAU,CAAM,CAAE,CAAK,EAChC,GAAI,CAAC,EACD,KADQ,CACD,OAAS,EAEpB,IAAI,EAAgB,OAAO,GACvB,EAAM,EAAS,EAInB,OAHI,AAAC,CAAK,CAAC,EAAI,EAAE,CACb,CAAK,CAAC,EAAI,CAAG,OAAS,EAAW,EAAS,IAAM,EAAA,EAE7C,CAAK,CAAC,EAAI,AACrB,CAKI,SAAS,EAAgB,CAAE,CAAE,CAAG,EAK5B,AAAkB,aAAa,OAAxB,SACP,EA5BG,AA4BY,EA5BP,EA4BF,KA5BS,CAAC,YAAa,WA4Bd,EAEnB,IAAI,EAAQ,EAAK,EAIjB,OAHI,AAAC,CAAK,CAAC,EAAM,EAAE,CACf,CAAK,CAAC,EAAM,CAAG,EAAI,OAAO,CAAC,AATA,gCAS0B,EAAA,EAElD,CAAK,CAAC,EAAM,AACvB,CAkBA,IAAI,EAAmC,WACnC,QADqB,CACZ,EAAmB,CAAK,EAC7B,IAAI,CAFwB,CAElB,AAAU,KAAK,MAAI,CAAC,EAAI,EAAO,EAAc,EAAI,UAAU,CAAE,EAA6B,KAAK,IAArB,EAAyB,KAAO,EAAa,EAAoB,EAAI,gBAAgB,CAAE,EAAmB,AAAsB,KAAK,IAAI,GAAQ,EACrO,IAAI,CAAC,MAAM,CAAG,GAAc,IAAI,EAAW,CACvC,KAAM,aACN,iBAAkB,CACtB,GACA,IAAI,CAAC,MAAM,CAAC,MAAM,GACd,GAAc,AAA4B,WAAW,OAAhC,IACrB,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAChC,IAAI,CAAC,iBAAiB,CAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAE3D,IAAI,CAAC,WAAW,MAAG,EACnB,IAAI,CAAC,QAAQ,CAAG,CAAC,EACjB,IAAI,CAAC,gBAAgB,CAAG,CAAC,CAC7B,CACA,IAAI,EAAS,EAAmB,SAAS,CAoHzC,OAnHA,EAAO,GAAG,CAAG,SAAS,AAAI,CAAK,EAC3B,IAAI,EAAQ,IAAI,MACZ,IAAc,IAAI,CAAC,iBAAiB,EAAE,CACtC,IAAI,CAAC,iBAAiB,CAAG,MAAM,OAAO,CAAC,EAAM,QAAQ,EACrD,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EACtD,IAAI,CAAC,iBAAiB,CAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAErC,aAAlB,EAAiC,KAA1B,QAA2B,IAAI,CAAC,WAAW,EAAE,CACpD,IAAI,CAAC,WAAW,CAAG,IAAI,CAAC,gBAAgB,GACxC,IAAI,CAAC,gBAAgB,CAAG,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAG,CAAE,CAAO,EAE9E,OADA,CAAG,CAAC,EAAQ,CAAG,EACR,CACX,EAAG,CAAC,IAER,IAAI,EAAM,IAAI,CAAC,aAAa,CAAC,GAAQ,EAAU,EAAI,OAAO,CAAE,EAAQ,EAAI,KAAK,CAE7E,GAAI,KAAW,IAAI,CAAC,gBAAgB,CAAE,CAClC,IAAI,CAAC,gBAAgB,CAAC,EAAQ,EAAI,EAClC,MACJ,CACA,IAAI,EAAU,EAAM,GAAG,CAAC,SAAS,CAAI,EACjC,OAAO,EAAM,MAAM,CAAC,UAAU,CAAC,EACnC,GAAE,AACD,MAAM,CAAC,SAAS,CAAK,EAClB,OAAO,AAAU,CAFQ,AAEP,KACtB,GACA,IAAI,CAAC,QAAQ,CAAC,EAAQ,CAAG,EACzB,IAAI,CAAC,gBAAgB,CAAC,EAAQ,CAAG,CACrC,EACA,EAAO,MAAM,CAAG,SAAS,AAAO,CAAK,EACjC,IAAI,EAAQ,IAAI,CACZ,EAAU,IAAI,CAAC,aAAa,CAAC,GAAO,OAAO,CAG/C,GAFA,AAqFR,SAAS,AAAU,CAAS,CAAE,CAAO,EACjC,GAAI,CAAC,EACD,MAAM,AAAI,GADE,GACI,uBAAyB,EAAU,IAE3D,EAzFkB,KAAW,IAAI,CAAC,gBAAgB,CAAE,aAAe,EAAU,eACrE,IAAI,CAAC,gBAAgB,CAAC,EAAQ,EAAI,EAC9B,IAAI,CAAC,gBAAgB,CAAC,EAAQ,CAAG,EAAG,CACpC,IAAI,EAAgB,IAAI,CAAC,WAAW,EAAI,IAAI,CAAC,WAAW,CAAC,EAAQ,CAC7D,GACA,EAAc,UADC,AACS,CAAC,WAAW,CAAC,GACrC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAQ,GAEhC,IAAI,CAAC,QAAQ,CAAC,EAAQ,CAAC,OAAO,CAAC,SAAS,CAAK,EACzC,OAAO,EAAM,MAAM,CAAC,UAAU,CAAC,EACnC,GACA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAQ,EAEjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAQ,AACzC,CACJ,EACA,EAAO,MAAM,CAAG,SAAS,AAAO,CAAK,CAAE,CAAS,EAC5C,IAAI,CAAC,GAAG,CAAC,GACT,IAAI,CAAC,MAAM,CAAC,EAChB,EACA,EAAO,KAAK,CAAG,SAAS,EACpB,IAAI,CAAC,MAAM,CAAC,KAAK,GACjB,IAAI,CAAC,MAAM,CAAC,MAAM,GAClB,IAAI,CAAC,WAAW,MAAG,EACnB,IAAI,CAAC,QAAQ,CAAG,CAAC,EACjB,IAAI,CAAC,gBAAgB,CAAG,CAAC,CAC7B,EACA,EAAO,QAAQ,CAAG,SAAS,EACvB,IAAI,EAAQ,IAAI,CACZ,EAAa,IAAI,CAAC,WAAW,CAAG,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAO,EAClF,MAAO,CACH,EACA,EAAM,WAAW,CAAC,EAAQ,CAC7B,AACL,GAAK,EAAE,CACH,EAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,GACnC,OAAO,EAAW,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAO,EACpE,MAAO,CACH,EACA,EAAM,QAAQ,CAAC,EAAQ,CAAC,GAAG,CAAC,SAAS,CAAK,EACtC,OAAO,CAAQ,CAAC,EAAM,CAAC,OAAO,AAClC,GAAG,IAAI,CAAC,EAAM,iBAAiB,CAAG,GAAK,MAC1C,AACL,GAAE,AACD,MAAM,CAAC,SAAS,CAAI,EACjB,MAFuB,CAEhB,CAAQ,CAAI,CAAC,EAAE,AAC1B,GACJ,EACA,EAAO,MAAM,CAAG,SAAS,AAAO,CAAO,UACnC,OAAO,AAlHU,EAkHM,IAAI,CAAC,CAlHH,OAkHW,GAjHpC,AAAY,KAAK,KADU,EAkHa,KAlHN,AACd,EAAU,EAAC,EAC5B,EAAS,GAAG,CAAC,SAAS,CAAI,EAC7B,IAAI,EAAK,CAAI,CAAC,EAAE,CACZ,EAAM,CAAI,CAAC,EAAE,CACjB,OAAO,AAAc,EAAe,OAAU,CAAC,CAA7B,GAAiB,SAAyB,CAAC,QAAS,CAClE,GAAI,KAAO,EAEX,IAAK,KAAO,EACZ,MAAO,EAAQ,KAAK,CAAG,EAAQ,KAAK,CAAG,OACvC,wBAAyB,CACrB,OAAQ,CACZ,CACJ,EACJ,EAqGA,EACA,EAAO,aAAa,CAAG,SAAS,AAAc,CAAK,EAC/C,IAAI,EAAM,EAAM,QAAQ,CAAE,EAAU,EAAM,OAAO,CAAE,EAAK,EAAM,EAAE,CAChE,GAAI,EAAS,CACT,IAAI,EAAU,EAAU,EAAI,GAC5B,MAAO,CACH,QAAS,EACT,MAAO,MAAM,OAAO,CAAC,GAAO,EAAI,GAAG,CAAC,SAAS,CAAI,EAC7C,OAAO,EAAgB,EAAS,EACpC,GAAK,CACD,EAAgB,EAAS,GAC5B,AACL,CACJ,CACA,MAAO,CACH,QAAS,EAAU,GACnB,MAAO,MAAM,OAAO,CAAC,GAAO,EAAM,CAC9B,EACH,AACL,CACJ,EAKE,EAAO,gBAAgB,CAAG,SAAS,EAEjC,OADe,AACR,MADc,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,gBAAgB,CAAC,mBACpD,MAAM,CAAC,SAAS,CAAG,CAAE,CAAO,EAGxC,OADA,CAAG,CAAC,AADK,EAAQ,EAAE,CAAC,KAAK,CAAC,GACnB,CAAG,EACH,CACX,EAAG,CAAC,EACR,EACO,CACX,IAMI,EAAkC,EAAM,aAAa,CAAC,EAAlC,IAExB,OAFmC,EAE1B,IACL,OAAO,IAAI,CACf,CAWA,SAAS,IACL,OAAO,EAAM,UAAU,CAAC,EAC5B,CAhBA,EAAkB,WAAW,CAAG,oBAoBhC,IAAI,EAAqB,EAAe,OAAU,CAAC,IAAZ,cAA8B,EAAI,EAAe,OAAU,CAAC,IAAZ,WAA2B,CAC9G,EAAoC,aAAlB,OAAO,OAAyB,SAAwB,EAC9E,SAAS,EAAS,CAAK,EACnB,IAAI,EAAW,GAAoC,WAE9C,IAF4B,AAKX,MAHP,OAGX,AAA+B,OAAxB,OACP,EAAS,GAAG,CAAC,GAGjB,EAAmB,WAEf,OADA,EAAS,GAAG,CAAC,GACN,WACH,EAAS,MAAM,CAAC,EACpB,CAEJ,EAAG,CACC,EAAM,EAAE,CACR,OAAO,EAAM,OAAO,EACvB,GAfU,IAiBf,CACA,EAAS,OAAO,CAAG,SAAS,CAAI,EAC5B,OAAO,EAAK,GAAG,CAAC,SAAS,CAAO,EAG5B,OAAO,EAFM,CAAO,CAAC,EAAE,CACX,CAAO,CAAC,CACH,CADK,CAE1B,GAAG,GAD0B,CACtB,CAAC,IACZ,EAEA,EAAQ,aAAa,CAhDrB,EAgDwB,OAhDf,AAAc,CAAK,EACxB,IAAI,EAAqB,EAAM,QAAQ,CAAE,EAAW,EAAM,QAAQ,CAC9D,EAAe,EAAM,UAAU,CAAC,GAGhC,EAAW,AAFL,EAAM,QAAQ,CAAC,WACrB,OAAO,GAAgB,GAAsB,GACjD,EAAkB,CAAC,EAAE,CACrB,OAAO,AAAc,EAAe,OAAU,CAAC,CAA7B,GAAiB,SAAyB,CAAC,EAAkB,QAAQ,CAAE,CACrF,MAAO,CACX,EAAG,EACP,EAwCA,EAAQ,mBAAmB,CAAG,EAC9B,EAAQ,KAAK,CAAG,EAChB,EAAQ,gBAAgB,CAAG,oDClf3B,EAAO,OAAO,CAAG,EAAA,CAAA,CAAA,OAAwB,KAAK,mGCE9C,EAAA,EAAA,CAAA,CAAA,OAMe,SAAS,EAAU,MAAE,CAAI,CAAkB,EACxD,IAAM,EAAe,CAAA,EAAA,EAAA,MAAA,AAAK,EAAkB,MACtC,EAAmB,GAAA,EAAA,MAAA,AAAK,GAAE,GAG1B,EAAiB,AAAC,CAJH,EAKZ,EAEJ,EADD,KACQ,CAAC,SADM,AALM,SAMO,IAAI,AAC/B,OADsC,AAC/B,CAAC,qBAAsB,IAAI,AAClC,OADyC,AAClC,CAAC,WAAY,IAAI,AACxB,MAD8B,CACvB,CAAC,YAAa,IAAI,AACzB,OADgC,AACzB,CAAC,WAAY,IAAI,AACxB,OAAO,CADyB,AACxB,cAAe,IAAI,AAC3B,OADkC,AAC3B,CAAC,cAAe,IAAI,AAC3B,OADkC,AAC3B,CAAC,cAAe,IAAI,AAC3B,OADkC,AAC3B,CAAC,cAAe,IAAI,AAC3B,OADkC,AAC3B,CAAC,mBAAoB,IAAI,AAChC,OAAO,CADiC,AAChC,cAAe,IAAI,AAC3B,OAAO,CAAC,CAD4B,aACb,SACvB,OAAO,CAAC,cAAe,SAItB,EAAkB,KACtB,GAAI,CAAC,EAAa,OAAO,CAAE,OAAO,EAElC,GAAM,WAAE,CAAS,CAAE,cAAY,cAAE,CAAY,CAAE,CAAG,EAAa,OAAO,CAEtE,OAAO,EAAe,EAAY,EAAe,GACnD,EAGM,EAAiB,KACjB,EAAa,OAAO,EAAI,EAAiB,OAAO,EAAE,CACpD,EAAa,OAAO,CAAC,SAAS,CAAG,EAAa,OAAO,CAAC,YAAA,AAAY,CAEtE,EAaA,MALA,GAAA,EAAA,SAAA,AAAQ,EAAE,KAER,WAAW,EAAgB,GAC7B,EAAG,CAAC,CAHJ,CAGS,EAGP,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,IAAK,EAEL,SAdiB,CAcP,IAbZ,EAAiB,OAAO,CAAG,GAC7B,EAaI,MAAO,CACL,eAAgB,SAChB,UAAW,MACb,2CALU,umBA6BV,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,0CAAc,aACZ,EAAK,MAAM,CAAG,EACb,EAAK,GAAG,CAAC,CAAC,EAAK,KACb,IAAM,EAAW,EAAe,GAGhC,GAAI,CAAC,EAAS,IAAI,GAAI,OAAO,KAE7B,IAAM,EAAU,EAAI,QAAQ,CAAC,YACvB,EAAW,EAAI,QAAQ,CAAC,YACxB,EAAY,EAAS,KAAK,CAAC,sBAAsB,CAAC,EAAE,CACpD,EAAU,EAAS,OAAO,CAAC,qBAAsB,IAEvD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WAEY,CAAC,iDAA4B,EACtC,EAAU,eACV,EAAW,kBACX,gBAAA,CACA,WAED,GACC,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,0CAAe,qBAAqB,IACjC,IAAI,KAAK,GAAW,kBAAkB,CAAC,SAAS,OAGtD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,0CAAe,+BACb,MAbE,EAiBX,GAEA,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,0CAAc,gCAAiC,kBAO1D,uFCjIA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAyBe,SAAS,EAAW,aAAE,CAAW,WAAE,EAAY,EAAE,SAAE,GAAU,CAAK,CAAmB,EAClG,GAAM,CAAC,EAAY,EAAc,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAqB,MAC1D,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADD,EACG,GACjC,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAiB,CADpB,KAExB,CAAC,EAAgB,EAAkB,CAAG,CAAA,EAAA,EAAA,QAAO,AAAP,CADlB,CACmC,IAGvD,EAAkB,CAAA,EAAA,EAAA,WAAA,AAAU,EAAE,EAHQ,QAI1C,GAAK,CAAD,EAEJ,EAAW,IACX,CAJsB,CAIb,EAHS,IAKlB,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,CAAC,4BAA4B,EAAE,mBAAmB,GAAA,CAAc,EACvF,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,EAAE,AAClB,EAAc,EAAO,IAAI,EACzB,EAAkB,IAAI,OAAO,kBAAkB,CAAC,QAAS,CACvD,QAAQ,EACR,KAAM,UACN,OAAQ,UACR,OAAQ,SACV,KAEA,EAAS,EAAO,KAAK,EAAI,WAE7B,CAAE,MAAO,EAAK,CACZ,EAAS,UACT,QAAQ,KAAK,CAAC,YAAa,EAC7B,QAAU,CACR,GAAW,EACb,EACF,EAAG,CAAC,EAAY,EAGhB,CAAA,EAAA,EAAA,SAAA,AAAQ,EAAE,KACR,GACF,EAAG,CAAC,EAAgB,EAGpB,CAAA,EAAA,EAAA,KALA,IAKA,AAAQ,EAAE,KACR,GAAI,CAAC,EAAa,OAElB,IAAM,EAAW,CAHnB,WAG+B,KAC3B,GACF,EAAG,EAAU,KAAQ,KAErB,GAF6B,GAEtB,IAAM,cAAc,EAC7B,AAHsD,EAGnD,CAAC,EAAa,EAAiB,EAAQ,EAG1C,IAAM,EAAiB,AAAC,GACtB,AAAc,GAAG,CAAb,EAAoB,gBACjB,kBAIH,EAAsB,KAC1B,GAAI,CAAC,EAAY,OAAO,KAExB,GAAM,CAAE,OAAK,QAAE,CAAM,CAAE,CAAG,EAAW,MAAM,QAE3C,AAAI,EAAQ,GAAK,EAAS,EACjB,CADoB,AACpB,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,mCAA0B,MACxC,CADkD,CAC1C,EACV,CADa,AACb,EAAA,EAAA,GAF+D,AAE/D,EAAC,OAAA,CAAK,UAAU,kCAAyB,MACvC,CADiD,CACxC,EACX,CADc,AACd,CAFwD,CAExD,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,gCAAuB,MAGzC,CAAA,AAHmD,EAGnD,EAAA,CAHwD,EAGxD,EAAC,OAAA,CAAK,UAAU,iCAAwB,KACjD,EAD2D,KAAK,EAG5D,AAAJ,GAAe,CAAC,EACd,AAAI,EAEA,CAAA,EAAA,EAAA,EAFS,CADa,CAGtB,EAAC,MAAA,CAAI,UAAW,CAAC,wDAAwD,EAAE,EAAA,CAAW,WACpF,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,oFACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCAAwB,cAM5C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAW,CAAC,yCAAyC,EAAE,EAAA,CAAW,WACrE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mDACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,+CAAsC,aACpD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,uFAEjB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,iCAAwB,mBAKzC,EACF,AAAI,EAEA,CAAA,EAAA,AAHK,EAGL,EAFS,EAET,EAAC,MAAA,CAAI,UAAW,CAAC,uDAAuD,EAAE,EAAA,CAAW,WACnF,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,gCAAuB,WACvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,EAHD,MAGU,EACT,SAAU,EACV,UAAU,qDACX,SAQL,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAW,CAAC,yCAAyC,EAAE,EAAA,CAAW,WACrE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mDACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,+CAAsC,aACpD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,EACT,SAAU,EACV,UAAU,4BAET,EAAU,SAAW,UAG1B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,sDACZ,OAMJ,EAoBL,AAAI,EAEA,CAAA,EAAA,EAAA,EAFS,CApBI,CAsBb,EAAC,MAAA,CAAI,UAAW,CAAC,+EAA+E,EAAE,EAAA,CAAW,WAC3G,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,0BAEV,CAAA,EAAA,EAAA,GAAA,EAAC,WAAA,CAAS,OAAO,aACjB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,GAAG,KAAK,GAAG,IAAI,EAAE,MACzB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,GAAG,IAAI,GAAG,KAAK,EAAE,MACzB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,2BAEV,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,6CACb,EAAW,aAAa,GAE1B,IACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,EAHD,MAGU,EACT,SAAU,EACV,UAAU,8CACV,MAAM,kBAEL,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,oFAEf,SAQR,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAW,CAAC,yCAAyC,EAAE,EAAA,CAAW,WAErE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mDACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,+CAAsC,aACpD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACZ,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCACb,IAGL,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,EACT,SAAU,EACV,UAAU,4BAET,EAAU,SAAW,aAM5B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,mCACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCAAwB,QACxC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,0EACb,EAAW,aAAa,GAE1B,SAKL,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,qDACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yBAAgB,QAChC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,sDACb,EAAW,UAAU,CAAC,IAAI,MAG/B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,kDACZ,EAAW,UAAU,CAAC,OAAO,GAEhC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,4DACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,EAAW,UAAU,CAAC,MAAM,GACnC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,EAAW,UAAU,CAAC,IAAI,SAKrC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,2CACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yBAAgB,QAChC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,EAAe,EAAW,MAAM,CAAC,KAAK,WACpD,EAAW,MAAM,CAAC,KAAK,MAG5B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yBAAgB,QAChC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,EAAe,EAAW,MAAM,CAAC,MAAM,WACrD,EAAW,MAAM,CAAC,MAAM,MAG7B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yBAAgB,SAChC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,EAAe,EAAW,MAAM,CAAC,QAAQ,WACvD,EAAW,MAAM,CAAC,QAAQ,MAG/B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yBAAgB,SAChC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,EAAe,EAAW,MAAM,CAAC,MAAM,WACrD,EAAW,MAAM,CAAC,MAAM,MAG7B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,yDACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yBAAgB,SAChC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,EAAe,EAAW,MAAM,CAAC,SAAS,WACxD,EAAW,MAAM,CAAC,SAAS,SAMjC,CAAC,EAAW,MAAM,CAAC,KAAK,CAAG,GAAK,EAAW,MAAM,CAAC,MAAM,EAAG,CAAC,EAC3D,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sEACZ,EAAW,MAAM,CAAC,KAAK,CAAG,GAAK,EAAW,MAAM,CAAC,MAAM,CAAG,GACzD,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,4BAAkB,cACpB,EAAW,MAAM,CAAC,KAAK,CAAC,UAAQ,EAAW,MAAM,CAAC,MAAM,CAAC,YAGxE,EAAW,MAAM,CAAC,KAAK,CAAG,GAAkC,IAA7B,EAAW,MAAM,CAAC,MAAM,EACtD,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,2BAAiB,UACvB,EAAW,MAAM,CAAC,KAAK,CAAC,UAGP,IAA5B,EAAW,MAAM,CAAC,KAAK,EAAU,EAAW,MAAM,CAAC,MAAM,CAAG,GAC3D,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,yBAAe,UACrB,EAAW,MAAM,CAAC,MAAM,CAAC,mBAlK7C,AAAI,EAEA,CAAA,EAAA,EAAA,EAFS,CAET,EAAC,MAAA,CAAI,UAAW,CAAC,wDAAwD,EAAE,EAAA,CAAW,UACpF,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCAAwB,aAM5C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAW,CAAC,yCAAyC,EAAE,EAAA,CAAW,WACrE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,kDACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,+CAAsC,eAEtD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,iCAAwB,aA6J/C,uFC5UA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAOA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAQA,EAAA,EAAA,CAAA,CAAA,OAQA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,CAAA,CAAA,OAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAmEK,EAAA,SAAA,CAAA,mIAAA,GAAA,GAAA,CAAA,GAgCL,SAAS,IACP,IAAM,EAAe,CAAA,EAAA,EAAA,eAAA,AAAc,IAC7B,EAAS,CAAA,EAAA,EAAA,SAAA,AAAQ,CADF,GAEf,EAAc,EAAa,GAAG,CAAC,WAE/B,CAAC,EAAe,CAHP,CAGwB,CAAG,GAAA,EAAA,QAAO,AAAP,EAAmC,MACvE,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADK,EACH,GACjC,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAiB,CADpB,KAExB,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADnB,CACkC,CAAC,GACvD,CAAC,EAAoB,EAAsB,CAAG,CAAA,EAAA,EAAA,QAAO,AAAP,EAA6B,CAC/E,AAFoC,kBAElB,EAClB,KAFkD,KAExC,CACZ,GACM,CAAC,EAAgB,EAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,GAAE,GAC/C,CAAC,EAAU,EAAY,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAmB,CADd,KAEtC,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADb,EACe,GACzC,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAE,CADT,EAEhC,CAAC,EAAa,CAAG,GAAA,EAAA,QAAA,AAAO,EAAE,IADM,AAEhC,CAAC,EAAY,EAAc,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAU,CAD9B,GAEjB,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAMnC,CAP0B,KAQ9B,CAAC,EAAgB,EAAkB,CAAG,CAAA,EAAA,EAAA,QAAO,AAAP,CAPN,CAOe,IAC/C,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,GAAE,AADH,GAEtC,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAE,CADT,GAEhC,CAAC,EAAe,EAAiB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,GAAE,AADb,GAGhC,CAAC,EAAgB,EAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAO,CAFhB,KAKpC,CAAC,EAAmB,GAAqB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,AAHb,EAG8B,EAAE,EACtE,CAAC,GAAiB,GAAmB,CAAG,CAAA,EAAA,EAAA,QAAO,AAAP,CADI,CACK,IACjD,CAAC,GAAiB,GAAmB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADP,CACkC,CAAC,GAG3E,CAAC,GAAc,GAAgB,CAAG,CAAA,EAAA,EAAA,QAAO,AAAP,CAHM,EAGG,GAC3C,CAAC,GAAgB,GAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADX,EACa,GAC/C,CAAC,GAAgB,CADsC,EACpB,CAAG,CAAA,EAAA,EAAA,CAD0B,OAC1B,AAAO,CADP,CAC6B,CACvE,QAAS,GACT,OAAQ,MACR,CAH0C,QAGhC,OACV,UAAU,CACZ,GACM,CAAC,GAAqB,GAAuB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAAuB,MAC9E,CAAC,GAAY,GAAc,CAAG,CAAA,EAAA,EAAA,OADkB,CAClB,AAAO,GAAE,GAGvC,CAAC,GAAqB,GAAuB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CAHzB,CAQjC,CACD,MAAM,EACN,QAAS,GACT,MARoD,CAQ5C,GACR,SAAU,EACZ,GAGM,CAAC,GAAiB,GAAmB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAIlD,CACD,MAAM,EACN,QAAS,GACT,MAP4C,EAOnC,EACX,GAGM,CAAC,GAAc,GAAgB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,EAI5C,CACD,MAAM,EACN,KAAM,UACN,EAPsC,MAO7B,EACX,GAGQ,CAAC,GAAuB,GAAyB,CAAG,GAAA,EAAA,QAAA,AAAO,EAAE,IAC7D,CAAC,GAA2B,GAA6B,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADf,CAC2B,EAAE,EACjF,CAAC,GAAmB,GAAqB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADS,EACP,GAGvD,CAAC,GAAe,GAAiB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CAHG,CAGO,IAGrD,GAAqB,CAAA,EAAA,EAAA,MAAA,AAAK,EAAiB,MAG3C,AANoC,CAMnC,GAAiB,GAAmB,CAAG,GAAA,EAAA,QAAA,AAAO,CAH1B,CASvB,CAAC,GAGC,CAAC,GAAgB,GAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CATL,EASO,GAC/C,CAAC,GAAgB,GAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADP,CACiB,IACvD,CAAC,GAAa,GAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAO,CADD,CACa,EAAE,EAGrD,GAAa,GAAA,EAAA,WAAA,AAAU,EAAE,CAHO,SAIhC,GACF,MAAM,GAAe,CAFN,CAInB,EAAG,AAHmB,CAGlB,EAAe,EAGb,GAAgB,CAAA,EAAA,EAAA,WAAA,AAAU,EAAE,MAAO,IAElC,GAGD,CAAC,EAAM,OALS,AAKF,EAAI,CAHD,CAGO,OAAO,AAAP,GAA0B,KAAK,CAAnB,EAAM,GAAG,GAC/C,EAAM,cAAc,GACpB,CADwB,KAClB,KAEV,EAAG,CAAC,EAHuC,AAGvB,GAAW,CAFP,CAKxB,CAAA,EAAA,EAAA,EALgC,OAKhC,AAAQ,EAAE,KACR,GAAI,EAEF,OADA,OADkB,CADtB,CAEa,gBAAgB,CAAC,UAAW,IAC9B,KACL,SAAS,mBAAmB,CAAC,UAAW,GAC1C,CAEJ,EAAG,CAAC,EAAgB,EAAgB,GAAc,EAIlD,IAAM,GAAiB,MAAO,IAC5B,GAAI,CAEF,MAAM,IAAI,QAAQ,GAAW,WAAW,EAAS,MAGjD,IAAM,EAAQ,EAAO,QAAQ,GAC7B,GAAI,EAAO,CAET,MAAM,EAAO,SAAS,CAAC,iCAAiC,MAGxD,IAAM,EAAU,EAAM,QAAQ,GAC9B,GAAI,GAAW,CAAC,EAAQ,QAAQ,CAAC,OAAS,EAAQ,MAAM,CAAG,GAAI,CAE7D,IAAM,EAAY,EACf,OAAO,CAAC,SAAU,SAClB,OAAO,CAAC,SAAU,OAClB,OAAO,CAAC,QAAS,SACjB,OAAO,CAAC,QAAS,SACjB,OAAO,CAAC,WAAY,MACpB,IAAI,GAEH,IAAc,IAChB,EAAM,GADmB,KACX,CAAC,GAEf,WAAW,KACT,EAAO,SAAS,CAAC,iCAAiC,KACpD,EAAG,KAEP,CACF,CACF,CAAE,MAAO,EAAO,CACd,QAAQ,GAAG,CAAC,WAAY,EAC1B,CACF,EAEM,GAA6B,KACjC,EAAO,IAAI,CAAC,kBACd,EAGM,GAAyB,UAC7B,IAAmB,GACnB,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,wBACvB,EAAO,MAAM,EAAS,IAAI,GAEhC,GAAI,EAAK,OAAO,EAAI,EAAK,QAAQ,CAAE,CACjC,IAAM,EAA0B,EAAK,QAAQ,CAAC,GAAG,CAAC,AAAC,IAAgE,CACjH,KAAM,AAD0G,EAClG,IAAI,CAClB,OAAQ,EAAQ,MAAM,CACtB,QAAS,EAAQ,OAAO,CAC1B,CAAC,EACD,GAAqB,EACvB,MACE,CADK,OACG,KAAK,CAAC,YAAa,EAAK,KAAK,EACrC,GAAqB,EAAE,CAE3B,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,YAAa,GAC3B,GAAqB,EAAE,CACzB,QAAU,CACR,IAAmB,EACrB,CACF,EAEM,GAAuB,CAAA,EAAA,EAAA,WAAA,AAAU,EAAE,UACvC,GAAI,CACF,IAAM,EAAW,GAFQ,GAEF,MAAM,uBACvB,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,EAAI,MAAM,OAAO,CAAC,EAAO,IAAI,EAAG,CAChD,IAAM,EAA6C,CAAC,EACpD,EAAO,IAAI,CAAC,OAAO,CAAC,AAAC,IAEf,CADsB,EAAK,OAAO,CACvB,CAD2B,EAAK,SAAA,AAAS,IAEtD,CAAiB,CAAC,EAAK,WAAW,CAAC,EAAG,CAAA,CAE1C,GACA,GAAmB,EACrB,MACE,CADK,EACc,CAAC,EAExB,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,aAAc,GAC5B,GAAmB,CAAC,EACtB,CACF,EAAG,EAAE,EAqBC,GAAoB,MAAO,EAAqB,QAAQ,IAC5D,GAAK,CAAD,EAEJ,GAAkB,GAElB,GAAI,CAJc,AAKhB,IAAM,EAAW,MAAM,MAAM,oBAAqB,CAChD,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,aAAE,SAAa,CAAO,EAC7C,GAEM,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,EAAI,EAAO,SAAS,CAAE,CAGtC,IAAM,EAAO,SAAS,aAAa,CAAC,KACpC,EAAK,IAAI,CAAG,EAAO,SAAS,CAC5B,EAAK,KAAK,CAAC,OAAO,CAAG,OACrB,SAAS,IAAI,CAAC,WAAW,CAAC,GAC1B,EAAK,KAAK,GACV,SAAS,IAAI,CAAC,WAAW,CAAC,EAC5B,MACE,CADK,OACG,KAAK,CAAC,UAAW,EAAO,KAAK,EACrC,GAAiB,QAAS,CAAC,QAAQ,EAAE,EAAO,KAAK,CAAA,CAAE,CAEvD,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,eAC5B,QAAU,CACR,GAAkB,EACpB,EACF,EAGM,GAAwB,MAAO,EAAqB,QAAQ,IAChE,GAAyC,IAArC,GAA0B,MAAM,CAAQ,YAC1C,GAAiB,QAAS,aAI5B,IAAqB,GAErB,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,wBAAyB,CACpD,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CAAE,SAAU,UAA2B,CAAO,EACrE,GAEM,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,EAAE,AAClB,GAAiB,UAAW,EAAO,OAAO,EAAI,UAC9C,IAAyB,GACzB,GAA6B,EAAE,GAE/B,GAAiB,QAAS,CAAC,SAAS,EAAE,EAAO,KAAK,CAAA,CAAE,CAExD,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,WAAY,GAC1B,GAAiB,QAAS,gBAC5B,QAAU,CACR,IAAqB,EACvB,CACF,EAGM,GAAyB,AAAC,IAC9B,GAA6B,GAC3B,EAAK,QAAQ,CAAC,GACV,EAAK,MAAM,CAAC,GAAK,IAAM,GACvB,IAAI,EAAM,EAAY,CAE9B,EAGA,CAAA,EAAA,EAAA,SAAQ,AAAR,EAAU,KACR,GAAI,CAAC,EAAa,CAChB,EAAS,UACT,CAHJ,EAGe,GACX,MACF,CAE2B,AAwD3B,WAvDE,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,CAAC,4BAA4B,EAAE,mBAAmB,GAAA,CAAc,EACvF,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,CAAE,CAClB,EAAiB,EAAO,IAAI,EAG5B,IAAM,EAA4B,CAAC,EACnC,OAAO,IAAI,CAAC,EAAO,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,IACpC,IAAM,EAAY,EAAO,IAAI,CAAC,IAAI,CAAC,EAAQ,CAGvC,EAAkB,GAGpB,EAFE,EAAU,QAAQ,CAAC,EAAU,YAAY,CAAC,CAE1B,CAF4B,CAElB,QAAQ,CAAC,EAAU,YAAY,CAAC,CAG1C,EAAU,YAAY,CAI1C,IAAI,EAAwB,GAG1B,EAFE,EAAU,QAAQ,CAAC,EAAU,YAAY,CAAC,CAEpB,CAFsB,CAEZ,YAAY,CAGtB,SAG1B,CAAY,CAAC,EAAQ,CAAG,CACtB,cAAe,GAAmB,GAClC,eAAgB,CAClB,CACF,GACA,EAAe,GAGf,EAAsB,CACpB,iBAAkB,EAAO,IAAI,CAAC,gBAAgB,EAAI,GAClD,SAAU,EAAO,IAAI,CAAC,QAAQ,GAAI,CACpC,EACF,MACE,CADK,CACI,EAAO,KAAK,CAEzB,CAAE,MAAO,EAAK,CACZ,EAAS,YACT,QAAQ,KAAK,CAAC,YAAa,EAC7B,QAAU,CACR,GAAW,EACb,EACF,GAGF,EAAG,CAAC,EAAY,EAGhB,IAAM,GAAgB,CAAA,EAAA,EAAA,WAAU,AAAV,EAAY,UAChC,GAAK,CAAD,EAEJ,GAAe,GACf,CAJoB,EAIhB,CAHc,AAIhB,IAAM,EAAW,MAAM,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,GAAA,CAAc,EAClF,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,CAChB,CADkB,CACN,EAAO,IAAI,EAEvB,QAAQ,KAAK,CAAC,cAAe,EAAO,KAAK,CAE7C,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,cAAe,EAC/B,QAAU,CACR,GAAe,EACjB,EACF,EAAG,CAAC,EAAY,EAGhB,CAAA,EAAA,EAAA,SAAA,AAAQ,EAAE,KACR,GAAI,GAAiB,EAAa,CAEhC,IAAM,EAAkD,KAH5D,EAG6B,GAAmB,OAAO,EAAa,GAAmB,OAAO,GAAK,EAG3F,IACF,GAAiB,IACjB,EAAe,GACf,EAHoB,AAGR,OAId,GAAmB,OAAO,CAAG,EAE7B,IAAM,EAAW,OAAO,IAAI,CAAC,EAAc,IAAI,EAGzC,EADY,AACH,IADO,gBAAgB,OAAO,QAAQ,CAAC,MAAM,EACnC,GAAG,CAAC,OAEzB,EAAW,EAqBX,EAhBF,EAFE,IAA8B,SAAf,CAAD,EAA0B,EAAS,QAAQ,CAAC,EAAA,CAAW,CAE5D,EAF+D,AAGjE,IAEM,IAFE,KAEb,GAAqB,EAAS,QAAQ,CAAC,EAAA,EAC9B,CADuC,CAIvC,EAAS,MAAM,CAAG,EAAI,CAAQ,CAAC,EAAE,CAAG,UASlC,GACf,EAAc,GAEG,IAHU,IAGF,CAArB,GACF,MAEO,GAAmC,QAAQ,CAAvB,GAE7B,IAEJ,CACF,EAAG,CAAC,EAAe,EAAa,EAAY,GAAc,EAG1D,CAH6D,EAG7D,EAAA,MAHuE,GAGvE,AAAQ,EAAE,KACR,IACF,EAAG,EAAE,EAEL,CAAA,EAAA,EAAA,KAJA,IAIA,AAAQ,EAAE,KACR,IACF,EAAG,CAAC,GAAqB,EAGzB,IAAM,GAA0B,CALhC,EAKgC,EAAA,WAAA,AAAU,EAAE,UAC1C,GAAI,CAAC,GAAe,CAAC,EAAe,GADN,IAG9B,IAAM,EAAmC,CAAC,EAE1C,IAAK,IAAM,KAAW,OAAO,IAAI,CAAC,EAAc,IAAI,EAElD,AAFqD,CAE7C,CAAC,AADG,CAAA,EAAG,EAAA,CAAS,CACX,CAAG,CAAE,SAAS,EAAM,SAAS,CAAM,EAGlD,GAAmB,GAGnB,IAAM,EAAW,OAAO,IAAI,CAAC,EAAc,IAAI,EAAE,GAAG,CAAC,MAAO,IAC1D,GAAI,CACF,IAAM,EAAW,MAAM,MACrB,CAAC,gCAAgC,EAAE,mBAAmB,GAAa,SAAS,EAAE,mBAAmB,GAAA,CAAU,EAEvG,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,EAAI,EAAO,IAAI,CAC/B,CADiC,KAC1B,SAAE,EAAS,OAAQ,EAAO,IAAI,AAAC,CAE1C,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,EAAQ,MAAM,CAAC,CAAE,EACzC,CACA,MAAO,CAAE,UAAS,OAAQ,CAAE,SAAS,CAAM,CAAE,CAC/C,GAEM,EAAU,MAAM,QAAQ,GAAG,CAAC,GAE5B,EAAsC,CAAC,EAC7C,EAAQ,OAAO,CAAC,CAAC,SAAE,CAAO,QAAE,CAAM,CAAE,IAClC,CAAW,CAAC,EAAQ,CAAG,CACrB,QAAS,EAAO,OAAO,GAAI,EAC3B,IAAK,EAAO,GAAG,CACf,UAAW,EAAO,SAAS,CAC3B,KAAM,EAAO,IAAI,CACjB,QAAS,EACX,CACF,GAEA,GAAmB,EACrB,EAAG,CAAC,EAAa,EAAc,EAGzB,GAAqB,MAAO,IAChC,GAAI,CAAC,GAAe,CAAC,EAAe,OAEpC,IAAM,EAAY,EAAc,IAAI,CAAC,EAAQ,CAC7C,GAAI,CAAC,EAAU,YAAY,CAAE,YAC3B,GAAiB,QAAS,cAI5B,GAAmB,IAAS,CAC1B,EADyB,CACtB,CAAI,CACP,CAAC,EAAQ,CAAE,CAAE,GAAG,CAAI,CAAC,EAAQ,CAAE,SAAS,CAAK,CAC/C,CAAC,GAED,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,qBAAsB,CACjD,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,aACnB,UACA,EACA,aAAc,EAAU,YAC1B,AADsC,EAExC,GAEM,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,CAChB,CADkB,EACC,GAAS,EAC1B,EADyB,CACtB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,SAAS,EACT,IAAK,EAAO,IAAI,CAAC,GAAG,CACpB,UAAW,EAAO,IAAI,CAAC,SAAS,CAChC,KAAM,EAAO,IAAI,CAAC,IAAI,CACtB,SAAS,CACX,CACF,CAAC,GACD,GAAmB,IAAS,CAC1B,EADyB,CACtB,CAAI,CACP,CAAC,EAAY,EAAE,EACjB,CAAC,OAED,MAAM,AAAI,MAAM,EAAO,KAAK,EAAI,OAEpC,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,CAAC,MAAM,EAAE,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAA,CAAQ,EACpF,GAAmB,IAAS,CAC1B,EADyB,CACtB,CAAI,CACP,CAAC,EAAQ,CAAE,CAAE,GAAG,CAAI,CAAC,EAAQ,CAAE,SAAS,CAAM,EAChD,CAAC,CACH,CACF,EAGM,GAAoB,MAAO,IAC/B,GAAK,CAAD,EAEJ,GAAmB,IAAS,CAC1B,EAHgB,AAES,CACtB,CAAI,CACP,CAAC,EAAQ,CAAE,CAAE,GAAG,CAAI,CAAC,EAAQ,CAAE,SAAS,CAAK,EAC/C,CAAC,EAED,GAAI,CACF,IAAM,EAAW,MAAM,MACrB,CAAC,+BAA+B,EAAE,mBAAmB,GAAa,SAAS,EAAE,mBAAmB,GAAA,CAAU,CAC1G,CAAE,OAAQ,QAAS,GAGf,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,CAChB,CADkB,EACC,IAAS,CAC1B,EADyB,CACtB,CAAI,CACP,CAAC,EAAQ,CAAE,CAAE,SAAS,EAAO,SAAS,CAAM,EAC9C,CAAC,EACD,UAEA,MAAM,AAAI,MAAM,EAAO,KAAK,EAAI,OAEpC,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,CAAC,MAAM,EAAE,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAA,CAAQ,EACpF,GAAmB,IAAS,CAC1B,EADyB,CACtB,CAAI,CACP,CAAC,EAAQ,CAAE,CAAE,GAAG,CAAI,CAAC,EAAQ,CAAE,SAAS,CAAM,EAChD,CAAC,CACH,EACF,EAGM,CAAC,GAAgB,GAAkB,CAAG,CAAA,EAAA,EAAA,QAAO,AAAP,EAA6B,MAGnE,GAAiB,AAAC,IACtB,GAAI,CAAC,EAAa,MAGd,CAPsC,IAQxC,GAAe,KAAK,GADF,AAKpB,GAAe,EAAE,EAGjB,IAAM,EAAS,IAAI,YACjB,CAAC,qCAAqC,EAAE,mBAAmB,GAAa,SAAS,EAAE,mBAAmB,GAAA,CAAU,EAGlH,EAAO,SAAS,CAAG,AAAC,IAClB,GAAI,CACF,IAAM,EAAO,KAAK,KAAK,CAAC,EAAM,IAAI,EAEhB,OAAO,CAArB,EAAK,IAAI,CACX,GAAe,IACb,IAAM,EAAU,IAAI,EAAM,EAAK,OAAO,CAAC,QAEvC,AAAI,EAAQ,MAAM,CAAG,IACZ,EADkB,AACV,KAAK,CAAC,CAAC,KAEjB,CACT,GACuB,QAAQ,CAAtB,EAAK,IAAI,CAClB,GAAe,CAAC,EAAK,OAAO,CAAC,EACN,OAAO,CAArB,EAAK,IAAI,EAClB,GAAe,GAAQ,IAAI,EAAM,CAAC,KAAK,EAAE,EAAK,OAAO,CAAA,CAAE,CAAC,CAE5D,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,YAAa,EAC7B,CACF,EAEA,EAAO,OAAO,CAAG,AAAC,IAChB,QAAQ,KAAK,CAAC,SAAU,GACxB,EAAO,KAAK,GACZ,GAAkB,KACpB,EAEA,GAAkB,EACpB,EAGM,GAAgB,KAChB,KACF,GAAe,KAAK,GADF,AAElB,GAAkB,MAEtB,EAGM,GAAiB,AAAC,IACtB,GAAkB,GAClB,IAAkB,GAClB,GAAe,EACjB,EAGM,GAAwB,KAC5B,IAAkB,GAClB,GAAe,EAAE,EACjB,GAAkB,IAClB,IACF,EAWA,GAAA,EAAA,SAAA,AAAQ,EAAE,KACR,GAAI,GAAiB,EAAa,CAChC,KAGA,IAAM,EAAW,AALrB,YAKiC,KAC3B,IACF,EAAG,KAEH,EAFU,IAEH,IAAM,EAFO,YAEO,EAC7B,CACF,EAAG,CAAC,EAAe,EAAa,GAAwB,EAGxD,IAAM,GAAoB,CAAC,EAAiB,KAC1C,GAAI,CAAC,EAAe,OAEpB,IAAM,EAAY,EAAc,IAAI,CAAC,EAAQ,CACzC,EAAW,GAKX,EAHa,UAAU,CAAvB,EAEE,CAAW,CAAC,EAAQ,EAAE,iBAAmB,SAChC,CAAW,AAD+B,CAC9B,EAAQ,EAAE,eAAiB,GAEvC,EAAU,QAAQ,CAAC,MAAM,EAAI,GAI/B,EAAU,QAAQ,CAAC,EAAS,EAAI,GAG7C,EAAe,IAAS,CACtB,EADqB,CAClB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,GAAG,CAAI,CAAC,EAAQ,CAChB,cAAe,EACf,eAAgB,EAChB,YAAa,EACf,CACF,CAAC,EACH,EAGM,GAA0B,CAAC,EAAiB,KAChD,EAAe,IAAS,CACtB,EADqB,CAClB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,GAAG,CAAI,CAAC,EAAQ,CAChB,cAAe,EACf,YAAa,EACf,EACF,CAAC,CACH,EAGM,GAA+B,MAAO,IAC1C,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,iBAAkB,EAClB,QAAQ,EACR,YAAa,GACf,CAAC,EAED,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,sBAAuB,CAClD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,aACnB,EACA,cAAe,CACb,iBAAkB,EAClB,SAAU,EAAmB,QAAQ,AACvC,CACF,EACF,GAEM,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,CAEhB,CAFkB,CAED,GACf,AAAK,EACE,CACL,CAFE,EAAO,AAEN,CAAI,CACP,iBAAkB,CACpB,EAJkB,GAOpB,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,QAAQ,EACR,YAAa,aACf,CAAC,GAGD,WAAW,KACT,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,YAAa,GACf,CAAC,CACH,EAAG,UAEH,MAAM,AAAI,MAAM,EAAO,KAAK,EAAI,OAEpC,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,gBAAiB,GAC/B,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,iBAAkB,CAAC,EACnB,QAAQ,EACR,YAAa,CAAC,MAAM,EAAE,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAA,CAAQ,CACzE,CAAC,EAGD,WAAW,KACT,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,YAAa,GACf,CAAC,CACH,EAAG,IACL,CACF,EAGM,GAAuB,MAAO,IAClC,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,SAAU,EACV,QAAQ,EACR,YAAa,EACf,CAAC,GAED,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,sBAAuB,CAClD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,aACnB,EACA,cAAe,CACb,iBAAkB,EAAmB,gBAAgB,CACrD,SAAU,CACZ,CACF,EACF,GAEM,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,CAEhB,CAFkB,CAED,GACf,AAAK,EACE,CACL,CAFE,EAEC,AAFM,CAEF,CACP,SAAU,CACZ,EAJkB,GAOpB,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,QAAQ,EACR,YAAa,cACf,CAAC,EAGD,WAAW,KACT,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,YAAa,GACf,CAAC,CACH,EAAG,UAEH,MAAM,AAAI,MAAM,EAAO,KAAK,EAAI,OAEpC,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,gBAAiB,GAC/B,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,SAAU,CAAC,EACX,QAAQ,EACR,YAAa,CAAC,MAAM,EAAE,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAA,CAAQ,CACzE,CAAC,EAGD,WAAW,KACT,EAAsB,IAAS,CAC7B,EAD4B,CACzB,CAAI,CACP,YAAa,GACf,CAAC,CACH,EAAG,IACL,CACF,EAGM,GAAmB,MAAO,IAC9B,GAAI,CAAC,GAAiB,CAAC,EAAa,OAEpC,IAAM,EAAmB,CAAW,CAAC,EAAQ,EAAE,eAAe,OAC9D,GAAI,CAAC,EAAkB,YACrB,EAAe,IAAS,CACtB,EADqB,CAClB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,GAAG,CAAI,CAAC,EAAQ,CAChB,YAAa,aACf,EACF,CAAC,EAKH,IAAM,EAAiB,CAAW,CAAC,EAAQ,EAAE,eACvC,EAAmC,WAAnB,EAGtB,EAAe,IAAS,CACtB,EADqB,CAClB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,GAAG,CAAI,CAAC,EAAQ,CAChB,QAAQ,EACR,YAAa,EACf,EACF,CAAC,EAED,GAAI,CACF,IAAM,EAKF,CACF,sBACA,EACA,SAAU,EAAgB,SAAY,GAAkB,EAC1D,EAEI,IACF,EAAY,SADK,KACS,CAAG,CAAA,EAG/B,IAAM,EAAW,MAAM,MAAM,sBAAuB,CAClD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,EACvB,GAEM,EAAS,MAAM,EAAS,IAAI,EAE9B,GAAO,OAAO,EAAE,AAElB,EAAiB,IACf,GAAI,CAAC,EAAM,OAAO,EAClB,IAAM,EAAc,CAAE,GAAG,EAAK,IAAI,AAAC,EAcnC,OAbA,CAAW,CAAC,EAAQ,CAAG,CACrB,GAAG,CAAW,CAAC,EAAQ,CACvB,aAAc,EAAO,IAAI,CAAC,YAAY,AACxC,EAGiC,UAAU,CAAvC,EAAO,IAAI,CAAC,YAAY,GAC1B,CAAW,CAAC,EAAQ,CAAC,QAAQ,CAAG,CAC9B,GAAG,CAAW,CAAC,EAAQ,CAAC,QAAQ,CAChC,OAAQ,EACV,EAGK,CACL,GAAG,CAAI,CACP,KAAM,CACR,CACF,GAEA,EAAe,IAAS,CACtB,EADqB,CAClB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,GAAG,CAAI,CAAC,EAAQ,CAChB,OAAQ,GACR,YAAa,MACf,EACF,CAAC,GAED,EAAe,IAAS,CACtB,EADqB,CAClB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,GAAG,CAAI,CAAC,EAAQ,CAChB,QAAQ,EACR,YAAa,CAAC,MAAM,EAAE,EAAO,KAAK,CAAA,CAAE,AACtC,EACF,CAAC,CAEL,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,EAAe,IAAS,CACtB,EADqB,CAClB,CAAI,CACP,CAAC,EAAQ,CAAE,CACT,GAAG,CAAI,CAAC,EAAQ,CAChB,QAAQ,EACR,YAAa,YACf,EACF,CAAC,CACH,CACF,EAEM,GAAY,UAGhB,GADgB,CACZ,CAAC,KADkB,IACT,GADgB,CAAC,mBAG/B,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,oBAAqB,CAChD,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CACnB,YAAa,CACf,EACF,EAEI,CADW,OAAM,EAAS,IAAI,EAAA,EACvB,OAAO,EAAE,AAClB,MAAM,IAEV,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,cAAe,EAC/B,CACF,EAEM,GAAY,UAGhB,GADgB,CACZ,CAAC,KADkB,IACT,GADgB,CAAC,mBAG/B,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,qBAAsB,CACjD,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CACnB,YAAa,CACf,EACF,EAEI,EADW,MAAM,EAAS,IAAI,EAAA,EACvB,OAAO,EAAE,AAClB,MAAM,IAEV,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,cAAe,EAC/B,CACF,EAGM,GAAmB,MAAO,EAAiB,EAAgB,KAC/D,GAAK,CAAD,CAEJ,GAAI,CACF,IAAM,EAAW,CAHD,KAGO,MAAM,oBAAqB,CAChD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,aACnB,UACA,SACA,EACA,YAAa,CACf,EACF,GAEM,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,CAEhB,CAFkB,CAEN,GACV,AAAK,EAEE,CACL,CAHE,EAAO,AAGN,CAAI,CACP,UAAW,EAAK,SAAS,CAAC,GAAG,CAAC,GAC5B,AAAI,EAAI,OAAO,GAAK,EACX,CACL,GAAG,CAAG,CACN,CAHyB,OAGhB,EAAI,OAAO,CAAC,GAAG,CAAC,GACvB,AAAI,EAAW,MAAM,GAAK,EACjB,CACL,GAAG,CAAU,CAFiB,AAG9B,QAAS,CACP,GAAG,EAAW,OAAO,CACrB,YAAa,CACf,CACF,EAEK,EAEX,EAEK,EAEX,EAxBkB,IA2BpB,QAAQ,KAAK,CAAC,UAAW,EAAO,KAAK,EACrC,GAAiB,QAAS,CAAC,QAAQ,EAAE,EAAO,KAAK,CAAA,CAAE,EAEvD,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,eAC5B,CACF,EAGM,GAAiB,MAAO,EAAiB,EAAgB,KAC7D,GAAK,CAAD,EAEJ,GAAe,GACf,GAAiB,CAHC,EAIlB,GAAI,CACF,IAAM,EAAW,MAAM,MACrB,CAAC,+BAA+B,EAAE,mBAAmB,GAAa,SAAS,EAAE,mBAAmB,GAAS,QAAQ,EAAE,mBAAmB,GAAQ,UAAU,EAAE,mBAAmB,GAAA,CAAW,EAEpL,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,EAAE,AAClB,EAAe,aACb,UACA,SACA,WACA,EACA,QAAS,EAAO,IAAI,CAAC,OAAO,AAC9B,GACA,GAAkB,KAElB,QAAQ,KAAK,CAAC,YAAa,EAAO,KAAK,EACvC,GAAiB,QAAS,CAAC,UAAU,EAAE,EAAO,KAAK,CAAA,CAAE,EAEzD,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,YAAa,GAC3B,GAAiB,QAAS,iBAC5B,QAAU,CACR,GAAe,EACjB,EACF,EAGM,GAAiB,UACrB,GAAK,CAAD,EAEJ,GAAe,GACf,GAAI,CACF,AAJgB,IAIV,EAAW,MAAM,MAAM,yBAA0B,CACrD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,EACvB,GAEM,EAAS,MAAM,EAAS,IAAI,GAE9B,EAAO,OAAO,EAAE,AAClB,GAAkB,GAClB,EAAe,QAGf,QAAQ,KAAK,CAAC,UAAW,EAAO,KAAK,EACrC,GAAiB,QAAS,CAAC,QAAQ,EAAE,EAAO,KAAK,CAAA,CAAE,EAEvD,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,eAC5B,QAAU,CACR,GAAe,EACjB,EACF,EAGM,GAAmB,KACvB,GAAkB,GAClB,EAAe,MACf,GAAiB,EACnB,EAIM,GAAyB,CAAC,EAAiC,KAEjD,aAAV,GAAwB,IAE5B,GAAkB,IAAS,CACzB,EAHwC,AAEhB,CACrB,CAAI,CACP,CAAC,EAAM,CAAE,EACX,CAAC,CACH,EAGM,GAAuB,CAAC,EAAgB,KAC5C,IAAM,EAAc,EAAO,WAAW,GAChC,EAAU,EAAQ,OAAO,CAAC,MAAO,KAAK,OAAO,CAAC,KAAM,IAE1D,OAAQ,GACN,IAAK,MACH,MAAO,CAAC;;;;gBAIA,EAAE,EAAQ;;;;;;;;;;;;GAYvB,CAAC,AACE,KAAK,OACH,MAAO,CAAC;;;;gBAIA,EAAE,EAAQ;;;;;;GAMvB,CAAC,AACE,KAAK,MACH,MAAO,CAAC;;;;gBAIA,EAAE,EAAQ;;;;;;GAMvB,CACG,AADF,KACO,SACH,MAAO,CAAC;;;;gBAIA,EAAE,EAAQ;;;;;GAKvB,CAAC,AACE,SACE,MAAO,CAAC;;;;;;;;;GASb,CAAC,AACA,CACF,EAGM,GAAkB,CAAC,EAAiB,EAAgB,KACxD,GAAI,CAAC,EAAU,OAAO,EAEtB,IAAM,EAAU,EAAQ,OAAO,CAAC,MAAO,KAAK,OAAO,CAAC,KAAM,IAGpD,EAAc,EAAS,SAAS,CAAC,IAAI,CAAC,GAAO,EAAI,OAAO,GAAK,GACnE,GAAI,CAAC,EAAa,OAAO,EAEzB,IAAM,EAAiB,EAAY,OAAO,CAAC,IAAI,CAAC,GAAK,EAAE,MAAM,CAAC,WAAW,KAAO,EAAO,WAAW,UAClG,CAAI,CAAC,GAGE,CAAC,CADa,AACZ,EAD2B,KAAK,CAAC,GAFrB,CAEyB,CAAC,GAAQ,EAF3B,AAEgC,QAAQ,GAAK,EAE3E,EAGM,GAAmB,UACvB,GAAI,CAAC,GAAe,OAAO,CAAC,IAAI,GAAI,YAClC,GAAiB,QAAS,WAK5B,GAAI,GAAgB,GAAe,OAAO,CAAE,GAAe,MAAM,CAAE,GAAe,QAAQ,EAAG,YAC3F,GAAiB,QAAS,CAAC,GAAG,EAAE,GAAe,OAAO,CAAC,EAAE,EAAE,GAAe,MAAM,CAAC,WAAW,GAAG,OAAO,EAAE,GAAe,QAAQ,CAAC,YAAY,CAAC,EAI/I,IAAc,GACd,GAAI,CAEF,IAAM,EAAU,GAAe,OAAO,CAAC,OAAO,CAAC,MAAO,KAAK,OAAO,CAAC,KAAM,IAGnE,EAAgB,GAAa,SAAU,GAAqB,GAAe,MAAM,CAAE,GAAe,OAAO,EAEzG,EAAW,MAAM,MAAM,iBAAkB,CAC7C,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CACnB,YAAa,EACb,QAAS,EACT,OAAQ,GAAe,MAAM,CAAC,WAAW,GACzC,SAAU,GAAe,QAAQ,CACjC,QAAS,CACX,EACF,GAEM,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,CAEZ,CAFc,EAEC,QAAQ,EAAE,AAC3B,MAAM,GAAqB,EAAS,GAAe,MAAM,CAAC,WAAW,GAAI,GAAe,QAAQ,CAAE,IAIpG,GAAkB,CAChB,QAAS,GACT,OAAQ,MACR,SAAU,OACV,SAAU,EACZ,GAGA,GAAgB,IAGhB,MAAM,KAEN,GAAiB,UAAW,mBAE5B,MAAM,AAAI,MAAM,EAAO,KAAK,EAAI,OAEpC,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,cAAe,GAC7B,GAAiB,QAAS,CAAC,YAAY,EAAE,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAA,CAAQ,CAC5F,QAAU,CACR,IAAc,EAChB,CACF,EAiBM,GAAiB,CAAC,EAAiB,EAAgB,KACvD,QAAQ,GAAG,CAAC,UAAW,SAAE,SAAS,UAAQ,CAAQ,GAClD,CADsD,EAC/B,KADsC,IACpC,SAAS,UAAQ,CAAQ,GAElD,IAAM,EAAW,CACf,QAAS,EACT,OAAQ,EAAO,WAAW,GAC1B,SAAU,GACV,UAAU,CACZ,EACA,QAAQ,GAAG,CAAC,UAAW,GACvB,GAAkB,GAClB,EAFkC,EAEhB,GAClB,EAHyC,EAGnC,EAAmB,GAAqB,EAAS,MAAM,CAAE,EAAS,OAAO,EAC/E,EAAe,CACb,YAAa,GAAe,GAC5B,QAAS,EACT,OAAQ,EAAO,WAAW,GAC1B,SAAU,GACV,QAAS,GAAsB,EACjC,EACF,EAGM,GAAmB,CAAC,EAAiB,EAAgB,KACzD,GAAI,CAAC,EAAU,OAAO,EAEtB,IAAM,EAAc,EAAS,SAAS,CAAC,IAAI,CAAC,GAAO,EAAI,OAAO,GAAK,GACnE,GAAI,CAAC,EAAa,OAAO,EAEzB,IAAM,EAAiB,EAAY,OAAO,CAAC,IAAI,CAAC,GAAK,EAAE,MAAM,CAAC,WAAW,KAAO,EAAO,WAAW,UAClG,CAAI,CAAC,GAGE,CAAC,CAAC,AADY,EAAe,KAAK,CAAC,GAFrB,CAEyB,CAAC,GAAQ,EAAK,AAFhC,QAEwC,GAAK,EAE3E,EAGM,GAAuB,UAC3B,GAAI,CAAC,IAAuB,CAAC,GAAe,QAAQ,CAAC,IAAI,GAAI,YAC3D,GAAiB,QAAS,WAK5B,GAAI,GAAiB,GAAoB,OAAO,CAAE,GAAoB,MAAM,CAAE,GAAe,QAAQ,EAAG,YACtG,GAAiB,QAAS,CAAC,GAAG,EAAE,GAAoB,OAAO,CAAC,EAAE,EAAE,GAAoB,MAAM,CAAC,WAAW,GAAG,OAAO,EAAE,GAAe,QAAQ,CAAC,KAAK,CAAC,EAIlJ,IAAc,GACd,GAAI,CAEF,IAAM,EAAgB,GAAa,SAAU,GAAqB,GAAoB,MAAM,CAAE,GAAoB,OAAO,EACzH,QAAQ,GAAG,CAAC,iBAAkB,EAAe,GAE7C,IAAM,EAAW,MAAM,MAAM,iBAAkB,CAC7C,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CACnB,YAAa,EACb,QAAS,GAAoB,OAAO,CACpC,OAAQ,GAAoB,MAAM,CAAC,WAAW,GAC9C,SAAU,GAAe,QAAQ,CACjC,QAAS,CACX,EACF,GAEM,EAAS,MAAM,EAAS,IAAI,GAElC,GAAI,EAAO,OAAO,CAAE,CAelB,GAbI,GAAe,QAAQ,EAAE,AAC3B,MAAM,GAAqB,GAAoB,OAAO,CAAE,GAAoB,MAAM,CAAE,GAAe,QAAQ,EAAE,GAI/G,GAAkB,CAChB,QAAS,GACT,OAAQ,MACR,SAAU,OACV,UAAU,CACZ,GAGI,EACF,GAAI,CACF,IAAM,EAAiB,GAFR,GAEc,MAAM,oBAAqB,CACtD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CACnB,YAAa,EAAc,WAAW,CACtC,QAAS,GAAoB,OAAO,CACpC,OAAQ,GAAoB,MAAM,CAClC,YAAa,GAAe,QAAQ,AACtC,EACF,GAEM,EAAe,MAAM,EAAe,IAAI,EAC1C,CAAC,EAAa,OAAO,EACvB,AADyB,QACjB,IAAI,CAAC,YAAa,EAAa,KAAK,CAEhD,CAAE,MAAO,EAAO,CACd,QAAQ,IAAI,CAAC,YAAa,EAC5B,CAIF,GAAI,CACF,MAAM,GAAqB,GAAoB,OAAO,CAAE,GAAoB,MAAM,CAAE,GAAe,QAAQ,EAAE,EAC/G,CAAE,MAAO,EAAO,CACd,QAAQ,IAAI,CAAC,aAAc,EAC7B,CAGA,IAAkB,GAClB,GAAuB,MAGvB,MAAM,KAEN,GAAiB,UAAW,SAC9B,MACE,CADK,KACC,AAAI,MAAM,EAAO,KAAK,EAAI,OAEpC,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,CAAC,QAAQ,EAAE,aAAiB,MAAQ,EAAM,OAAO,CAAG,OAAA,CAAQ,CACxF,QAAU,CACR,IAAc,EAChB,CACF,EAEM,GAAuB,MAAO,EAAiB,EAAgB,EAAkB,KACrF,GAAK,CAAD,CAEJ,GAAI,CACF,IAAM,EAAW,GAHC,GAGK,MAAM,wBAAyB,CACpD,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,SAAS,CAAC,CACnB,YAAa,EAAc,WAAW,SACtC,EACA,kBACA,SACA,CACF,EACF,GAEM,EAAS,MAAM,EAAS,IAAI,GAC9B,EAAO,OAAO,CAEhB,CAFkB,KAEZ,KAEN,QAAQ,KAAK,CAAC,gBAAiB,EAAO,KAAK,CAE/C,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,gBAAiB,EACjC,CACF,EAGM,GAAmB,CAAC,EAA2B,KACnD,GAAgB,CAAE,MAAM,OAAM,UAAM,CAAQ,GAC5C,WAAW,KACT,GAAgB,CAAE,MAAM,EAAO,KAAM,UAAW,QAAS,EAAG,EAC9D,EAAG,IACL,EAGM,GAAuB,CAAC,EAAiB,EAAgB,KAC7D,GAAuB,CACrB,MAAM,UACN,SACA,WACA,CACF,EACF,EAGM,GAAwB,UAC5B,GAAI,CAAC,EAAe,OAEpB,GAAM,SAAE,CAAO,QAAE,CAAM,UAAE,CAAQ,CAAE,CAAG,GAEtC,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,EAAc,WAAW,EAAE,SAAS,EAAE,mBAAmB,GAAS,QAAQ,EAAE,mBAAmB,GAAQ,UAAU,EAAE,mBAAmB,GAAA,CAAW,CAAE,CAC3N,OAAQ,QACV,GAEM,EAAS,MAAM,EAAS,IAAI,GAClC,GAAI,EAAO,OAAO,CAAE,CAElB,IAAM,EAAiB,OAAO,OAAO,AAGrC,OAAM,KAGN,OAAO,QAAQ,CAAC,EAAG,GAEnB,GAAiB,UAAW,SAC9B,MACE,CADK,OACG,KAAK,CAAC,UAAW,EAAO,KAAK,EACrC,GAAiB,QAAS,CAAC,QAAQ,EAAE,EAAO,KAAK,CAAA,CAAE,CAEvD,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,eAC5B,QAAU,CAER,GAAuB,CACrB,MAAM,EACN,QAAS,GACT,OAAQ,GACR,SAAU,EACZ,EACF,CACF,EAGM,GAAkB,CAAC,EAAiB,KACxC,GAAmB,CACjB,KAAM,WACN,UACA,CACF,EACF,EAGM,GAAmB,UACvB,GAAI,CAAC,EAAe,OAEpB,GAAM,SAAE,CAAO,CAAE,CAAG,GAEpB,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,CAAC,6BAA6B,EAAE,mBAAmB,EAAc,WAAW,EAAE,SAAS,EAAE,mBAAmB,GAAA,CAAU,CAAE,CACnJ,OAAQ,QACV,GAEM,EAAS,MAAM,EAAS,IAAI,GAClC,GAAI,EAAO,OAAO,CAAE,CAElB,IAAM,EAAiB,OAAO,OAAO,AAGrC,OAAM,KAGN,OAAO,QAAQ,CAAC,EAAG,GAEnB,GAAiB,UAAW,SAC9B,MACE,CADK,OACG,KAAK,CAAC,UAAW,EAAO,KAAK,EACrC,GAAiB,QAAS,CAAC,QAAQ,EAAE,EAAO,KAAK,CAAA,CAAE,CAEvD,CAAE,MAAO,EAAO,CACd,QAAQ,KAAK,CAAC,UAAW,GACzB,GAAiB,QAAS,eAC5B,QAAU,CAER,GAAmB,CACjB,MAAM,EACN,QAAS,GACT,QAAS,EACX,EACF,CACF,EAGM,GAAqB,AAAC,IAC1B,GAAiB,GAEjB,EAAe,EACjB,EASA,GAAI,EACF,MACE,CAFS,AAET,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,+CACd,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,4BACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,UAAE,eAMX,GAAI,GAAS,CAAC,EACZ,MACE,CAAA,EAAA,EAAA,EAFyB,EAEzB,EAAC,OAAA,CAAK,UAAU,gDACd,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mDACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,8BAAqB,SACnC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACZ,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,CAChB,OAAQ,GACR,MAFD,EAEU,EACT,YAAY,SACZ,QAAQ,YAGZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,QAAS,EAFV,UAGA,kBAKL,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,yCACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,UAAG,GAAS,iBAMrB,IAAM,GAAW,OAAO,IAAI,CAAC,EAAc,IAAI,EAE/C,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,gDACd,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mDACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,+BACX,EAAc,WAAW,CAAC,aAG7B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,mBAAhB,0BAAoD,UACrD,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,MAAO,GAAe,GACtB,cAl9CgB,AAAC,CAk9CF,CAFhB,EA/8CT,GAAI,IAAwB,EAAa,OAGzC,CAHiD,EAGhC,IACjB,EAAe,GACf,EAAY,IALsD,EAQlE,IAAM,EAAa,EAAa,GAAG,CAAC,OAC9B,EAAS,CAAC,uBAAuB,EAAE,mBAAmB,GAAA,EAC1D,EAAa,CAAC,KAAK,EAAE,EAAA,CAAY,CAAG,GAAA,CACpC,CAEF,EAAO,IAAI,CAAC,EACd,EAo8CY,SAAU,aAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,KACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,YAAa,GAAkB,QAA3C,CAAsD,WAEzD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,UACX,EAAkB,GAAG,CAAC,AAAC,GACtB,CAAA,EAAA,AAFH,EAEG,GAAA,EAAC,EAAA,UAAU,CAAA,CAAoB,MAAO,EAAQ,IAAI,UAChD,CAAA,CADD,CACC,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CACC,UAAW,CAAC,qBAAqB,EAC/B,AAAc,eAAN,MAAM,CACV,eACc,WAAd,EAAQ,MAAM,CACd,aACA,gBACL,CAAC,EAAE,EAAe,CAAC,EAAQ,IAAI,CAAC,CAAG,gBAAkB,GAAA,CAAI,GAE5D,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,EAAQ,IAAI,OAXN,EAAQ,IAAI,WAmBrC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAU,CAAA,CAAC,YAAa,GAAe,GAAI,SAAS,AAApD,SAGL,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACH,QAAQ,UACR,QAAS,EAFZ,EAEkB,IAAyB,YACzC,UAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,CAChB,OAAQ,GACR,MAFD,EAEU,EACT,YAAY,SACZ,QAAQ,YAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,QAAS,EAFV,UAGA,kBAMJ,GAAS,MAAM,CAAG,EACjB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,IAAI,CAAA,CACH,MAAO,GAAc,EAAQ,CAAC,EAAE,CAChC,cAAe,AAAC,CAFjB,GAGG,EAAc,GACV,AAAU,QAAQ,IACpB,IAEJ,EACA,UAAU,mBAEZ,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,QAAQ,CAAA,CAAC,UAAU,cAAc,EAAjC,IAAwC,CAAE,oBAAqB,CAAC,OAAO,EAAE,GAAS,MAAM,CAAG,EAAE,MAAM,CAAC,AAAC,YACnG,GAAS,GAAG,CAAC,AAAC,GACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAe,MAAO,EAAS,UAAU,KAApD,0BACC,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oCACb,EACA,EAAe,CAAC,EAAQ,EAAE,SACzB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,kDAAkD,MAAM,YAJ5D,IASpB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,MAAM,OAAO,UAAzB,AAAmC,sBAAa,cAKhD,GAAS,GAAG,CAAC,AAAC,IACb,IAAM,EAAY,EAAc,IAAI,CAAC,EAAQ,CACvC,EAAe,OAAO,OAAO,CAAC,EAAU,QAAQ,EAChD,EAAqB,CAAW,CAAC,EAAQ,EAAE,eAAiB,GAG5D,EAAuB,CAAW,CAAC,EAAQ,EAAE,gBAAkB,GAG/D,EAAoB,EAAU,YAAY,CAC1C,EAAgB,EAAU,QAAQ,CAAC,EAAkB,EAAI,EACzD,EAAiB,EAAU,QAAQ,CAAC,EAAkB,CAAG,EAAoB,SAEnF,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAAW,CAAA,CAAe,MAAO,EAAS,UAAU,KAApD,iBAEC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,mDACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,iCAAwB,YACtC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,mCACZ,EAAe,CAAC,EAAQ,EAAE,QACzB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,2DACd,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,oDAAoD,aACzD,EAAe,CAAC,EAAQ,EAAE,IAAI,OAE3C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,IAAM,GAAe,YAC/B,SAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,cACR,KAAK,CAFN,IAGC,QAAS,IAAM,GAAkB,GACjC,SAAU,EAAe,CAAC,EAAQ,EAAE,iBAEnC,EAAe,CAAC,EAAQ,EAAE,QAAU,SAAW,UAIpD,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,0DACd,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,qCAAqC,SAGvD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,IAAM,GAAe,YAC/B,SAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,AAHD,QAGU,IAAM,GAAmB,GAClC,SAAU,EAAe,CAAC,EAAQ,EAAE,SAAW,CAAC,EAAU,YAAY,UAErE,EAAe,CAAC,EAAQ,EAAE,QAAU,SAAW,eAOzD,EAAU,YAAY,CACrB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,kCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uBAAc,UAAY,IAAC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,yCAAiC,EAAU,YAAY,MAGpH,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,mCAA0B,kBAK1C,EAAU,IAAI,EACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uCACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uBAAc,UAC7B,EAAe,CAAC,EAAQ,EAAE,QACzB,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CACC,KAAM,EAAU,IAAI,CACpB,OAAO,SACP,IAAI,sBACJ,UAAU,8CAET,EAAU,IAAI,GAGjB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,gBAAQ,EAAU,IAAI,SAM9C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,kDAEb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,uCAA8B,EAAQ,WAEpD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,mBAAhB,uBAAiD,aAGlD,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,MAAO,EACP,cAAe,AAAC,GAAU,GAF3B,AAE6C,EAAS,aAErD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,OACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,YAAY,WAAxB,EAEH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,UACX,EAAa,GAAG,CAAC,CAAC,CAAC,EAAK,EAAM,AADhC,GAEG,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,UAAU,CAAA,CAAW,MAAO,YAC1B,EAAI,IADN,AACQ,EAAM,MADE,YAQxB,GACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,kCAAwB,cACvB,EAAe,SAE7B,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,UAAU,kCAAwB,SAC5B,QAKa,WAAzB,GACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,mBAAhB,kBAA4C,YAG7C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,KAAK,MACL,YAAY,MAFb,mCAGC,MAAO,EACP,SAAU,AAAC,GAAM,GAAwB,EAAS,EAAE,MAAM,CAAC,KAAK,EAChE,UAAU,WAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,iCAAwB,4CAMzC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAS,IAAM,GAAiB,GAChC,SAAU,CAFX,AAEsB,CAAC,EAAQ,EAAE,OAChC,UAAU,4BAET,CAAW,CAAC,EAAQ,EAAE,OAAS,SAAW,SAG5C,CAAW,CAAC,EAAQ,EAAE,aACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,CAAC,aAAa,EAC7B,CAAW,CAAC,EAAQ,EAAE,cAAgB,OAClC,iBACA,eAAA,CACJ,UACC,CAAW,CAAC,EAAQ,EAAE,uBAQjC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAkB,CAAA,CACjB,mBAAoB,EAAc,MADnC,KAC8C,CAC7C,eAAgB,SApKJ,EAyKtB,GAGA,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,MAAM,OAAO,UAAU,AAAnC,qBACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,sCAA6B,WAE3C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uDACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,mBAAhB,YAAsC,WACvC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,iCAAwB,qBAEvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAS,EAAmB,gBAAgB,CAC5C,CAFD,eAEkB,QAIrB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,mBAAhB,YAAsC,WACvC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,iCAAwB,mBAEvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAS,EAAmB,QAAQ,CACpC,SAFD,OAEkB,WAMtB,EAAmB,WAAW,EAC7B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gBACb,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAW,CAAC,QAAQ,EACxB,EAAmB,WAAW,CAAC,QAAQ,CAAC,OACpC,iBACA,eAAA,CACJ,UACC,EAAmB,WAAW,KAMrC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,+BAAsB,aACpC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QA7pBO,CA6pBE,IA3pB3B,GAAgB,IAChB,IAAM,EAAmB,EAypBR,CAzpB6B,GAAe,MAAM,CAAE,GAAe,OAAO,EAC3F,EAAe,CACb,YAAa,GAAe,GAC5B,QAAS,GAAe,OAAO,CAC/B,OAAQ,GAAe,MAAM,CAAC,WAAW,GACzC,SAAU,GACV,QAAS,GAAsB,EACjC,EACF,EAmpBoB,QAAQ,UACR,KAAK,cACN,OAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAS,GACT,SAAU,EACV,MAHD,EAGS,UACR,KAAK,cAEJ,EAAc,SAAW,OAE5B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAS,GACT,QAAQ,SAFT,CAGC,KAAK,cACN,SAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAS,GACT,QAAQ,SAFT,CAGC,KAAK,cACN,eAOL,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,qCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,YAAY,YACZ,KAFD,CAEQ,GACP,SAAU,AAAC,GAAM,GAAmB,EAAE,MAAM,CAAC,KAAK,EAClD,UAAU,SAEX,IACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,EAHD,MA7ZK,CAgaK,IA/Z7B,GAAiB,IAEjB,EAAe,EACjB,EA6ZsB,UAAU,6FACX,SAKJ,IACC,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,kCAAwB,WACxB,GAAc,UAKjC,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,4BACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yBAAgB,mBAE7B,GAAY,EAAS,SAAS,CAAC,MAAM,CAAG,EAC1C,AAAC,MAEC,IAAM,EAQD,EAAE,CAEP,EAAS,SAAS,CAAC,OAAO,CAAC,IACzB,EAAI,OAAO,CAAC,OAAO,CAAC,IAClB,IAAM,EAAU,EAAI,OAAO,CAAC,OAAO,CAAC,KAAM,KACpC,EAAiB,EAAW,KAAK,CAAC,GAAG,CAAC,GAAQ,EAAK,QAAQ,EAC3D,EAAc,EAAW,OAAO,EAAE,aAAgB,CAAc,CAAC,EAAE,EAAI,GACvE,EAAY,EAAW,OAAO,EAAE,MAAQ,EAAE,CAC1C,EAAS,EAAU,QAAQ,CAAC,GAElC,EAAS,IAAI,CAAC,SACZ,EACA,OAAQ,EAAW,MAAM,CAAC,WAAW,eACrC,iBACA,EACA,QAAS,EAAI,OAAO,QACpB,YACA,CACF,EACF,EACF,GAGA,IAAM,EAAe,GAAc,IAAI,GACnC,EAAS,MAAM,CAAC,GACd,EAAK,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAc,WAAW,KAE/D,EAGE,EAAa,EAAa,MAAM,CAChC,EAAa,KAAK,IAAI,CAAC,EAAa,GACpC,EAAa,CAAC,GAAc,CAAC,CAAI,EACjC,EAAW,EAAa,EACxB,EAAc,EAAa,KAAK,CAAC,EAAY,GAEnD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,KAAK,CAAA,WACJ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OADF,IACa,CAAA,UACV,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CADF,OACU,CAAA,WACP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IADF,KACW,CAAA,UAAC,SACX,CAAA,EAAA,EAAA,EADC,CACD,EAAC,EAAA,SAAS,CAAA,UAAC,SACX,CAAA,EAAA,EAAA,EADC,CACD,EAAC,EAAA,SAAS,CAAA,UAAC,SACX,CAAA,EAAA,EAAA,EADC,CACD,EAAC,EAAA,SAAS,CAAA,UAAC,WACX,CAAA,EAAA,EADC,AACD,GAAA,EAAC,EAAA,SAAS,CAAA,UAAC,YAGf,CAAA,EAAA,CAHK,CAGL,GAAA,EAAC,EAAA,SAAS,CAAA,UACP,EAAY,GAAG,CAAC,CAAC,EAAK,IACrB,CAAA,EAAA,AAFH,EAEG,IAAA,EAAC,EAAA,QAAQ,CAAA,WACP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IADF,KACW,CAAA,CAAC,UAAU,eAApB,QACE,EAAI,OAAO,GAEd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UACR,CAAA,EAAA,EAAA,GAAA,EAAC,MADF,CACE,CAAK,UAAW,CAAC,sCAAsC,EACvC,QAAf,EAAI,MAAM,CAAa,8BACR,AAAf,WAAI,MAAM,CAAc,4BACT,QAAf,EAAI,MAAM,CAAa,gCACR,WAAf,EAAI,MAAM,CAAgB,0BAC1B,4BAAA,CACA,UACC,EAAI,MAAM,KAGf,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UACR,CAAA,EAAA,EAAA,IAAA,EAAC,KADF,CACE,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,MAAO,EAAI,WAAW,CACtB,QAFD,MAEgB,AAAC,GAAY,GAAiB,EAAI,OAAO,CAAE,EAAI,MAAM,CAAC,WAAW,GAAI,aAEpF,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,KACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAA,KAEd,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAFE,OAEW,CAAA,UACX,EAAI,UADN,IACoB,CAAC,GAAG,CAAC,GACtB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAY,MAAO,WAC3B,GADc,IAAhB,KAMN,EAAI,cAAc,CAAC,MAAM,CAAG,GAC3B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,EAHD,MAGU,IAAM,GAAqB,EAAI,OAAO,CAAE,EAAI,MAAM,CAAC,WAAW,GAAI,EAAI,WAAW,EAC1F,UAAU,8DACV,MAAM,kBAEN,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,kBAEf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,YACR,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,0CACR,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,iDAMlB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UACR,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IADF,EACQ,CAAA,CACL,QAAS,EAAI,MAAM,CACnB,WAFD,KAEkB,AAAC,GAAY,GAAqB,EAAI,OAAO,CAAE,EAAI,MAAM,CAAC,WAAW,GAAI,EAAI,WAAW,CAAE,OAG/G,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,UACR,CAAA,EAAA,EAAA,IAAA,EAAC,KADF,CACE,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,AAHD,QAGU,IAAM,GAAe,EAAI,OAAO,CAAE,EAAI,MAAM,CAAC,WAAW,GAAI,EAAI,WAAW,EACpF,SAAU,WAET,EAAc,SAAW,OAE5B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KACL,AAHD,QAGU,IAAM,GAAe,EAAI,OAAO,CAAE,EAAI,MAAM,CAAC,WAAW,GAAI,EAAI,OAAO,EAChF,SAAU,YACX,SAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,IAAM,GAAgB,EAAI,OAAO,CAAE,EAAI,OAAO,EACvD,UAAU,gEACX,gBAxFQ,CAAA,EAAG,EAAI,OAAO,CAAC,CAAC,EAAE,EAAI,MAAM,CAAC,CAAC,EAAE,EAAA,CAAO,QAmG3D,EAAa,GACZ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8CACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,kCAAwB,MACjC,EAAa,EAAE,IAAE,KAAK,GAAG,CAAC,EAAU,GAAY,QAAM,EAAW,QAEvE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,oCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,IAAM,EAAe,GAAQ,KAAK,GAAG,CAAC,EAAG,EAAO,IACzD,SAA0B,IAAhB,WACX,QAGD,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,oBACb,EAAY,MAAI,KAEnB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,KAFN,AAGC,QAAS,IAAM,EAAe,GAAQ,KAAK,GAAG,CAAC,EAAY,EAAO,IAClE,SAAU,IAAgB,WAC3B,gBAQb,CAAC,IAED,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,6BACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yBAAgB,eAC7B,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,sCAA6B,6BAQtD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,0CACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,UAAE,kBAKP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAM,GAAkB,IAAgB,GAAgB,aAAc,AAAC,AAA9E,IACM,IACH,EADS,CACS,GAClB,IAAgB,GAChB,IAAkB,GAClB,GAAuB,MAE3B,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,wFACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,YAAvB,4BACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,UACT,GAAe,WACf,AAFF,GAEmB,OACjB,aAEH,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,UACf,GACC,KAFH,YAGK,IAAkB,GACpB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WAAE,OACK,GAAoB,OAAO,CAAC,KAAG,GAAoB,MAAM,CAAC,WAAW,GAAG,YAE7E,EACF,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WAAE,MACI,EAAY,OAAO,CAAC,OAAO,CAAC,KAAM,KAAK,MAAI,EAAY,MAAM,CAAC,WAAW,GAAG,MAAI,EAAY,QAAQ,CAAC,UAEzG,UAKP,CAAC,IAAgB,EAAA,CAAc,EAC9B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,wCACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,kDACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,UAAU,UAAU,CAAlC,8BAAwD,SACxD,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wFACZ,GAAe,OAAO,GAGzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,GAAG,UACH,YAAY,IAFb,aAGC,MAAO,GAAe,OAAO,CAC7B,SAAU,AAAC,GAAM,GAAuB,UAAW,EAAE,MAAM,CAAC,KAAK,OAIvE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,SAAS,UAAU,EAAjC,6BAAuD,SACvD,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wFACZ,GAAe,MAAM,GAGxB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,MAAO,GAAe,MAAM,CAC5B,YAFD,EAEgB,AAAC,GAAU,GAAuB,SAAU,aAE3D,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,UACZ,CAAA,EAAA,EAAA,GAAA,EAAC,EADF,AACE,WAAW,CAAA,CAAA,KAEd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,KAFE,QAEW,CAAA,WACZ,CAAA,EAAA,EAAA,GAAA,EAAC,CADF,CACE,UAAU,CAAA,CAAC,MAAM,eAAM,GAAvB,KACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,gBAAO,EAAxB,OACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,eAAM,GAAvB,KACD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,kBAAjB,AAA0B,WAC3B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,MAAM,iBAAQ,CAAzB,kBAKT,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,WAAW,UAAzB,AAAmC,+BAAsB,SACzD,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wFAA+E,SAI9F,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,GAAG,WACH,YAAY,GAFb,OAGC,MAAO,GAAe,QAAQ,CAC9B,SAAU,AAAC,GAAM,GAAuB,WAAY,EAAE,MAAM,CAAC,KAAK,OAIxE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,WAAW,UAAzB,AAAmC,+BAAsB,WAC1D,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,wCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,GAAG,WACH,QAAS,GAAe,GAFzB,KAEiC,CAChC,gBAAkB,AAAD,GAAa,GAAuB,WAAY,KAEnE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCACb,GAAe,QAAQ,CAAG,KAAO,gBAOzC,IAAgB,GAAe,OAAO,CAAC,IAAI,IAAM,GAAe,QAAQ,CAAC,IAAI,IAC7E,GAAgB,GAAe,OAAO,CAAE,GAAe,MAAM,CAAE,GAAe,QAAQ,GACrF,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,+DACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,6BACb,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,iCAAuB,SAC9B,GAAe,OAAO,CAAC,KAAG,GAAe,MAAM,CAAC,WAAW,GAAG,UAAa,GAAe,QAAQ,CAAC,eAOjH,IAAkB,IAAuB,GAAe,QAAQ,CAAC,IAAI,IACrE,GAAiB,GAAoB,OAAO,CAAE,GAAoB,MAAM,CAAE,GAAe,QAAQ,GAChG,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,+DACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,6BACb,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,iCAAuB,UACxB,GAAe,QAAQ,CAAC,kBAQjD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,+CACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,iCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,mBAAhB,iBAA2C,SAC5C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,8DACZ,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,6EACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yBAAgB,gBAGjC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAM,CAAA,CAEL,OAAO,OACP,aAHD,GAGiB,aAChB,MAAO,GAAa,SAAW,GAC/B,SAAU,AAAC,IACT,EAAe,GAAQ,EAAO,CAAE,GAAG,CAAI,CAAE,QAAS,GAAS,EAAG,EAAI,KACpE,EACA,QAAS,MAAO,IACd,QAAQ,GAAG,CAAC,YAAa,cAAE,kBAAc,kBAAgB,EAAe,GACxE,CAD4E,CAC1D,GAClB,GAFmF,AAElE,GAEjB,WAAW,IAAM,GAAe,GAAS,IAC3C,EACA,QAAS,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,mDAA0C,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yBAAgB,gBAC/F,QAAS,CACP,QAAS,CAAE,QAAS,EAAM,EAC1B,SAAU,GACV,YAAa,KACb,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,QAAS,EACT,cAAc,EACd,SAAU,KACV,MAAO,UACP,wBAAyB,CAAE,SAAS,CAAK,EACzC,iBAAkB,CAChB,OAAO,EACP,UAAU,EACV,QAAS,EACX,EACA,eAAe,EACf,aAAc,GACd,SAAU,EACZ,GAnCK,GAAe,SAAW,GAAiB,WAAa,gBAyCrE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,YAAvB,iDACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,YACR,QAFD,AAEU,GACT,SAAU,CAAC,GAAkB,WAC9B,UAGD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAQ,UAAU,QAAS,EAAlC,GACK,IACF,IAAgB,GAChB,GAFgB,AAEE,CAChB,QAAS,GACT,OAAQ,MACR,SAAU,OACV,UAAU,CACZ,IACS,IACT,IAAkB,GAClB,GAAuB,EAFE,IAGzB,GAAkB,CAChB,QAAS,GACT,OAAQ,MACR,SAAU,OACV,UAAU,CACZ,IAEA,IAEJ,WAAG,OAGF,GACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAS,GAAkB,SACjC,IACA,CAAC,GAFF,AAEiB,OAAO,CAAC,IAAI,IAC5B,CAAC,GAAe,QAAQ,CAAC,IAAI,IAC7B,GAAgB,GAAe,OAAO,CAAE,GAAe,MAAM,CAAE,GAAe,QAAQ,WAErF,GAAa,SAAW,OAEzB,GACF,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAS,GAAsB,SACrC,IACA,CAAC,GAFF,AAEiB,QAAQ,CAAC,IAAI,IAC5B,EAAD,IAAuB,GAAiB,GAAoB,OAAO,CAAE,GAAoB,MAAM,CAAE,GAAe,QAAQ,IAAI,KAAK,EAEhI,GAAa,SAAW,OAG3B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAS,GAAgB,SAAU,QAA1C,GACE,EAAc,SAAW,kBAStC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAM,GAAgB,aAAc,AAAC,IACvC,AAAC,GACH,AAFH,GACY,CAGb,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,mDACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,YAAvB,eACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAAW,CAAA,CAAC,UAAU,aAAtB,iCACC,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,WAAK,UAAQ,EAAY,MAAI,MAC9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uDACb,IACC,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,mDACd,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,oDAAoD,eAM5E,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,UAAC,QAAlB,UAKH,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,sEACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAS,CAAA,CAAC,KAAM,OAGnB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,EAHE,UAGU,CAAA,CAAC,UAAU,YAAvB,iDACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,kCAAwB,KAClC,GAAY,MAAM,CAAC,UAExB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,QAz1DY,CAy1DH,CAFV,GAt1DP,KACF,KACA,GAAe,GAFG,CAItB,EAq1Dc,SAAU,CAAC,CAAC,YACb,SAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,QAAQ,UAAU,QAAS,EAAlC,UAAyD,kBASlE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAM,GAAoB,IAAI,CAAE,aAAc,AAAC,EAAtD,EACK,AAAC,GACH,GAAuB,AADd,CAEP,MAAM,EACN,QAAS,GACT,OAAQ,GACR,SAAU,EACZ,EAEJ,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,UACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,WACX,CAAA,EAAA,EAAA,IAAA,EAAC,CADF,CACE,WAAW,CAAA,CAAC,UAAU,aAAtB,oCACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,kBAEf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,YACR,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,0CACR,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,0CACJ,YAGR,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,iBAAiB,CAAA,WAAC,OAAlB,IACS,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,sCAA4B,IAAO,GAAoB,QAAQ,CAAC,OAAa,MACrG,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,2CAAkC,kBAItD,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,YAAvB,uBACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,QAAS,EAFV,EAEgB,GAAuB,CACpC,MAAM,EACN,QAAS,GACT,OAAQ,GACR,SAAU,EACZ,YACD,OAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,cACR,MAFD,EAEU,YACV,eAQP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAM,GAAgB,IAAI,CAAE,aAAc,AAAC,EAAlD,EACK,AAAC,GACH,GADS,AACU,CACjB,MAAM,EACN,QAAS,GACT,QAAS,EACX,EAEJ,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,UACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,WACX,CAAA,EAAA,EAAA,IAAA,EAAC,CADF,CACE,WAAW,CAAA,CAAC,UAAU,aAAtB,oCACC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,kBAEf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,YACR,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,0CACR,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,0CACJ,YAGR,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,iBAAiB,CAAA,WAAC,OAAlB,MACW,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,sCAA4B,IAAO,GAAgB,OAAO,CAAC,OAAa,MAClG,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAA,GACD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,uDAA8C,uCAIlE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,YAAvB,uBACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,QAAS,EAFV,EAEgB,GAAmB,CAChC,MAAM,EACN,QAAS,GACT,QAAS,EACX,YACD,OAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,cACR,MAFD,EAEU,YACV,mBAOZ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAM,GAAuB,aAAc,OAAlD,KACM,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,WAAxB,UACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,WACX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,AADF,WACa,CAAA,UAAC,UACb,CAAA,EAAA,CADC,CACD,GAAA,EAAC,EAAA,iBAAiB,CAAA,UAAC,QAAlB,aAKH,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,0CACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,qBACZ,EACE,MAAM,CAAC,GAA8B,aAAnB,EAAQ,MAAM,EAChC,GAAG,CAAC,AAAC,GACJ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAEC,UAAU,iHAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CACP,GAAI,CAAC,UAAU,EAAE,EAAQ,IAAI,CAAA,CAAE,CAC/B,CAFD,OAEU,GAA0B,QAAQ,CAAC,EAAQ,IAAI,EACxD,gBAAiB,IAAM,GAAuB,EAAQ,IAAI,IAE5D,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,QAAS,CAAC,UAAU,EAAE,EAAQ,IAAI,CAAA,CAAE,CACpC,UAAU,4HAET,EAAQ,IAAI,KAZV,EAAQ,IAAI,KAkBsD,IAA9E,EAAkB,MAAM,CAAC,GAA8B,aAAnB,EAAQ,MAAM,EAAiB,MAAM,EACxE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,0CAAiC,eAMpD,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,YAAvB,uBACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,QAAS,EAFV,GAGG,IAAyB,GACzB,GAA6B,EAAE,CACjC,WACD,OAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,CAChB,OAAQ,GACR,MAFD,EAEU,GACT,YAAY,SACZ,SAA+C,IAArC,GAA0B,MAAM,CAC1C,WAAW,SACX,QAAQ,oBAMf,GAAa,IAAI,EAChB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gFACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAW,CAAC,uEAAuE,EAChE,YAAtB,GAAa,IAAI,CACb,8CACA,wCAAA,CACJ,WACA,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,yBACZ,AAAsB,eAAT,IAAI,CAChB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,0BAEV,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,EAAE,sBAGV,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,yBAEV,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,GAAG,KAAK,GAAG,KAAK,EAAE,OAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,OAC/B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,YAIrC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,+BAAuB,GAAa,OAAO,GACxD,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,QAAS,IAAM,GAAgB,CAAE,MAAM,EAAO,KAAM,UAAW,QAAS,EAAG,GAC3E,UAAU,iCAEV,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,yCAEV,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,OAC/B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,mBAS/C,CAGe,SAAS,IACtB,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CAAC,SACR,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CADF,AACM,UAAU,oEACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,kCACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,yEACf,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yBAAgB,8BAIjC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAA,IAGP","ignoreList":[0,1,3,4,5,6,7,8,10,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44]}