moltycash 8.0.1 → 8.1.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.
- package/dist/reward.js +99 -25
- package/dist/reward.js.map +1 -1
- package/package.json +1 -1
package/dist/reward.js
CHANGED
|
@@ -2,25 +2,35 @@ import "dotenv/config";
|
|
|
2
2
|
import minimist from "minimist";
|
|
3
3
|
import axios from "axios";
|
|
4
4
|
import { privateKeyToAccount } from "viem/accounts";
|
|
5
|
+
import { x402Client } from "@x402/core/client";
|
|
6
|
+
import { registerExactEvmScheme } from "@x402/evm/exact/client";
|
|
5
7
|
import { readCachedSession } from "./lib/session.js";
|
|
6
8
|
const privateKey = process.env.EVM_PRIVATE_KEY;
|
|
7
9
|
const baseURL = process.env.RESOURCE_SERVER_URL || "https://api.molty.cash";
|
|
10
|
+
const X402_EXTENSION_URI = "https://github.com/google-a2a/a2a-x402/v0.1";
|
|
8
11
|
let rpcIdCounter = 1;
|
|
9
|
-
function
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
async function rpcWithSession(method, params, sessionToken) {
|
|
13
|
+
const response = await axios.post(`${baseURL}/a2a`, {
|
|
14
|
+
jsonrpc: "2.0",
|
|
15
|
+
id: rpcIdCounter++,
|
|
16
|
+
method,
|
|
17
|
+
params,
|
|
18
|
+
}, {
|
|
19
|
+
headers: {
|
|
20
|
+
"Content-Type": "application/json",
|
|
21
|
+
"X-Molty-Session-Token": sessionToken,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
if (response.data.error) {
|
|
25
|
+
const err = response.data.error;
|
|
26
|
+
const e = new Error(err.message || "A2A request failed");
|
|
27
|
+
e.code = err.code;
|
|
28
|
+
e.data = err.data;
|
|
29
|
+
throw e;
|
|
20
30
|
}
|
|
21
|
-
return
|
|
31
|
+
return response.data.result;
|
|
22
32
|
}
|
|
23
|
-
async function
|
|
33
|
+
async function rpcA2A(method, params) {
|
|
24
34
|
const response = await axios.post(`${baseURL}/a2a`, {
|
|
25
35
|
jsonrpc: "2.0",
|
|
26
36
|
id: rpcIdCounter++,
|
|
@@ -29,7 +39,7 @@ async function a2aCall(method, params, sessionToken) {
|
|
|
29
39
|
}, {
|
|
30
40
|
headers: {
|
|
31
41
|
"Content-Type": "application/json",
|
|
32
|
-
"X-
|
|
42
|
+
"X-A2A-Extensions": X402_EXTENSION_URI,
|
|
33
43
|
},
|
|
34
44
|
});
|
|
35
45
|
if (response.data.error) {
|
|
@@ -42,9 +52,19 @@ async function a2aCall(method, params, sessionToken) {
|
|
|
42
52
|
return response.data.result;
|
|
43
53
|
}
|
|
44
54
|
async function handleBalance() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
55
|
+
if (!privateKey || !privateKey.startsWith("0x")) {
|
|
56
|
+
console.error("❌ EVM_PRIVATE_KEY required (the wallet that owns the session)");
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
const account = privateKeyToAccount(privateKey);
|
|
60
|
+
const cached = readCachedSession(account.address);
|
|
61
|
+
if (!cached) {
|
|
62
|
+
console.error(`❌ No active session for ${account.address}.`);
|
|
63
|
+
console.error(` Run: npx moltycash session create (pays 2¢ to mint a 24h session token)`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
console.log(`🔍 Reading reward balance for ${cached.session_wallet}...`);
|
|
67
|
+
const result = await rpcWithSession("reward.balance", {}, cached.session_token);
|
|
48
68
|
console.log("");
|
|
49
69
|
console.log(`Molty wallet: ${result.molty_wallet || '(no wallet yet)'}`);
|
|
50
70
|
console.log(`$moltycash balance: ${(result.balance_tokens || 0).toLocaleString()}`);
|
|
@@ -57,6 +77,7 @@ async function handleBalance() {
|
|
|
57
77
|
console.log(`Next tier at: ${result.next_tier_min_tokens.toLocaleString()} tokens (rate ${(result.next_tier_rate * 100).toFixed(0)}%)`);
|
|
58
78
|
}
|
|
59
79
|
console.log(`Claim threshold: ${result.claim_threshold_tokens.toLocaleString()} tokens OR $${result.claim_threshold_usd.toLocaleString()} USD`);
|
|
80
|
+
console.log(`Exit tax on claim: $${result.exit_tax_flat_usd?.toFixed(2) || '1.00'} USDC (flat)`);
|
|
60
81
|
console.log(`Claimable now: ${result.claimable ? 'YES' : 'no — below threshold'}`);
|
|
61
82
|
if (result.rewards_paused)
|
|
62
83
|
console.log(`⚠️ Rewards are currently paused.`);
|
|
@@ -67,14 +88,66 @@ async function handleClaim(args) {
|
|
|
67
88
|
console.error("❌ --destination <0x...> is required (Base EVM address that receives the $moltycash)");
|
|
68
89
|
process.exit(1);
|
|
69
90
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
91
|
+
if (!privateKey || !privateKey.startsWith("0x")) {
|
|
92
|
+
console.error("❌ EVM_PRIVATE_KEY required (the wallet that pays the USDC exit tax)");
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
const account = privateKeyToAccount(privateKey);
|
|
96
|
+
console.log(`🎁 Claiming $moltycash for ${account.address} → ${destination}`);
|
|
97
|
+
// Set up x402 client to sign the USDC exit tax
|
|
98
|
+
const client = new x402Client();
|
|
99
|
+
registerExactEvmScheme(client, { signer: account });
|
|
100
|
+
// Phase 1: request fee challenge
|
|
101
|
+
console.log("💳 Phase 1: requesting USDC exit-tax challenge...");
|
|
102
|
+
const phase1 = await rpcA2A("reward.claim", { destination });
|
|
103
|
+
if (!phase1.id)
|
|
104
|
+
throw new Error("Missing task ID in Phase 1 response");
|
|
105
|
+
const paymentRequired = phase1.status?.message?.metadata?.["x402.payment.required"];
|
|
106
|
+
if (!paymentRequired)
|
|
107
|
+
throw new Error("No payment requirements in Phase 1 response");
|
|
108
|
+
// Show the fee from the requirements
|
|
109
|
+
const baseReq = (paymentRequired.accepts || []).find((r) => r.network?.startsWith('eip155:8453') || r.network?.startsWith('eip155:84532'));
|
|
110
|
+
if (baseReq) {
|
|
111
|
+
const feeUsd = Number(baseReq.amount) / 1e6;
|
|
112
|
+
console.log(` Exit tax: $${feeUsd.toFixed(2)} USDC`);
|
|
113
|
+
}
|
|
114
|
+
// Phase 2: sign + submit
|
|
115
|
+
console.log("🔐 Phase 2: signing USDC fee + executing claim...");
|
|
116
|
+
const signedPayment = await client.createPaymentPayload(paymentRequired);
|
|
117
|
+
const phase2 = await rpcA2A("reward.claim", {
|
|
118
|
+
destination,
|
|
119
|
+
taskId: phase1.id,
|
|
120
|
+
payment: signedPayment,
|
|
121
|
+
});
|
|
122
|
+
// Extract the artifact
|
|
123
|
+
const artifacts = phase2.artifacts || [];
|
|
124
|
+
let receipt = null;
|
|
125
|
+
for (const a of artifacts) {
|
|
126
|
+
if (a.data) {
|
|
127
|
+
try {
|
|
128
|
+
const parsed = JSON.parse(Buffer.from(a.data, "base64").toString());
|
|
129
|
+
if (parsed.sweep_tx) {
|
|
130
|
+
receipt = parsed;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch { /* ignore */ }
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (!receipt) {
|
|
138
|
+
// Task may have failed — surface the status message
|
|
139
|
+
const msg = phase2.status?.message?.parts
|
|
140
|
+
?.filter((p) => p.kind === "text")
|
|
141
|
+
.map((p) => p.text)
|
|
142
|
+
.join("\n");
|
|
143
|
+
throw new Error(msg || "claim completed but no receipt artifact found");
|
|
144
|
+
}
|
|
73
145
|
console.log("");
|
|
74
|
-
console.log(`✅ Claimed ${
|
|
75
|
-
console.log(` Destination:
|
|
76
|
-
console.log(`
|
|
77
|
-
console.log(`
|
|
146
|
+
console.log(`✅ Claimed ${receipt.claimed_tokens.toLocaleString()} $moltycash`);
|
|
147
|
+
console.log(` Destination: ${receipt.destination}`);
|
|
148
|
+
console.log(` Fee paid: $${receipt.fee_paid_usd} USDC`);
|
|
149
|
+
console.log(` Fee tx: https://basescan.org/tx/${receipt.fee_tx}`);
|
|
150
|
+
console.log(` Sweep tx: https://basescan.org/tx/${receipt.sweep_tx}`);
|
|
78
151
|
}
|
|
79
152
|
const args = minimist(process.argv.slice(2), {
|
|
80
153
|
string: ['destination', 'to'],
|
|
@@ -94,7 +167,8 @@ async function main() {
|
|
|
94
167
|
console.error(" moltycash reward balance");
|
|
95
168
|
console.error(" moltycash reward claim --destination <0x...>");
|
|
96
169
|
console.error("");
|
|
97
|
-
console.error("
|
|
170
|
+
console.error("balance requires an active session (run `moltycash session create` first).");
|
|
171
|
+
console.error("claim requires EVM_PRIVATE_KEY only — it pays a $1 USDC exit tax via x402.");
|
|
98
172
|
process.exit(1);
|
|
99
173
|
}
|
|
100
174
|
}
|
package/dist/reward.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reward.js","sourceRoot":"","sources":["../reward.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAsB,CAAC;AACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"reward.js","sourceRoot":"","sources":["../reward.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAsB,CAAC;AACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,wBAAwB,CAAC;AAC5E,MAAM,kBAAkB,GAAG,6CAA6C,CAAC;AAEzE,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,MAA+B,EAAE,YAAoB;IAC/F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,EAAE;QAChD,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,YAAY,EAAE;QAClB,MAAM;QACN,MAAM;KACT,EAAE;QACC,OAAO,EAAE;YACL,cAAc,EAAE,kBAAkB;YAClC,uBAAuB,EAAE,YAAY;SACxC;KACJ,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,MAAM,CAAC,GAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;QAC9D,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAClB,MAAM,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,MAA+B;IACjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,EAAE;QAChD,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,YAAY,EAAE;QAClB,MAAM;QACN,MAAM;KACT,EAAE;QACC,OAAO,EAAE;YACL,cAAc,EAAE,kBAAkB;YAClC,kBAAkB,EAAE,kBAAkB;SACzC;KACJ,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,MAAM,CAAC,GAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;QAC9D,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAClB,MAAM,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,aAAa;IACxB,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,cAAc,KAAK,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,gBAAgB,EAAE,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,YAAY,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,kBAAkB,IAAI,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvI,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,oBAAoB,CAAC,cAAc,EAAE,iBAAiB,CAAC,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,sBAAsB,CAAC,cAAc,EAAE,eAAe,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpJ,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,cAAc,CAAC,CAAC;IACnG,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,cAAc;QAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAyB;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC;IAChD,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9F,OAAO,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;QACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAC,OAAO,MAAM,WAAW,EAAE,CAAC,CAAC;IAE9E,+CAA+C;IAC/C,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,sBAAsB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAEpD,iCAAiC;IACjC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACvE,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,uBAAuB,CAAC,CAAC;IACpF,IAAI,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAErF,qCAAqC;IACrC,MAAM,OAAO,GAAG,CAAC,eAAe,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAChJ,IAAI,OAAO,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE;QACxC,WAAW;QACX,MAAM,EAAE,MAAM,CAAC,EAAE;QACjB,OAAO,EAAE,aAAa;KACzB,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IACzC,IAAI,OAAO,GAAQ,IAAI,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAClB,OAAO,GAAG,MAAM,CAAC;oBACjB,MAAM;gBACV,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,oDAAoD;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK;YACrC,EAAE,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aACtC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACvB,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,+CAA+C,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,YAAY,OAAO,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,8CAA8C,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,8CAA8C,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACzC,MAAM,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC;CAChC,CAAC,CAAC;AACH,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7B,KAAK,UAAU,IAAI;IACf,IAAI,CAAC;QACD,QAAQ,UAAU,EAAE,CAAC;YACjB,KAAK,SAAS;gBACV,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM;YACV,KAAK,OAAO;gBACR,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxB,MAAM;YACV;gBACI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC5C,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;gBAC5F,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;gBAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,uBAAuB,EAAE,CAAC,CAAC;QACrD,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
|