forgex-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/README.md +479 -0
  2. package/dist/bin/forgex.d.ts +12 -0
  3. package/dist/bin/forgex.d.ts.map +1 -0
  4. package/dist/bin/forgex.js +23 -0
  5. package/dist/bin/forgex.js.map +1 -0
  6. package/dist/src/adapters/codex-adapter.d.ts +238 -0
  7. package/dist/src/adapters/codex-adapter.d.ts.map +1 -0
  8. package/dist/src/adapters/codex-adapter.js +524 -0
  9. package/dist/src/adapters/codex-adapter.js.map +1 -0
  10. package/dist/src/adapters/connection.d.ts +20 -0
  11. package/dist/src/adapters/connection.d.ts.map +1 -0
  12. package/dist/src/adapters/connection.js +43 -0
  13. package/dist/src/adapters/connection.js.map +1 -0
  14. package/dist/src/adapters/ipfs.d.ts +17 -0
  15. package/dist/src/adapters/ipfs.d.ts.map +1 -0
  16. package/dist/src/adapters/ipfs.js +30 -0
  17. package/dist/src/adapters/ipfs.js.map +1 -0
  18. package/dist/src/adapters/jito-adapter.d.ts +194 -0
  19. package/dist/src/adapters/jito-adapter.d.ts.map +1 -0
  20. package/dist/src/adapters/jito-adapter.js +474 -0
  21. package/dist/src/adapters/jito-adapter.js.map +1 -0
  22. package/dist/src/adapters/rpc-adapter.d.ts +148 -0
  23. package/dist/src/adapters/rpc-adapter.d.ts.map +1 -0
  24. package/dist/src/adapters/rpc-adapter.js +410 -0
  25. package/dist/src/adapters/rpc-adapter.js.map +1 -0
  26. package/dist/src/adapters/sdk-adapter.d.ts +148 -0
  27. package/dist/src/adapters/sdk-adapter.d.ts.map +1 -0
  28. package/dist/src/adapters/sdk-adapter.js +554 -0
  29. package/dist/src/adapters/sdk-adapter.js.map +1 -0
  30. package/dist/src/commands/config/index.d.ts +8 -0
  31. package/dist/src/commands/config/index.d.ts.map +1 -0
  32. package/dist/src/commands/config/index.js +91 -0
  33. package/dist/src/commands/config/index.js.map +1 -0
  34. package/dist/src/commands/query/index.d.ts +10 -0
  35. package/dist/src/commands/query/index.d.ts.map +1 -0
  36. package/dist/src/commands/query/index.js +376 -0
  37. package/dist/src/commands/query/index.js.map +1 -0
  38. package/dist/src/commands/sniper/index.d.ts +16 -0
  39. package/dist/src/commands/sniper/index.d.ts.map +1 -0
  40. package/dist/src/commands/sniper/index.js +292 -0
  41. package/dist/src/commands/sniper/index.js.map +1 -0
  42. package/dist/src/commands/token/index.d.ts +16 -0
  43. package/dist/src/commands/token/index.d.ts.map +1 -0
  44. package/dist/src/commands/token/index.js +295 -0
  45. package/dist/src/commands/token/index.js.map +1 -0
  46. package/dist/src/commands/tools/index.d.ts +17 -0
  47. package/dist/src/commands/tools/index.d.ts.map +1 -0
  48. package/dist/src/commands/tools/index.js +626 -0
  49. package/dist/src/commands/tools/index.js.map +1 -0
  50. package/dist/src/commands/trade/index.d.ts +8 -0
  51. package/dist/src/commands/trade/index.d.ts.map +1 -0
  52. package/dist/src/commands/trade/index.js +531 -0
  53. package/dist/src/commands/trade/index.js.map +1 -0
  54. package/dist/src/commands/transfer/index.d.ts +16 -0
  55. package/dist/src/commands/transfer/index.d.ts.map +1 -0
  56. package/dist/src/commands/transfer/index.js +509 -0
  57. package/dist/src/commands/transfer/index.js.map +1 -0
  58. package/dist/src/commands/wallet/index.d.ts +10 -0
  59. package/dist/src/commands/wallet/index.d.ts.map +1 -0
  60. package/dist/src/commands/wallet/index.js +828 -0
  61. package/dist/src/commands/wallet/index.js.map +1 -0
  62. package/dist/src/config.d.ts +74 -0
  63. package/dist/src/config.d.ts.map +1 -0
  64. package/dist/src/config.js +190 -0
  65. package/dist/src/config.js.map +1 -0
  66. package/dist/src/const/IDL/index.d.ts +4 -0
  67. package/dist/src/const/IDL/index.d.ts.map +1 -0
  68. package/dist/src/const/IDL/index.js +2 -0
  69. package/dist/src/const/IDL/index.js.map +1 -0
  70. package/dist/src/const/IDL/meteora-DLMM.d.ts +10249 -0
  71. package/dist/src/const/IDL/meteora-DLMM.d.ts.map +1 -0
  72. package/dist/src/const/IDL/meteora-DLMM.js +4177 -0
  73. package/dist/src/const/IDL/meteora-DLMM.js.map +1 -0
  74. package/dist/src/const/IDL/pump-fun.d.ts +4811 -0
  75. package/dist/src/const/IDL/pump-fun.d.ts.map +1 -0
  76. package/dist/src/const/IDL/pump-fun.js +2954 -0
  77. package/dist/src/const/IDL/pump-fun.js.map +1 -0
  78. package/dist/src/const/IDL/pump-swap-IDL.d.ts +3119 -0
  79. package/dist/src/const/IDL/pump-swap-IDL.d.ts.map +1 -0
  80. package/dist/src/const/IDL/pump-swap-IDL.js +2095 -0
  81. package/dist/src/const/IDL/pump-swap-IDL.js.map +1 -0
  82. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts +4031 -0
  83. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts.map +1 -0
  84. package/dist/src/const/IDL/raydium-launchlab-IDL.js +2110 -0
  85. package/dist/src/const/IDL/raydium-launchlab-IDL.js.map +1 -0
  86. package/dist/src/const/index.d.ts +40 -0
  87. package/dist/src/const/index.d.ts.map +1 -0
  88. package/dist/src/const/index.js +57 -0
  89. package/dist/src/const/index.js.map +1 -0
  90. package/dist/src/data-source.d.ts +270 -0
  91. package/dist/src/data-source.d.ts.map +1 -0
  92. package/dist/src/data-source.js +628 -0
  93. package/dist/src/data-source.js.map +1 -0
  94. package/dist/src/data-store/index.d.ts +87 -0
  95. package/dist/src/data-store/index.d.ts.map +1 -0
  96. package/dist/src/data-store/index.js +561 -0
  97. package/dist/src/data-store/index.js.map +1 -0
  98. package/dist/src/data-store/types.d.ts +91 -0
  99. package/dist/src/data-store/types.d.ts.map +1 -0
  100. package/dist/src/data-store/types.js +8 -0
  101. package/dist/src/data-store/types.js.map +1 -0
  102. package/dist/src/index.d.ts +8 -0
  103. package/dist/src/index.d.ts.map +1 -0
  104. package/dist/src/index.js +36 -0
  105. package/dist/src/index.js.map +1 -0
  106. package/dist/src/output.d.ts +52 -0
  107. package/dist/src/output.d.ts.map +1 -0
  108. package/dist/src/output.js +218 -0
  109. package/dist/src/output.js.map +1 -0
  110. package/dist/src/shims/store.d.ts +58 -0
  111. package/dist/src/shims/store.d.ts.map +1 -0
  112. package/dist/src/shims/store.js +55 -0
  113. package/dist/src/shims/store.js.map +1 -0
  114. package/dist/src/sol-sdk/account/index.d.ts +13 -0
  115. package/dist/src/sol-sdk/account/index.d.ts.map +1 -0
  116. package/dist/src/sol-sdk/account/index.js +174 -0
  117. package/dist/src/sol-sdk/account/index.js.map +1 -0
  118. package/dist/src/sol-sdk/account/lookupTable.d.ts +24 -0
  119. package/dist/src/sol-sdk/account/lookupTable.d.ts.map +1 -0
  120. package/dist/src/sol-sdk/account/lookupTable.js +103 -0
  121. package/dist/src/sol-sdk/account/lookupTable.js.map +1 -0
  122. package/dist/src/sol-sdk/batch/create.d.ts +23 -0
  123. package/dist/src/sol-sdk/batch/create.d.ts.map +1 -0
  124. package/dist/src/sol-sdk/batch/create.js +580 -0
  125. package/dist/src/sol-sdk/batch/create.js.map +1 -0
  126. package/dist/src/sol-sdk/batch/external-sniper.d.ts +31 -0
  127. package/dist/src/sol-sdk/batch/external-sniper.d.ts.map +1 -0
  128. package/dist/src/sol-sdk/batch/external-sniper.js +163 -0
  129. package/dist/src/sol-sdk/batch/external-sniper.js.map +1 -0
  130. package/dist/src/sol-sdk/batch/index.d.ts +144 -0
  131. package/dist/src/sol-sdk/batch/index.d.ts.map +1 -0
  132. package/dist/src/sol-sdk/batch/index.js +1573 -0
  133. package/dist/src/sol-sdk/batch/index.js.map +1 -0
  134. package/dist/src/sol-sdk/calc.d.ts +277 -0
  135. package/dist/src/sol-sdk/calc.d.ts.map +1 -0
  136. package/dist/src/sol-sdk/calc.js +590 -0
  137. package/dist/src/sol-sdk/calc.js.map +1 -0
  138. package/dist/src/sol-sdk/index.d.ts +1 -0
  139. package/dist/src/sol-sdk/index.d.ts.map +1 -0
  140. package/dist/src/sol-sdk/index.js +1 -0
  141. package/dist/src/sol-sdk/index.js.map +1 -0
  142. package/dist/src/sol-sdk/jito/index.d.ts +50 -0
  143. package/dist/src/sol-sdk/jito/index.d.ts.map +1 -0
  144. package/dist/src/sol-sdk/jito/index.js +225 -0
  145. package/dist/src/sol-sdk/jito/index.js.map +1 -0
  146. package/dist/src/sol-sdk/launchlab/index.d.ts +32 -0
  147. package/dist/src/sol-sdk/launchlab/index.d.ts.map +1 -0
  148. package/dist/src/sol-sdk/launchlab/index.js +78 -0
  149. package/dist/src/sol-sdk/launchlab/index.js.map +1 -0
  150. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts +27 -0
  151. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts.map +1 -0
  152. package/dist/src/sol-sdk/launchlab/instructions/buy.js +124 -0
  153. package/dist/src/sol-sdk/launchlab/instructions/buy.js.map +1 -0
  154. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts +27 -0
  155. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts.map +1 -0
  156. package/dist/src/sol-sdk/launchlab/instructions/create.js +125 -0
  157. package/dist/src/sol-sdk/launchlab/instructions/create.js.map +1 -0
  158. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts +15 -0
  159. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts.map +1 -0
  160. package/dist/src/sol-sdk/launchlab/instructions/sell.js +65 -0
  161. package/dist/src/sol-sdk/launchlab/instructions/sell.js.map +1 -0
  162. package/dist/src/sol-sdk/meteora/index.d.ts +32 -0
  163. package/dist/src/sol-sdk/meteora/index.d.ts.map +1 -0
  164. package/dist/src/sol-sdk/meteora/index.js +72 -0
  165. package/dist/src/sol-sdk/meteora/index.js.map +1 -0
  166. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts +46 -0
  167. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts.map +1 -0
  168. package/dist/src/sol-sdk/meteora/instructions/buy.js +153 -0
  169. package/dist/src/sol-sdk/meteora/instructions/buy.js.map +1 -0
  170. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts +24 -0
  171. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts.map +1 -0
  172. package/dist/src/sol-sdk/meteora/instructions/sell.js +98 -0
  173. package/dist/src/sol-sdk/meteora/instructions/sell.js.map +1 -0
  174. package/dist/src/sol-sdk/pump/index.d.ts +22 -0
  175. package/dist/src/sol-sdk/pump/index.d.ts.map +1 -0
  176. package/dist/src/sol-sdk/pump/index.js +101 -0
  177. package/dist/src/sol-sdk/pump/index.js.map +1 -0
  178. package/dist/src/sol-sdk/pump/instructions/buy.d.ts +29 -0
  179. package/dist/src/sol-sdk/pump/instructions/buy.d.ts.map +1 -0
  180. package/dist/src/sol-sdk/pump/instructions/buy.js +131 -0
  181. package/dist/src/sol-sdk/pump/instructions/buy.js.map +1 -0
  182. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts +36 -0
  183. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts.map +1 -0
  184. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js +77 -0
  185. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js.map +1 -0
  186. package/dist/src/sol-sdk/pump/instructions/sell.d.ts +7 -0
  187. package/dist/src/sol-sdk/pump/instructions/sell.d.ts.map +1 -0
  188. package/dist/src/sol-sdk/pump/instructions/sell.js +38 -0
  189. package/dist/src/sol-sdk/pump/instructions/sell.js.map +1 -0
  190. package/dist/src/sol-sdk/pumpswap/index.d.ts +9 -0
  191. package/dist/src/sol-sdk/pumpswap/index.d.ts.map +1 -0
  192. package/dist/src/sol-sdk/pumpswap/index.js +27 -0
  193. package/dist/src/sol-sdk/pumpswap/index.js.map +1 -0
  194. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts +61 -0
  195. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts.map +1 -0
  196. package/dist/src/sol-sdk/pumpswap/instructions/buy.js +215 -0
  197. package/dist/src/sol-sdk/pumpswap/instructions/buy.js.map +1 -0
  198. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts +3 -0
  199. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts.map +1 -0
  200. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js +33 -0
  201. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js.map +1 -0
  202. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts +20 -0
  203. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts.map +1 -0
  204. package/dist/src/sol-sdk/pumpswap/instructions/sell.js +107 -0
  205. package/dist/src/sol-sdk/pumpswap/instructions/sell.js.map +1 -0
  206. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts +28 -0
  207. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts.map +1 -0
  208. package/dist/src/sol-sdk/pumpswap/rpc/index.js +63 -0
  209. package/dist/src/sol-sdk/pumpswap/rpc/index.js.map +1 -0
  210. package/dist/src/sol-sdk/raydium/index.d.ts +16 -0
  211. package/dist/src/sol-sdk/raydium/index.d.ts.map +1 -0
  212. package/dist/src/sol-sdk/raydium/index.js +47 -0
  213. package/dist/src/sol-sdk/raydium/index.js.map +1 -0
  214. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts +29 -0
  215. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts.map +1 -0
  216. package/dist/src/sol-sdk/raydium/instructions/buy.js +106 -0
  217. package/dist/src/sol-sdk/raydium/instructions/buy.js.map +1 -0
  218. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts +29 -0
  219. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts.map +1 -0
  220. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js +80 -0
  221. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js.map +1 -0
  222. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts +17 -0
  223. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts.map +1 -0
  224. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js +56 -0
  225. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js.map +1 -0
  226. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts +8558 -0
  227. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts.map +1 -0
  228. package/dist/src/sol-sdk/raydium/instructions/sell.js +70 -0
  229. package/dist/src/sol-sdk/raydium/instructions/sell.js.map +1 -0
  230. package/dist/src/sol-sdk/raydium/rpc/index.d.ts +39 -0
  231. package/dist/src/sol-sdk/raydium/rpc/index.d.ts.map +1 -0
  232. package/dist/src/sol-sdk/raydium/rpc/index.js +82 -0
  233. package/dist/src/sol-sdk/raydium/rpc/index.js.map +1 -0
  234. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts +5 -0
  235. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts.map +1 -0
  236. package/dist/src/sol-sdk/raydium/rpc/raydium.js +18 -0
  237. package/dist/src/sol-sdk/raydium/rpc/raydium.js.map +1 -0
  238. package/dist/src/sol-sdk/rpc/index.d.ts +33 -0
  239. package/dist/src/sol-sdk/rpc/index.d.ts.map +1 -0
  240. package/dist/src/sol-sdk/rpc/index.js +128 -0
  241. package/dist/src/sol-sdk/rpc/index.js.map +1 -0
  242. package/dist/src/sol-sdk/transfer/index.d.ts +24 -0
  243. package/dist/src/sol-sdk/transfer/index.d.ts.map +1 -0
  244. package/dist/src/sol-sdk/transfer/index.js +65 -0
  245. package/dist/src/sol-sdk/transfer/index.js.map +1 -0
  246. package/dist/src/sol-sdk/turnover/index.d.ts +84 -0
  247. package/dist/src/sol-sdk/turnover/index.d.ts.map +1 -0
  248. package/dist/src/sol-sdk/turnover/index.js +569 -0
  249. package/dist/src/sol-sdk/turnover/index.js.map +1 -0
  250. package/dist/src/tx-tracker/detail-adapter.d.ts +100 -0
  251. package/dist/src/tx-tracker/detail-adapter.d.ts.map +1 -0
  252. package/dist/src/tx-tracker/detail-adapter.js +215 -0
  253. package/dist/src/tx-tracker/detail-adapter.js.map +1 -0
  254. package/dist/src/tx-tracker/index.d.ts +142 -0
  255. package/dist/src/tx-tracker/index.d.ts.map +1 -0
  256. package/dist/src/tx-tracker/index.js +447 -0
  257. package/dist/src/tx-tracker/index.js.map +1 -0
  258. package/dist/src/types/index.d.ts +76 -0
  259. package/dist/src/types/index.d.ts.map +1 -0
  260. package/dist/src/types/index.js +69 -0
  261. package/dist/src/types/index.js.map +1 -0
  262. package/dist/src/types/websocket.d.ts +15 -0
  263. package/dist/src/types/websocket.d.ts.map +1 -0
  264. package/dist/src/types/websocket.js +18 -0
  265. package/dist/src/types/websocket.js.map +1 -0
  266. package/dist/src/utils/index.d.ts +13 -0
  267. package/dist/src/utils/index.d.ts.map +1 -0
  268. package/dist/src/utils/index.js +174 -0
  269. package/dist/src/utils/index.js.map +1 -0
  270. package/dist/src/wallet-store.d.ts +124 -0
  271. package/dist/src/wallet-store.d.ts.map +1 -0
  272. package/dist/src/wallet-store.js +524 -0
  273. package/dist/src/wallet-store.js.map +1 -0
  274. package/package.json +86 -0
  275. package/scripts/postinstall.js +88 -0
@@ -0,0 +1,509 @@
1
+ /**
2
+ * 转账命令组 - 真实交易执行
3
+ *
4
+ * forgex transfer in | out | many-to-many
5
+ *
6
+ * Phase 3 升级:
7
+ * - 使用 DataSource 门面进行余额查询
8
+ * - 集成 TxTracker 自动追踪转账结果
9
+ * - 添加 ensurePasswordAndValidate 密码验证
10
+ * - 添加 suppressConsole/restoreConsole 防止 JSON 输出污染
11
+ * - 完善输入参数验证
12
+ * - 添加余额预检查
13
+ */
14
+ import { getGroup, getAllGroups, getDecryptedPrivateKey, ensurePasswordAndValidate } from '../../wallet-store.js';
15
+ import { loadConfig } from '../../config.js';
16
+ import { output, error, info, suppressConsole, restoreConsole, getOutputFormat } from '../../output.js';
17
+ import { executeSOLTransfer, executeBatchSOLTransfer, executeCollectSOL, buildWalletList, sleep, } from '../../adapters/sdk-adapter.js';
18
+ import { getDataSource } from '../../data-source.js';
19
+ // ============================================================
20
+ // TxTracker 集成辅助函数
21
+ // ============================================================
22
+ /**
23
+ * 追踪转账交易结果并写入 DataStore。
24
+ */
25
+ async function trackTransferResults(results, tokenCA, groupId, txType) {
26
+ const successResults = results.filter(r => r.success && r.txHash);
27
+ if (successResults.length === 0)
28
+ return;
29
+ try {
30
+ const ds = getDataSource();
31
+ const entries = successResults.map(r => ({
32
+ txHash: r.txHash,
33
+ context: {
34
+ ca: tokenCA,
35
+ groupId,
36
+ txType,
37
+ wallets: [r.from],
38
+ expectedAmountSol: r.token === 'SOL' ? r.amount : undefined,
39
+ },
40
+ }));
41
+ info(`追踪 ${entries.length} 笔转账交易...`);
42
+ await ds.trackBatch(entries, {
43
+ onProgress: (status, tx) => info(`追踪: ${status} - ${tx.substring(0, 16)}...`),
44
+ });
45
+ }
46
+ catch (trackErr) {
47
+ info(`转账追踪失败(不影响交易结果): ${trackErr.message}`);
48
+ }
49
+ }
50
+ export function registerTransferCommands(program) {
51
+ const transferCmd = program
52
+ .command('transfer')
53
+ .description('转账操作');
54
+ // ============================================================
55
+ // forgex transfer in - 真实批量收集
56
+ // ============================================================
57
+ transferCmd
58
+ .command('in')
59
+ .description('批量收集(多个钱包汇集到一个地址)')
60
+ .requiredOption('--to <address>', '目标地址')
61
+ .requiredOption('--from-group <id>', '源钱包组 ID')
62
+ .option('--token <token>', '代币: SOL 或合约地址', 'SOL')
63
+ .option('--amount <type>', '金额类型: all | fixed | reserve', 'all')
64
+ .option('--value <n>', '金额值 (SOL 或代币数量)')
65
+ .option('--priority-fee <sol>', '优先费 (SOL)')
66
+ .option('--dry-run', '仅模拟,不实际执行', false)
67
+ .action(async (options) => {
68
+ try {
69
+ // 密码验证
70
+ await ensurePasswordAndValidate();
71
+ const config = loadConfig();
72
+ const groupId = Number(options.fromGroup);
73
+ // 参数验证
74
+ if (isNaN(groupId)) {
75
+ error('--from-group 必须是有效数字');
76
+ process.exit(1);
77
+ }
78
+ const group = getGroup(groupId);
79
+ if (!group) {
80
+ error(`钱包组 ${groupId} 不存在`);
81
+ process.exit(1);
82
+ }
83
+ if (group.wallets.length === 0) {
84
+ error('钱包组中没有钱包');
85
+ process.exit(1);
86
+ }
87
+ // --amount 校验
88
+ const validAmountTypes = ['all', 'fixed', 'reserve'];
89
+ if (!validAmountTypes.includes(options.amount)) {
90
+ error(`--amount 无效: "${options.amount}",必须是 all | fixed | reserve`);
91
+ process.exit(1);
92
+ }
93
+ if ((options.amount === 'fixed' || options.amount === 'reserve') && !options.value) {
94
+ error(`--amount ${options.amount} 模式需要 --value 参数`);
95
+ process.exit(1);
96
+ }
97
+ if (options.value) {
98
+ const val = Number(options.value);
99
+ if (isNaN(val) || val < 0) {
100
+ error('--value 必须是非负数字');
101
+ process.exit(1);
102
+ }
103
+ }
104
+ const priorityFee = options.priorityFee
105
+ ? Number(options.priorityFee)
106
+ : config.defaultPriorityFee;
107
+ if (isNaN(priorityFee) || priorityFee < 0) {
108
+ error('--priority-fee 必须是非负数字');
109
+ process.exit(1);
110
+ }
111
+ const wallets = buildWalletList(group);
112
+ const ds = getDataSource();
113
+ if (options.dryRun) {
114
+ // 查询余额 -- 通过 DataSource
115
+ const balances = [];
116
+ for (const w of wallets) {
117
+ const bal = await ds.getSolBalance(w.address);
118
+ balances.push({ address: w.address, balance: bal });
119
+ }
120
+ output({
121
+ dryRun: true,
122
+ to: options.to,
123
+ walletCount: wallets.length,
124
+ balances,
125
+ totalBalance: balances.reduce((sum, b) => sum + b.balance, 0),
126
+ message: '模拟成功',
127
+ });
128
+ return;
129
+ }
130
+ // JSON 模式下抑制 SDK 的 console.log
131
+ if (getOutputFormat() === 'json')
132
+ suppressConsole();
133
+ if (options.token === 'SOL') {
134
+ info(`执行 SOL 收集: ${wallets.length} 个钱包 -> ${options.to}`);
135
+ const results = await executeCollectSOL({
136
+ wallets: wallets.map(w => ({
137
+ privateKey: w.privateKey,
138
+ address: w.address,
139
+ })),
140
+ toAddress: options.to,
141
+ amountType: options.amount,
142
+ fixedAmount: options.amount === 'fixed' ? Number(options.value) : undefined,
143
+ reserveAmount: options.amount === 'reserve' ? Number(options.value) : undefined,
144
+ priorityFee,
145
+ });
146
+ restoreConsole();
147
+ // TxTracker 集成: 追踪收集交易
148
+ await trackTransferResults(results, 'SOL', groupId, 'transfer_in');
149
+ const successCount = results.filter(r => r.success).length;
150
+ output({
151
+ success: successCount > 0,
152
+ total: results.length,
153
+ successCount,
154
+ failedCount: results.length - successCount,
155
+ results,
156
+ });
157
+ }
158
+ else {
159
+ restoreConsole();
160
+ // SPL Token 收集 -- 通过 DataSource 查询 Token 余额
161
+ info(`执行代币收集: ${options.token}`);
162
+ output({
163
+ success: false,
164
+ error: '代币收集功能正在开发中,请先使用 SOL 收集',
165
+ });
166
+ }
167
+ }
168
+ catch (e) {
169
+ restoreConsole();
170
+ error('批量收集失败', e.message);
171
+ process.exit(1);
172
+ }
173
+ });
174
+ // ============================================================
175
+ // forgex transfer out - 真实批量分发
176
+ // ============================================================
177
+ transferCmd
178
+ .command('out')
179
+ .description('批量分发(一个地址分发到多个钱包)')
180
+ .requiredOption('--from <address>', '源地址(需提供私钥的钱包组中)')
181
+ .requiredOption('--to-group <id>', '目标钱包组 ID')
182
+ .option('--token <token>', '代币: SOL 或合约地址', 'SOL')
183
+ .option('--amount <type>', '金额类型: fixed | random', 'fixed')
184
+ .requiredOption('--value <n>', '金额值 (SOL 或代币数量)')
185
+ .option('--max <n>', '最大值(random 模式)')
186
+ .option('--priority-fee <sol>', '优先费 (SOL)')
187
+ .option('--batch-size <n>', '每批处理数量', '20')
188
+ .option('--dry-run', '仅模拟,不实际执行', false)
189
+ .action(async (options) => {
190
+ try {
191
+ // 密码验证
192
+ await ensurePasswordAndValidate();
193
+ const config = loadConfig();
194
+ const toGroupId = Number(options.toGroup);
195
+ const valueNum = Number(options.value);
196
+ const batchSize = Number(options.batchSize);
197
+ // 参数验证
198
+ if (isNaN(toGroupId)) {
199
+ error('--to-group 必须是有效数字');
200
+ process.exit(1);
201
+ }
202
+ if (isNaN(valueNum) || valueNum <= 0) {
203
+ error('--value 必须是大于 0 的数字');
204
+ process.exit(1);
205
+ }
206
+ if (isNaN(batchSize) || batchSize <= 0) {
207
+ error('--batch-size 必须是大于 0 的整数');
208
+ process.exit(1);
209
+ }
210
+ // --amount 校验
211
+ const validAmountTypes = ['fixed', 'random'];
212
+ if (!validAmountTypes.includes(options.amount)) {
213
+ error(`--amount 无效: "${options.amount}",必须是 fixed | random`);
214
+ process.exit(1);
215
+ }
216
+ if (options.amount === 'random' && !options.max) {
217
+ error('--amount random 模式需要 --max 参数');
218
+ process.exit(1);
219
+ }
220
+ const toGroup = getGroup(toGroupId);
221
+ if (!toGroup) {
222
+ error(`目标钱包组 ${toGroupId} 不存在`);
223
+ process.exit(1);
224
+ }
225
+ if (toGroup.wallets.length === 0) {
226
+ error('目标钱包组中没有钱包');
227
+ process.exit(1);
228
+ }
229
+ const priorityFee = options.priorityFee
230
+ ? Number(options.priorityFee)
231
+ : config.defaultPriorityFee;
232
+ if (isNaN(priorityFee) || priorityFee < 0) {
233
+ error('--priority-fee 必须是非负数字');
234
+ process.exit(1);
235
+ }
236
+ // 查找发送者的私钥
237
+ let fromPrivateKey;
238
+ let fromGroupId;
239
+ const allGroups = getAllGroups();
240
+ for (const g of allGroups) {
241
+ const wallet = g.wallets.find(w => w.walletAddress === options.from);
242
+ if (wallet) {
243
+ fromPrivateKey = getDecryptedPrivateKey(wallet);
244
+ fromGroupId = g.groupId;
245
+ break;
246
+ }
247
+ }
248
+ if (!fromPrivateKey) {
249
+ error(`无法找到地址 ${options.from} 的私钥,请确保该地址在某个钱包组中`);
250
+ process.exit(1);
251
+ }
252
+ const ds = getDataSource();
253
+ if (options.dryRun) {
254
+ // 余额预检查 -- 通过 DataSource
255
+ const balance = await ds.getSolBalance(options.from);
256
+ const totalNeeded = Number(options.value) * toGroup.wallets.length;
257
+ output({
258
+ dryRun: true,
259
+ from: options.from,
260
+ fromBalance: balance,
261
+ toGroup: toGroupId,
262
+ targetCount: toGroup.wallets.length,
263
+ amountPerWallet: Number(options.value),
264
+ totalNeeded,
265
+ sufficient: balance >= totalNeeded,
266
+ message: balance >= totalNeeded ? '模拟成功' : `余额不足: 需要 ${totalNeeded} SOL, 当前 ${balance} SOL`,
267
+ });
268
+ return;
269
+ }
270
+ // JSON 模式下抑制 SDK 的 console.log
271
+ if (getOutputFormat() === 'json')
272
+ suppressConsole();
273
+ if (options.token === 'SOL') {
274
+ // 余额预检查
275
+ const balance = await ds.getSolBalance(options.from);
276
+ const targets = toGroup.wallets.map(w => {
277
+ let amount = Number(options.value);
278
+ if (options.amount === 'random' && options.max) {
279
+ amount = Math.random() * (Number(options.max) - amount) + amount;
280
+ }
281
+ return { address: w.walletAddress, amountSOL: amount };
282
+ });
283
+ const totalNeeded = targets.reduce((sum, t) => sum + t.amountSOL, 0) + priorityFee * targets.length;
284
+ if (balance < totalNeeded) {
285
+ restoreConsole();
286
+ error(`余额不足: 需要约 ${totalNeeded.toFixed(4)} SOL, 当前 ${balance.toFixed(4)} SOL`);
287
+ process.exit(1);
288
+ }
289
+ info(`执行 SOL 分发: ${options.from} -> ${targets.length} 个钱包, 每个约 ${options.value} SOL`);
290
+ const results = await executeBatchSOLTransfer({
291
+ fromPrivateKey: fromPrivateKey,
292
+ targets,
293
+ priorityFee,
294
+ batchSize,
295
+ });
296
+ restoreConsole();
297
+ // TxTracker 集成: 追踪分发交易
298
+ await trackTransferResults(results, 'SOL', fromGroupId || toGroupId, 'transfer_out');
299
+ const successCount = results.filter(r => r.success).length;
300
+ output({
301
+ success: successCount > 0,
302
+ total: results.length,
303
+ successCount,
304
+ failedCount: results.length - successCount,
305
+ results,
306
+ });
307
+ }
308
+ else {
309
+ restoreConsole();
310
+ output({
311
+ success: false,
312
+ error: '代币分发功能正在开发中,请先使用 SOL 分发',
313
+ });
314
+ }
315
+ }
316
+ catch (e) {
317
+ restoreConsole();
318
+ error('批量分发失败', e.message);
319
+ process.exit(1);
320
+ }
321
+ });
322
+ // ============================================================
323
+ // forgex transfer many-to-many - 真实多对多转账
324
+ // ============================================================
325
+ transferCmd
326
+ .command('many-to-many')
327
+ .description('多对多转账')
328
+ .requiredOption('--from-group <id>', '源钱包组 ID')
329
+ .requiredOption('--to-group <id>', '目标钱包组 ID')
330
+ .option('--token <token>', '代币: SOL 或合约地址', 'SOL')
331
+ .option('--amount <type>', '金额类型: all | fixed | reserve | random', 'all')
332
+ .option('--value <n>', '金额值')
333
+ .option('--max <n>', '最大值(random 模式)')
334
+ .option('--interval <ms>', '转账间隔 (毫秒)', '500')
335
+ .option('--priority-fee <sol>', '优先费 (SOL)')
336
+ .option('--dry-run', '仅模拟,不实际执行', false)
337
+ .action(async (options) => {
338
+ try {
339
+ // 密码验证
340
+ await ensurePasswordAndValidate();
341
+ const config = loadConfig();
342
+ const fromGroupId = Number(options.fromGroup);
343
+ const toGroupId = Number(options.toGroup);
344
+ // 参数验证
345
+ if (isNaN(fromGroupId)) {
346
+ error('--from-group 必须是有效数字');
347
+ process.exit(1);
348
+ }
349
+ if (isNaN(toGroupId)) {
350
+ error('--to-group 必须是有效数字');
351
+ process.exit(1);
352
+ }
353
+ // --amount 校验
354
+ const validAmountTypes = ['all', 'fixed', 'reserve', 'random'];
355
+ if (!validAmountTypes.includes(options.amount)) {
356
+ error(`--amount 无效: "${options.amount}",必须是 all | fixed | reserve | random`);
357
+ process.exit(1);
358
+ }
359
+ if ((options.amount === 'fixed' || options.amount === 'reserve') && !options.value) {
360
+ error(`--amount ${options.amount} 模式需要 --value 参数`);
361
+ process.exit(1);
362
+ }
363
+ if (options.amount === 'random') {
364
+ if (!options.value) {
365
+ error('--amount random 模式需要 --value 参数(最小值)');
366
+ process.exit(1);
367
+ }
368
+ if (!options.max) {
369
+ error('--amount random 模式需要 --max 参数(最大值)');
370
+ process.exit(1);
371
+ }
372
+ }
373
+ if (options.value) {
374
+ const val = Number(options.value);
375
+ if (isNaN(val) || val < 0) {
376
+ error('--value 必须是非负数字');
377
+ process.exit(1);
378
+ }
379
+ }
380
+ const fromGroup = getGroup(fromGroupId);
381
+ const toGroup = getGroup(toGroupId);
382
+ if (!fromGroup) {
383
+ error(`源钱包组 ${fromGroupId} 不存在`);
384
+ process.exit(1);
385
+ }
386
+ if (!toGroup) {
387
+ error(`目标钱包组 ${toGroupId} 不存在`);
388
+ process.exit(1);
389
+ }
390
+ if (fromGroup.wallets.length === 0) {
391
+ error('源钱包组中没有钱包');
392
+ process.exit(1);
393
+ }
394
+ if (toGroup.wallets.length === 0) {
395
+ error('目标钱包组中没有钱包');
396
+ process.exit(1);
397
+ }
398
+ const priorityFee = options.priorityFee
399
+ ? Number(options.priorityFee)
400
+ : config.defaultPriorityFee;
401
+ if (isNaN(priorityFee) || priorityFee < 0) {
402
+ error('--priority-fee 必须是非负数字');
403
+ process.exit(1);
404
+ }
405
+ const ds = getDataSource();
406
+ const pairCount = Math.min(fromGroup.wallets.length, toGroup.wallets.length);
407
+ if (options.dryRun) {
408
+ // 余额预检查 -- 通过 DataSource
409
+ const balances = [];
410
+ for (let i = 0; i < pairCount; i++) {
411
+ const bal = await ds.getSolBalance(fromGroup.wallets[i].walletAddress);
412
+ balances.push({
413
+ from: fromGroup.wallets[i].walletAddress,
414
+ to: toGroup.wallets[i].walletAddress,
415
+ balance: bal,
416
+ });
417
+ }
418
+ output({
419
+ dryRun: true,
420
+ fromGroup: fromGroupId,
421
+ toGroup: toGroupId,
422
+ fromWallets: fromGroup.wallets.length,
423
+ toWallets: toGroup.wallets.length,
424
+ pairs: pairCount,
425
+ balances,
426
+ message: '模拟成功',
427
+ });
428
+ return;
429
+ }
430
+ // JSON 模式下抑制 SDK 的 console.log
431
+ if (getOutputFormat() === 'json')
432
+ suppressConsole();
433
+ if (options.token === 'SOL') {
434
+ const results = [];
435
+ info(`执行多对多 SOL 转账: ${pairCount} 组配对`);
436
+ for (let i = 0; i < pairCount; i++) {
437
+ const fromWallet = fromGroup.wallets[i];
438
+ const toWallet = toGroup.wallets[i];
439
+ // 计算转账金额 -- 使用 DataSource 查询余额
440
+ let amountSOL;
441
+ if (options.amount === 'all') {
442
+ const bal = await ds.getSolBalance(fromWallet.walletAddress);
443
+ amountSOL = Math.max(0, bal - 0.005 - priorityFee);
444
+ }
445
+ else if (options.amount === 'fixed') {
446
+ amountSOL = Number(options.value || 0);
447
+ }
448
+ else if (options.amount === 'reserve') {
449
+ const bal = await ds.getSolBalance(fromWallet.walletAddress);
450
+ amountSOL = Math.max(0, bal - Number(options.value || 0) - 0.005);
451
+ }
452
+ else if (options.amount === 'random') {
453
+ const min = Number(options.value || 0);
454
+ const max = Number(options.max || min);
455
+ amountSOL = Math.random() * (max - min) + min;
456
+ }
457
+ else {
458
+ amountSOL = 0;
459
+ }
460
+ if (amountSOL <= 0) {
461
+ results.push({
462
+ from: fromWallet.walletAddress,
463
+ to: toWallet.walletAddress,
464
+ amount: 0,
465
+ success: false,
466
+ error: '余额不足',
467
+ token: 'SOL',
468
+ });
469
+ continue;
470
+ }
471
+ const result = await executeSOLTransfer({
472
+ fromPrivateKey: getDecryptedPrivateKey(fromWallet),
473
+ toAddress: toWallet.walletAddress,
474
+ amountSOL,
475
+ priorityFee,
476
+ });
477
+ results.push(result);
478
+ if (i < pairCount - 1) {
479
+ await sleep(Number(options.interval));
480
+ }
481
+ }
482
+ restoreConsole();
483
+ // TxTracker 集成: 追踪多对多转账
484
+ await trackTransferResults(results, 'SOL', fromGroupId, 'transfer_out');
485
+ const successCount = results.filter((r) => r.success).length;
486
+ output({
487
+ success: successCount > 0,
488
+ total: results.length,
489
+ successCount,
490
+ failedCount: results.length - successCount,
491
+ results,
492
+ });
493
+ }
494
+ else {
495
+ restoreConsole();
496
+ output({
497
+ success: false,
498
+ error: '代币多对多转账功能正在开发中,请先使用 SOL',
499
+ });
500
+ }
501
+ }
502
+ catch (e) {
503
+ restoreConsole();
504
+ error('多对多转账失败', e.message);
505
+ process.exit(1);
506
+ }
507
+ });
508
+ }
509
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/transfer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxG,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,KAAK,GACN,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,+DAA+D;AAC/D,mBAAmB;AACnB,+DAA+D;AAE/D;;GAEG;AACH,KAAK,UAAU,oBAAoB,CACjC,OAA8G,EAC9G,OAAe,EACf,OAAe,EACf,MAAiC;IAEjC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAExC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,CAAC,MAAO;YACjB,OAAO,EAAE;gBACP,EAAE,EAAE,OAAO;gBACX,OAAO;gBACP,MAAM;gBACN,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjB,iBAAiB,EAAE,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;aACzC;SACrB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;QACtC,MAAM,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,MAAM,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;SAC9E,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,QAAa,EAAE,CAAC;QACvB,IAAI,CAAC,oBAAoB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,WAAW,GAAG,OAAO;SACxB,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvB,+DAA+D;IAC/D,8BAA8B;IAC9B,+DAA+D;IAC/D,WAAW;SACR,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,mBAAmB,CAAC;SAChC,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC;SACxC,cAAc,CAAC,mBAAmB,EAAE,SAAS,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,eAAe,EAAE,KAAK,CAAC;SACjD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,EAAE,KAAK,CAAC;SAC/D,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC;SACxC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;SAC3C,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,OAAO;YACP,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE1C,OAAO;YACP,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,KAAK,CAAC,OAAO,OAAO,MAAM,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAEvE,cAAc;YACd,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,6BAA6B,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnF,KAAK,CAAC,YAAY,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;gBACrC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC7B,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC9B,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC1C,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAE3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,wBAAwB;gBACxB,MAAM,QAAQ,GAA2C,EAAE,CAAC;gBAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM,CAAC;oBACL,MAAM,EAAE,IAAI;oBACZ,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,WAAW,EAAE,OAAO,CAAC,MAAM;oBAC3B,QAAQ;oBACR,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC7D,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,+BAA+B;YAC/B,IAAI,eAAe,EAAE,KAAK,MAAM;gBAAE,eAAe,EAAE,CAAC;YAEpD,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,cAAc,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;oBACtC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACzB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,OAAO,EAAE,CAAC,CAAC,OAAO;qBACnB,CAAC,CAAC;oBACH,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,UAAU,EAAE,OAAO,CAAC,MAAa;oBACjC,WAAW,EAAE,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC3E,aAAa,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC/E,WAAW;iBACZ,CAAC,CAAC;gBAEH,cAAc,EAAE,CAAC;gBAEjB,uBAAuB;gBACvB,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;gBAEnE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC3D,MAAM,CAAC;oBACL,OAAO,EAAE,YAAY,GAAG,CAAC;oBACzB,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,YAAY;oBACZ,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY;oBAC1C,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,cAAc,EAAE,CAAC;gBACjB,4CAA4C;gBAC5C,IAAI,CAAC,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBACjC,MAAM,CAAC;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yBAAyB;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC;YACjB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,+DAA+D;IAC/D,+BAA+B;IAC/B,+DAA+D;IAC/D,WAAW;SACR,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,mBAAmB,CAAC;SAChC,cAAc,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;SACrD,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,eAAe,EAAE,KAAK,CAAC;SACjD,MAAM,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,OAAO,CAAC;SAC1D,cAAc,CAAC,aAAa,EAAE,iBAAiB,CAAC;SAChD,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;SACrC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;SAC3C,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,OAAO;YACP,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE5C,OAAO;YACP,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBACrC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACvC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,cAAc;YACd,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,sBAAsB,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChD,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAC,KAAK,CAAC,SAAS,SAAS,MAAM,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACnE,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAE3E,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;gBACrC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC7B,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC9B,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC1C,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,WAAW;YACX,IAAI,cAAkC,CAAC;YACvC,IAAI,WAA+B,CAAC;YACpC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrE,IAAI,MAAM,EAAE,CAAC;oBACX,cAAc,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBAChD,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;oBACxB,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,oBAAoB,CAAC,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAE3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,yBAAyB;gBACzB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBACnE,MAAM,CAAC;oBACL,MAAM,EAAE,IAAI;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,SAAS;oBAClB,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;oBACnC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;oBACtC,WAAW;oBACX,UAAU,EAAE,OAAO,IAAI,WAAW;oBAClC,OAAO,EAAE,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,WAAW,YAAY,OAAO,MAAM;iBAC5F,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,+BAA+B;YAC/B,IAAI,eAAe,EAAE,KAAK,MAAM;gBAAE,eAAe,EAAE,CAAC;YAEpD,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC5B,QAAQ;gBACR,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBACtC,IAAI,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACnC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;wBAC/C,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;oBACnE,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;gBACzD,CAAC,CAAC,CAAC;gBACH,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;gBAEpG,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBAC1B,cAAc,EAAE,CAAC;oBACjB,KAAK,CAAC,aAAa,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,IAAI,CAAC,cAAc,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,MAAM,aAAa,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC;gBAEtF,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC;oBAC5C,cAAc,EAAE,cAAe;oBAC/B,OAAO;oBACP,WAAW;oBACX,SAAS;iBACV,CAAC,CAAC;gBAEH,cAAc,EAAE,CAAC;gBAEjB,uBAAuB;gBACvB,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,IAAI,SAAS,EAAE,cAAc,CAAC,CAAC;gBAErF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;gBAC3D,MAAM,CAAC;oBACL,OAAO,EAAE,YAAY,GAAG,CAAC;oBACzB,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,YAAY;oBACZ,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY;oBAC1C,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,cAAc,EAAE,CAAC;gBACjB,MAAM,CAAC;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yBAAyB;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC;YACjB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,+DAA+D;IAC/D,yCAAyC;IACzC,+DAA+D;IAC/D,WAAW;SACR,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,OAAO,CAAC;SACpB,cAAc,CAAC,mBAAmB,EAAE,SAAS,CAAC;SAC9C,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,eAAe,EAAE,KAAK,CAAC;SACjD,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,EAAE,KAAK,CAAC;SACxE,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;SAC5B,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;SACrC,MAAM,CAAC,iBAAiB,EAAE,WAAW,EAAE,KAAK,CAAC;SAC7C,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;SAC3C,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,OAAO;YACP,MAAM,yBAAyB,EAAE,CAAC;YAElC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE1C,OAAO;YACP,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,cAAc;YACd,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,iBAAiB,OAAO,CAAC,MAAM,sCAAsC,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnF,KAAK,CAAC,YAAY,OAAO,CAAC,MAAM,kBAAkB,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,KAAK,CAAC,sCAAsC,CAAC,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACjB,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEpC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAAC,KAAK,CAAC,QAAQ,WAAW,MAAM,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACtE,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAC,KAAK,CAAC,SAAS,SAAS,MAAM,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACnE,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAC5E,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAE3E,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW;gBACrC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC7B,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC9B,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBAC1C,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE7E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,yBAAyB;gBACzB,MAAM,QAAQ,GAAoD,EAAE,CAAC;gBACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBACvE,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa;wBACxC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa;wBACpC,OAAO,EAAE,GAAG;qBACb,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,CAAC;oBACL,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,WAAW;oBACtB,OAAO,EAAE,SAAS;oBAClB,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM;oBACrC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;oBACjC,KAAK,EAAE,SAAS;oBAChB,QAAQ;oBACR,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,+BAA+B;YAC/B,IAAI,eAAe,EAAE,KAAK,MAAM;gBAAE,eAAe,EAAE,CAAC;YAEpD,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAU,EAAE,CAAC;gBAE1B,IAAI,CAAC,iBAAiB,SAAS,MAAM,CAAC,CAAC;gBAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;oBACnC,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAEpC,+BAA+B;oBAC/B,IAAI,SAAiB,CAAC;oBACtB,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;wBAC7B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;wBAC7D,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,WAAW,CAAC,CAAC;oBACrD,CAAC;yBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;wBACtC,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBACzC,CAAC;yBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACxC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;wBAC7D,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;oBACpE,CAAC;yBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;wBACvC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;wBACvC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;wBACvC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,SAAS,GAAG,CAAC,CAAC;oBAChB,CAAC;oBAED,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;wBACnB,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,UAAU,CAAC,aAAa;4BAC9B,EAAE,EAAE,QAAQ,CAAC,aAAa;4BAC1B,MAAM,EAAE,CAAC;4BACT,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,MAAM;4BACb,KAAK,EAAE,KAAK;yBACb,CAAC,CAAC;wBACH,SAAS;oBACX,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;wBACtC,cAAc,EAAE,sBAAsB,CAAC,UAAU,CAAC;wBAClD,SAAS,EAAE,QAAQ,CAAC,aAAa;wBACjC,SAAS;wBACT,WAAW;qBACZ,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAErB,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;wBACtB,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACxC,CAAC;gBACH,CAAC;gBAED,cAAc,EAAE,CAAC;gBAEjB,wBAAwB;gBACxB,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;gBAExE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;gBAClE,MAAM,CAAC;oBACL,OAAO,EAAE,YAAY,GAAG,CAAC;oBACzB,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,YAAY;oBACZ,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,YAAY;oBAC1C,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,cAAc,EAAE,CAAC;gBACjB,MAAM,CAAC;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yBAAyB;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC;YACjB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 钱包组管理命令组
3
+ *
4
+ * forgex wallet create-group | list-groups | group-info | delete-group |
5
+ * generate | add | remove | import | export |
6
+ * import-group | export-group | overview | grind
7
+ */
8
+ import { Command } from 'commander';
9
+ export declare function registerWalletCommands(program: Command): void;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/wallet/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+4B7D"}