@wormhole-labs/cctp-executor-route 0.25.0 → 0.26.0-beta.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/dist/cjs/aptos/executor.d.ts.map +1 -1
- package/dist/cjs/aptos/executor.js +3 -2
- package/dist/cjs/aptos/executor.js.map +1 -1
- package/dist/cjs/consts.d.ts.map +1 -1
- package/dist/cjs/consts.js +4 -3
- package/dist/cjs/consts.js.map +1 -1
- package/dist/cjs/evm/executor.d.ts.map +1 -1
- package/dist/cjs/evm/executor.js +4 -3
- package/dist/cjs/evm/executor.js.map +1 -1
- package/dist/cjs/evm/executorV2.d.ts.map +1 -1
- package/dist/cjs/evm/executorV2.js +4 -3
- package/dist/cjs/evm/executorV2.js.map +1 -1
- package/dist/cjs/routes/cctpV1.d.ts +4 -4
- package/dist/cjs/routes/cctpV1.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV1.js +2 -5
- package/dist/cjs/routes/cctpV1.js.map +1 -1
- package/dist/cjs/routes/cctpV2Base.d.ts +2 -2
- package/dist/cjs/routes/cctpV2Base.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV2Base.js.map +1 -1
- package/dist/cjs/routes/cctpV2Fast.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV2Fast.js +2 -5
- package/dist/cjs/routes/cctpV2Fast.js.map +1 -1
- package/dist/cjs/routes/cctpV2Standard.d.ts.map +1 -1
- package/dist/cjs/routes/cctpV2Standard.js +2 -5
- package/dist/cjs/routes/cctpV2Standard.js.map +1 -1
- package/dist/cjs/routes/helpers.d.ts.map +1 -1
- package/dist/cjs/routes/helpers.js +8 -5
- package/dist/cjs/routes/helpers.js.map +1 -1
- package/dist/cjs/sui/executor.js +4 -4
- package/dist/cjs/sui/executor.js.map +1 -1
- package/dist/cjs/svm/executor.js +2 -2
- package/dist/cjs/svm/executor.js.map +1 -1
- package/dist/cjs/svm/executorV2.js +3 -3
- package/dist/cjs/svm/executorV2.js.map +1 -1
- package/dist/cjs/utils.d.ts +0 -30
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +0 -60
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/aptos/executor.d.ts.map +1 -1
- package/dist/esm/aptos/executor.js +3 -2
- package/dist/esm/aptos/executor.js.map +1 -1
- package/dist/esm/consts.d.ts.map +1 -1
- package/dist/esm/consts.js +4 -3
- package/dist/esm/consts.js.map +1 -1
- package/dist/esm/evm/executor.d.ts.map +1 -1
- package/dist/esm/evm/executor.js +4 -3
- package/dist/esm/evm/executor.js.map +1 -1
- package/dist/esm/evm/executorV2.d.ts.map +1 -1
- package/dist/esm/evm/executorV2.js +4 -3
- package/dist/esm/evm/executorV2.js.map +1 -1
- package/dist/esm/routes/cctpV1.d.ts +4 -4
- package/dist/esm/routes/cctpV1.d.ts.map +1 -1
- package/dist/esm/routes/cctpV1.js +2 -5
- package/dist/esm/routes/cctpV1.js.map +1 -1
- package/dist/esm/routes/cctpV2Base.d.ts +2 -2
- package/dist/esm/routes/cctpV2Base.d.ts.map +1 -1
- package/dist/esm/routes/cctpV2Base.js.map +1 -1
- package/dist/esm/routes/cctpV2Fast.d.ts.map +1 -1
- package/dist/esm/routes/cctpV2Fast.js +2 -5
- package/dist/esm/routes/cctpV2Fast.js.map +1 -1
- package/dist/esm/routes/cctpV2Standard.d.ts.map +1 -1
- package/dist/esm/routes/cctpV2Standard.js +2 -5
- package/dist/esm/routes/cctpV2Standard.js.map +1 -1
- package/dist/esm/routes/helpers.d.ts.map +1 -1
- package/dist/esm/routes/helpers.js +9 -6
- package/dist/esm/routes/helpers.js.map +1 -1
- package/dist/esm/sui/executor.js +4 -4
- package/dist/esm/sui/executor.js.map +1 -1
- package/dist/esm/svm/executor.js +2 -2
- package/dist/esm/svm/executor.js.map +1 -1
- package/dist/esm/svm/executorV2.js +3 -3
- package/dist/esm/svm/executorV2.js.map +1 -1
- package/dist/esm/utils.d.ts +0 -30
- package/dist/esm/utils.d.ts.map +1 -1
- package/dist/esm/utils.js +1 -60
- package/dist/esm/utils.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/esm/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { amount, circle, encoding, toChainId,
|
|
1
|
+
import { amount, circle, encoding, toChainId, } from "@wormhole-foundation/sdk-base";
|
|
2
2
|
import { deserializeCircleV2Message, } from "./layouts";
|
|
3
3
|
import axios from "axios";
|
|
4
4
|
import { apiBaseUrl, CircleV2FinalityThreshold, circleV2Api, getCircleV2Chain, getCircleV2Domain, } from "./consts";
|
|
@@ -59,65 +59,6 @@ export async function fetchStatus(network, txHash, chain) {
|
|
|
59
59
|
throw new Error(`Failed to fetch status for txHash: ${txHash}.`);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
const MAX_U16 = 65535n;
|
|
63
|
-
/**
|
|
64
|
-
* Calculate referrer fee with optional amount-based capping.
|
|
65
|
-
*
|
|
66
|
-
* Fee Structure:
|
|
67
|
-
* - Without threshold: Fee scales linearly with amount at the specified dBps rate
|
|
68
|
-
* - With threshold: Fee scales until threshold amount, then plateaus at a fixed fee
|
|
69
|
-
*
|
|
70
|
-
* Example (1 bps / 10 dBps with $1M threshold):
|
|
71
|
-
* ┌─────────────────┬────────────┬──────────────────────┐
|
|
72
|
-
* │ Transfer Amount │ Fee Amount │ Effective Rate (dBps)│
|
|
73
|
-
* ├─────────────────┼────────────┼──────────────────────┤
|
|
74
|
-
* │ $0 - $1M │ 0.01% scaling │ 10 (full rate) │
|
|
75
|
-
* │ $1M (threshold) │ $100 │ 10 (full rate) │
|
|
76
|
-
* │ $5M │ $100 │ 2 (0.2%) │
|
|
77
|
-
* │ $10M (max) │ $100 │ 1 (0.1%) │
|
|
78
|
-
* └─────────────────┴────────────┴──────────────────────┘
|
|
79
|
-
*
|
|
80
|
-
* The threshold is designed so that at the maximum expected transfer amount ($10M),
|
|
81
|
-
* the effective rate is still >= 1 dBps, avoiding integer division to zero.
|
|
82
|
-
*
|
|
83
|
-
* @param amount - Transfer amount in token base units (6 decimals for USDC)
|
|
84
|
-
* @param dBps - Referrer fee rate in tenths of basis points (10 = 1 bps = 0.01%)
|
|
85
|
-
* @param threshold - Optional amount threshold in whole USDC units where fee caps
|
|
86
|
-
* @returns Object containing fee amount, remaining amount, and effective dBps rate
|
|
87
|
-
*/
|
|
88
|
-
export function calculateReferrerFee(amount, dBps, threshold) {
|
|
89
|
-
if (dBps > MAX_U16) {
|
|
90
|
-
throw new Error("dBps exceeds max u16");
|
|
91
|
-
}
|
|
92
|
-
let referrerFeeDbps = dBps;
|
|
93
|
-
let referrerFee = 0n;
|
|
94
|
-
let remainingAmount = amount;
|
|
95
|
-
if (dBps > 0) {
|
|
96
|
-
if (threshold !== undefined && amount > 0) {
|
|
97
|
-
// Convert threshold from whole USDC units to base units (6 decimals)
|
|
98
|
-
const thresholdAmount = sdkAmount.parse(threshold.toString(), 6);
|
|
99
|
-
const thresholdAmountUnits = sdkAmount.units(thresholdAmount);
|
|
100
|
-
// Cap the amount used for fee calculation at the threshold
|
|
101
|
-
// This creates a fee structure where fees plateau after the threshold amount
|
|
102
|
-
// For amounts below threshold: normal scaling applies
|
|
103
|
-
// For amounts at or above threshold: fee is fixed at (threshold * dBps / 100_000)
|
|
104
|
-
const cappedAmount = amount < thresholdAmountUnits ? amount : thresholdAmountUnits;
|
|
105
|
-
referrerFee = (cappedAmount * dBps) / 100000n;
|
|
106
|
-
// Calculate effective dBps rate based on actual amount transferred
|
|
107
|
-
// This represents what rate would produce the actual fee charged
|
|
108
|
-
// As transfer amounts grow beyond threshold, effective rate decreases
|
|
109
|
-
// Example: $100 fee on $10M transfer = 1 dBps effective rate
|
|
110
|
-
// This value is passed to the quote API to accurately represent the fee structure
|
|
111
|
-
referrerFeeDbps = (referrerFee * 100000n) / amount;
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
// Standard calculation without threshold: fee scales linearly with amount
|
|
115
|
-
referrerFee = (amount * dBps) / 100000n;
|
|
116
|
-
}
|
|
117
|
-
remainingAmount = amount - referrerFee;
|
|
118
|
-
}
|
|
119
|
-
return { referrerFee, remainingAmount, referrerFeeDbps };
|
|
120
|
-
}
|
|
121
62
|
/**
|
|
122
63
|
* Calculates the fast burn max fee from the remaining amount and fee in basis points.
|
|
123
64
|
* The fee can be a decimal (e.g., 1.3 bps), so we scale by 100 to preserve precision.
|
package/dist/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,MAAM,EACN,QAAQ,EAER,SAAS,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,MAAM,EACN,QAAQ,EAER,SAAS,GACV,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,0BAA0B,GAE3B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,yBAAyB,EACzB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAEL,oBAAoB,EACpB,WAAW,EACX,KAAK,EAGL,QAAQ,GACT,MAAM,kCAAkC,CAAC;AAG1C,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,0CAA2B,CAAA;IAC3B,sCAAuB,CAAA;IACvB,sCAAuB,CAAA;IACvB,kCAAmB,CAAA;AACrB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAkCD,MAAM,CAAN,IAAY,aAMX;AAND,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,8BAAa,CAAA;IACb,8BAAa,CAAA;IACb,8BAAa,CAAA;IACb,8BAAa,CAAA;AACf,CAAC,EANW,aAAa,KAAb,aAAa,QAMxB;AAaD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAgB;IAEhB,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAuB,GAAG,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,GAAG,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgB,EAChB,QAAe,EACf,QAAe,EACf,iBAAyB,CAAC,uBAAuB;;IAEjD,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAgB,GAAG,EAAE;YACpD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC7B,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC7B,iBAAiB;SAClB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAOD,eAAe;AACf,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAgB,EAChB,MAAc,EACd,KAAY;IAEZ,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAmB,GAAG,EAAE;YACvD,MAAM;YACN,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;SAC1B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,eAAuB,EACvB,MAAc;IAEd,2DAA2D;IAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IAEnD,sCAAsC;IACtC,oCAAoC;IACpC,OAAO,CAAC,eAAe,GAAG,SAAS,GAAG,QAAU,GAAG,EAAE,CAAC,GAAG,QAAU,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,EAAiB,EACjB,OAAgB,EAChB,UAAkB,oBAAoB;IAEtC,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE1D,OAAO,KAAK,CAAC,KAAK,CAChB,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,YAAY,oBAAoB,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1F,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAA8B,GAAG,CAAC,CAAC;YAEnE,kEAAkE;YAClE,iCAAiC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW;gBAAE,OAAO,IAAI,CAAC;YAE9B,IAAI,WAAW,CAAC,WAAW,KAAK,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAE9C,IAAI,WAAW,CAAC,MAAM,KAAK,uBAAuB;gBAAE,OAAO,IAAI,CAAC;YAEhE,MAAM,OAAO,GAAG,0BAA0B,CACxC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CACzC,CAAC;YAEF,OAAO;gBACL,OAAO;gBACP,WAAW,EAAE,WAAW,CAAC,WAAW;aACrC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,qDAAqD;gBACrD,8EAA8E;gBAC9E,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG;oBAC7D,OAAO,IAAI,CAAC;gBACd,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;oBAAE,OAAO,IAAI,CAAC;YAC7D,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EACD,IAAI,EACJ,OAAO,EACP,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAgB,EAChB,SAAgB,EAChB,OAAc;IAEd,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,mBAAmB,YAAY,IAAI,iBAAiB,EAAE,CAAC;IAC1F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAA4B,GAAG,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,KAAK,yBAAyB,CAAC,SAAS,CACzE,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC;AAC5B,CAAC;AAQD,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAgB,EAChB,WAA4C;IAE5C,wBAAwB;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAC/B,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EACrC,IAAI,CACL,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,KAAK,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAA2B,GAAG,CAAC,CAAC;IACjE,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YACjE,OAAO,WAAW,CAAC,WAAW,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAChC,OAAO,EACP,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAC7C,CAAC;IAEF,OAAO,KAAK,CAAC,KAAK,CAChB,KAAK,IAAI,EAAE;QACT,MAAM,cAAc,GAAG,MAAM,sBAAsB,CACjD,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAC1C,OAAO,CACR,CAAC;QACF,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QAEjC,IAAI,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,KAAK,EAAE;YAC3D,OAAO,IAAI,CAAC;QAEd,OAAO,cAAc,CAAC;IACxB,CAAC,EACD,IAAI,EACJ,oBAAoB,EACpB,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAgB;IAEhB,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,0BAA0B,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAoC,GAAG,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,WAAoB,EACpB,SAA0B,EAC1B,OAAwB;IAExB,kCAAkC;IAClC,MAAM,uBAAuB,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CACrD,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,KAAK,CAChB,CAAC;IACF,IACE,CAAC,CACC,uBAAuB;QACvB,WAAW,CACT,WAAW,EACX,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAC3D,CACF,EACD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4CAA4C;IAC5C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,qBAAqB,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtE,IAAI,CAAC,qBAAqB;QAAE,OAAO,EAAE,CAAC;IAEtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|