@black-market/sdk 0.13.0 → 0.14.1
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.
- package/README.md +4 -4
- package/dist/lifecycle/index.d.ts +3 -1
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +3 -1
- package/dist/lifecycle/index.js.map +1 -1
- package/dist/lifecycle/lens.d.ts +409 -0
- package/dist/lifecycle/lens.d.ts.map +1 -0
- package/dist/lifecycle/lens.js +30 -0
- package/dist/lifecycle/lens.js.map +1 -0
- package/dist/lifecycle/mining.d.ts +47 -0
- package/dist/lifecycle/mining.d.ts.map +1 -0
- package/dist/lifecycle/mining.js +89 -0
- package/dist/lifecycle/mining.js.map +1 -0
- package/dist/lifecycle/planner.d.ts.map +1 -1
- package/dist/lifecycle/planner.js +70 -62
- package/dist/lifecycle/planner.js.map +1 -1
- package/dist/lifecycle/presets.d.ts +5 -0
- package/dist/lifecycle/presets.d.ts.map +1 -1
- package/dist/lifecycle/presets.js +5 -0
- package/dist/lifecycle/presets.js.map +1 -1
- package/dist/lifecycle/progress.d.ts +48 -0
- package/dist/lifecycle/progress.d.ts.map +1 -1
- package/dist/lifecycle/progress.js +31 -20
- package/dist/lifecycle/progress.js.map +1 -1
- package/dist/lifecycle/rpc.d.ts +6 -2
- package/dist/lifecycle/rpc.d.ts.map +1 -1
- package/dist/lifecycle/rpc.js +47 -44
- package/dist/lifecycle/rpc.js.map +1 -1
- package/dist/lifecycle/simulation.d.ts +5 -3
- package/dist/lifecycle/simulation.d.ts.map +1 -1
- package/dist/lifecycle/simulation.js +130 -109
- package/dist/lifecycle/simulation.js.map +1 -1
- package/dist/lifecycle/snapshot.d.ts +8 -0
- package/dist/lifecycle/snapshot.d.ts.map +1 -0
- package/dist/lifecycle/snapshot.js +79 -0
- package/dist/lifecycle/snapshot.js.map +1 -0
- package/dist/lifecycle/types.d.ts +15 -5
- package/dist/lifecycle/types.d.ts.map +1 -1
- package/dist/lifecycle/types.js.map +1 -1
- package/docs/launch-lifecycle.md +42 -20
- package/docs/reference.md +43 -6
- package/examples/README.md +2 -2
- package/package.json +1 -1
- package/src/lifecycle/index.ts +5 -1
- package/src/lifecycle/lens.ts +42 -0
- package/src/lifecycle/mining.ts +80 -0
- package/src/lifecycle/planner.ts +72 -58
- package/src/lifecycle/presets.ts +10 -0
- package/src/lifecycle/progress.ts +26 -16
- package/src/lifecycle/rpc.ts +45 -43
- package/src/lifecycle/simulation.ts +126 -100
- package/src/lifecycle/snapshot.ts +72 -0
- package/src/lifecycle/types.ts +15 -5
package/README.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
# Abyss TypeScript SDK
|
|
4
4
|
|
|
5
5
|
Use `@black-market/sdk` with [viem](https://viem.sh) to launch tokens, swap, and read lending markets.
|
|
6
|
-
This guide targets SDK **0.
|
|
6
|
+
This guide targets SDK **0.14.1** on Robinhood Chain mainnet (**4663**).
|
|
7
7
|
The package supports Node 20+; running the checkout's TypeScript examples requires **Node 24+**.
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
pnpm add @black-market/sdk@0.
|
|
12
|
+
pnpm add @black-market/sdk@0.14.1 viem
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
To run the examples, use a checkout:
|
|
@@ -96,8 +96,8 @@ quotes are WETH unless USDG is listed. Positions are permanently locked.
|
|
|
96
96
|
|
|
97
97
|
## Choose an offering for your integration
|
|
98
98
|
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
Use `listKnownLifecycleProfiles` for the release's supported offerings and deployment wiring.
|
|
100
|
+
Planning batches current state and proves exact calldata; live registry discovery is optional.
|
|
101
101
|
|
|
102
102
|
| Offering | Choose it for | Guide |
|
|
103
103
|
| --- | --- | --- |
|
|
@@ -5,12 +5,14 @@ export * from "./abi.js";
|
|
|
5
5
|
export * from "./markets.js";
|
|
6
6
|
export * from "./hmm.js";
|
|
7
7
|
export * from "./ufg.js";
|
|
8
|
-
export
|
|
8
|
+
export { ABYSS_LIFECYCLE_CONFIG_SCHEMA, readLifecycleTokenAtBlock, readLifecycleHeadProgress, predictLifecycleToken, validateV4LifecycleOracle, readLifecycleProfiles, readPoolBoundHookDeployment, buildPoolBoundHookDeploymentTransaction, validateLifecycleMarketIdentity, readLaunchProgress } from "./progress.js";
|
|
9
9
|
export * from "./fork.js";
|
|
10
10
|
export * from "./authors.js";
|
|
11
11
|
export * from "./presets.js";
|
|
12
12
|
export * from "./transactions.js";
|
|
13
13
|
export { createLifecycleSessionCache } from "./rpc.js";
|
|
14
|
+
export { launchLensAbi } from "./lens.js";
|
|
15
|
+
export { hookSaltMinerAbi } from "./mining.js";
|
|
14
16
|
export { planLaunch, simulateLaunchPlan, buildNextTransaction, prepareAndPlanLifecycleLaunch } from "./planner.js";
|
|
15
17
|
export { assertLaunchTopologyCoverage, getTickAtSqrtRatio, type LaunchTopologyCoverageInput, type LaunchTopologyPosition } from "../launch.js";
|
|
16
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,qBAAqB,EACjH,yBAAyB,EAAE,qBAAqB,EAAE,2BAA2B,EAC7E,uCAAuC,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtH,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,KAAK,2BAA2B,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/lifecycle/index.js
CHANGED
|
@@ -5,12 +5,14 @@ export * from "./abi.js";
|
|
|
5
5
|
export * from "./markets.js";
|
|
6
6
|
export * from "./hmm.js";
|
|
7
7
|
export * from "./ufg.js";
|
|
8
|
-
export
|
|
8
|
+
export { ABYSS_LIFECYCLE_CONFIG_SCHEMA, readLifecycleTokenAtBlock, readLifecycleHeadProgress, predictLifecycleToken, validateV4LifecycleOracle, readLifecycleProfiles, readPoolBoundHookDeployment, buildPoolBoundHookDeploymentTransaction, validateLifecycleMarketIdentity, readLaunchProgress } from "./progress.js";
|
|
9
9
|
export * from "./fork.js";
|
|
10
10
|
export * from "./authors.js";
|
|
11
11
|
export * from "./presets.js";
|
|
12
12
|
export * from "./transactions.js";
|
|
13
13
|
export { createLifecycleSessionCache } from "./rpc.js";
|
|
14
|
+
export { launchLensAbi } from "./lens.js";
|
|
15
|
+
export { hookSaltMinerAbi } from "./mining.js";
|
|
14
16
|
export { planLaunch, simulateLaunchPlan, buildNextTransaction, prepareAndPlanLifecycleLaunch } from "./planner.js";
|
|
15
17
|
export { assertLaunchTopologyCoverage, getTickAtSqrtRatio } from "../launch.js";
|
|
16
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lifecycle/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,qBAAqB,EACjH,yBAAyB,EAAE,qBAAqB,EAAE,2BAA2B,EAC7E,uCAAuC,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtH,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACnH,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAiE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { type Address, type Hex } from "viem";
|
|
2
|
+
import { type LaunchProgressV1, type PreparedMarketV1, type MarketLiveStateV1 } from "./schema.js";
|
|
3
|
+
import type { LifecycleBlock, LifecycleRpcClient } from "./types.js";
|
|
4
|
+
/** ILaunchLens.sol, versioned planning snapshot. Its address is owned by the deployment preset. */
|
|
5
|
+
export declare const launchLensAbi: readonly [{
|
|
6
|
+
readonly type: "function";
|
|
7
|
+
readonly name: "snapshot";
|
|
8
|
+
readonly stateMutability: "view";
|
|
9
|
+
readonly inputs: readonly [{
|
|
10
|
+
readonly name: "plan";
|
|
11
|
+
readonly type: "tuple";
|
|
12
|
+
readonly components: readonly [{
|
|
13
|
+
readonly name: "chainId";
|
|
14
|
+
readonly type: "uint256";
|
|
15
|
+
}, {
|
|
16
|
+
readonly name: "orchestrator";
|
|
17
|
+
readonly type: "address";
|
|
18
|
+
}, {
|
|
19
|
+
readonly name: "creator";
|
|
20
|
+
readonly type: "address";
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "nonce";
|
|
23
|
+
readonly type: "uint256";
|
|
24
|
+
}, {
|
|
25
|
+
readonly name: "token";
|
|
26
|
+
readonly type: "tuple";
|
|
27
|
+
readonly components: readonly [{
|
|
28
|
+
readonly name: "kind";
|
|
29
|
+
readonly type: "uint8";
|
|
30
|
+
}, {
|
|
31
|
+
readonly name: "rewardMode";
|
|
32
|
+
readonly type: "uint8";
|
|
33
|
+
}, {
|
|
34
|
+
readonly name: "name";
|
|
35
|
+
readonly type: "string";
|
|
36
|
+
}, {
|
|
37
|
+
readonly name: "symbol";
|
|
38
|
+
readonly type: "string";
|
|
39
|
+
}, {
|
|
40
|
+
readonly name: "supply";
|
|
41
|
+
readonly type: "uint256";
|
|
42
|
+
}, {
|
|
43
|
+
readonly name: "nftUnit";
|
|
44
|
+
readonly type: "uint256";
|
|
45
|
+
}, {
|
|
46
|
+
readonly name: "metadataURI";
|
|
47
|
+
readonly type: "string";
|
|
48
|
+
}, {
|
|
49
|
+
readonly name: "salt";
|
|
50
|
+
readonly type: "bytes32";
|
|
51
|
+
}, {
|
|
52
|
+
readonly name: "inventoryRecipient";
|
|
53
|
+
readonly type: "address";
|
|
54
|
+
}, {
|
|
55
|
+
readonly name: "burnOnCancel";
|
|
56
|
+
readonly type: "bool";
|
|
57
|
+
}];
|
|
58
|
+
}, {
|
|
59
|
+
readonly name: "funding";
|
|
60
|
+
readonly type: "tuple[]";
|
|
61
|
+
readonly components: readonly [{
|
|
62
|
+
readonly name: "asset";
|
|
63
|
+
readonly type: "address";
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: "amount";
|
|
66
|
+
readonly type: "uint256";
|
|
67
|
+
}, {
|
|
68
|
+
readonly name: "kind";
|
|
69
|
+
readonly type: "uint8";
|
|
70
|
+
}, {
|
|
71
|
+
readonly name: "inputAsset";
|
|
72
|
+
readonly type: "address";
|
|
73
|
+
}, {
|
|
74
|
+
readonly name: "inputAmount";
|
|
75
|
+
readonly type: "uint256";
|
|
76
|
+
}, {
|
|
77
|
+
readonly name: "target";
|
|
78
|
+
readonly type: "address";
|
|
79
|
+
}, {
|
|
80
|
+
readonly name: "data";
|
|
81
|
+
readonly type: "bytes";
|
|
82
|
+
}];
|
|
83
|
+
}, {
|
|
84
|
+
readonly name: "feeAssets";
|
|
85
|
+
readonly type: "tuple[]";
|
|
86
|
+
readonly components: readonly [{
|
|
87
|
+
readonly name: "asset";
|
|
88
|
+
readonly type: "address";
|
|
89
|
+
}, {
|
|
90
|
+
readonly name: "ownerBps";
|
|
91
|
+
readonly type: "uint16";
|
|
92
|
+
}, {
|
|
93
|
+
readonly name: "rewardsBps";
|
|
94
|
+
readonly type: "uint16";
|
|
95
|
+
}, {
|
|
96
|
+
readonly name: "burnBps";
|
|
97
|
+
readonly type: "uint16";
|
|
98
|
+
}];
|
|
99
|
+
}, {
|
|
100
|
+
readonly name: "markets";
|
|
101
|
+
readonly type: "tuple[]";
|
|
102
|
+
readonly components: readonly [{
|
|
103
|
+
readonly name: "adapterId";
|
|
104
|
+
readonly type: "bytes32";
|
|
105
|
+
}, {
|
|
106
|
+
readonly name: "profileId";
|
|
107
|
+
readonly type: "bytes32";
|
|
108
|
+
}, {
|
|
109
|
+
readonly name: "quoteAsset";
|
|
110
|
+
readonly type: "address";
|
|
111
|
+
}, {
|
|
112
|
+
readonly name: "tokenBudget";
|
|
113
|
+
readonly type: "uint256";
|
|
114
|
+
}, {
|
|
115
|
+
readonly name: "configVersion";
|
|
116
|
+
readonly type: "uint32";
|
|
117
|
+
}, {
|
|
118
|
+
readonly name: "config";
|
|
119
|
+
readonly type: "bytes";
|
|
120
|
+
}];
|
|
121
|
+
}, {
|
|
122
|
+
readonly name: "buys";
|
|
123
|
+
readonly type: "tuple[]";
|
|
124
|
+
readonly components: readonly [{
|
|
125
|
+
readonly name: "marketIndex";
|
|
126
|
+
readonly type: "uint32";
|
|
127
|
+
}, {
|
|
128
|
+
readonly name: "quoteAmountIn";
|
|
129
|
+
readonly type: "uint256";
|
|
130
|
+
}, {
|
|
131
|
+
readonly name: "minTokenOut";
|
|
132
|
+
readonly type: "uint256";
|
|
133
|
+
}, {
|
|
134
|
+
readonly name: "recipient";
|
|
135
|
+
readonly type: "address";
|
|
136
|
+
}, {
|
|
137
|
+
readonly name: "sqrtPriceLimitX96";
|
|
138
|
+
readonly type: "uint160";
|
|
139
|
+
}];
|
|
140
|
+
}, {
|
|
141
|
+
readonly name: "deadline";
|
|
142
|
+
readonly type: "uint256";
|
|
143
|
+
}, {
|
|
144
|
+
readonly name: "executorFeeBps";
|
|
145
|
+
readonly type: "uint16";
|
|
146
|
+
}];
|
|
147
|
+
}, {
|
|
148
|
+
readonly name: "owner";
|
|
149
|
+
readonly type: "address";
|
|
150
|
+
}, {
|
|
151
|
+
readonly name: "fundingEscrow";
|
|
152
|
+
readonly type: "address";
|
|
153
|
+
}, {
|
|
154
|
+
readonly name: "tokens";
|
|
155
|
+
readonly type: "address[]";
|
|
156
|
+
}, {
|
|
157
|
+
readonly name: "maxAttempts";
|
|
158
|
+
readonly type: "uint256";
|
|
159
|
+
}];
|
|
160
|
+
readonly outputs: readonly [{
|
|
161
|
+
readonly name: "result";
|
|
162
|
+
readonly type: "tuple";
|
|
163
|
+
readonly components: readonly [{
|
|
164
|
+
readonly name: "chainId";
|
|
165
|
+
readonly type: "uint256";
|
|
166
|
+
}, {
|
|
167
|
+
readonly name: "blockNumber";
|
|
168
|
+
readonly type: "uint256";
|
|
169
|
+
}, {
|
|
170
|
+
readonly name: "parentBlockHash";
|
|
171
|
+
readonly type: "bytes32";
|
|
172
|
+
}, {
|
|
173
|
+
readonly name: "timestamp";
|
|
174
|
+
readonly type: "uint256";
|
|
175
|
+
}, {
|
|
176
|
+
readonly name: "nativeBalance";
|
|
177
|
+
readonly type: "uint256";
|
|
178
|
+
}, {
|
|
179
|
+
readonly name: "tokenBalances";
|
|
180
|
+
readonly type: "tuple[]";
|
|
181
|
+
readonly components: readonly [{
|
|
182
|
+
readonly name: "token";
|
|
183
|
+
readonly type: "address";
|
|
184
|
+
}, {
|
|
185
|
+
readonly name: "balance";
|
|
186
|
+
readonly type: "uint256";
|
|
187
|
+
}, {
|
|
188
|
+
readonly name: "allowance";
|
|
189
|
+
readonly type: "uint256";
|
|
190
|
+
}];
|
|
191
|
+
}, {
|
|
192
|
+
readonly name: "predictedToken";
|
|
193
|
+
readonly type: "address";
|
|
194
|
+
}, {
|
|
195
|
+
readonly name: "launchId";
|
|
196
|
+
readonly type: "bytes32";
|
|
197
|
+
}, {
|
|
198
|
+
readonly name: "progress";
|
|
199
|
+
readonly type: "tuple";
|
|
200
|
+
readonly components: readonly [{
|
|
201
|
+
readonly name: "launchId";
|
|
202
|
+
readonly type: "bytes32";
|
|
203
|
+
}, {
|
|
204
|
+
readonly name: "planHash";
|
|
205
|
+
readonly type: "bytes32";
|
|
206
|
+
}, {
|
|
207
|
+
readonly name: "creator";
|
|
208
|
+
readonly type: "address";
|
|
209
|
+
}, {
|
|
210
|
+
readonly name: "nonce";
|
|
211
|
+
readonly type: "uint256";
|
|
212
|
+
}, {
|
|
213
|
+
readonly name: "mode";
|
|
214
|
+
readonly type: "uint8";
|
|
215
|
+
}, {
|
|
216
|
+
readonly name: "phase";
|
|
217
|
+
readonly type: "uint8";
|
|
218
|
+
}, {
|
|
219
|
+
readonly name: "token";
|
|
220
|
+
readonly type: "address";
|
|
221
|
+
}, {
|
|
222
|
+
readonly name: "feeHub";
|
|
223
|
+
readonly type: "address";
|
|
224
|
+
}, {
|
|
225
|
+
readonly name: "rewards";
|
|
226
|
+
readonly type: "address";
|
|
227
|
+
}, {
|
|
228
|
+
readonly name: "preparedMarkets";
|
|
229
|
+
readonly type: "uint32";
|
|
230
|
+
}, {
|
|
231
|
+
readonly name: "marketCount";
|
|
232
|
+
readonly type: "uint32";
|
|
233
|
+
}, {
|
|
234
|
+
readonly name: "buyCount";
|
|
235
|
+
readonly type: "uint32";
|
|
236
|
+
}, {
|
|
237
|
+
readonly name: "positionCount";
|
|
238
|
+
readonly type: "uint32";
|
|
239
|
+
}, {
|
|
240
|
+
readonly name: "deadline";
|
|
241
|
+
readonly type: "uint256";
|
|
242
|
+
}];
|
|
243
|
+
}, {
|
|
244
|
+
readonly name: "preparedMarkets";
|
|
245
|
+
readonly type: "tuple[]";
|
|
246
|
+
readonly components: readonly [{
|
|
247
|
+
readonly name: "index";
|
|
248
|
+
readonly type: "uint32";
|
|
249
|
+
}, {
|
|
250
|
+
readonly name: "adapter";
|
|
251
|
+
readonly type: "address";
|
|
252
|
+
}, {
|
|
253
|
+
readonly name: "prepared";
|
|
254
|
+
readonly type: "tuple";
|
|
255
|
+
readonly components: readonly [{
|
|
256
|
+
readonly name: "identity";
|
|
257
|
+
readonly type: "tuple";
|
|
258
|
+
readonly components: readonly [{
|
|
259
|
+
readonly name: "venue";
|
|
260
|
+
readonly type: "uint8";
|
|
261
|
+
}, {
|
|
262
|
+
readonly name: "canonicalId";
|
|
263
|
+
readonly type: "bytes32";
|
|
264
|
+
}, {
|
|
265
|
+
readonly name: "manager";
|
|
266
|
+
readonly type: "address";
|
|
267
|
+
}, {
|
|
268
|
+
readonly name: "factory";
|
|
269
|
+
readonly type: "address";
|
|
270
|
+
}, {
|
|
271
|
+
readonly name: "pool";
|
|
272
|
+
readonly type: "address";
|
|
273
|
+
}, {
|
|
274
|
+
readonly name: "poolId";
|
|
275
|
+
readonly type: "bytes32";
|
|
276
|
+
}, {
|
|
277
|
+
readonly name: "profileId";
|
|
278
|
+
readonly type: "bytes32";
|
|
279
|
+
}, {
|
|
280
|
+
readonly name: "currency0";
|
|
281
|
+
readonly type: "address";
|
|
282
|
+
}, {
|
|
283
|
+
readonly name: "currency1";
|
|
284
|
+
readonly type: "address";
|
|
285
|
+
}, {
|
|
286
|
+
readonly name: "fee";
|
|
287
|
+
readonly type: "uint24";
|
|
288
|
+
}, {
|
|
289
|
+
readonly name: "tickSpacing";
|
|
290
|
+
readonly type: "int24";
|
|
291
|
+
}, {
|
|
292
|
+
readonly name: "hook";
|
|
293
|
+
readonly type: "address";
|
|
294
|
+
}, {
|
|
295
|
+
readonly name: "openingSqrtPriceX96";
|
|
296
|
+
readonly type: "uint160";
|
|
297
|
+
}];
|
|
298
|
+
}, {
|
|
299
|
+
readonly name: "feeSource";
|
|
300
|
+
readonly type: "address";
|
|
301
|
+
}, {
|
|
302
|
+
readonly name: "custody";
|
|
303
|
+
readonly type: "address";
|
|
304
|
+
}, {
|
|
305
|
+
readonly name: "mintExecutor";
|
|
306
|
+
readonly type: "address";
|
|
307
|
+
}, {
|
|
308
|
+
readonly name: "buyExecutor";
|
|
309
|
+
readonly type: "address";
|
|
310
|
+
}, {
|
|
311
|
+
readonly name: "exclusions";
|
|
312
|
+
readonly type: "address[]";
|
|
313
|
+
}, {
|
|
314
|
+
readonly name: "positionCount";
|
|
315
|
+
readonly type: "uint32";
|
|
316
|
+
}];
|
|
317
|
+
}, {
|
|
318
|
+
readonly name: "liveStateSuccess";
|
|
319
|
+
readonly type: "bool";
|
|
320
|
+
}, {
|
|
321
|
+
readonly name: "live";
|
|
322
|
+
readonly type: "tuple";
|
|
323
|
+
readonly components: readonly [{
|
|
324
|
+
readonly name: "sqrtPriceX96";
|
|
325
|
+
readonly type: "uint160";
|
|
326
|
+
}, {
|
|
327
|
+
readonly name: "tick";
|
|
328
|
+
readonly type: "int24";
|
|
329
|
+
}, {
|
|
330
|
+
readonly name: "liquidity";
|
|
331
|
+
readonly type: "uint128";
|
|
332
|
+
}, {
|
|
333
|
+
readonly name: "publicTrading";
|
|
334
|
+
readonly type: "bool";
|
|
335
|
+
}, {
|
|
336
|
+
readonly name: "oracleReadyAt";
|
|
337
|
+
readonly type: "uint256";
|
|
338
|
+
}];
|
|
339
|
+
}, {
|
|
340
|
+
readonly name: "liveStateError";
|
|
341
|
+
readonly type: "bytes";
|
|
342
|
+
}];
|
|
343
|
+
}, {
|
|
344
|
+
readonly name: "hookDeployments";
|
|
345
|
+
readonly type: "tuple[]";
|
|
346
|
+
readonly components: readonly [{
|
|
347
|
+
readonly name: "marketIndex";
|
|
348
|
+
readonly type: "uint32";
|
|
349
|
+
}, {
|
|
350
|
+
readonly name: "adapter";
|
|
351
|
+
readonly type: "address";
|
|
352
|
+
}, {
|
|
353
|
+
readonly name: "deployer";
|
|
354
|
+
readonly type: "address";
|
|
355
|
+
}, {
|
|
356
|
+
readonly name: "constructorParameters";
|
|
357
|
+
readonly type: "bytes";
|
|
358
|
+
}, {
|
|
359
|
+
readonly name: "initCodeHash";
|
|
360
|
+
readonly type: "bytes32";
|
|
361
|
+
}, {
|
|
362
|
+
readonly name: "salt";
|
|
363
|
+
readonly type: "bytes32";
|
|
364
|
+
}, {
|
|
365
|
+
readonly name: "hook";
|
|
366
|
+
readonly type: "address";
|
|
367
|
+
}, {
|
|
368
|
+
readonly name: "found";
|
|
369
|
+
readonly type: "bool";
|
|
370
|
+
}];
|
|
371
|
+
}];
|
|
372
|
+
}];
|
|
373
|
+
}];
|
|
374
|
+
export type LifecycleLensSnapshot = {
|
|
375
|
+
chainId: bigint;
|
|
376
|
+
blockNumber: bigint;
|
|
377
|
+
parentBlockHash: Hex;
|
|
378
|
+
timestamp: bigint;
|
|
379
|
+
nativeBalance: bigint;
|
|
380
|
+
tokenBalances: readonly {
|
|
381
|
+
token: Address;
|
|
382
|
+
balance: bigint;
|
|
383
|
+
allowance: bigint;
|
|
384
|
+
}[];
|
|
385
|
+
predictedToken: Address;
|
|
386
|
+
launchId: Hex;
|
|
387
|
+
progress: LaunchProgressV1;
|
|
388
|
+
preparedMarkets: readonly {
|
|
389
|
+
index: number;
|
|
390
|
+
adapter: Address;
|
|
391
|
+
prepared: PreparedMarketV1;
|
|
392
|
+
liveStateSuccess: boolean;
|
|
393
|
+
live: MarketLiveStateV1;
|
|
394
|
+
liveStateError: Hex;
|
|
395
|
+
}[];
|
|
396
|
+
hookDeployments: readonly {
|
|
397
|
+
marketIndex: number;
|
|
398
|
+
adapter: Address;
|
|
399
|
+
deployer: Address;
|
|
400
|
+
constructorParameters: Hex;
|
|
401
|
+
initCodeHash: Hex;
|
|
402
|
+
salt: Hex;
|
|
403
|
+
hook: Address;
|
|
404
|
+
found: boolean;
|
|
405
|
+
}[];
|
|
406
|
+
};
|
|
407
|
+
export declare function observeLifecycleLens(client: LifecycleRpcClient, block: LifecycleBlock, snapshot: LifecycleLensSnapshot): void;
|
|
408
|
+
export declare function lifecycleLensSnapshot(client: LifecycleRpcClient, block: LifecycleBlock): LifecycleLensSnapshot | undefined;
|
|
409
|
+
//# sourceMappingURL=lens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lens.d.ts","sourceRoot":"","sources":["../../src/lifecycle/lens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAA+G,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChN,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE,mGAAmG;AACnG,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBf,CAAC;AAEZ,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IACrG,aAAa,EAAE,SAAS;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjF,cAAc,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAC;IACnE,eAAe,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAC;QAAC,cAAc,EAAE,GAAG,CAAA;KAAE,EAAE,CAAC;IACrK,eAAe,EAAE,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,qBAAqB,EAAE,GAAG,CAAC;QAAC,YAAY,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CACnL,CAAC;AAGF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAE7H;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,cAAc,GAAG,qBAAqB,GAAG,SAAS,CAG1H"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { launchPlanV1Components, launchProgressV1Components, preparedMarketV1Components, marketLiveStateV1Components } from "./schema.js";
|
|
2
|
+
/** ILaunchLens.sol, versioned planning snapshot. Its address is owned by the deployment preset. */
|
|
3
|
+
export const launchLensAbi = [{ type: "function", name: "snapshot", stateMutability: "view",
|
|
4
|
+
inputs: [{ name: "plan", type: "tuple", components: launchPlanV1Components }, { name: "owner", type: "address" },
|
|
5
|
+
{ name: "fundingEscrow", type: "address" }, { name: "tokens", type: "address[]" }, { name: "maxAttempts", type: "uint256" }],
|
|
6
|
+
outputs: [{ name: "result", type: "tuple", components: [
|
|
7
|
+
{ name: "chainId", type: "uint256" }, { name: "blockNumber", type: "uint256" },
|
|
8
|
+
{ name: "parentBlockHash", type: "bytes32" }, { name: "timestamp", type: "uint256" }, { name: "nativeBalance", type: "uint256" },
|
|
9
|
+
{ name: "tokenBalances", type: "tuple[]", components: [{ name: "token", type: "address" }, { name: "balance", type: "uint256" }, { name: "allowance", type: "uint256" }] },
|
|
10
|
+
{ name: "predictedToken", type: "address" }, { name: "launchId", type: "bytes32" },
|
|
11
|
+
{ name: "progress", type: "tuple", components: launchProgressV1Components },
|
|
12
|
+
{ name: "preparedMarkets", type: "tuple[]", components: [
|
|
13
|
+
{ name: "index", type: "uint32" }, { name: "adapter", type: "address" }, { name: "prepared", type: "tuple", components: preparedMarketV1Components },
|
|
14
|
+
{ name: "liveStateSuccess", type: "bool" }, { name: "live", type: "tuple", components: marketLiveStateV1Components }, { name: "liveStateError", type: "bytes" },
|
|
15
|
+
] },
|
|
16
|
+
{ name: "hookDeployments", type: "tuple[]", components: [
|
|
17
|
+
{ name: "marketIndex", type: "uint32" }, { name: "adapter", type: "address" }, { name: "deployer", type: "address" },
|
|
18
|
+
{ name: "constructorParameters", type: "bytes" }, { name: "initCodeHash", type: "bytes32" }, { name: "salt", type: "bytes32" }, { name: "hook", type: "address" }, { name: "found", type: "bool" },
|
|
19
|
+
] },
|
|
20
|
+
] }],
|
|
21
|
+
}];
|
|
22
|
+
const snapshots = new WeakMap();
|
|
23
|
+
export function observeLifecycleLens(client, block, snapshot) {
|
|
24
|
+
snapshots.set(client, { blockHash: block.hash.toLowerCase(), snapshot });
|
|
25
|
+
}
|
|
26
|
+
export function lifecycleLensSnapshot(client, block) {
|
|
27
|
+
const observation = snapshots.get(client);
|
|
28
|
+
return observation?.snapshot.blockNumber === block.number && observation.blockHash === block.hash.toLowerCase() ? observation.snapshot : undefined;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=lens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lens.js","sourceRoot":"","sources":["../../src/lifecycle/lens.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,2BAA2B,EAAwE,MAAM,aAAa,CAAC;AAGhN,mGAAmG;AACnG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM;QACzF,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YAC9G,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9H,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE;oBACrD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;oBAC9E,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;oBAChI,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE;oBAC1K,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;oBAClF,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE;oBAC3E,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE;4BACtD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE;4BACpJ,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,2BAA2B,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,EAAE;yBAChK,EAAE;oBACH,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE;4BACtD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;4BACpH,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;yBACnM,EAAE;iBACJ,EAAE,CAAC;KACL,CAAU,CAAC;AASZ,MAAM,SAAS,GAAG,IAAI,OAAO,EAA2E,CAAC;AAEzG,MAAM,UAAU,oBAAoB,CAAC,MAA0B,EAAE,KAAqB,EAAE,QAA+B;IACrH,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAA0B,EAAE,KAAqB;IACrF,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,WAAW,EAAE,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type Address } from "viem";
|
|
2
|
+
import { type LifecycleBlock, type LifecyclePoolBoundHookDeployment, type LifecycleRpcClient, type PoolBoundLifecyclePreparationProgress } from "./types.js";
|
|
3
|
+
export declare const hookSaltMinerAbi: readonly [{
|
|
4
|
+
readonly name: "findMany";
|
|
5
|
+
readonly type: "function";
|
|
6
|
+
readonly stateMutability: "pure";
|
|
7
|
+
readonly inputs: readonly [{
|
|
8
|
+
readonly type: "tuple[]";
|
|
9
|
+
readonly components: readonly [{
|
|
10
|
+
readonly type: "address";
|
|
11
|
+
readonly name: "deployer";
|
|
12
|
+
}, {
|
|
13
|
+
readonly type: "bytes32";
|
|
14
|
+
readonly name: "initCodeHash";
|
|
15
|
+
}, {
|
|
16
|
+
readonly type: "uint256";
|
|
17
|
+
readonly name: "startSalt";
|
|
18
|
+
}, {
|
|
19
|
+
readonly type: "uint160";
|
|
20
|
+
readonly name: "flags";
|
|
21
|
+
}];
|
|
22
|
+
readonly name: "searches";
|
|
23
|
+
}, {
|
|
24
|
+
readonly type: "uint256";
|
|
25
|
+
readonly name: "maxAttempts";
|
|
26
|
+
}];
|
|
27
|
+
readonly outputs: readonly [{
|
|
28
|
+
readonly type: "bytes32[]";
|
|
29
|
+
readonly name: "salts";
|
|
30
|
+
}, {
|
|
31
|
+
readonly type: "address[]";
|
|
32
|
+
readonly name: "hooks";
|
|
33
|
+
}, {
|
|
34
|
+
readonly type: "bool[]";
|
|
35
|
+
readonly name: "found";
|
|
36
|
+
}];
|
|
37
|
+
}];
|
|
38
|
+
/** Read-only bounded EVM mining; every returned winner is checked with local CREATE2. */
|
|
39
|
+
export declare function mineLifecycleHooks(options: {
|
|
40
|
+
client: LifecycleRpcClient;
|
|
41
|
+
block: LifecycleBlock;
|
|
42
|
+
miner?: Address;
|
|
43
|
+
deployments: readonly LifecyclePoolBoundHookDeployment[];
|
|
44
|
+
signal?: AbortSignal;
|
|
45
|
+
onProgress?: (progress: PoolBoundLifecyclePreparationProgress) => void;
|
|
46
|
+
}): Promise<LifecyclePoolBoundHookDeployment[]>;
|
|
47
|
+
//# sourceMappingURL=mining.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mining.d.ts","sourceRoot":"","sources":["../../src/lifecycle/mining.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAY,MAAM,MAAM,CAAC;AAGxD,OAAO,EAA0B,KAAK,cAAc,EAAE,KAAK,gCAAgC,EAAE,KAAK,kBAAkB,EAAE,KAAK,qCAAqC,EAAE,MAAM,YAAY,CAAC;AAGrL,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA4M,CAAC;AAE1O,yFAAyF;AACzF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,MAAM,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACnE,WAAW,EAAE,SAAS,gCAAgC,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC/E,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,qCAAqC,KAAK,IAAI,CAAC;CACxE,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC,CAkE9C"}
|